Você está na página 1de 5

PROCESSOS E THREADS 1.7 Estrutura de sistemas operacionais 1.7.

1 Sistemas monolticos A organizao monoltica de longa a mais comum; nesta abordagem, o sistema operacional inteiro executado como um nico programa no modo ncleo. O sistema operacional escrito como uma coleo de rotinas, ligadas a um nico grande programa binrio executvel. Nessa abordagem, cada rotina do sistema tem uma interface bem definida quanto a parmetros e resultados e cada uma delas livre para chamar qualquer outra, se esta oferecer alguma computao til de que a primeira necessite. A existncia de milhares de rotinas que podem chamar umas s outras sem restrio muitas vezes leva a dificuldades de compreenso do sistema. Para construir o programa-objeto real do sistema operacional usando uma abordagem, primeiro compilam-se todas as rotinas individualmente (ou os arquivos que contm as rotinas). Ento, juntam-se todas em um nico arquivo-objeto usando o ligador (linker) do sistema. No existe essencialmente ocultao de informao; todas as rotinas so visveis umas s outras (o oposto de uma estrutura de mdulos ou pacotes, na qual muito da informao ocultado dentro de mdulos e somente os pontos de entrada designados podem ser chamados do lado de fora do mdulo). Contudo, mesmo em sistemas monolticos, possvel ter um mnimo de estrutura. Os servios (chamadas de sistema) provido pelo sistema operacional so requisitados colocando-se os parmetros em um local bem definido (na pilha, por exemplo) e, ento, executando uma instruo de desvio de controle (trap). Essa instruo chaveia a mquina do modo usurio para o modo ncleo e transfere o controle para o sistema operacional, mostrado como passo 6 na figura 1.17. O sistema operacional busca ento os parmetros e determina qual chamada de sistema ser executada. Depois disso, ele indexa uma tabela que contm na linha k um ponteiro para a rotina que executa a chamada de sistema k (passo 7 na figura 1.17). Essa organizao sugere uma estrutura bsica para o sistema operacional: 1. Um programa principal que invoca a rotina do servio requisitado. 2. Um conjunto de rotinas de servio que executam as chamadas de sistema. 3. Um conjunto de rotinas utilitrias que auxiliam as rotinas de servio. Segundo esse modelo, para cada chamada de sistema h uma rotina de servio que se encarrega dela. As rotinas utilitrias realizam tarefas necessrias para as varias rotinas de servio, como buscar dados dos programas dos usurios. Essa diviso de rotinas em trs camadas mostrada na figura 1.22. Alm do sistema operacional principal que carregado quando um computador iniciado, muitos sistemas operacionais do suporte a extenses carregveis, como drives de E/S e sistemas de arquivos. Esses componentes so carregados conforme a demanda.

1.7.2 Sistemas de camadas Uma generalizao da abordagem da Figura 1.22 a organizao dos sistema operacional como uma hierarquia de camada, cada uma delas construda sobre a camada imediatamente inferior. O primeiro sistema construdo dessa maneira foi o THE, cuja sigla deriva do Technisch Hogeschool Eindhoven, na Holanda, onde foi implementado por E.W. Dijkstra (1968) e seus alunos. O sistema THE era um sistema em lote (batch) simples para um computador holands, o Electrologica X8, que tinha 32k de palavras de 27 bits (os bits eram caros naquela poca). O sistema possui seis camadas, conforme mostra a tabela 1.3. A camada 0 tratava da alocao do processador, realizando chaveamento de processos quando ocorriam as interrupes ou quando os temporizadores expiravam. Acima da camada 0, o sistema era formado por processos sequenciais; cada um deles podia ser programado sem a preocupao com o fato de mltiplos processos estarem executando em um nico processador. Em outras palavras, a camada 0 fornecida a multiprogramao bsica a CPU.

2.1 Processos Todos os computadores modernos so capazes de fazer varias coisa ao mesmo tempo. As pessoas acostumadas a trabalhar com computadores pessoais podem no estar completamente cientes desse fato; portanto, alguns exemplos podem torn-lo mais claro. Primeiro considere um servidor da web. Solicitaes de paginas Web chegam de toda parte. Quando uma solicitao chega, o servidor verifica se a pgina necessria est na cache. Se estiver, enviada de volta; se no, uma solicitao de acesso ao disco iniciada para busca-la. Entretanto, do ponto de vista da CPU, as solicitaes de acesso ao disco duram uma eternidade. Enquanto espera que a solicitao de acesso ao disco seja concluda, muitas outras solicitaes podem chegar. Se h mltiplos discos presentes, algumas delas ou todas elas podem ser enviadas rapidamente a outros discos muitos antes de a primeira solicitao ser atendida. Evidentemente, necessrio algum modo de modelar e controlar essa simultaneidade. Os processos (e especialmente os threads) podem ajudar aqui. Agora considere um usurio de PC. Quando o sistema inicializado, muitos processos muitas vezes desconhecidos ao usurio comeam secretamente. Por exemplo, um processo pode ser iniciado para espera de e-mails que chegam. Outro processo pode ser executado pelo programa de antivrus para verificar periodicamente se h novas definies de antivrus disponveis. Alm disso, processos de usurios explcitos podem estar sendo executados, imprimindo arquivos e gravando um CD-ROM, tudo enquanto o usurio est navegando na Web. Toda essa atividade tem de ser administrada, e um sistema multiprogramado que sustente mltiplos processos bastante til nesse caso. Em qualquer sistema multiprogramado, a CPU chaveia de programa para programa, executando cada um deles por dezenas ou centenas de milissegundos. Estritamente falando, enquanto a cada instante a CPU executa somente um programa, no decorrer de um segundo ela pode trabalhar sobre vrios programas, dando aos usurios a iluso de paralelismo. Algumas vezes, nesse contexto, fala-se de

pseudoparalelismo, para contrastar com o verdadeiro paralelismo de hardware dos sistemas multiprocessdores ( que tm duas ou mais CPUs que compartilham simultaneamente a mesma memria fsica). Ter controle sobre mltiplas atividades em paralelo algo difcil para as pessoas. Contudo, projetistas de sistemas operacionais vm desenvolvendo ao longo dos anos um modelo conceitual (processos sequenciais) que facilita o paralelismo. Esse modelo, seu uso e algumas de suas consequncias compem o assunto deste capitulo. 2.1.1 O modelo de processo Neste modelo, todos os softwares que podem ser executados em um computador inclusive, algumas vezes, o prprio sistema operacional so organizados em vrios processos sequenciais (ou, para simplificar, processos). Um processo apenas um programa em execuo, acompanhado dos valores atuais do contador de programa, dos registradores e das variveis. Conceitualmente, cada processo tem sua prpria CPU virtual. claro que, na realidade, a CPU troca, a todo momento, de um processo para outro, mas, para entender o sistema, muito mais fcil pensar em um conjunto de processos executando (pseudo) paralelamente do que tentar controlar o modo como a CPU faz esses chaveamentos. Esse mecanismo de trocas rpidas chamado de multiprogramao, conforme visto no capitulo I. Na Figura 2.1(a), vemos um computador multiprogramado com quatro programas na memria. Na Figura 2.1(b) esto quatro processos, cada um com seu prprio fluxo de controle (isto , seu prprio contador de programa lgico) e executando independentemente dos outros. Claro, h somente um contador de programa fsico, de forma que, quando cada processo executado, seu contador de programa lgico do processo na memria. Na Figura 2.1(c) vemos que, por um intervalo de tempo suficientemente longo, todos os processos esto avanando, mas, a cada instante, apenas um nico processo est realmente executando. Neste captulo, supomos que haja apenas uma CPU. Cada vez mais, entretanto, essa suposio no verdadeira, visto que os novos chips so muitas vezes multincleo (multicore), com duas, quatro ou mais CPUs. Examinaremos chips multincleo e multiprocessodores em geral no captulo 8, mas por ora, mais simples pensar em uma CPU de cada vez. Assim, quando dizemos que uma CPU pode de fato executar apenas um processo por vez, se houver dois ncleos (ou duas CPUs), cada um deles pode executar apenas um processo de cada vez. Com o rpido chaveamento da CPU entre os processos, a taxa na qual o processo realiza sua computao no ser uniforme e provavelmente no ser nem reproduzvel se os mesmos processos forem executados novamente. Desse modo, os processos no devem ser programados com hipteses predefinidas sobre a temporizao. Considere, por exemplo, um processo de E/S que inicia uma fita magntica para que sejam restaurados arquivos de backup; ele executa dez mil vezes um lao ocioso para aguardar que uma rotao seja atingida e ento executa um comando par ler o primeiro registro. Se a CPU decidir chavear para um outro processo durante a execuo do lao ocioso, o processo da fita pode no estar sendo executado quando a cabea de leitura chegar ao primeiro registro. Quando um processo tem restries criticas de tempo real com essas isto , eventos especficos devem ocorrer dentro de um intervalo de tempo prefixado de milissegundo preciso tomar medidas especiais para que esses eventos ocorram,

contudo, em geral a maioria dos processos no afetada pelo aspecto inerente da multiprogramao da CPU ou pelas velocidades relativas dos diversos processos. A diferena entre um processo e um programa sutil, mas crucial. Uma analogia pode ajudar. Imagine um cientista da computao com dotes culinrios e que est assando um bolo de aniversrio para sua filha. Ele tem uma receita de bolo de aniversrio e uma cozinha bem suprida, com todos os ingredientes: farinha, ovos, acar, essncia de baunilha, entre outros. Nessa analogia, a receita o programa (isto , um algoritmo expresso por uma notao adequada), o cientista o processador (CPU) e os ingredientes do bolo so os dados de entrada. O processo a atividade desempenhada pelo nosso confeiteiro de ler a receita, buscar ingredientes e assar o bolo. Agora imagine que o filho do cientista chegue chorando, dizendo que uma abelha o picou. O cientista registra onde ele estava na receita (o estado atual do processo salvo), busca um livro de primeiros socorros e comea a seguir as instrues contidas nele. Nesse ponto, vemos que o processador est sendo alternado de um processo (assar o bolo) para um processo de prioridade mais alta (fornecer cuidados mdicos), cada um em um programa diferente (receita versus livro de primeiros socorros). Quando a picada da abelha tiver sido tratada, o cientista voltar ao seu bolo, continuando do ponto em que parou. A ideia principal que um processo constitui uma atividade. Ele possui programa, entrada, sada e um estado. Um nico processador pode ser compartilhado entre os vrios processos, com algum algoritmo de escalonamento usado para determinar quando parar o trabalho sobre um processo a servir outro. Convm notar que, se um programa est sendo executado duas vezes, isso conta como dois processos. Por exemplo, frequentemente possvel iniciar um processador de texto duas vezes ou imprimir dois arquivos ao mesmo tempo se duas impressoras estiverem disponveis. O fato de que dois processos em execuo esto operando o mesmo programa no importa; eles so processos diferentes. O sistema operacional pode compartilhar o cdigo entre eles e, desse modo, apenas uma cpia est na memria, mas esse um detalhe tcnico que no altera a situao conceitual dos dois processos sendo executados. 2.1.2 Criao de Processos Os sistemas operacionais precisam de mecanismos para criar processos. Em sistemas muito simples, ou em sistemas projetados para executar apenas uma nica aplicao (por exemplo, o controlador do forno de micro-ondas), pode ser possvel que todos os processos que sero necessrios sejam criados quando o sistema ligado. Contudo, em sistemas de proposito geral, necessrio algum mecanismo para criar e terminar processos durante a operao, quando for preciso. Veremos agora alguns desses tpicos. H quatro eventos principais que fazem com que processos sejam criados: 1. Inicio do sistema.

2. Execuo de uma chamada de sistema de criao de processo por um processo em execuo. 3. Inicio de uma tarefa em lote (batch job). Quando um sistema operacional carregado, em geral criam-se vrios processos. Alguns deles so processos em foreground (primeiro plano), ou seja, que interagem com usurios (humanos) e realizam tarefas para eles.