Pesquisar este blog

quinta-feira, 24 de outubro de 2013

Como funcionam os sistemas operacionais: Como o sistema operacional gerencia o processador

   Na postagem anterior vimos como funciona a inicialização do sistema operacional, agora vamos ver como ele gerencia o processador.
   As 2 principais funções do gerenciamento do processador são:
   1 - Garantir que cada processo e aplicativo recebam tempo suficiente do processador para funcionar corretamente;
   2 - Usar quantos ciclos de processador quanto possível para realizar as tarefas.
 
   A unidade básica do software com a qual o sistema operacional trabalha para organizar as tarefas realizadas pelo processador é representada pelo processo ou thread, dependendo do sistema operacional.
   Podemos até pensar em um processo como um aplicativo, mas isso dá uma ideia incompleta de como os processos se relacionam com o sistema operacional e com o hardware. O aplicativo que você vê (processador de texto, planilhas ou jogo) é, de fato, um processo. Porém, os aplicativos podem ativar outros processos para se comunicarem com outros dispositivos ou computadores. Também existe uma série de processos que são executados sem que você perceba. O Windows e o Unix podem executar, em background, dezenas de processos para lidar com a rede, gerenciar a memória e o disco rígido, verificar vírus, etc.
   Em resumo, um processo é um software que executa ações e pode ser controlado pelo usuário, por outros aplicativos ou pelo sistema operacional.
   São os processos, e não os aplicativos, que o sistema operacional controla e faz sua escala para que a CPU os execute. Em um sistema monotarefa, este trabalho é bastante simples. O sistema operacional permite que o aplicativo seja iniciado, suspendendo sua execução somente para tratar as interrupções e
inserções do usuário.
   Interrupções são sinais especiais enviados pelo hardware ou software para a CPU. É como se alguma parte do computador levantasse a mão e chamasse a atenção da CPU em uma reunião animada. Algumas vezes, o sistema operacional vai priorizar alguns processos e ignorar as interrupções par que uma tarefa seja cumprida o mais rápido possível. Entretanto, existem algumas interrupções (condições de erros ou problemas com a memória) que são tão importantes que não podem ser ignoradas. Essas interrupções devem ser atendidas imediatamente.
   As interrupções podem causar alguma complicação na execução dos processos em um sistema monotarefa. Porém, o trabalho do sistema operacional se torna muito mais complicado em um sistema multitarefa. Ele deve organizar a execução dos aplicativos para que você acredite que várias coisas estão acontecendo ao mesmo tempo. Isto é complicado porque a CPU só pode fazer uma coisa de cada vez. Para criar esta aparência de coisas acontecendo ao mesmo tempo, o sistema operacional precisa mudar de um processo para o outro milhares de vezes por segundo. Vamos ver o que acontece:

   - Um processo ocupa uma certa quantidade de memória RAM. Ele também utiliza os registradores, pilhas e filas da CPU e memória do sistema operacional;
   - Quando 2 processos acontecem ao mesmo tempo, o sistema operacional aloca uma certa quantidade de ciclos da CPU para um programa;
   - Depois que os ciclos são executados, o sistema operacional faz uma cópia de todos os registradores, pilhas e filas utilizados pelos processos e registra o ponto em que a execução foi interrompida;
   - Ele então carrega todos os registradores, pilhas e filas utilizados pelo segundo processo e aloca outra quantidade de ciclos de CPU para ele;
   - Quando os ciclos terminam, o sistema operacional copia todos os registradores, pilha e filas utilizados pelo segundo programa e carrega o primeiro programa.

   Todas a informações necessárias para controlar a mudança dos processos são armazenadas em um pacote de dados chamado de bloco de controle de processos, que contém:

   - Um número ID que identifica o processo;
   - Ponteiros para as localizações do programa e seus dados quando o último processamento o correu;
   - Conteúdo dos registradores;
   - Estado de vários flags e switches;
   - Ponteiros para os limites superior e inferior da memória requisitada para o processo;
   - Uma lista de arquivos abertos pelo processo;
   - A prioridade do processo;
   - O status de todos os dispositivos de entrada e saída requisitados pelo processo.

   Cada processo tem um status associado a ele. Muitos processo não consomem tempo de CPU até que recebam algum tipo de comando. O processo pode estar, por exemplo, esperando que o usuário aperte alguma tecla, enquanto ele espera, a CPU não é utilizada. Neste momento, o processo está 'suspenso'. Quando o usuário aperta a tecla, o sistema operacional muda o status do processo, quando o status do processo muda de 'pendente' para 'em execução', as informações do bloco de controle de processo devem ser usadas, assim como os dados de programa, para direcionar a execução da alternância de tarefas do sistema operacional.
   Essa troca de processos acontece sem a interferência direto do usuário e cada processo consegue ciclos de CPU suficientes para realizar suas tarefas em um período razoável de tempo. O problema acontece quando o usuário tenta executar muitos processo ao mesmo tempo. O próprio sistema operacional precisa de alguns ciclos de CPU para salvar todos os registradores, filas e pilhas dos processos e realizar alternância entre eles. Se uma determinada quantidade de processo é iniciada, e se o sistema operacional não foi cuidadosamente planejado, o sistema pode começar a usar a maioria dos ciclos de CPU disponíveis para alternar os processo em vez de executá-los. Isso se chama THRASHING e geralmente requer algum tipo de intervenção direta do usuário para interromper os processo e reorganizar o sistema.
   Uma forma de reduzir o thrashing é diminuir a necessidade de criação de novos processos para realizar as tarefas. Alguns sistemas operacionais utilizam um processo mais 'leve' chamado 'thread'. Uma thread pode controlar o trabalho mais, geralmente, não lida com os vários tipos de entrada e saída e não estabelece estruturas que exijam o longo bloco de controle de processo de um processo regular. Um processo pode iniciar muitas threads ou outros processos, mas uma thread não pode iniciar um processo.
   Até agora, tudo que dissemos diz respeito a uma única CPU. Em um sistema com duas ou mais CPUs, o trabalho é dividido. O sistema operacional deve equacionar a demanda de cada processo para as diferentes CPUs. Os sistemas operacionais simétricos compartilham várias CPUs e equacionam a demanda e a disponibilidade da CPU, mesmo quando o sistema operacional é o único aplicativo em execução.
   Bom vimos neste post como o sistema operacional gerencia o processador, mas a CPU não é o único recurso requisitado mesmo quando somente o sistema operacional está sendo executado. O gerenciamento da memória é um passo crucial para que todos os processos sejam executados de maneira tranquila, e é sobre isso a nossa próxima postagem.
   Na próxima postagem vamos ver como o sistema operacional gerencia o armazenamento e a memória.

Nenhum comentário:

Postar um comentário