138
INTRODUÇÃO AOS SISTEMAS OPERACIONAIS Maurício F. Magalhães 1 Eleri Cardozo 2 Luis F. Faina 3 Agosto de 1992 1 Faculdade de Engenharia Elétrica e de Computação — UNICAMP 2 Faculdade de Engenharia Elétrica e de Computação — UNICAMP 3 Departamento de Informática - UFU

Introdução Sist Operacional

Embed Size (px)

DESCRIPTION

Com Está apostila você terá uma noção melhor dos Sistemas Operacionais.

Citation preview

  • INTRODUO AOS SISTEMAS OPERACIONAIS

    Maurcio F. Magalhes1 Eleri Cardozo2 Luis F. Faina3

    Agosto de 1992

    1Faculdade de Engenharia Eltrica e de Computao UNICAMP2Faculdade de Engenharia Eltrica e de Computao UNICAMP3Departamento de Informtica - UFU

  • Sumrio

    1 INTRODUO 31.1 O que um Sistema Operacional ? . . . . . . . . . . . . . . . . . . . . . .. . . . . 31.2 Histria dos Sistemas Operacionais . . . . . . . . . . . . . . . . .. . . . . . . . . . 41.3 Conceitos Bsicos em Sistemas Operacionais . . . . . . . . . .. . . . . . . . . . . 61.4 O Sistema Operacional UNIX . . . . . . . . . . . . . . . . . . . . . . . . .. . . . 81.5 Uma Viso Geral do Sistema Operacional UNIX . . . . . . . . . . .. . . . . . . . 91.6 Arquitetura do Sistema Operacional UNIX . . . . . . . . . . . . .. . . . . . . . . . 16

    2 PROCESSOS 232.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . 232.2 Escalonamento de Processos . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . 282.3 Gerenciamento de Processos no Sistema Operacional UNIX. . . . . . . . . . . . . 302.4 Escalonamento de Processos no Unix . . . . . . . . . . . . . . . . . .. . . . . . . 332.5 Controle de Processos no UNIX . . . . . . . . . . . . . . . . . . . . . . .. . . . . 352.6 Comunicao e Sincronizao Inter-processos no UNIX . .. . . . . . . . . . . . . . 40

    3 SISTEMA DE ARQUIVOS 493.1 Interface do Sistema de Arquivos . . . . . . . . . . . . . . . . . . . .. . . . . . . . 493.2 Projeto do Sistema de Arquivos . . . . . . . . . . . . . . . . . . . . . .. . . . . . . 513.3 Confiabilidade do Sistema de Arquivos . . . . . . . . . . . . . . . .. . . . . . . . . 593.4 Desempenho do Sistema de Arquivos . . . . . . . . . . . . . . . . . . .. . . . . . 623.5 O Sistema de Arquivos do UNIX (System V) . . . . . . . . . . . . . . .. . . . . . 64

    4 GERENCIAMENTO DE MEMRIA 754.1 Gerenciamento de Memria Sem Permuta ou Paginao . . . . .. . . . . . . . . . . 754.2 Swapping (Permuta) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . 804.3 Memria Virtual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . 854.4 Algoritmos de Troca de Pgina . . . . . . . . . . . . . . . . . . . . . . .. . . . . . 904.5 Gerenciamento de Memria no UNIX . . . . . . . . . . . . . . . . . . . .. . . . . 94

    5 ENTRADA/SADA 1015.1 Princpios do Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . 1015.2 Princpios do Software . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . 104

    1

  • DCA-FEEC-UNICAMP Introduo aos Sistemas Operacionais 2

    5.3 Discos RAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1095.4 Discos Rotativos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . 1105.5 Entrada/Sada no UNIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . 115

    6 TPICOS ESPECIAIS 1196.1 Padronizao em Sistemas Operacionais . . . . . . . . . . . . . .. . . . . . . . . . 1196.2 Processos Leves (Threads) . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . 1226.3 Arquitetura de Microprocessadores . . . . . . . . . . . . . . . . .. . . . . . . . . . 1266.4 Intel 80386 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 131

  • Captulo 1

    INTRODUO

    Programas computacionais (ousoftware) constituem o elo entre o aparato eletrnico (ouhard-ware) e o ser humano. Tal elo se faz necessrio dada a discrepnciaentre o tipo de informaomanipulada pelo homem e pela mquina. A mquina opera com cadeias de cdigos binrios enquan-to o homem opera com estruturas mais abstratas como conjuntos, arquivos, algoritmos, etc.

    Programas computacionais podem ser grosseiramente divididos em dois tipos: programas do sistema, que manipulam a operao do computador; programas aplicativos, que resolvem problemas para o usurio.O mais importante dos programas do sistema o sistema operacional, que controla todos os re-

    cursos do computador e proporciona a base de sustentao para a execuo de programas aplicativos.

    1.1 O que um Sistema Operacional ?

    A maioria de usurios de computador tm alguma experincia com sistemas operacionais, mas difcil definir precisamente o que um sistema operacional. Parte do problema decorre do fato dosistema operacional realizar duas funes bsicas que, dependendo do ponto de vista abordado, umase destaca sobre a outra. Estas funes so descritas a seguir.

    1.1.1 O Sistema Operacional como uma Mquina Virtual

    A arquitetura (conjunto de instrues, organizao de memria, E/S e estrutura de barramento)da maioria dos computadores a nvel de linguagem de mquina primitiva e difcil de programar,especificamente para operaes de entrada e sada. prefervel para um programador trabalhar comabstraes de mais alto nvel onde detalhes de implementao das abstraes no so visveis. Nocaso de discos, por exemplo, uma abstrao tpica que estesarmazenam uma coleo de arquivosidentificados por nomes simblicos.

    O programa que esconde os detalhes de implementao das abstraes o sistema operacional.A abstrao apresentada ao usurio pelo sistema operacional simples e mais fcil de usar que ohardwareoriginal.

    3

  • DCA-FEEC-UNICAMP Introduo aos Sistemas Operacionais 4

    Nesta viso, a funo do sistema operacional apresentada ao usurio como umamquina esten-dida ou mquina virtualque mais fcil de programar que ohardwareque a suporta.

    1.1.2 O Sistema Operacional como um Gerenciador de Recursos

    Um computador moderno composto de vrios subsistemas taiscomo processadores, mem-rias, discos, terminais, fitas magnticas, interfaces de rede, impressoras, e outros dispositivos deE/S. Neste ponto de vista, o sistema operacional tem a funode gerenciar de forma adequada estesrecursos de sorte que as tarefas impostas pelos usurios sejam atendidas da forma mais rpida econfivel possvel. Um exemplo tpico o compartilhamento da unidade central de processamento(CPU) entre as vrias tarefas (programas) em sistemas multiprogramados. O sistema operacional oresponsvel pela distribuio de forma otimizada da CPU entre as tarefas em execuo.

    1.2 Histria dos Sistemas Operacionais

    Os sistemas operacionais tm evoludo com o passar dos anos.Nas prximas sees vamosapresentar de forma sucinta este desenvolvimento.

    1.2.1 A Primeira Gerao (1945-1955): Vlvulas e Plugs

    Aps muitos esforos mal sucedidos de se construir computadores digitais antes da 2a guerramundial, em torno da metade da dcada de 1940 alguns sucessosforam obtidos na construo demquinas de clculo empregando-se vlvulas e rels. Estas mquinas eram enormes, ocupando salascom racksque abrigavam dezenas de milhares de vlvulas (e consumiam quantidades imensas deenergia).

    Naquela poca, um pequeno grupo de pessoas projetava, construia, programavam operava e davamanuteno em cada mquina. Toda programao era feita absolutamente em linguagem de mquina,muitas vezes interligandoplugspara controlar funes bsicas da mquina. Linguagens de progra-mao eram desconhecidas; sistemas operacionais idem. Porvolta de 1950 foram introduzidos oscartes perfurados aumentando a facilidade de programao.

    1.2.2 A Segunda Gerao (1955-1965): Transistores e Processamento em Batch

    A introduo do transistor mudou radicalmente o quadro. Computadores tornaram-se confiveise difundidos (com a fabricao em srie), sendo empregados em atividades mltiplas. Pela primeiravez, houve uma separao clara entre projetistas, construtores, operadores, programadores e pessoalde manuteno. Entretanto, dado seu custo ainda elevado, somente corporaes e universidades deporte detinham recursos e infraestrutura para empregar os computadores desta gerao.

    Estas mquinas eram acondicionadas em salas especiais com pessoal especializado para sua ope-rao. Para rodar umjob (programa), o programador produzia um conjunto de cartes perfurados(um carto por comando do programa), e o entregava ao operador que dava entrada do programa nocomputador. Quando o computador completava o trabalho, o operador devolvia os cartes com aimpresso dos resultados ao programador.

  • DCA-FEEC-UNICAMP Introduo aos Sistemas Operacionais 5

    A maioria dos computadores de 2a gerao foram utilizados para clculos cientficos e de enge-nharia. Estes sistemas eram largamente programados emFORTRANe ASSEMBLY. Sistemas opera-cionais tpicos1 eram o FMS(Fortran Monitor Systems)e o IBSYS(IBMs Operating Systems).

    1.2.3 A Terceira Gerao (1965-1980): Circuitos Integrados e Multiprogramao

    No incio dos anos 60, a maioria dos fabricantes de computadores tinha duas linhas distintas eincompatveis de produtos. De um lado, havia os computadores cientficos que eram usados paraclculos numricos na cincia e engenharia. Do outro, haviam os computadores comerciais que exe-cutavam tarefas como ordenao de dados e impresso de relatrios, sendo utilizados principalmentepor instituies financeiras.

    A IBM tentou resolver este problema introduzindo a srieSystem/360. Esta srie consistia demquinas com mesma arquitetura e conjunto de instrues. Desta maneira, programas escritos parauma mquina da srie executavam em todas as demais. A srie 360 foi projetada para atender tantoaplicaes cientficas quanto comerciais.

    No foi possvel para a IBM escrever um sistema operacional que atendesse a todos os conflitosde requisitos dos usurios. O resultado foi um sistema operacional (OS/360) enorme e complexocomparado com o FMS.

    A despeito do tamanho e problemas, o OS/360 atendia relativamente bem s necessidades dosusurios. Ele tambm popularizou muitas tcnicas ausentesnos sistemas operacionais de 2a gerao,como por exemplo a multiprogramao. Outra caractersticaapresentada foi a capacidade de lerjobsdos cartes perfurados para os discos, assim que o programador os entregasse. Dessa maneira,assim que umjob terminasse, o computador iniciava a execuo do seguinte, que j fra lido earmazenado em disco. Esta tcnica foi chamadaspool (simultaneous peripherical operation on line),sendo tambm utilizada para a sada de dados.

    O tempo de espera dos resultados dos programas reduziu-se drasticamente com a 3a geraode sistemas. O desejo por respostas rpidas abriu caminho para o time-sharing, uma variao damultiprogramao onde cada usurio tem um terminalon-linee todos compartilham uma nica CPU.

    Aps o sucesso do primeiro sistema operacional com capacidade detime-sharing(o CTSS) de-senvolvido no MIT, um consrcio envolvendo o MIT, a GE e o Laboratrio Bell foi formado como intuito de desenvolver um projeto ambicioso para a poca: um sistema operacional que suportas-se centenas de usurioson-line. O MULTICS (MULTiplexed Information and Computing Service)introduziu muitas idias inovadoras, mas sua implementao mostrou-se impraticvel para a dcadade sessenta. O projeto MULTICS influenciou os pesquisadoresda Bell que viriam a desenvolver oUNIX uma dcada depois.

    1.2.4 A Quarta Gerao (1980-): Computadores Pessoais e Estaes de Trabalho

    Com o desenvolvimento de circuitos LSI,chipscontendo milhares de transistores em um cent-metro quadrado de silcio, surgiu a era dos computadores pessoais e estaes de trabalho. Em termosde arquitetura, estes no diferem dos minicomputadores da classe do PDP-11, exceto no quesitomais importante: preo. Enquanto os minicomputadores atendiam companhias e universidades, oscomputadores pessoais e estaes de trabalho passaram a atender usurios individualmente.

    1Que eram capazes de gerenciar apenas umjob por vez

  • DCA-FEEC-UNICAMP Introduo aos Sistemas Operacionais 6

    O aumento do potencial destas mquinas criou um vastssimo mercado desoftwarea elas dirigi-do. Como requisito bsico, estes produtos (tanto aplicativos quanto o prprio sistema operacional)necessitavam ser amigveis, visando usurios sem conhecimento aprofundado de computadores esem inteno de estudar muito para utiliz-los. Esta foi certamente a maior mudana em relao aoOS/360 que era to obscuro que diversos livros foram escritos sobre ele. Dois sistemas operacio-nais dominaram o mercado: MS-DOS para os computadores pessoais e UNIX para as estaes detrabalho.

    O prximo desenvolvimento no campo dos sistemas operacionais surgiu com a tecnologia deredes de computadores: os sistemas operacionais de rede e distribudos.

    Sistemas operacionais de rede diferem dos sistemas operacionais para um simples processador notocante capacidade de manipular recursos distribudos pelos processadores da rede. Por exemplo,um arquivo pode ser acessado por um usurio num processador,mesmo que fisicamente o arquivose encontre em outro processador. Sistemas operacionais derede provem ao usurio uma interfacetransparente de acesso a recursos compartilhados (aplicativos, arquivos, impressoras, etc), sejamestes recursos locais ou remotos.

    Sistemas operacionais distribudos so muito mais complexos. Estes sistemas permitem que osprocessadores cooperem em servios intrnsecos de sistemas operacionais tais como escalonamentode tarefas e paginao. Por exemplo, num sistema operacional distribudo uma tarefa pode mi-grar durante sua execuo de um computador sobrecarregadopara outro que apresente carga maisleve. Contrrio aos sistemas operacionais de rede que so largamente disponveis comercialmente,sistemas operacionais distribudos tm sua utilizao ainda restrita.

    1.3 Conceitos Bsicos em Sistemas Operacionais

    1.3.1 Processos

    Um conceito fundamental em sistemas operacionais o deprocessoou tarefa. Um processo(s vezes chamado de processo sequencial) basicamente um programa em execuo. Ele umaentidade ativa que compete por recursos (principalmente CPU) e interage com outros processos.

    Em um instante qualquer, um processo est em um determinado estado. Estes estados podem ser: executando (usando a CPU para executar as instrues do programa); bloqueado (aguardando recursos2 no disponveis no momento); ativo (aguardando apenas CPU para executar).Um processo em execuo passa por um sequncia de estados ordenados no tempo. Um processo

    possui duas importantes propriedades: o resultado da execuo de um processo independe da velocidade com que executado; se um processo for executado novamente com os mesmos dados, ele passar precisamente pelamesma sequncia de instrues e fornecer o mesmo resultado.

    2Que no CPU.

  • DCA-FEEC-UNICAMP Introduo aos Sistemas Operacionais 7

    Estas propriedades enfatizam a natureza sequencial de um processo. O processo sequencial definido pelo resultado de suas instrues, no pela velocidade com que as instrues so executadas.

    1.3.2 Sistemas Multitarefas e Multiusurios

    Como j mencionado, um programa em execuo chamado de processo ou tarefa. Um sistemaoperacional multitarefa se distingue pela sua habilidade de suportar a execuo concorrente de pro-cessos sobre um processador nico, sem necessariamente prover elaborada forma de gerenciamentode recursos (CPU, memria, etc).

    Sistemas operacionais multiusurios permitem acessos simultneos ao computador atravs dedois ou mais terminais de entrada. Embora frequentemente associada com multiprogramao, mul-titarefa no implica necessariamente em uma operao multiusurio. Operao multiprocessos semsuporte de multiusurios pode ser encontrado em sistemas operacionais de alguns computadores pes-soais avanados e em sistemas de tempo-real.

    1.3.3 Multiprogramao

    Multiprogramao um conceito mais geral que multitarefa edenota um sistema operacionalque prov gerenciamento da totalidade de recursos tais comoCPU, memria, sistema de arquivos,em adio ao suporte da execuo concorrente dos processos.

    Em uma mquina podemos ter o conjunto de processos sendo executados de forma serial oude forma concorrente, ou seja, os recursos presentes na mquina podem ser alocados a um nicoprograma at a concluso de sua execuo ou esses recursos podem ser alocados de modo dinmicoentre um nmero de programas ativos de acordo com o nvel de prioridade ou o estgio de execuode cada um dos programas.

    No caso de um computador no qual o sistema operacional usado permite apenas a monoprogra-mao, os programas sero executados instruo-a-instruo, at que seu processamento seja con-cludo. Durante a sua execuo, o programa passar por diversas fases, alterando momentos em quese encontra executando ou bloqueado aguardando, por exemplo, a concluso de uma operao deentrada/sada de dados (normalmente lenta, se comparada velocidade de execuo das instruespor parte do processador).

    Atravs do uso da multiprogramao possvel reduzir os perodos de inatividade da CPU e con-sequentemente aumentar a eficincia do uso do sistema como umtodo. O termo multiprogramaodenota um sistema operacional o qual em adio ao suporte de mltiplos processos concorrentes,permite que instrues e dados de dois ou mais processos disjuntos estejam residentes na memriaprincipal simultaneamente.

    O nvel de multiprogramao presente em um sistema pode ser classificado como integral ouserial. A multiprogramao dita integral caso mais de um processo possa se encontrar em execuoem um dado instante, enquanto que no caso da serial apenas um processo se encontra em execuoa cada instante, sendo a CPU alocada aos processos de forma intercalada ao longo do tempo. Umavez que a maioria dos computadores apresenta apenas uma unica CPU, a multiprogramao serial encontrada com mais frequncia.

  • DCA-FEEC-UNICAMP Introduo aos Sistemas Operacionais 8

    1.3.4 Multiprocessamento

    Embora a maioria dos computadores disponha de uma nica CPU que executa instrues uma auma, certos projetos mais avanados incrementaram a velocidade efetiva de computao permitindoque vrias instrues fossem executadas ao mesmo tempo. Um computador com mltiplos processa-dores que compartilhem uma memria principal comum chamado um multiprocessador. O sistemaque suporta tal configurao um sistema que suporta o multiprocessamento.

    1.3.5 Interpretador de Comandos (Shell)

    O interpretador de comando um processo que perfaz a interface do usurio com o sistema ope-racional. Este processo l o teclado a espera de comandos, interpreta-os e passa seus parmetros aosistema operacional. Servios como login/logout, manipulao de arquivos, execuo de programas,etc, so solicitados atravs do interpretador de comandos.

    1.3.6 Chamadas de Sistema (System Calls)

    Assim como o interpretador de comandos a interface usurio/sistema operacional, as chamadasdo sistema constituem a interface programas aplicativos/sistema operacional. As chamadas do siste-ma so funes que podem ser ligadas com os aplicativos provendo servios como: leitura do relgiointerno, operaes de entrada/sada, comunicao inter-processos, etc.

    1.4 O Sistema Operacional UNIX

    Dada sua larga aceitao, o sistema operacional UNIX ser utilizado como referncia neste curso.O sistema dividido em duas partes: programas e servios: shell, mail, vi, date, etc; ncleo(kernel): Prov suporte aos programas e servios.

    Desenvolvido nos Laboratrios da Bell em meados da dcada desetenta, o sistema UNIX inicial-mente atendia as necessidades especficas do grupo de Cincia da Computao da Bell. A razo daaceitao do UNIX explicada pelos atributos abaixo: escrito em linguagem de alto nvel, o que facilita seu transporte para diferentes plataformas; interface simples para com o usurio(shell); fornece primitivas que permitem o desenvolvimento de programas complexos a partir de pro-

    gramas mais simples; estrutura hierrquica de arquivos; formatao de arquivos baseada no conceito destream(cadeia) de bytes; interfaceamento simples e consistente com os dispositivosperifricos;

  • DCA-FEEC-UNICAMP Introduo aos Sistemas Operacionais 9 multiusurio/multiprogramado; esconde a arquitetura do harware, permitindo que um programa execute em mltiplas platafor-mas.

    1.5 Uma Viso Geral do Sistema Operacional UNIX

    nroff

    outros programas aplicativos

    cc

    ld

    vied grep

    wc

    date

    who

    make

    find

    a.out

    shman

    cpp

    outros programas aplicativos

    comp

    as

    Ncleo

    Hardware

    Figura 1.1: Arquitetura do sistema operacional UNIX

    Programas interagem com o ncleo atravs da evocao de um conjunto bem definido de chama-das de sistema. Muitos destes programas so denominados comandos.

    O conjunto de chamadas do sistema e os algoritmos internos que implementam estas chamadasformam o corpo do ncleo. A organizao do ambiente UNIX podeser vista na forma de camadasconforme mostrado na figura 1.1.

    1.5.1 Sistema de Arquivos

    O sistema de arquivos do UNIX caracterizado por: estrutura hierrquica;

  • DCA-FEEC-UNICAMP Introduo aos Sistemas Operacionais 10 tratamento consistente dos dados de arquivo; facilidade na criao/eliminao de arquivos; crescimento dinmico de arquivos; proteo aos dados dos arquivos; tratamento dos dispositivos perifricos como arquivos de dados.O sistema de arquivo organizado na forma de rvore conformepode ser visto no exemplo da

    figura 1.2.

    bin 5bin 5include 5lib

    usr

    sh ed

    hosts

    /

    emacs tex X11

    pub dev

    tty00

    tmp etc

    vi

    passwd exportfs tty01

    Figura 1.2: Organizao hierrquica do sistema de arquivos

    Ainda com relao a esta figura temos: / > raiz; no-folhas > diretrios de arquivos; folhas > diretrios ou arquivos regulares ou arquivos especiais de dispositivos.A localizao de um arquivo na hierarquia pode ser na forma absoluta ou relativa. Na forma

    absoluta utiliza-se o caracter / no incio do endereo para indicar a raiz, enquanto no caso relativoinicia-se o caminho com o nome do arquivo que tem o diretrio atual como o ponto de partida doendereo.

    Os programas no ambiente UNIX no possuem nenhum conhecimento sobre o formato internono qual o ncleo armazena os dados de arquivo. Os dados so fornecidos pelo UNIX como umstream(cadeia) de bytes, cabendo aos programas interpretarem o seu conteudo. Este tratamento estende-setambm aos diretrios, ou seja, estes so vistos como arquivos regulares.

    O acesso aos arquivos controlado pelas permisses de acesso associadas a cada arquivo. Nocaso, temos os seguintes tipos de permisses: leitura, escrita e execuo, para os seguintes tipos deusurios: proprietrio do arquivo, grupo de usurios ou qualquer outro usurio.

    Uma caracterstica importante do UNIX o fato de que os programas acessam os dispositivosperifricos com a mesma sintaxe utilizada para o acesso aos arquivos regulares. Os dispositivostambm so protegidos da mesma forma que os arquivos regulares.

  • DCA-FEEC-UNICAMP Introduo aos Sistemas Operacionais 11

    O cdigo abaixo ilustra o programacopy que copia o contedo de um arquivo para outro.

    /* */

    #include #include #include

    char buffer[512];

    void copy(old, new)int old, new;{int count;while((count = read(old, buffer, sizeof(buffer))) > 0)

    write(new, buffer, count);}

    main(argc, argv)int argc;char *argv[];{int fdold, fdnew;

    if(argc != 3){printf("Uso: copy f1 f2\n");exit(1);}

    /* abre arquivo para leitura */fdold = open(argv[1], O_RDONLY);if(fdold == -1) /* erro no open */{printf("Impossivel abrir %s\n", argv[1]);exit(1);}

    /* cria arquivo novo */fdnew = creat(argv[2], 0666);if(fdnew == -1) /* erro no creat */{printf("Impossivel criar %s\n", argv[2]);

  • DCA-FEEC-UNICAMP Introduo aos Sistemas Operacionais 12

    exit(1);}

    /* chama copy */copy(fdold, fdnew);exit(0);}

    /* */

    1.5.2 Ambiente de Processamento

    Um programa um arquivo executvel, e um processo uma instncia do programa em execuo.No UNIX vrios processos podem executar simultneamente, sendo que vrias instncias de ummesmo programa podem existir ao mesmo tempo no sistema.

    o programa abaixo ilustra os comandosfork , execl, wait e exit (implcito) utilizados na criaoe sincronizao de processos.

    /* */

    #include #include #include

    main(argc, argv)int argc;char *argv[];{int pid;struct timeval tv1, tv2;double t1, t2;

    pid = fork(); /* fork */if(pid == 0) execl(argv[1], NULL); /* processo filho */gettimeofday(&tv1, NULL); /* processo pai continua ... */t1 = (double)(tv1.tv_sec) + (double)(tv1.tv_usec)/ 1000000.00;wait(NULL); /* sincroniza com o termino do filho */gettimeofday(&tv2, NULL);t2 = (double)(tv2.tv_sec) + (double)(tv2.tv_usec)/ 1000000.00;

    printf("\nO tempo de execucao de %s eh: %lf\n", argv[1], (t2 - t1));}

    /* */

  • DCA-FEEC-UNICAMP Introduo aos Sistemas Operacionais 13

    Uma das caractersticas marcantes do UNIX que este no suporta, no nvel do ncleo, muitasdas funes que fazem parte dos ncleos de outros sistemas operacionais. No caso do UNIX, estasfunes so, em geral, programas no nvel do usurio. O exemplo de programa mais destacado nestecaso o programashellque o responsvel pela intepretao dos comandos do usurio.

    Na maior parte das vezes oshellexecuta o comandofork e o processo filho executa o comandosolicitado atravs da chamadaexec. As palavras restantes na linha de comando so tratadas comoparmetros do comando. Oshellaceita trs tipos de comandos: arquivo executvel produzido por compilao; arquivo executvel contendo uma sequncia de linhas de comando doshell; comando interno doshell.

    O shellnormalmente executa um comando sincronamente, ou seja, espera o trmino do processoassociado ao comando antes da leitura de uma nova linha de comando. Tambm possvel a execuoassncrona do comando. Neste caso, oshell l e executa a prxima linha de comando sem esperar otrmino do processo associado ao comando anterior, o qual executa embackground.

    Como oshell um programa que se situa no nvel do usurio, no fazendo parte do ncleo, fcil modific-lo para um ambiente particular.

    1.5.3 Modularidade no Ambiente UNIX

    O ambiente tem como filosofia permitir aos usurios o desenvolvimento de programas peque-nos e modulares que possam ser usados como blocos primitivosna construo de programas maiscomplexos.

    a) redirecionamento de entrada/sada (E/S): os processos possuem, convencionalmente, acesso atrs tipos de arquivos padro: entrada, sada e erro.

    Processos que so executados a partir de um terminal possuem, tipicamente, o terminal comoarquivo de entrada, sada e erro. Estes arquivos podem ser redirecionados independentemente. Ex: ls : lista todos os arquivos do diretrio corrente na sada padro; ls> output : redireciona a sada padro para o arquivo chamado outputno diretrio atual; mail mjb < carta : faz com que o programamail (correio eletrnico) leia o contedo da

    mensagem do arquivo carta, e no do terminal.

    b) pipe : permite que um fluxo de dados seja estabelecido entre um processo produtor e um processoconsumidor.

    Processos podem redirecionar a sua sada padro para umpipea ser lido por outro processo quetenha redirecionado a sua entrada padro para o mesmopipe. Ex: grep main a.c b.c c.c : lista as ocorrncias da palavra main nos arquivos a.c, b.c e c.c; grep main a.c b.c c.cj wc -l : submete a sada do comando anterior a um utilitrio que conta o

    nmero de linhas de um arquivo (wc, opo -l).

  • DCA-FEEC-UNICAMP Introduo aos Sistemas Operacionais 14

    1.5.4 Servios do Sistema Operacional

    Dentre os servios suportados pelo ncleo temos: controle de execuo dos processos: criao, terminao, suspenso, comunicao entre pro-cessos; escalonamento (ordem de acesso CPU) de processos; alocao de memria principal para execuo dos processos.Caso a memria esteja escassa, oncleo move temporariamente processos da memria primriapara a secundria3; alocao de memria secundria para armazenamento/recuperao eficiente dos dados do usu-rio (este servio constitui o sistema de arquivos); acesso controlado aos dispositivos perifricos tais como terminais, fitas, discos, redes, etc.

    O ncleo fornece estes servios de forma transparente. Ex: o ncleo deteta que um dado arquivo um arquivo regular ou um dispositivo, mas esconde estadistino dos processos do usurio; o ncleo formata os dados em um arquivo para fins de armazenamento interno, entretanto,este formato escondido do usurio, sendo retornado para este um stream no formatado debytes.

    1.5.5 Aspectos do Hardware

    A execuo dos processos do usurio no ambiente UNIX dividida em 2 nveis: usurio e ncleo.Quando um processo executa uma chamada do sistema, o modo de execuo do processo muda domodo usurio para o modo ncleo. As diferenas entre estes 2 modos so: processos no modo usurio podem acessar as suas instrues edados, mas no as instrues

    e dados do ncleo ou de qualquer outro processo. Processos nomodo ncleo podem acessarendereos do ncleo ou do usurio; algumas instrues so privilegiadas e resultam em erro quando executadas no modo usurio.

    Interrupes e Excees

    O UNIX permite que dispositivos tais como perifricos de E/Sou o relgio do sistema inter-rompam a CPU assincronamente. Geralmente, ohardwaredefine prioridades para os dispositivos deacordo com a ordem na qual as interrupes devero ser atendidas caso ocorram simultaneamente.

    Uma condio de exceo refere-se ocorrncia de um evento no esperado provocado peloprocesso. Alguns destes eventos podem ser: endereamento ilegal da memria, execuo de instruoprivilegiada, diviso por zero, etc.

    3Esta transferncia pode ser do processo completo(swapping), ou de segmentos do processo (paginao).

  • DCA-FEEC-UNICAMP Introduo aos Sistemas Operacionais 15

    As excees podem ser caracterizadas como algo que ocorre nomeio da execuo de uma ins-truo, onde o sistema tenta reiniciar a instruo aps tratar a exceo. No caso das interrupes,estas podem ser consideradas como se ocorressem entre a execuo de duas instrues, sendo que osistema continua a executar a partir da prxima instruo aps tratar a interrupo.

    O UNIX utiliza um mesmo mecanismo para manipular as condies de interrupo e exceo.

    Nveis de Execuo do Processador

    O ncleo necessita muitas vezes impedir a ocorrncia de interrupes durante a execuo deatividades crticas. Exemplo: o ncleo no deve aceitar interrupo do disco enquanto estiver ope-rando sobre listas ligadas, isto porque o tratamento da interrupo pode interferir na atualizao dosapontadores provocando inconsistncias.

    Normalmente, os computadores possuem instrues privilegiadas que permitem definir o nvelde execuo do processador. A atribuio do nvel de execuo do processador em um determinadovalor mascara a interrupo daquele nvel e dos nveis inferiores (tornando habilitadas as de nveissuperiores).

    Na figura 1.3, caso o ncleo mascare a interrupo do disco, todas as interrupes, exceto a dorelgio e dos erros da mquina, so impedidas.

    Erros de Hardware

    Dispositivos de Rede

    Relgio

    Disco

    Terminais

    Interrupo de Software

    Prioridade Alta

    Prioridade Baixa

    Figura 1.3: Nveis de interrupo definidas pelo UNIX

    Gerenciamento de Memria

    O ncleo reside permanentemente na memria principal, assim como, os processos em execuo(ou pelo menos parte deles).

    Quando da compilao, so gerados endereos no programa querepresentam variveis e ins-trues. O compilador gera estes endereos para uma mquinavirtual como se nenhum outro pro-grama fosse executar simultaneamente na mquina real. Quando da execuo do programa, o ncleoaloca espao na memria principal atravs do mapeamento do endereo virtual no endereo fsico damquina. Este mapeamento depende das caractersticas dohardwareda mquina.

  • DCA-FEEC-UNICAMP Introduo aos Sistemas Operacionais 16

    1.6 Arquitetura do Sistema Operacional UNIX

    Uma viso mais detalhada da arquitetura do ncleo do UNIX mostrada na figura 1.4.

    gerenciamento

    de memria

    escalonador

    processos

    comunicaointer-

    de processosde controlesubsistema

    interface das chamadas de sistema

    bibliotecas

    Programas do usurio

    Nvel do usurioNvel do ncleo

    hardware

    Nvel de hardwareNvel do ncleo

    controle do hardware

    drivers de dispositivos

    blococaractere

    traps

    subsistema de arquivos

    buffer cache

    Figura 1.4: Arquitetura do ncleo do sistema operacional UNIX

    Os programas em linguagem de mquina podem evocar chamadas ao sistema diretamente, isto ,sem o uso da biblioteca. Por sua vez, os programas em linguagem de alto nvel realizam as chamadascomo se estivessem evocando funes ordinrias, cabendo biblioteca mapear estas chamadas defunes nas primitivas necessrias para acessar o sistema operacional. Outras bibliotecas permitemum uso mais sofisticado das chamadas ao sistema (exemplo: biblioteca de E/S).

    A figura 1.4 divide as chamadas ao sistema em chamadas ao sub-sistema de arquivos e ao sub-sistema de controle dos processos. O sub-sistema de arquivos acessa os dados nos arquivos atravs

  • DCA-FEEC-UNICAMP Introduo aos Sistemas Operacionais 17

    de um mecanismo de bufferizao que, atravs da interaocom osdrivers de dispositivos deE/S orientados a bloco, regula o fluxo de dado entre o ncleo e os dispositivos de armazenamentosecundrio. Os dispositivos de E/S orientados a bloco so dispositivos de armazenamento de acessorandmico.

    O sub-sistema de arquivo interage diretamente com dispositivos que no so do tipo bloco (ter-minais, por exemplo). Neste caso, no h a interveno do mecanismo de bufferizao.

    Os sub-sistemas de arquivo e de controle dos processos interagem quando do carregamento de umarquivo na memria para execuo. O mdulo de gerenciamentoda memria controla a alocao dememria, ou seja, caso em um determinado instante o sistema no possua memria fsica suficientepara todos os processos, o ncleo move-os entre a memria fsica e a memria secundria de modoa que todos os processos possuam as mesmas chances de execuo. Duas polticas so normalmenteutilizadas: permuta(swapping)e paginao.

    O mdulo de escalonamento aloca a CPU aos processos, os quaisexecutam at o instante em queliberam a CPU para aguardar um recurso, ou ento, so preemptados porque a execuo excedeuo quantum de tempo disponvel para o processo. Neste caso,o escalonador escolhe o processopronto de maior prioridade.

    Ainda com relao aos processos, existem vrias formas de comunicao entre estes, variandodesde a sinalizao assncrona de eventos at a transmissosncrona de mensagens entre processos.

    1.6.1 Introduo aos Conceitos do Sistema

    Uma Viso do Sistema de Arquivos

    A representao interna de um arquivo dado por uminode. Este contm uma descrio dolayoutno disco do arquivo de dado, assim como outras informaes tais como: proprietrio do arquivo,permisses de acesso e instantes de acesso.

    Todo arquivo possui uminode, o qual alocado quando da sua criao, podendo possuir, entre-tanto, vrios nomes, todos mapeados no mesmoinode. Cada um destes nomes denomina-selink. Osinodesso armazenados no sistema de arquivos e so lidos em umatabela de inodes(em memria)quando da manipulao dos respectivos arquivos.

    Duas outras estruturas de dados so importantes:tabela de arquivo(TA) e tabela descritora dearquivo do usurio(TDAU), sendo que TA uma estrutura global ao ncleo enquanto uma TDAU criada para cada processo. Quando da criao/abertura de umarquivo, o ncleo associa uma entradade cada uma das tabelas aoinodecorrespondente ao arquivo, permitindo que as entradas destas trsestruturas -TA, TDAU einode- mantenham o estado do arquivo, assim como, os direitos de acessoao arquivo.

    TA mantm ooffset, no arquivo correspondente, do prximo byte a ser lido/escrito, assim como, osdireitos de acesso do processo;

    TDAU identifica todos os arquivos abertos para o processo.

    A figura 1.5 ilustra o uso das tabelas TDAU, TA e deinodes. Note um link onde dois campos naTDAU apontam para o mesmo campo na TA.

  • DCA-FEEC-UNICAMP Introduo aos Sistemas Operacionais 18

    TDAU TA Tabela de Inodes

    Figura 1.5: Estruturas de dado do sistema de arquivos

    O ncleo retorna um descritor de arquivo quando das chamadasopenecreate, o qual correspondea um ndice na TDAU. Quando da execuo de umwrite ou umread, o ncleo utiliza o descritorde arquivo para acessar a TDAU e atravs desta alcanar a TA e oinodedo arquivo onde, atravsdeste ltimo, o ncleo encontra o dado no arquivo. Esta arquitetura dos dados permite vrios nveisde acesso compartilhado ao arquivo.

    Uma instalao pode possuir vrias unidades fsicas de disco, cada uma delas contendo um oumais sistemas de arquivo. O ncleo relaciona-se com os sistemas de arquivo de um ponto de vistalgico ao invs de tratar com discos. Cada dispositivo lgico identificado por um nmero dodispositivo lgico. A converso entre os endereos do dispositivo lgico (sistema de arquivo) e osendereos, no dispositivo fsico (disco) realizada pelodriver do disco.

    Um sistema de arquivos consiste de uma sequncia de blocos lgicos, cada um contendo qualquermltiplo de 512 bytes. O tamanho de um bloco lgico homogneo dentro do sistema de arquivospodendo, entretanto, variar para diferentes sistemas de arquivo em uma dada configurao. Blocosmaiores representam um aumento na taxa de transferncia dosdados entre a memria e o disco.Entretanto, blocos maiores demandam mais espao em memriapara manipul-los. Um sistema dearquivos possui a seguinte estrutura (ver figura 1.6):

    bloco deboot bloco

    super lista de inodes blocos de dados

    Figura 1.6: Estrutura do sistema de arquivos bloco deboot : contm o cdigo dobootstrapque lido na mquina quando da partida dosistema operacional; super-bloco : descreve o estado de um sistema de arquivo; lista deinodes: tem o seu tamanho definido quando da configurao do sistema de arquivos.Um dosinodescorresponde raiz do S.A. atravs desteinodeque a estrutura de diretriosdo sistema acessada;

  • DCA-FEEC-UNICAMP Introduo aos Sistemas Operacionais 19 bloco de dados : contm arquivos e dados administrativos. Umbloco de dados s pode perten-cer a um nico arquivo do sistema.

    Processos

    Um processo corresponde execuo de um programa e consistede um conjunto de bytes que aCPU interpreta como instruo de mquina, dado e pilha.

    O processo executa uma sequncia de instrues que auto-contida e que no salta para um outroprocesso. Ele l e escreve seus dados nas suas reas de dado e pilha, mas no pode ler ou escrevernas reas de dado e pilha de outro processo. Os processos comunicam com outros processos e com oresto do sistema atravs de chamadas de sistema.

    Do ponto de vista prtico, um processo em UNIX uma entidade criada pela chamadafork .Exceto o primeiro, qualquer outro processo criado atravsda chamadafork . O processo que cha-mou o fork identificado como processo pai e o que acabou de ser criado identificado comoprocesso filho. Todo processo tem um nico pai mas pode ter vrios filhos. O ncleo identificacada processo atravs de um nmero denominadoprocess ID(PID). No caso do processo filho, elerecebe como retorno aps a execuo dofork o valor 0, enquanto o processo pai recebe um valordiferente de 0 que corresponde ao PID do filho. Atravs do teste do valor retornado pelofork , umprocesso pode distinguir se ele o processo pai ou o processofilho e, em consequncia, tomar a aocorrespondente.

    O processo 0 um processo especial criado quando da iniciao do sistema(boot). Aps criar oprocesso 1, conhecido comoinit, o processo 0 torna-se o processoswapper. O processo 1 ancestralde qualquer outro processo no sistema, possuindo uma relao especial com estes, relao esta queser discutida nos captulos subsequentes.

    Um arquivo executvel gerado quando da compilao de um programa consiste das seguintespartes: um conjunto de cabealhos que descrevem os atributos dos arquivos; o texto do programa; representao em linguagem de mquina dos dados que possuemvalor inicial e uma indicao

    de quanto espao o ncleo necessita alocar para os dados sem valor inicial, denominadobss; outras sees tais como informaes sobre a tabela de smbolos.O ncleo carrega um arquivo executvel, gerado pelo compilador, durante a execuo de uma

    chamadaexec, consistindo o processo carregado de trs partes: texto, dado e pilha.As regies de texto e dado correspondem s sees do texto e dados iniciados e no-iniciados

    (bss). A pilha criada automaticamente e o seu tamanho ajustado dinamicamente pelo ncleo emtempo de execuo. Um quadro(frame)da pilha contm os parmetros para a funo chamada, suasvariveis locais e os dados necessrios (apontador de pilhae contador de programa) para recuperar oquadro anterior na pilha.

    Como um processo no UNIX pode executar em 2 modos, ncleo ou usurio, utiliza-se uma pilhaseparada para cada modo. O lado esquerdo da figura 1.7 mostra apilha do usurio para o programacopyquando da chamada de sistemawrite .

  • DCA-FEEC-UNICAMP Introduo aos Sistemas Operacionais 20

    parmetros do main(argc, argv)

    end. do quadro 0

    (fdold, fdnew)variveis locais

    (old, new)parmetros do copychamada do copy

    end. de retorno aps

    end. do quadro 1

    (count)variveis locais

    (new, buffer, count)parmetros do write

    end. de retorno aposchamada do write

    end. do quadro 2

    variveis locais

    quadro 1call main

    call copyquadro 2

    call writequadro 3

    quadro 0incio

    da pilhacrescimentodireo do

    Pilha do Usurio Pilha do Ncleo

    end. de retorno apschamada do main

    interface das chamadas de sistemaquadro 0

    processamento dachamada white

    Figura 1.7: Estado das pilhas para o programacopy

    Cada chamada de sistema possui uma entrada na biblioteca de chamadas de sistema, a qual codificada em assembler, contendo instrues especiais(traps) que, quando executadas, provocamuma interrupo resultando em um chaveamento nohardwarepara o modo ncleo passando a utilizara pilha do ncleo. A construo da pilha do ncleo ocorre nos mesmos moldes da construo da pilhano modo usurio.

    Todo processo possui uma entrada natabela de processos(TP) do ncleo e a cada um alocadauma rea U que contm dados privados manipulados somente pelo ncleo. A TP aponta para umatabela de regies do processo (pregion), cujas entradas apontam para entradas natabela de regio.Uma regio uma rea contgua de um espao de endereo do processo, tal como: texto, dado epilha.

    As entradas na tabela de regio descrevem os atributos da regio, ou seja, se a regio contmtexto ou dado, se uma regio compartilhada ou privada e se o contedo da regio encontra-se emmemria.

    O nvel extra de encadeamento, ou seja, da pregion para a tabela de regio, permite que processosindependentes compartilhem regies de memria.

    Quando um processo evoca a chamadaexeco ncleo aloca regies para o texto, dado e pilha doprocesso que est sendo criado, aps liberar as regies antigas do processo que estava executando.

  • DCA-FEEC-UNICAMP Introduo aos Sistemas Operacionais 21

    Quando um processo evocafork o ncleo duplica o espao de endereo do processo antigo permitin-do, quando possvel, que processos compartilhem regies ou, caso contrrio, fazendo uma cpia daregio. Quando um processo evocaexit o ncleo libera as regies que o processo estava usando. Afigura 1.8 ilustra as estruturas de dados associadas ao controle dos processos.

    Tabela de Processos

    rea U

    pregion Tabela de Regies

    memria primria

    Figura 1.8: Estruturas de dados associadas ao controle dos processos

    A entrada na tabela de processos e a rea U contm informaesde controle e status sobre oprocesso. A rea U pode ser vista como uma extenso da entradado processo na tabela de processos.

    Campos importantes da tabela de processos: campo de estado; identificadores dos usurios que possuem o processo; um conjunto descritor de evento quando o processo est bloqueado.A rea U contm informaes que descrevem o processo e que soacessadas somente durante a

    execuo do processo. Os campos mais importantes so: apontador para o campo na TP do processo em execuo; descritores de arquivo para todos os arquivos abertos; parmetros internos de E/S; limites de tamanho do processo e arquivo.Contexto de um Processo

    O contexto de um processo o estado definido pelo seu texto correspondendo aos valores dassuas variveis globais e estruturas de dado, os valores dos registros de mquina usados, os valoresarmazenados no seu slot na tabela de processos e na rea U e ocontedo das suas pilhas de usurioe ncleo. Quando o ncleo decide executar um novo processo realiza-se uma mudana de contexto.

    Quando da realizao de uma mudana de contexto o ncleo salva informaes suficientes demodo a que posteriormente ele possa recuperar o contexto do processo anterior e continuar a sua

  • DCA-FEEC-UNICAMP Introduo aos Sistemas Operacionais 22

    execuo. Da mesma forma, quando da mudana do modo usurio para o modo ncleo, o ncleosalva as informaes necessrias para que o processo possa retornar ao modo usurio e continuar aexecuo. Neste ltimo caso, temos uma mudana de modo e no de um chaveamento de contexto.

    Estados do Processo

    A vida de um processo pode ser representada por um conjunto deestados (figura 1.9): executando no modo usurio; executando no modo ncleo; pronto; bloqueado (dormindo).

    escalonado

    aguardando

    Bloqueado Pronto

    evento

    evento

    Executando emModo Ncleo

    4 3

    2

    Executando emModo Usurio

    chamada de sistemaou interrupo retorno

    interrupo/retorno

    1

    Figura 1.9: Estados de um processo

    O ncleo protege a sua consistncia permitindo chaveamentode contexto apenas quando o pro-cesso transita do estado executando no modo ncleo para o modo bloqueado. O ncleo tambmeleva o nvel de execuo do processador quando da execuo de regies crticas de modo a impe-dir interrupes que possam provocar inconsistncias em suas estruturas de dados. O escalonador deprocesso realiza, periodicamente, a preempo de processos executando no modo usurio de formaa que os processos no monopolizem a CPU.

  • Captulo 2

    PROCESSOS

    2.1 Introduo

    No captulo anterior definimos o conceito de processo, bem como algumas generalidades sobrecomo o sistema operacional UNIX gerencia processos. Neste captulo, avanaremos no estudo deprocessos, analisando problemas de concorrncia, escalonamento e comunicao inter-processos.

    2.1.1 Modelo de Processos

    A maioria dos computadores modernos so capazes de realizardiversas atividades em paralelo.Enquanto roda um programa do usurio, o computador pode ler um disco ou utilizar a impressora.Em sistemas multiprogramados, a CPU comutada de programa aprograma em perodos da ordemde milisegundos, dando ao usurio a impresso de paralelismo.

    O gerenciamento de atividades paralelas difcil de ser implementado com eficincia. Entretan-to, projetistas de sistemas operacionais ao longo dos anos vm desenvolvendo modelos objetivandotornar esta tarefa mais simples.

    No modelo mais empregado atualmente, todos os programas executveis no computador, mui-tas vezes incluindo subsistemas do sistema operacional, esto organizados na forma de processos.Conceitualmente, cada processo tem uma prpria CPU virtual(tabela armazenando contedo de re-gistradores, contador de programa, etc). A posse da CPU real passada periodicamente de processoa processo. O sistema pode ser visto como uma coleo de processos sendo executados empseudoparalelismo.1 Conforme definido anteriormente, a habilidade de executar mltiplos programas numanica CPU denomina-se multiprogramao.

    Em sistemas multiprogramados, a velocidade de execuo de um processo funo da quantidadede processos competindo pela CPU. Isto implica que o tempo deexecuo de um processo varia acada nova execuo, dependadendo da carga da mquina. Assim sendo, processos no devemser programados com consideraes intrnsecas de tempo. Quando so requeridas consideraes detempo real, medidas especiais devem ser tomadas para se assegurar que estas iro ocorrer.

    1Paralelismoreal obtido apenas com a utilizao de mltiplas CPUs.

    23

  • DCA-FEEC-UNICAMP Introduo aos Sistemas Operacionais 24

    2.1.2 Concorrncia

    Em muitos sistemas operacionais, processos frequentemente compartilham outros recursos almda CPU. Por exemplo, durante uma chamada de sistema um processo pode ter acesso a uma tabelamantida pelo ncleo. Neste caso, o ncleo deve inibir a comutao da CPU para outro processo, atque todas as operaes na tabela forem efetuadas. Caso contrrio, a tabela fatalmente assumiria umestado inconsistente onde apenas algumas alteraes foramprocessadas.

    Em situaes como a exemplificada acima, a tabela definida como umrecurso compartilhado,e a parte do cdigo que o manipula como umaregio crtica. A execuo de uma regio crticadeve ser um procedimento controlado a fim de evitar que os recursos compartilhados atinjam estadosinconsistentes.

    2.1.3 Regies Crticas

    A chave para prevenir problemas em reas compatilhadas proibir que mais de um processo leiaou escreva dados compartilhados ao mesmo tempo, ou seja, deve-se garantir amtua excluso. Sefor garantido que nenhum par de processos esteja executandoao mesmo tempo uma regio crticadelimitando um mesmo recurso compartilhado, inconsistncias so evitadas.2

    Embora este quesito evite inconsistncias, o mesmo no garante eficincia na utilizao dos re-cursos compartilhados. Para assegurarmos uma boa soluo, necessrio que: dois processos no estejam simultaneamente dentro de suas regies crticas referentes ao mes-

    mo recurso compartilhado (garantia de mtua excluso); a garantia de mtua excluso se d independente da velocidade relativa dos processos ou n-mero de CPUs; nenhum processo executando fora de regies crticas bloqueie outro processo; nenhum processo espere um tempo arbitrariamente longo paraexecutar uma regio crtica (ousofra estarvao).

    Vrios algoritmos de controle visando garantir as propriedades acima foram propostos. Estesalgoritmos so classificados segundo o modo com que esperam pela autorizao de entrada numa re-gio crtica: espera ocupada (competindo pela CPU durante aespera) ou bloqueada (no competindopela CPU).

    Todo algoritmo de mtua excluso possui, invariavelmente,duas partes (implementadas comoduas funes distintas). A primeira funo evocada quandoo processo deseja iniciar a execuo deuma regio crtica. Quando esta funo retorna, o processo est apto a executar a regio crtica. No fi-nal da execuo, o processo evoca a segunda funo, anunciando que a regio crtica j foi executada.Esta segunda funo, via de regra, provoca o retorno da primeira funo em outro processo.

    2Note que regies crticas delimitando diferentes recursospodem ser executadas por diferentes processos ao mesmotempo.

  • DCA-FEEC-UNICAMP Introduo aos Sistemas Operacionais 25

    Para permitir que regies crticas que acessam recursos compartilhados distintos possam ser exe-cutadas ao mesmo tempo, cada recurso compartilhado possui um identificador (via de regra um n-mero inteiro). Assim sendo, as duas funes que compem o algoritmo de garantia de mtua exclusopossuem este identificador como parmetro.

    2.1.4 Mtua Excluso Com Espera Ocupada

    Nesta seo analisaremos vrias propostas para garantir excluso mtua nas regies crticas, nopermitindo que mais de um processo possam manipular um recurso compartilhado ao mesmo tempo.Em todas, o processo que est tentanto acessar uma regio crtica em execuo por outro processopermanece em espera ocupada, isto , competindo pela CPU massem avanar no seu processamento.Por esta razo, os mtodos que empregam espera bloqueada soos mais utilizados na prtica.

    Desabilitar Interrupes

    A soluo mais simples o mtodo de desabilitar todas as interrupes quando se est entrandona regio crtica, e reabilit-las ao sair. Esta proposta no muito atrativa, pois d ao processo usuriopoder de desabilitar todas as interrupes, inclusive aquelas que permitem o ncleo reassumir a CPU.Caso o processo no as reabilite por algum motivo, o sistema operacional jamais reassume o controledo harware.

    Em outro aspecto, conveniente para o sistema operacional desabilitar interrupes durante algu-mas instrues, enquanto est atualizando variveis internas. Assim, desabilitar interrupes umasoluo til para o sistema operacional, no para processosde aplicao.

    Variveis LOCK

    Uma segunda tentativa leva-nos a uma soluo porsoftware. Considere uma varivel simples ecompartilhada3 LOCK, inicialmente igual a 0. Quando um processo deseja entrar em sua regiocrtica ele primeiro testa o LOCK. Se for 0, o processo alterapara 1 e executa a regio crtica. Se for1 ele espera at que seja 0. Embora parea uma boa soluo, o que ir ocorrer se ambos testam umavarivel de valor 0 ao mesmo tempo ?

    Alternncia Estrita

    Esta proposta define uma varivel TURN, inicialmente 0. Ela indica quem deve esperar e quempode entrar na seo crtica. Se TURN for 0, o processo 0 pode entrar na regio crtica. Ao sair, devepassar o valor de TURN para 1. Quando TURN 1 o processo 1 pode entrar na seo crtica. Ao sairpassa o valor de TURN para 0.4

    Este algoritmo garante a mtua excluso. Entretanto, os processos estritamente se alternam naposse do recurso compartilhado. Isto faz com que um processonecessite aguardar o acesso a umrecurso compartilhado por todos os demais at que chegue novamente a sua vez. O que ocorrequando o nmero de acessos for diferente entre os processos ?

    3Uma para cada recurso compartilhado.4Este algoritmo facilmente generalizado paraN processos,N > 2.

  • DCA-FEEC-UNICAMP Introduo aos Sistemas Operacionais 26

    Soluo de Peterson

    Obtida pela combinao das idias de variveis LOCK e TURN, criando-se tambm uma soluopor softwarepara o problema. Esta soluo evita os problemas individuais das solues anteriores,mas pouco utilizada na prtica por utilizar espera ocupada.

    Instruo TSL

    Esta proposta requer uma pequena ajuda dohardware. Ela utiliza a instruo TSL(Test and SetLock)presente em muitos processadores. Esta instruo permite aimplementao de variveisLOCKcujo teste e atualizao so atmicos (em outas palavras, a instruo TSL indivisvel mesmo frentea interrupes dehardware).

    2.1.5 Mtua Excluso com Espera Bloqueada

    Sero apresentados a seguir alguns mecanismos de garantia de mtua excluso que bloqueiam osprocessos quando tentam executar uma regio crtica ocupada. So mais eficientes que os anterio-res, posto que processos bloqueados no competem pela CPU.

    Sleep e Wakeup

    Um dos mtodos mais simples constitue-se do parsleepe wakeup. sleep uma chamada desistema que muda o estado de um processo em execuo para bloqueado. Um processo bloqueadovolta a tornar-se ativo quando outro o desbloqueia atravs da chamadawakeup. O mtodo o mesmoque emprega variveis LOCK operadas por instrues TSL, exceto que quando a varivel apresentavalor 1, o processo executasleep. O processo que altera o valor de LOCK para 0 ao sair da regiocrtica o responsvel por ativar um processo bloqueado (via wakeup).

    Infelizmente, com o emprego de apenassleepe wakeup fcil demonstrar e existncia de umestado onde todos os processos encontram-se bloqueados. Esta situao denominadadeadlock.

    Semforos

    So variveis inteiras que contam o nmero de vezes que a operaowakeuptenha sido realizada.Duas operaes, DOWN e UP (generalizaes desleepewakeup) so definidas. A operao DOWNverifica se o valor do semforo for maior que 0. Se o for, decrementa o valor e continua. Se o valor 0,o processo bloqueado. A operao UP incrementa o valor do semforo. Se um ou mais processosestiverem bloqueados sobre aquele semforo, um deles escolhido pelo sistema para completar aoperao DOWN (emitindo-lhe umwakeup).

    As operaes com semforos so atmicas ou indivisveis, implementadas com instrues TSL.

    Contadores de Evento

    Um outro tipo de varivel de sincronizao entre processos.Trs operaes so definidas paraum contador de evento (E): READ(E) : retorna o valor corrente de E;

  • DCA-FEEC-UNICAMP Introduo aos Sistemas Operacionais 27 ADVANCE(E) : incrementa atomicamente E; AWAIT(E,v) : bloqueia at que E v.Note que os contadores de eventos nunca decrescem e partem sempre de 0. Contadores de evento

    so mais convenientes que semforos para problemas to tipo produtor-consumidor combuffer limi-tado.

    Monitores

    Semforos e contadores de evento tornam simples a proteo de recursos compartilhados. Entre-tanto, uma simples troca na ordem da chamada das primitivas pode gerar uma situao dedeadlock.Em suma, a utilizao de semforos e contadores de eventos deve se processar com extrema cautela.

    Monitores so uma proposta de mecanismo de sincronizao dealto nvel. Um monitor umacoleo de procedimentos, variveis e estruturas de dados agrupados em um bloco. Os processospodem acessar os procedimentos do monitor mas no suas estruturas internas. Monitores tm umacaracterstica importante: somente um processo pode estarativo 5 no monitor em um dado instante(garantindo portanto a mtua excluso).

    Monitores constituem-se em um conceito de linguagem de programao, ou seja, o compiladorreconhece que os monitores so especiais e pode manusear as chamadas do monitor diferentemente deoutras chamadas. Esta uma das desvantagens de monitores: precisam de linguagens de programaoque os incorpore.

    A concluso que monitores, apesar de elegantes na manuteno de mtua excluso, de apli-cao restrita, pois raras so as linguagens de programaoque os incorporam.

    2.1.6 Comunicao Inter-processos

    Muitos autores consideram os mecanismos de mtua excluso apresentados acima como for-mas de processos se comunicarem. Entretanto, preferimos considerar tais mecanismos como desincronizao inter-processos, usando o termocomunicaoapenas quando ocorrer intercmbio deinformao entre processos. Sincronizao so procedimentos de controle, normalmente usados paragarantir mtua excluso, e utilizados para geranciar acompetioentre os processos. Comunicao,por sua vez, visa promover acooperaoentre os processos.

    Passagem de Mensagem

    Este mtodo de comunicao entre processos usa duas chamadas de sistema:sende receive. send(destino, mensagem) : envia mensagem a um processo destino. receive(fonte, mensagem) : recebe mensagem de um processo fonte.Destino e fonte de mensagens so buffers alocados pelos processos para fins de envio e recepo

    de mensagens. Mensagens so estruturas tipadas ou no cujo contedo interpretado unicamentepelos processos emissor e receptor da mensagem.

    5Executando qualquer um de seus procedimentos.

  • DCA-FEEC-UNICAMP Introduo aos Sistemas Operacionais 28

    Compartilhamento de Dados

    Processos podem se comunicar atravs do compartilhamento de uma rea comum onde dados po-dem ser escritos por um e lidos por outro processo. O acesso a esta rea comum deve ser disciplinadopor um mecanismo de mtua excluso (tipicamente semforos)ou tornando as instrues de leiturae gravao atmicas. Duas primitivas so necessrias: STORE(posio, dado) : grava dados numa certa posio; FETCH(posio, dado) : acessa dados de uma certa posio.Chamada de Procedimentos Remotos

    Chamada de procedimentos remotos (ou RPC) uma forma mais estruturada de troca de mensa-gens entre processos servidores e clientes. Um processo servidor dispe de um conjunto de serviosque um processo cliente evoca como se evocasse um procedimento local. O cliente indica o serviodesejado ao servidor, passando parmetros para sua execuo, se for o caso. Recebida a requisio,esta processada pelo servidor6 que retorna os resultados ao cliente. O envio e recepo de par-metros e retornos se d por troca de mensagens. Uma biblioteca de RPC possui duas primitivasbsicas: REGISTER_RPC(servio) : utilizada por servidores para anunciar que servios esto aptos a

    processar; CALL_RPC(servio, parmetros, resultados) : utilizada por clientes para evocar servios.2.2 Escalonamento de Processos

    2.2.1 Introduo

    Quando mais de um processo est ativo (pronto para executar), cabe ao sistema operacionaldecidir qual ter a posse da CPU. A parte do sistema operacional que toma esta deciso chamadaescalonadore o algoritmo utilizado oalgoritmo de escalonamento.

    Vrios critrios devem ser observados por um algoritmo de escalonamento:

    1. progresso: garatir que cada processo tenha acesso CPU;

    2. eficincia: manter a CPU ocupada praticamente 100% do tempo;

    3. tempo de resposta: minimizar o tempo de resposta na execuo dos processos, principalmenteos interativos (editores, planilhas, etc);

    4. tempo de espera: minimizar o tempo de espera de servios no interativos (compilao, im-presso, etc);

    5. vazo: maximizar o nmero de processos executados por hora.

    6Ou colocada numa fila de espera.

  • DCA-FEEC-UNICAMP Introduo aos Sistemas Operacionais 29

    importante observar que alguns desses objetivos so contraditrios. Se um algoritmo favore-ce o escalonamento de processos interativos certamento estar comprometendo os no interativos.Vejamos agora alguns algoritmos de escalonamento.

    2.2.2 Algoritmos de Escalonamento

    Escalonamento Round Robin

    Este o mais antigo e simples algoritmo de escalonamento. Cada processo executado por umintervalo de tempo(quantum). Se o processo ainda estiver executando ao final doquantum, ele suspenso e a CPU alocada a outro processo. Se o processo acabar ou for bloqueado antes do finaldoquantum, a CPU tambm passada a outro processo. A nica questo a seranalisada o tamanhodo quantum. Se for muito pequeno, diminui a eficincia da CPU, pois a alocao da CPU para outroprocesso implica num certooverhead. Se for muito grande, degrada a resposta para os processosinterativos.

    Algoritmos com Prioridades

    O algoritmo Round Robin faz a considerao que todos os processos so de igual importncia.Certas aplicaes, como controle de processos industriais, demandam um algoritmo de escalona-mento com prioridades. A idia bsica que cada processo temuma prioridade e processos comprioridades superiores devem ser executados primeiro. Para prevenir que processos de alta priorida-de executem indefinidamente, o escalonador, via de regra, diminui a prioridade dos processos com oaumento de seu respectivo tempo de execuo.

    Mltiplas Filas

    Este um algoritmo que define classes com prioridades. Processos na classe de menor prioridadeso executados por umquantum. Processos na classe seguinte, por doisquanta. Na prxima classepor 4 quanta, e assim por diante. Quando um processo utiliza todos osquantaa ele alocados, omesmo interrompido e sua classe tem a prioridade diminuda. Este algoritmo diminui o nmero decomutaes da CPU entre os processos ativos.

    Tarefas Pequenas Primeiro

    Este algoritmo designado para aplicaes no interativas, onde o tempo mdio de execuo conhecido a priori. O algoritmo define que as tarefas menores devem ser executadas primeiro.Prova-se que esta poltica minimiza o tempo mdio de espera dosJobs.

    Algoritmo Policy-Driven

    Este algoritmo particiona a CPU de forma equnime entre os usurios (no entre os processos).O algoritmo define que se existiremn usurios ligados ao sistema, e cada usurio dever receber1/ndo poder da CPU. Para isto, o sistema deve manter informaesdo tempo de CPU que cada usurioj disps desde que entrou no sistema, e do instante de tempo que cada usurio ligou-se ao sistema.

  • DCA-FEEC-UNICAMP Introduo aos Sistemas Operacionais 30

    Escalonamento em Dois Nveis

    At agora foi considerado que todos os processos residem em memria primria. Entretanto seesta memria for insuficiente, processos ativos podem ser armazenados temporariamente em mem-ria secundria (tipicamente disco). O meio mais prtico para controlar a comutao de processos definir dois nveis de escalonamento. Um escalonador de baixo nvel se restringe a troca de processosque esto na memria primria no momento. Um escalonador de alto nvel decide sobre a troca dosprocessos entre as memrias primria e secundria.

    2.3 Gerenciamento de Processos no Sistema Operacional UNIX

    No captulo 1 introduzimos o conceito de processo, como so criados e como o sistema operacio-nal os mantm. Neste captulo detalharemos mais a estruturao de processos no UNIX e apresenta-remos como processos so controlados, escalonados e se comunicam.

    2.3.1 Transies de Estado

    Na figura 1.9 apresentamos um diagrama de estados simplificado onde um processo podia se en-contrar em 4 estados: executando em modo usurio, executando em modo ncleo, pronto e bloqueado(dormindo). A rigor, um processo no UNIX apresenta 9 estados(figura 2.1):

    1. Executando em modo usurio;

    2. Executando no modo ncleo;

    3. Pronto para execuo (aguardando apenas CPU) e residindoem memria primria;

    4. Bloqueado (dormindo) e residindo em memria primria;

    5. Pronto para execuo, mas residindo em memria secundria (aguardandoswapping);

    6. Bloqueado (dormindo) e residindo em memria secundria;

    7. O processo est saindo do modo ncleo e retornando ao modo usurio, quando ocorre umamudana de contexto e o processo perde a CPU;

    8. O processo acabou de ser criado e est em transio para pronto;

    9. O processo executou umexit, no mais existe, mas seu registro mantido at que seja enviadoao processo pai seu cdigo de retorno e outras estatsticas.

    Vejamos o que tipicamente ocorre a partir da criao de um processo. Aps executado umfork ,so criados para o novo processo um campo na tabela de processos, sua rea U e apontadores parasuapregion. O processo encontra-se no estado 8. Dependendo da disponibilidade ou no de memriaprimria, o processo move-se, respectivamente, para os estados 3 ou 5. Assuma que o processodeslocou-se para o estado 3 (pronto em memria primria). O escalonador seleciona ento o processopara executar, movendo-o para o estado 2 (executando em modoncleo), onde a chamadafork ser

  • DCA-FEEC-UNICAMP Introduo aos Sistemas Operacionais 31

    escalonado

    aguardando

    evento

    evento

    Executando emModo Ncleo

    4 3

    2

    chamada de sistemaou interrupo retorno

    1

    9

    Executando emModo Usurio

    interrupo/retorno

    perda da CPU

    escalonado

    7 "Preemptado"

    Prontoem Memria

    Bloqueadoem Memria

    "swap out""swap out"

    em MemriaSecundria

    Bloqueadoem MemriaPronto

    Secundria

    "swap in"

    memria abundante

    fork8

    5

    Terminado

    evento

    memria escassa

    exit

    6

    Figura 2.1: Diagrama completo de transio de estados para processos

    completada para este processo, retornando 0. A partir da, oprocesso entra em execuo no modousurio, processando suas instrues uma a uma. Expirado seu quantumde CPU, uma interrupode relgio faz com que o processo retorne ao modo ncleo novamente. Terminado o tratamentoda interrupo, o escalonador pode decidir alocar a CPU a um outro processo, movendo este parao estado 7. Este estado equivalente ao estado 3 como mostra alinha pontilhada na figura 2.1.Esta distino feita para enfatizar que um processo tem a CPU tomada somente quando est apto aretornar para o modo usurio, diferente do estado 3 onde devevoltar ao modo ncleo para completaruma chamada de sistema.

    A eventual execuo de uma chamada de sistema faz com que o processo abandone o modousurio (estado 1) e continue sua execuco no modo ncleo (estado 2). Suponha que o processorequeira uma operao de E/S do disco. O ncleo coloca o processo no estado 4 (dormindo emmemria) at que o processo seja notificado que a operao de E/S se completou (mais precisamente,quando a operao se completa, ohardwareinterrompe a CPU, cujo tratamento da interrupo resultano acordar do processo). Se ao ser desbloqueado o processoainda estiver residindo em memriaprimria, o mesmo posto no estado 3, aguardando CPU.

  • DCA-FEEC-UNICAMP Introduo aos Sistemas Operacionais 32

    Entretanto, se durante sua permanncia no estado 4 o ncleo necessitar de espao na memriaprimria, o processo sofreswapping, sendo removido da memria primria e armazenado em mem-ria secundria (tipicamente disco). Neste caso, o processoatinge o estado 6 (dormindo em memriasecundria). Uma vez completada a operao de E/S com o processo no estado 6, este transita parao estado 5 (pronto em memria secundria). Quando oswapperescolhe o processo para aloc-lonovamente em memria primria, este volta para o estado 3.

    No estado 3, quando o escalonador volta a atribuir a CPU ao processo, o mesmo atinge o estado2 onde completa a chamada de sistema e volta ao estado 1, executando no modo usurio.

    Quando umexit executado pelo processo, o mesmo transita, via estado 2, para seu estadoterminal (9), permanecendo neste estado at que o processo pai seja notificado.

    Algumas observaes sobre o diagrama de transio de estados apresentado na figura 2.1: uma vez criado, as transies de estado de um processo dependem exclusivamente do sistemaoperacional; um processo pode forar a entrada no modo ncleo atravs da execuo de uma chamada desistema, mas a sada deste estado foge ao seu controle; um processo pode atingir o estado 9 sem explicitamente evocar um exit: traps aritmticoscomo diviso por zero e overflows, ou de segmentao como referncia a posies invlidas dememria, podem forar compulsoriamente o trmino do processo.

    2.3.2 Descritores de Processos

    A tabela de processos e a rea U descrevem o estado dos processos. A primeira uma estruturamantida pelo ncleo com os seguintes campos: o estado do processo; a localizao da rea U e do prprio processo, seja na memriaprimria ou secundria, bem

    como o tamanho do processo; o identificador do usurio (UID), isto , o dono processo; o identificador do processo (PID), nico durante toda a vida do processo; eventos aguardados pelo processo quando no estado bloqueado (dormindo); parmetros de escalonamento, utilizados para decidir quais processos transitaro entre estadosde execuo nos modos usurio e ncleo; sinais enviados ao processo, mas ainda no tratados; marcas de tempo como tempo total CPU, despertadores armados pelo processo, etc, alm derecursos consumidos do ncleo (estes parmetros so utilizados no cmputo da prioridade deescalonamento do processo).

    A rea U de um processo armazena as seguintes informaes:

  • DCA-FEEC-UNICAMP Introduo aos Sistemas Operacionais 33 um ponteiro de volta ao respectivo ndice na tabela de processos; privilgios que o processo dispe, de acordo com o seu UID; tempos de execuo nos modos usurio e ncleo; ponteiros para os gerenciadores de sinais definidos pelo processo; o terminal delogin associado ao processo, caso exista; um campo de erro, armazenando os erros gerados por chamadas de sistema; parmetros de I/O, tais como endereo de dados a serem transferidos, tamanho destes dados,destino, etc; o diretrio corrente e o diretrio raiz; descritores de arquivos abertos pelo processo; limites (tamanho mximo de pilha, arquivos, etc); permisses (modos de acesso atribuidos durante a criao dearquivos).

    2.4 Escalonamento de Processos no Unix

    O escalonamento de processos no UNIX segue um algoritmo de meio termo entre prioridadese Round Robin. necessrio enfatizar que tal algoritmo tem oobjetivo de compartilhar a CPU deforma equnime entre mltiplos usurios (sendo portanto orientada aotime-sharing). Tal algoritmo inadequado para aplicaes que requeiram o cumprimento estrito de restries temporais, comoimpostas por aquelas ditas de tempo real pesadas(hard real-time).

    O ncleo divide os processos segundo duas classes de prioridades: prioridades em modo ncleo (altas), referentes a processosbloqueados no estado 4 ou 5; prioridades em modo usurio (baixas), referentes a processos prontos no estado 7.A figura 2.2 mostra as classes de prioridades adotadas. Prioridades em modo ncleo so subdivi-

    didas em dois grupos. O primeiro grupo, de elevada prioridade, constituido de processos bloqueadosa espera deswapping, E/S em disco, buffers de cache einodes. Quando acordados, estes processoscompletam suas respectivas chamadas de sistema ininterruptamente (visando a rpida liberao derecursos do ncleo, tais como buffers).

    O segundo grupo, de prioridade mais baixa que o primeiro, constitui-se de processos bloqueadosa espera de entrada de terminal, sada em terminal e terminao de processo filho. Tais processospodem ser interrompidos, pois estes estados de bloqueio nodemandam grandes recursos do ncleo.

    Finalmente, processos aguardando apenas CPU (estado 7) sodispostos segundo um certo nme-ro de nveis de prioridade (este nmero dependente da particular implementao).

    Processos numa mesma classe de prioridade so dispostos numa fila, como representado na figura2.2 pelos crculos interligados.

  • DCA-FEEC-UNICAMP Introduo aos Sistemas Operacionais 34

    nvel de usurio N

    aguardando sada em terminal

    aguardando entrada de terminal

    aguardando inode

    aguardando buffer

    aguardando E/S em disco

    swapper

    aguardando trmino do proc. filho

    nvel de usurio 1

    nvel de usurio 0

    prioridadesem modoncleo

    em modoprioridades

    usurio

    passvel deinterrupo

    no passvelde interrupo

    em modo ncleolimiar de prioridade

    Escalonamento Round Robin

    Escalonamento por Prioridades

    processosNveis de Prioridade

    Figura 2.2: Classes de prioridades para fins de escalonamento de processos

    O algoritmo de escalonamento do UNIX processado segundo o seguinte esquema. Quandoocorre uma interrupo dohardware: caso a interrupo acorde um ou mais processos com prioridade de modo ncleo, aloque a

    CPU quele de mais alta prioridade; caso contrrio, se uma mudana de contexto se fizer necessria, aloque a CPU ao processo demais alta prioridade dentre as de modo usurio.

    Em existindo mais de um processo apto a executar no mesmo nvel, a seleo se d segundo apoltica Round Robin.

    Pode-se observar que o escalonamento de processos no UNIX sed em duas direes: por prio-ridades na vertical, e por Round Robin na horizontal (para processos de mesma prioridade). Outrascaractersticas importantes do algoritmo de escalonamento do UNIX:

    1. As prioridades no modo ncleo dependem apenas do evento aguardado pelo processo.

    2. Processos transitando do modo ncleo para o modo usurio,tem seu nvel de prioridade re-baixado em relao sua posio inicial. Esta penalidade, por utilizar recursos do ncleo,

  • DCA-FEEC-UNICAMP Introduo aos Sistemas Operacionais 35

    visa evitar o monoplio da CPU pelos processos que utilizam chamadas de sistema de formafrequente.

    3. A cada intervalo de tempo (tipicamente um segundo), as prioridades em modo usurio sorecomputadas. Processos que se utilizaram recentemente daCPU so penalizados em benefciodos processos que no a utilizaram.

    2.5 Controle de Processos no UNIX

    O controle de processos se divide em duas atividades: instanciao (criao) e interrupo deprocessos.

    2.5.1 Instanciao de Processos

    O mecanismo bsico de criao de processos no UNIX a chamadade sistemafork . A figura2.3 ilustra o que ocorre quando um processo executa esta chamada de sistema. Um novo elemento natabela de processos mantida pelo ncleo criado; a rea U criada imagem da rea U do processopai; uma tabela de regio criada com reas de pilha e dados copiadas do processo pai, e rea detexto compartilhada com o processo pai. A pilha mantida peloncleo copiado tambm.

    Como pode-se observar na figura, a cpia da rea U faz com que todos os descritores de arquivopermaneam ativos para o processo filho. A cpia das regies de dados e pilhas faz com que toda ahistria de execuo do processo pai (valores de variveis,retorno de funes, etc) seja herdada peloprocesso filho.

    Uma alternativa de instanciao de processos a famliaexecde chamadas de sistema. Uma cha-madaexecutiliza os recursos do processo que a executou para instalarum novo processo. Diferentedo fork , o processo que executa uma chamadaexecdeixa de existir.

    exec tem como parmetros o arquivo executvel e dados a serem passados ao novo processo,sendo por este obtidos na funomainatravs dos argumentosargc eargv.

    Basicamente, uma chamadaexeclibera as regies de memria relativas a texto, dados e pilhaalocadas pelo processo executor da chamada, instalando novas regies para o novo processo. Ocampo na tabela de processos mantida pelo ncleo e a regio U permanecem inalterados. A pilhamantido pelo ncleo refeito para o novo processo. Isto significa que a histria do processo antigo perdida, mas o PID e descritores de arquivo por ele abertos permanecem vlidos.7.

    Fica claro agora uma das utilidades da chamadafork : criar um novo processo sem que o processoque o criou tenha sua execuo terminada. Exemplo:

    /* */

    int pid, fd1, fd2;char arg1[16], arg2[16];...fd1 = open("arq1", O_RDONLY, 0);

    7Entretanto, a nica maneira do novo processo conhecer o valor destes descritores atravs da passagem de parmetrosvia argc eargv.

  • DCA-FEEC-UNICAMP Introduo aos Sistemas Operacionais 36

    pilha do ncleo

    dados

    diretrio raiz

    arquivos abertos

    diretrio corrente

    pilha do ncleo

    dados

    pregion

    diretrio raiz

    arquivos abertos

    diretrio corrente

    Tabela de Arquivos

    Tabela de Inodesrea U

    rea Upregion

    texto

    do filho

    do filhopilha

    do paipilha

    do pai

    (compartilhado)

    processo pai

    processo filho

    Figura 2.3: A execuo de uma chamada de sistemafork .

    fd2 = open("arq2", O_RDONLY, 0);sprintf(arg1, "%d", fd1);sprintf(arg2, "%d", fd2);pid = fork();

    if(pid == 0){ /* processo filho */execlv("prog2", arg1, arg2, NULL);/* se passar por aqui, execv falhou */printf("execlv falhou !");exit(0);}

    /* processo pai continua */

  • DCA-FEEC-UNICAMP Introduo aos Sistemas Operacionais 37

    ...

    /* */

    No exemplo acima, o programa executa umfork , deixando a cargo do filho a execuo do novoprocesso. Os descritores de arquivofd1 e fd2 so passados como argumento para o novo programa.Capturando estes argumentos, o novo programa capaz de executar operaes nos respectivos arqui-vos sem reabr-los.

    /* */

    /* prog1 */main(argc, argv)int argc;char *argv[];{int fd1, fd2;/* acessa descritores abertos pelo executor do exec */sscanf(argv[1], "%d", &fd1);sscanf(argv[2], "%d", &fd2);...}

    /* */

    2.5.2 Interrupo de Processos

    Processos no UNIX podem ter sua execuo alterada assincronamente por ao de um outroprocesso (ou do usurio, atravs doshell). Esta ao referida como o envio de um sinal. Sinaispodem ser enviados a um processo para notific-lo: de uma requisio de mudana de estado (ex: morte de um processo viakill -9 ); do trmino do processo filho; da corrncia de excees (ex: trap aritmtico); de situaes irrecuperveis (ex: recursos exauridos durante o processamento de umexec); da ocorrncia de erros inesperados (ex: utilizao de umpipequebrado); do disparo de despertadores de tempo (ex: retorno da chamadasleep); de interrupes oriundas de terminais (ex:"C); de interrupes para fins de depurao (ex: ocorrncia de umbreakpoint).

  • DCA-FEEC-UNICAMP Introduo aos Sistemas Operacionais 38

    sinal significadoSIGHUP hang-upSIGINT interrupoSIGILL instruo ilegal (trap)SIGFPE exceo aritmtica (trap)SIGKILL trmino foradoSIGSEGV violao de segmentao (trap)SIGSYS argumento invlido em chamada de sistemaSIGALRM alarme de relgioSIGSTOP suspeno da execuoSIGCONT continuao da execuoSIGCHLD mudane. status de proceso filho

    Tabela 2.1: Exemplos de sinais no UNIX System V

    Sinais so explicitamente enviados a processos atravs da chamada de sistemakill . kill tem comoparmetros o PID do processo ao qual o sinal se destina; e o tipo de sinal. Existem em torno de 30tipos de sinais no UNIX System V, sendo os mais importantes mostrados na tabela 2.1.

    Processos podem apresentar as seguintes reaes a sinais: o processo compulsoriamente terminado; o processo bloqueado at a ocorrncia de um sinal de desbloqueio; o processo ignora o sinal; o processo captura o sinal.Sinais so armazenados na tabela de processos mantida pelo ncleo, sendo a ao correspondente

    ao sinal tomada quando o processo passa da execuo de modo ncleo para modo usurio.Para cada sinal definido um comportamentodefaultpara o proceso que o recebe. Em geral, este

    comportamente simplesmente o trmino do processo. Um processo pode alterar o comportamentodefault frente a ocorrncia de um dado sinal atravs da chamada de sistemasignal. signal possuidois parmetros: o nmero do sinal (definido emsignal.h); e a ao a ser executada quando dorecebimento deste sinal. A ao pode possuir trs valores:

    0 : o processo terminado quando receber o sinal;

    1 : o sinal ignorado;

    endereo vlido de funo: A funo chamada assincronamente quando da ocorrncia dosinal.Esta funo ditagerenciador do sinalpara o processo.

    Exemplo: capturar interrupes de teclado. Quando o usurio executa um"C, um sinal do tipoSIGINT enviado ao processo que est executando emforeground. O comportamentodefaultparaeste sinal o trmino do processo. Suponha um programador precavido que deseje a confirmao

  • DCA-FEEC-UNICAMP Introduo aos Sistemas Operacionais 39

    que o"C no foi acidental. O cdigo abaixo ilustra esta situao:/* */

    /* gerenciador para SIGINT */int ger(){int c;printf("Tem certeza que quer abortar [s/n] ? ");c = getchar();if(c == s) exit(0);}

    main(){signal(SIGINT, ger);...}

    /* */

    Todas as vezes que um SIGINT for enviado ao processo, a funoger chamada assincronamente,solicitando confirmao do trmino da execuo. Caso o usurio responda n, a funo retorna e oprograma continua normalmente.

    A maneira como o ncleo processa sinais descrita sucintamente a seguir. Quando um sinal enviado a um processo (pelo ncleo ou por outro processo), o ncleo simplesmente ativa o campocorrespondente ao sinal na tabela de processos. Neste campoest localizado tambm o gerenciadordo sinal (definido pelo processo oudefault).

    No momento que um processo passa do modo ncleo para o modo usurio, o ncleo verifica seexiste sinais enviados ao processo e ainda no tratados. Caso exista, o ncleo executa os seguintespassos:

    1. Salva o contador de programa e ostack pointerdo processo.

    2. Caso o processo no defina um gerenciador para o sinal, executa a aodefault. Caso contrrio,prossiga.

    3. Associa temporariamente a aodefaultpara o sinal.

    4. Cria um novo quadro na pilha como se o processo estivesse evocando o gerenciador nestemomento.

    5. Direciona o contador de programa para o endereo da rotinagerenciadora do sinal e atualiza ostack pointerpara levar em conta o aumento da pilha causado pela chamada dogerenciador.

  • DCA-FEEC-UNICAMP Introduo aos Sistemas Operacionais 40

    O passo 3 merece um comentrio adicional. Ele existe para evitar que uma rajada de sinais oca-sione umstack overflowpelo empilhamento de mltiplas chamadas do gerenciador (caso o intervalode ocorrncia dos sinais seja menor que o tempo de execuo dogerenciador). Entretanto, durantea execuo da rotina gerenciadora, o processo fica numa condio vulnervel, pois a aodefaultque ser executada face a ocorrncia de um novo sinal de mesmotipo.

    2.6 Comunicao e Sincronizao Inter-processos no UNIX

    Nesta seo descreveremos trs mecanismos de comunicao inter-processos (pipes, mensagense memria compartilhada), e um de sincronizao inter-processos (semforos).Pipesso disponveisem qualquer verso de UNIX, enquanto os demais esto presentes apenas nas verses compatveiscom o System V.

    2.6.1 Pipes

    O mecanismo original de comunicao inter-processos so oschamadospipes. Em geral,pipesso empregados para estabelecer comunicao entre processos pai e filho. Umpipe um canalunidirecional de comunicao, isto , a informao flui numanica direo. Para estabelecer-secomunicao bidirecional, so necessrios doispipes.

    Pipespodem ser vistos como um buffer conectando dois processos. Um processo escreve dadosnum dos lados do buffer, enquanto o outro l estes dados no lado oposto. Esta forma de comunicaopode ser obtida com o emprego de arquivos em disco. A diferena bsica quepipesso bloqueantes,isto , a gravao em umpipecheio ou a leitura em umpipevazio causa o bloqueio do processo.

    Pipesso implementados pelo ncleo como um sistema de arquivos. Cadapipe tem uminodeassociado, sendo que o ncleo aloca blocos de dados medida que dados vo sendo escritos nopipe(desalocando-os medida que so lidos).

    Pipesso criados com a chamada de sistemapipe. A chamada retorna dois descritores de arqui-vos, sendo o primeiro para leitura e o segundo para gravao.Esta chamada, em geral, se processaantes de ocorrer umfork . Se a comunicao for no sentido pai! filho, o processo pai fecha o pri-meiro descritor (com a chamadaclose), e o filho o segundo. A partir da, o pai executa chamadaswrite no segundo descritor e o filhoread no primeiro. Um segundopipepode ser empregado paraa comunicao no sentido inverso, atentando-se para o fechamento correto dos descritores que nosero empregados pelo processo.

    Aps o final da sesso de comunicao, os lados abertos dopipe tambm so fechados a fim deliberar os recursos a ele associados pelo ncleo.

    Exemplo: enviar um string do processo pai para o processo filho.

    /* */

    main{}{int fd[2];char buff[32];

  • DCA-FEEC-UNICAMP Introduo aos Sistemas Operacionais 41

    if(pipe(fd) == -1) {perror("pipe"); exit(0);}

    if(fork() != 0){ /* PAI */close(fd[0]);strcpy(buff, "oi filho !");write(fd[1], buff, strlen(buff) + 1);close(fd[1]);exit(0);}

    else{ /* FILHO */close(fd[1]);read(fd[0], buff, 32);printf("%s", buff);close(fd[0]);exit(0);}

    /* */

    2.6.2 Mensagens

    Troca de mensagens um mecanismo de comunicao mais flexvel que pipes. Enquanto umpipe um canal sncrono e unidirecional, mensagens so canais tanto sncronos quanto assncronose bidirecionais.

    Para o envio e recepo de mensagens, cria-se umport de comunio.Portsso identificados porum nmero inteiro. A chamada de sistemamsggetcria umport, retornando seu identificador local. Oprimeiro parmetro uma chave atribuida aoport, seu identificador global. O segundo parmetro soopes relativas a criao, acesso, etc. Via de regra,msggetretorna umport dado seu identificadorglobal, criando-o caso talport inexista.

    O ncleo mantm uma tabela deports, e mensagens enviadas aports so enfileiradas, sendorecebidas na ordem que foram enviadas. A comunicao bidirecional, posto que, de posse de umidentificador local deport, um processo pode tanto enviar quanto receber mensagens neste port.

    Mensagens so enviadas com a chamada de sistemamsgsnd. A chamada possui quatro par-metros: o identificador doport para o qual a mensagem deve ser enviada; a estrutura que contm amensagem; seu tamanho em bytes; e a opo de envio assncrono(retornando um cdigo de erro casono exista espao para o ncleo armazenar a mensagem noport). A opodefault o envio sncrono,onde o processo bloqueia ante a impossibilidade de armazenamento da mensagem noport.

    Estruturas contendo mensagens devem ser definidas comostructscontendo dois campos: uminteiro (tipo da mensagem); e uma cadeia de bytes (o contedoda mensagem). Exemplo:

    struct mensagem {int tipo; /* tipo da mensagem */

  • DCA-FEEC-UNICAMP Introduo aos Sistemas Operacionais 42

    char conteudo[1024]; /* conteudo da mensagem (1K max.) */};

    A recepo de mensagens se d atravs da chamada de sistemamsgrcv. Cinco parmetros sonecessrios: o identificador local doport; a estrutura onde a mensagem ser copiada; o tamanhomximo em bytes alocados pela estrutura; o tipo de mensagem desejada; e opo de recebimentoassncrono (retornando um cdigo de erro caso oport no contenha mensagem do tipo especificado).

    Uma quarta chamada de sistema,msgctl, empregada para obter e alterar o status deports.Possui trs parmetros: o identificador local doport; o tipo de operao e o endereo da estruturacom as informaes de entrada ou retorno, de acordo com a aoexplicitada no segundo parmetro.

    2.6.3 Memria Compartilhada

    Uma outra forma de comunicao disponvel no UNIX o compartilhamento de um espaovirtual. Este espao criado via chamada de sistemashmget. shmgetpossui trs parmetros: umidentificador global da regio compartilhada, o tamanho da regio em bytes; e opes de controle(criao e acesso). Comomsgget, esta chamada retorna um identificador local da regio, criando-acaso inexista.

    Uma vez acessada, um processo associa a regio compartilhada em seu prprio espao de ende-reamento. Para tal, utiliza-se a chamada de sistemashmat que possui trs parmetros: o identifi-cador local da regio compartilhada, o endereo local que apontar para a regio; e parmetros decontrole (se a regio deve ser considerada de leitura apenas, por exemplo).

    O procedimento inverso, isto , a desassociao de uma regio compartilhada de um enderea-mento local se d com a chamada de sistemashmdt. Esta chamada possui um nico parmetro: oendereo local previamente associado a uma regio compartilhada.

    Finalmente, a chamadashmctl empregada para obter e alterar o status de uma regio comparti-lhada (permisses, desativao, etc). similar amsgctl.

    Deve-se observar que o mecanismo de memria compartilhada no necessita operaes especiaispara a manipulao de dados. Como a regio mapeada num endereo local, leituras e escritas nesteendereo se processam com os comandos de associao e cpia binria providos pelas linguagem C.

    Deve-se observar ainda, que este mecanismo de comunicao sempre assncrono, e pode su-portar comunicao do tipo de-um-para