------ ***Sincronização
-- Processos de Sincronização de Comunicação entre Processos
Isto ocorre quando mais de um Processo tenta acessar um mesmo lugar.
Exemplo: Impressão
-- Recursos Compartilhados.
-- Exclusão Mútua: Evita Conflitos.
------ ***Processos
Processamento :
1 - Uma CPU fica disponivel para o processo, que passa o estado de
pronto para o de execução.
2 - O processo necessita de algo que não esta disponivel para
continuar a ser executado, assim, passa de em execução para bloqueado,
aguardando a satisfação de sua necessidade.
3 - A necessidade do processo é satisfeita, podendo então passar de
bloqueado/espera para pronto para execução
4 - O uso da CPU exclusivamente por um só processo deve ser evitado
para isso pode existir um tempo maximo em execução continua, apos o
qual o processo passa a em execução para pronto, permitindo que outro
processo use a CPU.
--O que é?
Igual a exclusão mutua comum, porem é utilizado variaveis para
indicar que o processo poderá ou não entrar na região critica,
também é utilizado variaveis para fazer processos sleep e wake up.Se por
um acaso o processo morrer na RC, é necessario abortar o sistema.
-- Comandos Primitivas:
-Sleep();
-Wakeup();
--Algoritmo
--Processo produtor
{
while true;
}
produz_item(i);
if cont = n
sleep()
buffer[int]=i
cont=cont+1
if cont =1
wake uo(consumidor)
}
}
--Processo consumidor
{
while(true)
}
//rc
if cont = 0
sleep();
i = buffer [cont]
cont=cont=1
if cont=n-1
wakeup();
consome(i);
}
//fim rc
}
--Semaforos
get_pproblem(espere)
p(semaforoS)//S variavel semaforo
{
desabilita interrupçãop
if(s=0)
sleep()
elese
s=s-1;//habilita interrupção
}
//sinal verde
v(semaforicaS)
{
desabilita interrupção
if (s = 0 ee existeprocessoxbloqueado em S)
wakeup(x)
else
s=s+1;habilita interrupção
}
semaforo muti x = 1
p(mutx)
[RC]
v(mutx)
--Processo Produto
{
while(true)
}
produz_item(i);
pvazio()
p(mutix);
insere_item(i)
v(mutix)
v(cheio)
}
}
Processo Consumidor
{
while(true)
}
p(cheio)
p(multx)
retira_item(i)//rc
v(mutx)
v()vazio
consome(i);
}
}
//semaforo cheio = 0
//semafor
o vazio = n
//semafor muti x= 1
//-binario
--- Monitor:
- Em um monitor se agrupam rotinas variaveis de estrutura de dados,
os monitores apresentam as seguintes caracteristicas:
--Algoritmo:
Monitor Produtor_Consumidor
{
bool cheio, vazio;
int cent = 0;
void coloca(item)
{
if(cont = = n)
{
wait(cheio)
buffer[co
cont++;
void retira(item)
{
if(cont==0)
wait(vazio);
item=buffer[cont];
cont --;
if(cont == n-1)
signal(cheio);
}
}//fim do monitor
void Produtor()
{
while(true)
{
produz(item);
produtor_consumidor_coloca(item);
}
}