102

22
SISTEMAS OPERACIONAIS Leandro Coelho Comunicação entre Processos

Upload: rodrigo-fontes

Post on 14-Nov-2015

212 views

Category:

Documents


0 download

DESCRIPTION

SO

TRANSCRIPT

  • SISTEMAS OPERACIONAIS

    Leandro Coelho

    Comunicao entre Processos

  • Plano da Aula2

    Componentes bsicos

    Componentes do Sistema

    Gerncia de processos

    Conceito escalonamentoConceito escalonamento

    Tipos de escalonadores

    Critrios de rendimento

    Algoritmos de escalonamento

    Final multi-nvel

  • Estruturas de Comunicao entre Processos

    Acesso Regio Crtica

    Soluo:

    Hardware

    Sistemas OperacionaisComunicao entre Processos

    3

    Hardware

    Software

  • Estruturas de Comunicao entre Processos

    Acesso Regio Crtica Hardware

    Impede mudana de contexto antes de entrar na RC

    Usado pelo SO para manipular Estrutura de Dados

    Sistemas OperacionaisComunicao entre Processos

    4

    Usado pelo SO para manipular Estrutura de Dadoscompartilhadas

    :

    Desabilita Interrupes ;

    Regio Crtica ;

    Habilita Interrupes ;

    :

  • Estruturas de Comunicao entre Processos

    Acesso Regio Crtica

    Hardware

    Inibir interrupes

    Sistemas OperacionaisComunicao entre Processos

    5

    Inibir interrupes

    Soluo mais simples - antes de entrar na regio crtica oprocesso inibe todas as interrupes e desinibe-asimediatamente antes de sair

    Soluo indesejvel - o utilizador no deve ter poder para inibiras interrupes;

  • Estruturas de Comunicao entre Processos

    Acesso Regio Crtica

    Hardware

    Inibir interrupes

    Sistemas OperacionaisComunicao entre Processos

    6

    Inibir interrupes

    Em sistemas multiprocessador no funciona

    Tcnica normalmente utilizada apenas pelo sistema operacionalmas no aconselhada como mecanismo de excluso mtua deprocessos utilizador

  • Estruturas de Comunicao entre Processos

    Acesso Regio Crtica

    Hardware

    Instruo Test-And-Set (TSL)

    Sistemas OperacionaisComunicao entre Processos

    7

    Instruo Test-And-Set (TSL)

    Uma das instrues do processador

    Em uma nica instruo:

    L varivel

    Armazena valor num registrador

    Atribui novo valor varivel

    Execuo atmica

    No pode ser interrompida

  • Estruturas de Comunicao entre Processos

    Acesso Regio Crtica

    Hardware

    Instruo Test-And-Set (TSL)

    Sistemas OperacionaisComunicao entre Processos

    8

    Instruo Test-And-Set (TSL)

    Instruo Test-And-Set (TSL)

    TSL reg, var

    (reg = var & var = 0)

    Entra_RC:

    TSL AX, chave

    CMP AX, 1 (AX = 1?)

    JNE Entra_RC (Se AX = 0 v para Entra_RC)

  • Estruturas de Comunicao entre Processos

    Acesso Regio Crtica (TSL)

    Sistemas OperacionaisComunicao entre Processos

    9

    Key = 1AX T1= ?Key = 0AX T1= 1

    Thread A

    ...

    TSL AX, Key

    CMP AX, 1

    JNE RegCrt

    ...

    Regiao_Critica

    ...

    MOV Key, 1

    Thread B

    ...

    TSL AX, Key

    CMP AX, 1

    JNE RegCrt

    ...

    Regiao_Critica

    ...

    MOV Key, 1

    Thread A

    Thread B

    AX T1= ?AX T2= ?

    CPU: AX= ?CPU: AX= 1

    AX T1= 1

  • Estruturas de Comunicao entre Processos

    Acesso Regio Crtica (TSL)

    Sistemas OperacionaisComunicao entre Processos

    10

    AX T1= 1Key = 0

    Thread A

    ...

    TSL AX, Key

    CMP AX, 1

    JNE RegCrt

    ...

    Regiao_Critica

    ...

    MOV Key, 1

    Thread B

    ...

    TSL AX, Key

    CMP AX, 1

    JNE RegCrt

    ...

    Regiao_Critica

    ...

    MOV Key, 1

    Thread A

    Thread B

    AX T1= 1AX T2= ?

    CPU: AX= ?CPU: AX= 0

    AX T2= 0

  • Estruturas de Comunicao entre Processos

    Acesso Regio Crtica (TSL)

    Sistemas OperacionaisComunicao entre Processos

    11

    AX T1= 1Key = 0

    Thread A

    ...

    TSL AX, Key

    CMP AX, 1

    JNE RegCrt

    ...

    Regiao_Critica

    ...

    MOV Key, 1

    Thread B

    ...

    TSL AX, Key

    CMP AX, 1

    JNE RegCrt

    ...

    Regiao_Critica

    ...

    MOV Key, 1

    Thread A

    Thread B

    AX T1= 1AX T2= 0

    CPU: AX= ?CPU: AX= 1

  • Estruturas de Comunicao entre Processos

    Acesso Regio Crtica

    Instruo Test-And-Set (TSL)

    Garante a Excluso Mtua

    Sistemas OperacionaisComunicao entre Processos

    12

    Garante a Excluso Mtua

    Problema:

    Gera espera ocupada

    Desperdcio de CPU

    Soluo?

  • Estruturas de Comunicao entre Processos

    Acesso Regio Crtica (Software)

    Sistemas OperacionaisComunicao entre Processos

    13

    BloqueioBloqueio

  • Estruturas de Comunicao entre Processos

    Acesso Regio Crtica (Software)

    Precisamos bloquear a thread quando a RC estiverocupada para evitar a espera ocupada

    Sistemas OperacionaisComunicao entre Processos

    14

    ocupada para evitar a espera ocupada

    Colocar a thread para dormir

    Quando a RC ficar livre tem-se que acordar a athread que estava dormindo

  • Estruturas de Comunicao entre Processos

    Acesso Regio Crtica (Software)

    System Calls

    Sleep(x) coloca o processo/thread para dormir

    Sistemas OperacionaisComunicao entre Processos

    15

    Sleep(x) coloca o processo/thread para dormir (bloqueado) aguardando na fila do sinal x.

    Wakeup(x) acorda um processo/thread que esteja aguardando pelo sinal x.

    Se a fila de s estiver vazia, o sinal se perde.

    Atmicas.

  • Estruturas de Comunicao entre Processos

    Acesso Regio Crtica (Software)

    System Calls

    Problema

    Sistemas OperacionaisComunicao entre Processos

    16

    Problema

    Suponha uma Fila de objetos e duas threads concorrendo a ela.

    O que ocorre se a thread que insere encontrar a fila cheia?

    Vai dormir at que o primeiro objeto seja retirado da fila cheia.

    O que ocorre se a thread que remove encontrar a fila vazia?

    Vai dormir at que o primeiro objeto seja inserido na fila vazia.

  • Estruturas de Comunicao entre Processos

    Acesso Regio Crtica (Software)

    Sistemas OperacionaisComunicao entre Processos

    17

    Thread_Produtor() Thread_Consumidor() int max = 3;

    max representa o tamanho da filacont representa o nmero de dados na fila.

    Thread_Produtor(){while (1) {if (cont == max)

    SLEEP(posLivre);Produz_Item();cont ++;if (cont == 1)

    WAKEUP(posOcupada);}}

    Thread_Consumidor() {while(1) {

    if (cont == 0)SLEEP(posOcupada);

    Consome_Item();cont --;if (cont == max -1)

    WAKEUP(posLivre);}}

    Thread A

    Thread B

    int max = 3;int cont = 0;Sinal posLivre, Sinal posOcupada;

  • Estruturas de Comunicao entre Processos

    Acesso Regio Crtica (Software)

    Sistemas OperacionaisComunicao entre Processos

    18

    Thread_Produtor() Thread_Consumidor() Bloqueioint max = 3; Thread_Produtor(){while (1) {if (cont == max)

    SLEEP(posLivre);Produz_Item();cont ++;if (cont == 1)

    WAKEUP(posOcupada);}}

    Thread_Consumidor() {while(1) {

    if (cont == 0)SLEEP(posOcupada);

    Consome_Item();cont --;if (cont == max -1)

    WAKEUP(posLivre);}}

    Thread A

    Bloqueio

    Thread B

    int max = 3;int cont = 0;Sinal posLivre, Sinal posOcupada;

  • Estruturas de Comunicao entre Processos

    Acesso Regio Crtica (Software)

    Sistemas OperacionaisComunicao entre Processos

    19

    Thread_Produtor() Thread_Consumidor() int max = 3; Bloqueioint max = 3; Thread_Consumidor() Thread_Produtor(){while (1) {if (cont == max)

    SLEEP(posLivre);Produz_Item();cont ++;if (cont == 1)

    WAKEUP(posOcupada);}}

    Thread_Consumidor() {while(1) {

    if (cont == 0)SLEEP(posOcupada);

    Consome_Item();cont --;if (cont == max -1)

    WAKEUP(posLivre);}}

    Thread A

    Thread B

    int max = 3;int cont = 0;Sinal posLivre, Sinal posOcupada;

    Bloqueioint max = 3;int cont = 1;Sinal posLivre, Sinal posOcupada;

    Thread_Consumidor() {while(1) {

    if (cont == 0)SLEEP(posOcupada);

    Consome_Item();cont --;if (cont == max -1)

    WAKEUP(posLivre);}}

  • Estruturas de Comunicao entre Processos

    Acesso Regio Crtica (Software)

    Sistemas OperacionaisComunicao entre Processos

    20

    Thread_Produtor() Thread_Consumidor() int max = 3; Thread_Produtor(){while (1) {if (cont == max)

    SLEEP(posLivre);Produz_Item();cont ++;if (cont == 1)

    WAKEUP(posOcupada);}}

    Thread_Consumidor() {while(1) {

    if (cont == 0)SLEEP(posOcupada);

    Consome_Item();cont --;if (cont == max -1)

    WAKEUP(posLivre);}}

    Thread A

    Thread B

    int max = 3;int cont = 0;Sinal posLivre, Sinal posOcupada;

  • Estruturas de Comunicao entre Processos

    Acesso Regio Crtica (Software)

    Consideraes Sleep/Wakeup :

    Eliminam a espera ocupada

    Sistemas OperacionaisComunicao entre Processos

    21

    Eliminam a espera ocupada

    No garantem Excluso Mtua

    Entre testar uma condio e tomar uma deciso (Sleep ou Wakeup) pode haver preempo

    Bloqueio de processos/threads

  • Estruturas de Comunicao entre Processos

    Pratica Produtor-Consumidor

    Sistemas OperacionaisComunicao entre Processos

    22