sexta-feira, 1 de julho de 2016

Sistemas Operacionais - Seções Críticas

Vários processos compartilham vários recursos nos sistemas operacionais modernos. Você já se perguntou como deve ser feito a gerência de processos e recursos? De forma análoga podemos observar em trânsitos sem utilização de semáforos ou sinalizações. Como gerenciar e sincronizar a utilização de vias compartilhadas por vários automóveis?
Imagem 1. Trânsito sem semáforos e sinalizações
Para entender bem seções críticas precisamos conhecer a definição de algumas palavras importantes: sistema operacional, processos e recursos. Sistema operacional (SO) é um programa que gerencia o hardware e os recursos disponíveis no seu sistema computacional. Um SO moderno provê: complexidade, conveniência, eficiência na gerência de recursos e versatilidade.
Para permitir a manutenção do contexto de um programa quando o mesmo deixa de ter posse da CPU (Central Process Unit), suas informações precisam ser armazenadas em uma estrutura de dados chamada processo. Esta estrutura mantém os valores de registradores no seu último estado de execução na CPU. A figura abaixo mostra algumas informações importantes de contexto que precisam ser preservadas assim que um programa irá retomar sua execução.
Imagem 2. Registradores comumente encontrados na CPU
Um recurso é um hardware ou qualquer outro dispositivo utilizável pelo SO. São exemplos: memória RAM (Random Access Memory), CPU e HD (Hard Drive). Recursos geralmente são considerados como regiões críticas porque necessitam de mecanismos que gerenciem a sua utilização. Imagine que um processo A acessa uma região crítica e perde a utilização da CPU porque sua fatia de tempo foi excedida. Logo em seguida o processo B ganha a CPU e tenta acessar a região crítica que A ainda se encontra. Se o processo B acessa a região podemos ter a existência de problemas de integridade e inconsistência dos dados. Veja a ilustração desse exemplo abaixo.
Imagem 3. Diagrama de tempo exemplificando o acesso de regiões críticas
Região crítica ou seção crítica, por fim, é um trecho de código que acessa recurso compartilhado por vários outros processos. Sua gerência é uma atividade fundamental em SO moderno devido o grande número de recursos compartilhados e o grande número de processos em execução. O gerenciamento das seções críticas é feita através da sincronização do acesso de processos a recursos através da utilização de semáforos. Qualquer semelhança de semáforos no contexto de SO's com semáforos do contexto de trânsito não é mera coincidência.

Por,
Marcos Nascimento - Integrante do PET Computação