Skip to content

Repositório voltado para a implementação de códigos avançados em C, com base no estudo de sistemas operacionaisl

Notifications You must be signed in to change notification settings

hitallow/system_operational

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

36 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Sistemas operacionais

Repositório voltado para a implementação de códigos avançados em C, com base no estudo de sistemas operacionais Assuntos abordados:


  • Multi-processamento

    Nesta parte é estudado um pouco do multiprocessamento que ocorre nas máquinas do nosso dia a dia, e como podemos fazer proveito disto.

    O multiprocessamento tem suas vantagens e desvantagens,que podem afetar no resultado final, as nossas thread, podem dividir a mesma variável ou variáveis, ou um trecho de código pode ser semelhante para ambas threads.
    Veja, algumas notações:

    • Condição de corrida:

      Quando dois ou mais processos precisam acessar um recurso em comum.

    • Seção crítica :

      Região de código acessada por mais de um processo.

    • Exclusão mútua:

      Quando garantimos que um único processo, seja ele leve ou pesado, possa acessar a seção crítica. Ou seja, quando a entrada de um processo na seção crítica, bloqueia a entrada de quaisquer outro processo.

    Sabendo destes problemas, como podemos solucionar eventuais erros?

    Um dos métodos mais utilizados e aqui apresentado, são os semáforos. Utilizamos a biblioteca dijkstra.haqui incluida.

    Os semáforos, garantem a exclusão mútua, evitando que outros processos acessem uma seção crítica.
    Vejamos a documentação de cada função:

    • sem_create_d(key_t key, int initval) :cria um semáforo, o primeiro paramêtro key representa o uma chave única que identifica o semáforo para S.O., o segundo paramêtro indica qual o valor inicial do meu semáforo, logo, se quisermos garantir exclusão mútua, inserimos o valor 1, para o initval.

      Eventuais erros: Lembre-se, o key deve ser um valor único para cada semáforo, caso existam dois semáforos com a mesma chave, seu código pode não funcionar da maneira esperada.

    • wait_d(int semid) : decrementa o valor do semáforo e verifica o valor daquele semáforo. Logo, um semáforo que começa com o initval = 1 a função decrementa o valor do semafóro, e agora aquele semáforo agora tem o valor 0, Mas além de decrementar o valor ele verifica o valor do semafóro, caso o valor dele, seja menor ou igual a 0, aquele processo entra em estado de bloqueado. Desta forma podemos garantir exclusão mútua.
    • signal_d(int semid): incrementa o valor do semáforo, e libera a seção crítica que estava sendo utilizada. Logo, quando o processo termina de executar a seção crítica ele incrementa o valor do semáforo.
    • sem_delete(int semid): exclui um semáforo do SO.

About

Repositório voltado para a implementação de códigos avançados em C, com base no estudo de sistemas operacionaisl

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages