Você está na página 1de 74

CAP: 1 INTRODUO 1.1.

. Objectivos dos Sistemas Operativos O objectivo deste texto procurar descrever a estrutura dos SO de forma a que constituam uma ferramenta de que se conheam no s o modo de utilizao mas tambm os detalhes de implementao. Para que servem os SO? Porque se tornaram indispensveis? 2 motivos histricos: - Transformar um conjunto diversificado de circuitos electrnicos, discos e perifricos numa mquina simples de utilizar. - Obter o mximo rendimento do hardware atravs da sua utilizao para o processamento de um grande conjunto de actividades. O SO procura tambm apresentar ao utilizador uma interface coerente que trata, de modo uniforme, aces sobre entidades semelhantes. Outro aspecto relevante a garantia de fiabilidade e segurana O SO pode pois ser considerado como uma camada de software que virtualiza o hardware de base, transformando-o numa outra mquina com primitivas prprias, normalmente muito mais prximas das aces que o utilizador vulgar pretende ver executadas pelo computador. O segundo princpio enunciado, no mais que o clssico princpio da optimizao de custo. Na histria h SO que tentaram ser atingir objectivos to ambiciosos que se tornaram ineficientes. Os compromissos desempenho/modularidade/fiabilidade so extremamente complexos, constituindo um dos pontos mais delicados na definio da arquitectura de um SO. 1.2. Evoluo Histrica Os 1s sistemas informticos (anos 50) no dispunham de SO. 1.2.1. Monitor de Controlo A primeira aproximao foi o programa utilitrio Monitor, que permitia ao utilizador carregar os seus programas em memria, edit-los e verificar a sua execuo. A gesto era muito simples e consistia em atribuir a cada utilizador quotas de tempo de utilizao da mquina. Um monitor tpico constitudo por rotinas utilitrias que facilitam a interaco (operao) com a mquina: - Interpretador de uma linguagem de comendo que permite fazer executar os restantes mdulos - Compilador - Tradutor de linguagem simblica (Assembler) - Editor de Ligaes (linker) - Carregador de programas em memria (Loader) - Rotinas Utilitrias para o controlo de perifricos: consola; leitor de cartes; leitor/perfurador de fita de papel; bandas magnticas. bvia a ineficincia desta gesto: Durante a maior parte do tempo o processador est inactivo. 1.2.2. Tratamento em Lotes (Batch) No tipo de gesto atrs descrito, o tempo de execuo de um programa predominantemente determinado pelas suas E/S. Uma soluo consistiu em efectuar a recolha dos dados num computador auxiliar onde eram lidos, para uma banda, os cartes dos diversos trabalhos. Este processo dos anos 50 rapidamente evoluiu: os perifricos comeara a poder executar operaes autnomas e avisando o processador por meio de interrupts (grande inovao esta de notificao assncrona do processador). Simultaneamente os dispositivos de armazenamento tambm evoluram e passaram de meros sequenciais para acesso aleatrio (tambores, discos). O sistema anterior permite a introduo de mecanismos de optimizao na gesto da mquina, escolhendo o prximo programa a ser executado de acordo com um dado critrio de prioridade. Por exemplo se nos cartes houver a indicao de durao mxima, recursos ocupados, etc., pode implementar-se uma poltica que beneficie os trabalhos mais curtos ou menos exigentes em recursos. Em paralelo com estes desenvolvimentos comeou a fazer sentir-se a necessidade de tornar eficiente o funcionamento dos compiladores.

1.2.3. Multiprogramao Os mecanismos de interrupo permitem multiplexar o processador entre diversas actividade executadas concorrentemente pode ser alargado para vrios programas utilizadores em memria, em vez de s um. Isso permite optimizar a utilizao da unidade central. Ex. uma operao de acesso ao disco pode ser executada em paralelo por rotinas do sistema que gerem uma interface de hardware, normalmente designada por controlador de disco. O tempo para a leitura (mecnica lenta) pode ser usado por outro programa --> vrios programas simultaneamente activos. Agora, isto s eficaz se os diversos programas residirem na memria central, para mudana rpida de contexto. Mas como memria cara, h hierarquizao de memria que permita, quando necessrio, carregar novo programa e guardar na memria secundria alguns bloqueados (swapping tem implicaes profundas sobre toda a estrutura dos programas --> o cdigo deve ser recolocvel). 1.2.4. Sistemas Interactivos Sistemas transaccionais. Em lugar de ser obrigado a esperar por um programa submetido ao tradicional sistema de lotes, o utilizador passou a desfrutar de uma mquina virtual, que lhe permite aceder ao sistema central sempre sua disposio. A multiplexagem entre vrios utilizadores impe a diviso do tempo disponvel do processador entre os diferentes utentes. Os sistemas interactivos obrigaram a uma profunda reformulao dos conceitos nos SO, conferindo grande importncia a conceitos at a secundrios, como: sistema de ficheiros, a proteco, a linguagem de interaco com o sistema. 1.2.5. Memria Virtual Limites levaram a evoluo do hardware de gesto de endereos que permitiu um avano significativo que consistiu na possibilidade de trabalhar sobre um espao de endereamento virtual de dimenses muito superiores e independente da memria fsica existente na mquina. O programador ficava liberto das preocupaes de gesto do espao ocupado pelas suas aplicaes e, simultaneamente, o sistema podia gerir mais eficientemente a memria fsica disponvel. A existncia de memria virtual revolucionou os mecanismos de proteco, comunicao e gerao de cdigo, constituindo uma das etapas significativas da evoluo dos SO. 1.2.6. Sistemas Distribudos Apareceram na sequncia do desenvolvimento dos mecanismos de interligao de computadores. O aumento de velocidade e elevada fiabilidade das redes locais de computadores permitiram distribuir e gerir em conjunto os recursos de diversas mquinas. Novas questes de coerncia da informao e de desempenho surgiram nestes sistemas. 1.3. Tipos de Sistemas Operativos Na gama mais barata predominam os sistemas mono-utilizadores muito simples (CPM da Digita, MS-DOS da Microsoft). Na franja seguinte predomina o sistema UNIX, que se foi impondo como norma nos sistemas multiprogramados para equipamentos de mdio porte. Os equipamentos mais complexos possuem geralmente SO proprietrios. Todos eles pertencem a uma mesma categoria Tempo Virtual, dado que o tempo de execuo dos programas no tem relao com o tempo cronolgico exterior mquina (job-shop). Os sistemas onde a noo do tempo relevante so normalmente designados por Tempo Real. Tm por objectivo conseguir que o computador produza uma resposta a um acontecimento externo ao fim de um intervalo de tempo limitado e previamente especificado. H vrias gradaes. Os transaccionais tambm se pode aqui englobar. 1.4. Arquitectura do Sistema Operativo

O SO pode ser considerado como um programa de grande complexidade, responsvel pela gesto eficiente de todos os recursos da mquina, o que implica uma abordagem estruturada na sua concepo. Uma tcnica habitualmente usada a da decomposio em camadas funcionais. Cada camada constitui um nvel de abstraco que implementa uma mquina virtual com uma interface bem definida. Sobre esta mquina pode constituir-se outra que utiliza os servios da camada precedente para implementar o prximo nvel de abstraco. cada camada encapsula a implementao dos nveis inferiores fazendo que seja possvel modific-los sem afectar as camadas exteriores. Numa descrio resumida, cada um dos nveis implementa as seguinte funes: - Gesto de Processos: multiplexa a mquina fsica entre um conjunto de entidades lgicas que designaremos por processos. Cada processo pode ser visto como uma mquina virtual que executa um programa. So ainda tratados os mecanismos de baixo nvel que permitem interactuar com o hardware do processador, nomeadamente as interrupes. - Gesto de Memria: Controla a utilizao da memria fsica. A gesto da memria virtual e todos os algoritmos associados manipulao do espao de endereamento dos processos so executados neste nvel. - Comunicao e Entradas/Sadas: Os processos necessitam de comunicar para poderem gerir recursos comuns ou controlar a execuo das aplicaes. Na comunicao podem tambm ser consideradas as operaes de E/S com o exterior da mquina. Apesar da implementao de E/S ser complexa, dado que interactuam com o hardware dos dispositivos, a sua estrutura interna e interface apresentam numerosas semelhanas com os restantes mecanismos de comunicao. - Sistema de Ficheiros: Podia-se considerar caso particular do anterior mas no assim, pois nos sistemas actuais a gesto da informao na memria de massas adquiriu uma importncia fundamental na estrutura da programao e utilizao dos computadores. A gesto de ficheiros responsvel pela implementao eficiente de uma organizao lgica que virtualiza os dispositivos de memria de massa. - Interface Sistema: divide-se em 2 partes: - Funes Sistema: Constituem a interface dos servios providenciados pelas camadas internas. So agrupadas em bibliotecas de rotinas, que podem ser ligadas com os programas dos utilizadores para poderem aceder aos mecanismos sistema. - Interpretador de Comandos: na realidade uma aplicao fornecida com os sistema para facilitar a sua utilizao. Podem encadear-se comandos, numa autntica linguagem de controlo. Este modelo de implementao no faz referncia a alguns aspectos que, por serem gerais no se enquadram em nenhum dos nveis: - Optimizao da Utilizao do Sistema (Scheduling). Embora geralmente se associe gesto eficiente do processador, relaciona-se com todos os nveis, nomeadamente a gesto de memria e E/S. - Mecanismos de Proteco, tambm presentes em todos os nveis: Para no se poder realizar operaes que ponham em risco o sistema ou interactuem indevidamente com outros processos. 1.5. Modelo Computacional Olhar para o SO na perspectiva do programador, abstraindo dos detalhes de implementao dos mecanismos que o compes. Modelo Computacional o conjunto dos objectos do sistema operativo e as operaes que os permitem manipular. Pragmaticamente pode ser considerado como o conjunto de funes sistema que o programador dispe para o desenvolvimento das aplicaes e que lhe possibilitam estender a capacidade das linguagens de programao sequenciais. Quando se entra em aplicaes complexas preciso utilizar as facilidades oferecidas pelos SO para obter desempenho, interactividade, paralelismo de que numerosas aplicaes necessitam. Por exemplo gesto dos perifricos. outro ex. reservas de bilhetes de avio paralelismo, com coerncia dos dados --> processos envolvidos consigam comunicar e sincronizar-se. O modelo computacional para o sistema operativo tem na programao concorrente a mesma funo que o modelo proporcionado pelas linguagens de alto nvel para a programao de

sequencial. Fornece aos utilizadores um quadro de referncia que facilita a concepo, teste e transporte dos programas. A necessidade de criar mecanismos para a programao sistema que se tornem independentes dos SO motivou o aparecimento de numerosas propostas de extenso das linguagens de programao.

CAP. 2 A GESTO DOS PROCESSOS O modo como se implementa o paralelismo um dos conceitos fundamentais na compreenso dos SO. O paralelismo no pode ser entendido restritamente pois as mquinas s tm um processador. Analogia com secretrias. O paralelismo no SO deve ser considerado de um ponto de vista macroscpico. Os sistemas com mltiplas actividades paralelas so designados, na terminologia dos SO, por sistemas concorrentes. A concorrncia advm da existncia de diversos fluxos de actividade que vo disputar o acesso aos recursos do sistema, evidentemente limitados, como por ex. leitor de bandas magnticas, memria central, disco, processador. A multiplexagem do processador feita internamente com critrios perfeitamente bem definidos. Contudo, a nvel de utilizador este determinismo no visvel. O no determinismo no modo como feita a multiplexagem do processador uma caracterstica fundamental a ter em conta na utilizao do modelo computacional. Execues diferentes do mesmo programa sero sempre diferentes. A capacidade que o sistema tem de esconder do utilizador todos os detalhes relativos gesto do processador permite a criao do conceito de processo como unidade abstracta, o que de extrema importncia, pois de outra forma o programador teria de considerar todos os acontecimentos existentes no sistema aquando da programao. 2.2. Processador, Processo, Programa Processador o rgo material donde emana toda a actividade do sistema Processo a entidade activa no sistema. Executa um conjunto de aces que so determinadas por um programa. Programa uma sequncia de instrues sem actividade prpria. Um processo pode, durante a sua vida, executar diversos programas e um programa ou partes de um programa podem ser partilhados por vrios processos. Um processo estabelece um ambiente de execuo para o programa mquina virtual. O processo define: - Conjunto de operaes - Operaes elementares proporcionados pelo hardware - Operaes de interaco com as outras mquinas virtuais (sincronizao e comunicao com outros processos) - Um espao de endereamento A restrio do reportrio de instrues e o confinamento dos processos a espaos de endereamento limitados so a base dos mecanismos de proteco que o SO implementa. Em cada instante o processo encontra-se numa determinada etapa de execuo. Na comutao de um processo necessrio garantir que o seu estado de execuo memorizado de modo a que, mais tarde, possa ser retomada a execuo no ponto onde foi interrompida. Associado a cada processo existe um vector de estado ou contexto que mantm toda a informao de que o SO precisa para o retomar. A semelhana com mquina virtual mantm-se. O contexto o paralelo dos habituais registos de estado que controlam a execuo do processador. No contexto memorizada a informao relacionada com o processador e com o ambiente de software no qual o processo se executa. A informao relativa ao processador mantida no contexto, vulgarmente designado de hardware, que depende da arquitectura da mquina e que ser analisado no prximo captulo. (TF1_2001-I-a) quais as informaes que fazem parte do contexto hardware de um processo. O contexto de software contm informaes que permitem gerir os recursos do sistema e conhecer os atribudos a um processo: - Identificao do processo e do utilizador - Prioridade - Estado do processo - Perifricos utilizados - Ficheiros abertos

- Programa em execuo - Directoria actual e por omisso - Cotas de utilizao de recursos - Contabilizao da utilizao de recursos 2.3. Os Processos no Modelo Computacional A criao e a eliminao de processos so funes indispensveis no modelo computacional. Geralmente os processos organizam-se com uma hierarquia, a partir de um processo pai, o que se traduz por informaes que so mantidas no contexto dos processos. A forma da hierarquia varia de sistema para sistema. Por ex. em alguns sistemas a terminao de um processo elimina todos os seus filhos, noutros os filhos mantm-se activos. A funo de criao de um processo pode ser utilizada para a definio de um conjunto de informaes que especificam o ambiente de execuo do processo e que so mantidas no seu contexto de software. A estrutura hierrquica facilita a funo de criao, dado que grande parte do ambiente de execuo pode ser herdada do contexto do pai. Os parmetros da funo de criao variam muito de sistema para sistema. Um dos parmetros a especificar pelo utilizador o programa a executar sob forma de um ficheiro que contm o cdigo binrio ou, nos sistemas mais simples, o endereo da posio de memria onde se encontra a primeira instruo executvel. No nosso modelo computacional didctico: IdProcesso := CriarProc (<Ficheiro Executvel>, Prioridade) EliminarProc (IdProcesso) So rotinas de sistema. 2.4. A Funo dos Mecanismos de Sincronizao Determinadas aplicaes s podem ser eficientemente implementadas quando suportadas por diversas actividades independentes. Existem diversos motivos que justificam a necessidade de sincronizar explicitamente a actividade dos processos: Cooperao para executar aplicao comum. A situao mais simples a de um processo que s pode prosseguir depois de outro ter executado determinada operao. Exemplo da reserva de bilhetes: h o processo que dialoga com o utilizador e o processo que gere a estrutura de dados. Os mecanismos de sincronizao devem permitir que um processo se bloqueie espera de um acontecimento que lhe ser assinalado implicitamente quando for desbloqueado. Competio por um recurso ex. perifrico que deve ser usado em exclusividade, ficheiro onde se pretende escrever, Gesto de Memria, visto esta ser finita. Os processo que no disponham de recursos para prosseguir tm de ser bloqueados num mecanismo de sincronizao at que a condio de bloqueio deixe de ser vlida. Excluso Mtua A necessidade de excluso no to bvia como as anteriores tendo origem no mecanismo de multiplexagem do processador que suporta a execuo dos processos. Ex. varivel que pode ser acessada por vrios processos, pode gerar inconsistncia num processo pois foi alterada do exterior. Na programao concorrente a utilizao de variveis partilhadas implica precaues suplementares que obrigam a sincronizar os processos que as pretendem modificar. A excluso mtua pode ser considerado um caso particular da competio por um recurso a estrutura de dados. 2.5. Excluso Mtua Vamos ver com um ex. de algoritmo simples de atribuio de blocos de memria, que suportado por uma estrutura de dados implementada por uma pilha, composta por registos que indicam o endereo inicial do bloco livre e o tamanho. Para pedir um bloco de memria, um processo executa a rotina PedeMem que tem como parmetro de sada o descritor do bloco. Para devolver DevolveMem. Pilha implementada por vector de descritores indexado por varivel que referencia primeiro bloco livre. Pilha e Topo so

variveis privadas do programa Distribuidor s quais os processo utilizadores no tm acesso e que so convenientemente inicializadas no arranque do sistema. type Descritor = record Inicio : endereo; Tamanho : integer end; var Pilha : array [1..N] of Descritor; Topo : 0..N; procedure PedeMem (var Desc : Descritor; var Estado : boolean); begin if Topo <> 0 then begin Desc := Pilha [Topo]; Topo := Topo-1; Estado := true end else Estado := false end; {PedeMem} procedure DevolveMem (Desc : Descritor); begin if Topo < N then begin Topo := Topo + 1; Pilha [Topo] := Desc end end; {DevolveMem} Aparentemente funciona, mas se um processo inicia a devoluo de memria, mas que devido a uma interrupo lhe retirado o processador. Consideremos ainda que o processo que se executa em seguida pretende pedir memria. D erro: o endereo do bloco de memria que o processo B obtm invlido. O processo A apenas tinha incrementado a varivel topo e no tina ainda actualizado o descritor que ela passou a referenciar. Erro difcil de detectar. O erro advm de a varivel Topo no estar coerente com o estado da tabela Pilha. As duas variveis representam o estado global do Distribuidor de Memria e a sua modificao no foi feita de forma indivisvel, conduzindo a que o estado da pilha seja incoerente. Conclumos que a manipulao de estruturas de dados partilhadas deve ser realizada de forma atmica. A expresso Seco Crtica usada para designar este conceito. 2.5.1. Solues Algortmicas Com apenas 2 processos no sistema poderamos usar uma soluo algortmica baseada numa varivel de controlo que indique a situao da seco crtica (acessvel ou inacessvel). A varivel deve ser posicionada no prembulo da seco crtica e colocada no estado que permita o acesso a outros processos no final. Nota: Vamos usar uma rotina de sistema CriarProc em que dado como parmetro um procedimento. Os processos assim criados podem aceder s variveis globais declaradas no programa principal. uma extenso aos SO comerciais que veremos no cap. 15. O algoritmo baseia-se na existncia de uma varivel (Nproc) que permite a entrada de um dos processos na seco crtica, ficando o outro em ciclo at que a varivel lhe permita prosseguir. Esta soluo enferma de um defeito bvio, os processos apenas podero aceder alternadamente seco crtica. type

O programa pode ser alterado para resolver este problema. A figura seguinte mostra a soluo proposta por Dekker que resolve o problema de forma elegante: o processo comea por manifestar o seu desejo de aceder seco crtica, testando, em seguida, se o outro processo tambm est a tentar aceder. Caso tal no suceda, executar a seco crtica. No caso de tentativa simultnea o processo entra num ciclo controlado pela varivel que exprime o desejo de entrada do processo concorrente. A deciso efectuada pela varivel ProcPrioritario que permite escolher entre os dois processos que concorrem para entrar na seco. Se o processo rival for o privilegiado, retira o seu pedido (para permitir a entrada do outro) e fica espera da libertao do recurso. A varivel ProcPrioritario alternada, no final do acesso, para garantir igualdade. type A generalizao a N processos difcil. Lamport props uma soluo baseada na atribuio a cada processo de um nmero de acesso (senha) que permite sequenci-los (Bakery Algorithm sistemas distribudos e centralizados). O algoritmo baseia-se em 2 vectores. O 1 memoriza o nmero da senha atribuda ao processo, o segundo indica se o processo est a pretender que lhe seja atribuda uma senha. Antes de aceder seco, o processo executa a funo Max, que devolve uma senha superior a todas as j distribudas. Devido concorrncia 2 processo podero receber nmeros idnticos. Depois de atribuda a senha, o processo efectua um ciclo para determinar se o seu n de ordem inferior ao de todos os outros processos. O algoritmo baseia-se no varrimento da tabela de senhas tendo o cuidado de evitar comparaes com os processos que esto no processo de atribuio (Escolha = true). A funo Compara resolve o caso de senhas idnticas usando o n de ordem do processo. 2.5.2. Trinco Lgico As solues apresentadas so complexas para o programador que apenas quer garantir a excluso mtua. Acresce que em Pascal instrues do tipo A:=B[i+1] traduzem-se em vrias instrues mquina interrompveis individualmente. Incorporar no modelo computacional do SO os mecanismos necessrios para implementao da excluso mtua uma alternativa muito mais simples e eficaz. Uma soluo bvia considerar uma varivel que funcione como trinco lgico da estrutura de dados. O trinco fechado quando se acede estrutura e libertado quando se sai. Qualquer processo que pretenda aceder estrutura protegida deve testar em primeiro lugar o valor do trinco e apenas prosseguir se o encontrar livre. Se estiver fechado o processo fica em ciclo at o trinco ser libertado. O trinco (lock) manipulado por duas primitivas: Fechar (Lock) e Abrir (Unlock) implementadas pelo SO como se segue. Tem de ser inicializado convenientemente (aberto) no arranque. procedure Mesmo assim h a possibilidade de a seco crtica no ser respeitada. 2.6. Semforos As primitivas Abrir e Fechar comportam elevado grau de ineficincia. Consideremos a hiptese de ser retirado o processador a um processo que entrou na seco crtica. Neste caso o trinco permanece aferrolhado e qualquer outro processo que pretenda aceder seco vai manter-se a testar a varivel do trinco durante todo o tempo que lhe foi atribudo para utilizao do processador, apesar da libertao do trinco depender de um processo que, nesse momento, no poder obviamente estar a usar o processador. Chama-se a isto espera activa. Para evitar isso o processo que espera a libertao de um recurso deve ser bloqueado (novo estado em que processo pode estar), ficando memorizado no sistema a razo que motivou o bloqueio.

At agora tnhamos Em Execuo e Executvel (esperando oportunidade de dispor do processador). No Bloqueado o processo retirado da lista dos que concorrem pelo processador. O contexto colocado numa outra lista, espera de um determinado acontecimento. O conceito semforo implementa um mecanismo de sincronizao sem espera activa, tornando-se assim a ferramenta de base da sincronizao. Exame 2 poca-2000/2001 25/10/2001 Um semforo constitudo por uma estrutura de dados composta por uma varivel de controlo (normalmente inteiro: positivo indica que pode continuar execuo, negativo ou nulo, o processo fora o bloqueio do processo) e por uma fila de espera destinada a conter os descritores dos processos bloqueados. Exame 2 poca-2000/2001 25/10/2001 Bloquear um processo significa retir-lo de execuo, salvaguardar o seu contexto, marcar o seu estado como bloqueado e colocar o contexto na fila de espera (normalmente FIFO, mas tambm pode ser por prioridades) do semforo. Desbloquear tir-lo da fila de espera do semforo, modificar o seu estado para executvel e transferi-lo para a fila dos processos executveis. O processo continua quando o despacho o seleccionar. O semforo manipulado por 2 primitivas (wait e signal / Esperar e Assinalar). O trinco prximo do hardware o semforo do software. necessrio que as variveis do semforo sejam protegidas contra a escrita (excepto as primitivas, claro). Ento os semforos devem ser objectos de sistema com a necessria proteco. So, alis, parte integrante do ncleo do SO que multiplexa o processador. Para implementar seco crtica a varivel deve ser inicializada a 1. Operaes sobre semforos type Semaforo = record Int : integer; PRT : ApontadDescProc {apontador para descritor de processo} end; procedure Esperar (var S:Semaforo); begin S.Int := S.Int 1; if S.Int < 0 then begin < Bloquear o Processo e Inclu-lo na Fila dos Processos Bloqueados > end end; procedure Assinalar (var S: Semaforo); begin S.Int := S.Int + 1; if S.Int <= 0 then begin < Retirar um Processo e Transferi-lo para a Fila dos Processos Executveis > end end; Distribuidor de Memria Implementado com Semforos procedure PedeMem (var Desc : Descritor; var Estado : boolean); begin Esperar (SemExMut); if Topo <> 0 then begin

Desc := Pilha [Topo]; Topo := Topo 1; Estado := true; end else Estado := false; Assinalar (SemExMut) end; {PedeMem} procedure DevolveMem (Desc : Descritor); begin Esperar (SemExMut); Topo := Topo + 1; Pilha [Topo] := Desc; Assinalar (SemExMut) end; {DevolveMem} 2.7. Gesto de Recursos A excluso mtua um caso particular de competio para um recurso nico. O Distribuidor de memria fornece-nos outro exemplo de competio que resulta do n de blocos de memria ser finito. Tambm se pode usar semforo, para garantir que quando a pilha se encontre vazia o processo seja bloqueado at haver um bloco livre. A inicializao da varivel permite controlar o n de vezes que o procedimento Esperar pode ser chamado (sem Assinalar nenhum) sem conduzir a bloqueios: Distribuidor de Memria Semforo para controlo dos blocos de memria disponveis procedure PedeMem (var Desc : Descritor); begin Esperar (Memoria); Esperar (SemExMut); Desc := Pilha[Topo]; Topo := Topo-1; Assinalar (SemExMut) end; procedure DevolveMem (Desc : Descritor); begin Esperar (SemExMut); Topo := Topo+1; Pilha [Topo] := Desc; Assinalar (SemExMut); Assinalar (Memoria); end; {Inicializao dos Semforos} SemExMut := CriarSemaforo (1); Memoria := Criar (Nmax); A varivel, em cada momento indica o n de blocos livre. Memoria = Valor Inicial + N DevolveMem N PedeMem importante perceber que a ordem das operaes Esperar (Memria) e Esperar (SemExMut) a nica possvel dado que a ordem inversa poderia conduzir a bloqueio permanente. Da o grande cuidado que preciso para programar com semforos independentes. Neste caso o sistema no tem maneia de saber que o bloqueio do processo no semforo Memria elimina a necessidade de manter a seco crtica fechada.

2.8. Cooperao Entre Processos Na sua forma mais simples consiste em bloquear um processo Pi at que um processo Pj lhe assinale que uma determinada aco ou acontecimento se produziu. Para sincronizar os 2 processos necessrio dispor de um mecanismo independente da velocidade de execuo que permita a um processo activo: - Bloquear-se espera de um sinal a ser emitido por outro processo - Activar um processo bloqueado 2.8.1. Sincronizao Directa A aco directa sobre o estado de um processo o mecanismo mais simples de sincronizao. Primitivas (Suspender, Acordar). H pois uma nova fila de espera onde o processo pode ser colocado. Na directa h que conhecer o identificador do processo sobre o qual se pretende actuar. Este processo no pode ser geral por duas razes: 1- No se pode dar aos programas do utilizador (sempre suspeitos) a possibilidade de interferir com utilizadores ou mesmo com o SO. Uma restrio habitual s permitir aos processos relacionados hierarquicamente (normalmente dom mesmo utilizador). 2- de ordem lgica. na definio do algoritmo de um processo possvel saber que este ir interactuar com outro, mas desconhecer a sua identidade que apenas ser definida durante a execuo. Ex. marcao de bilhetes... pouco flexvel mas por vezes necessrio. Ex. processo sistema para agrupar blocos de memria. S pode ser executada directamente pois no possvel prever onde colocar, no cdigo dos processos, os pontos de sincronizao. 2.8.2. Sincronizao Indirecta Tem a vantagem de garantir a igualdade de tratamento a todos os processos com os mesmos privilgios. Tem 2 categorias: - Acontecimento Memorizado o sinal enviado por um processo memorizado no caso de no existir um processo bloqueado sua espera. - Acontecimento no memorizado o sinal s tido em conta se existir um processo bloqueado sua espera. H casos em que h interesse ter o sinal memorizado durante apenas algum tempo (sistemas de tempo real) A sincronizao indirecta exprime-se com base em semforos atravs do conceito de semforo privado (so normalmente abstraco que o programador deve garantir as propriedades) a um processo (se for o nico que executa a primitiva Esperar), podendo os outro notific-lo por Assinalar. Deve ser inicializado a zero. Memoriza o n de vezes que o acontecimento se produziu (Assinalares). 2.9. Sincronizao no Modelo Computacional O modelo computacional tem de ser completado com os mecanismos de sincronizao entre processos. Normalmente os sistemas oferecem primitivas para sincronizao directa: Suspender (IdProc) Acordar (IdProc) Por vezes pode-se usar temporizao: Adormecer (IntervaloTempo) Todos os sistemas dispem de algum mecanismo, mesmo rudimentar, para implementar a sincronizao indirecta entre processos. Os mais simples consiste em variveis binrias de sincronizao que, no estado falso, bloqueiam os processos que executam Esperar e, quando tomam o valor verdadeiro, autorizam a passagem de todos os processos. dado que os semforos do para implementar qualquer modelo de sincronizao vamos us-los como mecanismo fundamental de sincronizao no nosso modelo computacional. Primitivas: IdSemaforo := CriarSemaforo (ValorInicial) EliminarSemaforo (IdSemaforo) Esperar (IdSemaforo)

Assinalar (IdSemaforo) 2.10. Exemplos de Programao Concorrente 2.10.1. Sistema de Controlo 2.10.2. Leitores e Escritores (de uma estrutura de dados) Considera-se que existem dois conjuntos de processos: os que lem e os que escrevem/actualizam uma estrutura de dados partilhada. Quando um processo pretende escrever na estrutura de dados tem de aceder em exclusividade. Os processos Leitores que no modificam a informao podem aceder concorrentemente. Quando um Escritor termina a sua actividade, todos os Leitores, eventualmente bloqueados, devem ser acordados para poderem prosseguir em paralelo. O ponto mais delicado a necessidade de libertar todos os processos Leitores bloqueados quando lhe atribuda a possibilidade de acederem estrutura de dados. A programao da rotina IniciaLeitura reflecte este problema sendo interessante analisar a utilizao dos semforos nesta rotina. de destacar ainda a necessidade de proteger com uma seco crtica a modificao das variveis que definem o estado em que o sistema se encontra. importante realar que a seco crtica tem de ser libertada antes de bloquear o processo no semforo Leitores. esquecer a libertao conduziria paragem de todo o sistema. var NLeitores, LeitoresEspera, EscritoresEspera : integer; EmEscrita : boolean; Mutex, Leitores, Escritores : semaforo; procedure IniciaLeitura; begin Esperar (MutEx) if EmEscrita or EscritoresEspera > 0 then begin LeitoresEspera := LeitoresEspera + 1; Assinalar (Mutex); Esperar (Leitores);

/*seco crtica para estado do sistema

Esperar (Mutex);

/*liberta seco crtica depois de actualizar estado do sistema /*Bloqueia-se pois h processos em escrita ou espera para escrever. Avana quando houver um Assinalar(Leitores) /* Depois de ler vai actualizar estado do sistema

LeitoresEspera := LeitoresEspera 1; if LeitoresEspera > 0 then Assinalar (Leitores); /* se houver mais espera para ler vai assinalar que acabou de ler, para entrar outro end; NLeitores := NLeitores + 1; Assinalar (Mutex); end; {IniciaLeitura) procedure AcabaLeitura; begin Esperar (Mutex); NLeitores := NLeitores 1; if EscritoresEspera > 0 and NLeitores = 0 then Assinalar (Escritores); /* liberta seco crtica depois de aactualizar estado do sistema

/* acabou de ler e vai actualizar estado do sistema /* Se h escritores espera e no h leitores a ler... /* Desbloqueia Escritores

Assinalar (Mutex); end; {AcabaLeitura} procedure IniciaEscrita begin Esperar (Mutex); if NLeitores > 0 or EmEscrita then begin

/* Liberta seco crtica

/* Bloqueia-se na seco crtica /* Se houver leitores ou escritores em actividade...

EscritoresEspera := EscritoresEspera + 1; /* fica espera Assinalar (Mutex); /*liberta seco crtica Esperar (Escritores); /* bloqueia-se pois h escritores ou leitores em actividade Esperar (Mutex); /* tenta aceder seco crtica, depois de ter sido desbloqueado por Assinalar (Escritores) EscritoresEspera := EscritoresEspera 1; end; EmEscrita := true; Assinalar (Mutex); end; {IniciaEscrita} procedure AcabaEscrita; begin Esperar (Mutex); /* Depois de ter actualizado a seco escreve /* liberta seco crtica

/* tenta aceder seco crtica depois de ter escrito tudo EmEscrita := false; /* Como j acabou de escrever actualiza a seco com essa informao if LeitoresEspera > 0 then Assinalar (Leitores) /* Se h Leitores espera desbloqueiaos else if EscritoresEspera > 0 then Assinalar (Escritores); /* Se h escritores espera desbloqueia-os Assinalar (Mutex); /*Liberta seco crtica end; {AcabaEscrita} 2.11. Interblocagem Apesar dos semforos existem ainda alguns problemas: - Imobilizao definitiva de um recurso um processo que execute Esperar (SemExMut) sem fazer em seguida Asssinalar (SemExMut) devido a erro de programao impede a utilizao do recurso pelos restantes processos. - Interblocagem Ser SemA e SemB forem dois semforos de excluso mtua e se dois processos executarem o encadeamento de operaes descrito na figura (pg.67) atinge-se uma situao em que nenhum dos dois poder prosseguir, ficando ambos bloqueados e sem qualquer hiptese de sarem dessa situao. Processo 1 Esperar(semA) Expira quantum Processo 2 Esperar (Sem(B) Esperar (SemA) Bloqueado Processo 1 Esperar(SemB) - Bloqueado O problema da interblocagem complexo. Para a tentar evitar foram propostas algumas solues preventivas: - Garantir que os recursos do sistema so todos adquiridos pela mesma ordem (no pode ser geral pois h programadores independentes) - Requisitar todos os recursos que o processo necessita no incio da sua execuo (degradao de desempenho) - Quando a aquisio de um recurso no possvel, libertar todos os recursos detidos (s recurso preemptveis. ex. ficheiro parcialmente escrito no pode ser libertado a meio).

A preveno o melhor mas penaliza desempenho. H outras propostas com mecanismo de alto nvel (cap. 16 e 17).

CAP. 3 O NCLEO DO SISTEMA OPERATIVO 3.1. Arquitectura Tpica de Um Processador Apesar da complexidade de um computador, relativamente fcil identificar os principais elementos da arquitectura. Todas as mquinas consideradas neste texto baseiam-se em evolues do modelo de Von Neumann que h 3 dcadas vem sendo utilizado na definio da maioria dos computadores comerciais. O modelo pressupe uma memria onde so armazenados os programas e respectivos dados. O CPU e os controladores que executam algoritmos de comunicao com os dispositivos fsicos. Mais os buses. 3.1.1. Unidade Central de Processamento Tem 3 subunidades: - Unidade Aritmtica e Lgica ou Unidade Operativa - Unidade de Controlo - Unidade de Gesto de Memria Unidade Aritmtica e Lgica (ALU Arithmetic and Logic Unit) para alm dos circuitos lgicos que implementam as operaes, tem associado um banco de registos endereados explicita ou implicitamente nas instrues. vulgar um segundo CI encarregar-se das operaes com vrgula flutuante (coprocessamento). As instrues destinadas ao coprocessador tm um cdigo de operao especfico que permite a sua identificao. Quando o coprocessador reconhece as instrues que lhe so destinadas, toma conta do bus para aceder aos operandos e efectua a operao. Os registos podem conter apenas variveis especializadas como Acumulador, Registo de estado, auxiliar, contador de programa (86/286) ou podem ser de utilizao indiferenciada (VAX e M68000). Esta ltima soluo apesar de complicar a estrutura interna permite optimizao de cdigo. Recentemente, assistiu-se a uma evoluo significativa na forma como os registos so utilizados na arquitectura dos processadores. Analisando-se como a linguagens de alto nvel funcionam, chegou-se concluso de que se podiam obter ganhos significativos de desempenho atravs da utilizao de bancos de registos de grande dimenso, internos ao processador, cuja optimizao os compiladores se encarregam pois conhecem a sua dimenso. O nmero de acessos memria reduz-se consideravelmente. Para acomodar um extenso banco de registos, a complexidade dos modos de endereamento (indexado, relativo, etc.) foi reduzida. O nome desta arquitectura RISC. Do ponto de vista do SO, o conjunto de registos corresponde ao contexto de execuo hardware do programa que se executa no computador. Ao mudar a actividade em curso, necessrio salvaguardar os valores de todos os registos para restaurar o contexto de hardware quando se pretenda prosseguir com a actividade interrompida. (TF1_2001-I-a) quais as informaes que fazem parte do contexto hardware de um processo. A Unidade de Controlo A principal funo descodificar as instrues e traduzi-las em microcomandos que vo actuar sobre a unidade operativa e as linhas de sinalizao que controlam o bus. Pode ser implementada de vrias formas, sendo a mais comum a microprogramao. Uma outra capacidade a de restringir a execuo de instrues privilegiadas e especiais (ao utilizador), como as de manipulao de interrupes ou registos especiais. Isto levou definio de 2 modos de execuo: modo sistema e modo utilizador. Algumas mquinas apresentam um esquema um pouco mais complexo, considerando vrios nveis de proteco para permitir um melhor escalonamento dos mecanismos de proteco. No VAX e no Intel 286 existem 4 nveis, que, ligados ao mecanismo de gesto de memria, permitem implementar um sistema sofisticado de proteco. Tem ainda como funo a gesto de interrupes. Unidade de Gesto de Memria MMU: no existe nos sistemas mais simples mas indispensvel nos sistemas de endereamento virtual. Funcionalidade: - Possibilidade de recolocar cdigo ou dados na memria sem alterar o programa - Deteco de endereos invlidos

- Proteco de blocos de memria de acordo com o modo de execuo do processador. Faz parte integrante do processador, apesar de ser normalmente implementada por circuitos ou cartas independentes. O acesso memria faz-se passando sempre por esta unidade que transforma o endereo virtual enviado pela ALU num endereo fsico que ser enviado para a memria central. 3.1.2. As Interrupes Permitem desviar assincronamente a execuo de um programa para outro. Do ponto de vista do SO so indispensveis para a implementao da concorrncia em que se baseia todo o funcionamento do sistema. Para analisar o tratamento de interrupes podemos considerar os seguintes pontos: - Controlo de aceitao das Interrupes - Salvaguarda do contexto - Seleco da rotina de tratamento da interrupo. Aceitao das Interrupes Baseia-se em 2 mecanismos. O 1 automtico e inibe as interrupes depois de uma delas ter sido aceite. O 2 explicitamente controlado por programao atravs de uma mscara global. vantajoso, durante a execuo de uma rotina referente a um acontecimento de pequena prioridade, esta poder ser interrompida --> conjunto de mscaras associadas aos vrios nveis de interrupo. Em alguns sistemas este controlo executado pelo SO, mas na maioria das arquitecturas pelo hardware. Registo memoriza o nvel actual das interrupes (IPL Interrupt Priority Level), posto num nvel e mascarando os outros. Salvaguarda do Contexto Devido interrupo, tenho de guardar: - Contador de Programa - Registo de Estado do Processador - Registos Gerais Pode ficar a cargo do prembulo da rotina de interrupo ou ser parcialmente feita pelo hardware antes de lhe transferir o controlo. Seleco de Rotina de Interrupo Os primeiros processadores s tinham uma linha de interrupo e depois atravs de um teste programado viam de onde ela vinha. Para evitar este teste foram includos na arquitectura das interrupes mecanismos de vectorizao. O controlador do perifrico envia um vector (8bits no 286 --< tabela identifica posio de memria de incio da rotina) que permite ao hardware agulhar para a rotina respectiva (ex 286 NMI: falha de alimentao, inicializao/reset, etc; e INT). Tambm podem ser provocadas por instrues. 3.1.3. A Memria um dos recursos crticos no desempenho global do sistema. Hierarquizando: - memria cache memria de reduzido tempo de acesso onde so mantidas as variveis ou as instrues recentemente acedidas; - memria central memria do processador implementada com tecnologia de semicindutor; - memria secundria discos magnticos. O sistema dever gerir esta hierarquia de memria de forma a obter o melhor compromisso entre a ocupao das memrias rpidas e as necessrias transferncias para disco. 3.1.4. Bus A memria, a UCP e os controladores de perifricos encontram-se interligados atravs de um bus, que composto por 3 buses funcionalmente especializados: - Bus de dados bidireccional

- Bus de endereos que interliga o CPU e a unidade de gesto de memria - Bus de controlo 3.1.5. Perifricos Nas mquinas actuais o SO no se ocupa da gesto de baixo nvel dos perifricos. Placas com capacidade autnoma de processamento ou CIs executam os protocolos fsicos de gesto dos perifricos, oferecendo uma interface virtual ao SO. Os controladores mais vulgares so: - Controlador de disco - Controlador de linhas assncronas (ligaes a terminais interactivos) - Controlador de protocolos sncronos (ex: X25) - Controlador de portos paralelos - Controlador de redes locais de computadores (ex: Ethernet) Mecanismos de Acesso Directo Memria (DMA) permitem optimizar o dbito de transferncia da informao entre perifricos de alta velocidade e a memria. Cada canal de acesso directo memria composto por um conjunto de registos que so programados antes do incio da transferncia e especificam o endereo de/para onde se pretende ler/escrever os dados, o nmero de octetos a transferir, sentido da transferncia, etc. Depois de iniciada, decorre de forma autnoma ao processador. Um perifrico importante o gerador de temporizaes. 3.2. Estrutura do Ncleo O SO um programa ou conjunto de programas que implementa as diversas funes de suporte ao modelo computacional. Como complexo temos de estruturar com base em nveis de abstraco para facilidade de implementao e manuteno. Cada camada encapsula a implementao dos conceitos que lhe correspondem, oferecendo uma interface que permite a sua utilizao pelos restantes nveis --> sucessivas mquinas virtuais. habitual que as diversas funes das camadas mais internas no sejam acessveis aos utilizadores ou que as funes internas do ncleo no respeitem a decomposio modular que o modelo de camadas sugere. Geralmente diversas camadas so agrupadas numa entidade chamada ncleo do SO. As restantes so consideradas como servios sistema e so executadas fora do ncleo. A proteco e o tempo de execuo so 2 importantes factores para essa definio. frequente agrupar no ncleo do SO todas as funes que necessitem executar-se no nvel mais privilegiado do processador ( que exigem manipulao de interrupes, acesso a registos especiais, interaco com perifricos; ou modificam informao em que se baseia todo o funcionamento do sistema tabelas de processos, tabelas de memria). Para que o modelo de multiprogramao seja eficaz importante que o ncleo no monopolize a utilizao do processador. A conjuno destes 2 critrios implica que algumas funes associadas s camadas mais internas da estrutura de implementao seja executadas fora do ncleo, como servios sistema. Como difcil rigor, geralmente, as funes que tm a ver com gesto de processos, gesto de memria e entradas/sadas so integradas no ncleo. 3.3. Gesto de Processos a camada mais interna da estrutura hierrquica de implementao dos SO. As funes executadas por esse nvel so fundamentais para o funcionamento de todo o sistema e so aquelas a que est associado o maior nvel de proteco. vulgar dividi-la em 3 unidades funcionais: - Gesto das Interrupes; - Multiplexagem do Processador efectuada conjuntamente por 2 entidades funcionais (com execuo em nveis diferentes do modelo): - Gesto do Processador Escalonamento - Despacho; - Funes de Sincronizao. A rotina de despacho tem por funo determinar o prximo processo a executar-se e efectuar a comutao do contexto;

O escalonamento implementa a poltica global de gesto que optimiza a utilizao de todos os recursos da mquina (processador, memria, perifricos, etc.). Exame1poca2001-2002 Grupo III 3.3.1. Gesto das Interrupes Encontra-se no cerne da actividade do sistema. So o mecanismo que permite a comunicao assncrona entre o processador e o sistema. Sem elas os programas apenas poderiam testar sistematicamente o hardware. O tratamento das interrupes uma das zonas do SDO mais directamente dependentes da arquitectura do processador. importante distinguir Interrupes e Excepes que tm considerveis diferenas a nvel dos mecanismos que as controlam. As interrupes so globais --> ncleo toma conta, as excepes relacionam-se apenas com o processo que as provoca --> tratadas no seu contexto. O programador de aplicaes raramente ter de interactuar com a gesto de interrupes. Ao contrrio, o controlo de excepes normalmente da responsabilidade sua. 3.3.2. Representao dos Processos So representados por um contexto que memoriza todas as informaes necessrias sua execuo. Esse contexto, ao longo da sua execuo, ir fazer parte de inmeras listas do ncleo. vulgar considerar o contexto constitudo por 2 partes: - Hardware (todos os registos do processador): - Acumulador(es) - Registos de Uso Geral - Contador de Programa - Apontador de Pilha - Registo de Estado do Processador (TF1_2001-I-a) quais as informaes que fazem parte do contexto hardware de um processo. - Software: - Identificao do processo e do utilizador - Prioridade - Estado do Processo - Perifricos utilizados - Ficheiros abertos - Programa em execuo - Directoria actual / por defeito - Quotas de utilizao dos recursos - Contabilizao da utilizao dos recursos. Alguma desta informao permanente outra voltil. O contexto inicializado quando o processo criado com informaes fornecidas pelo utilizador na chamada rotina de criao do processo ou retiradas do contexto utilizador do processo pai. Os contextos dos processos activos so mantidos na Lista dos Processos Executveis que procura reflectir o algoritmo de seleco do despacho. 3.3.3. Despacho A rotina de despacho chamada sempre que o processo actual deva ser comutado ou exista a possibilidade de ser comutado. dada a frequncia de utilizao do despacho, o tempo de execuo da rotina crtico. A comutao de processos a base da pseudoconcorrncia e o seu funcionamento apenas precisa de gesto cuidada das interrupes. Normalmente quando se d uma interrupo os processadores guardam o PC e o registo de estado. Quando h a RTI prossegue do endereo onde se tinha dado a interrupo. Para introduzir a hiptese de comutao temos de modificar o final da rotina de interrupo por forma a chamar o despacho antes de efectuar o retorno. Este verifica se h necessidade de comutao e se sim, guarda o contexto, no descritor do processo e coloca nos registos do

processador o estado do processo seleccionado pelo algoritmo de escalonamento. Finalmente troca o PC e Rflags para relanar um processo. Depois desta troca que vem o RTI. 3.3.4. Gesto do Processador Escalonamento O processador o recurso crtico do sistema pelo que o escalonamento tenta optimizar a sua utilizao, mantendo-o tanto quanto possvel ocupado. Mas tem de ser tudo visto em conjunto. Por ex. de nada serve colocar sucessivamente processos em execuo se isso originar muitos acessos ao disco (gesto de memria). Teoricamente seria interessante chamar o escalonamento cada vez que um recurso atribudo ou libertado, mas isso um grande peso para o sistema reportar todos os acontecimentos. pois preciso encontrar um equilbrio, definindo os dados e acontecimentos decisivos. Nos sistemas mais evoludos, o sistema atribui prioridades aos processos e modifica-se de acordo com o seu comportamento no sistema, procurando privilegiar os processos que melhor se adaptam aos critrios globais de gesto, que podem ser vrios (tratamento por lotes, interactivos, tempo real, tempo partilhado, etc.) TF1_2001-I-c) No escalonamento podemos considerar 3 tipos de objectivos diferentes: - Procurar equilibrar a carga do sistema por forma a dar um servio relativamente uniforme aos utilizadores interactivos (Tempo Partilhado) Exame1poca2001-02-GrupoIII - Dotar o sistema de grande reactividade s condies externas (Tempo Real Relaxado) - Conseguir que o sistema execute determinadas aces em intervalos de tempo prdeterminados (Tempo Real Restrito) TF1_2001-I-b) Tempo de Execuo Partilhado Para equitatividade a maioria dos sistemas apenas permite que o processo em execuo utilize o processador durante um certo intervalo de tempo (time-slice / quantum). Eventualmente o despacho pode seleccionar o mesmo se for o mais prioritrio. Soluo Round Robin muito fcil mas tem o evidente problema de facilmente conduzir a tempos de resposta elevados em situaes de carga e no permite reagir a prioritrios. Multilista Uma evoluo haver vrias listas de acordo com o tipo de processo em execuo. Para sistemas mistos de tempo partilhado e lotes. Aos ltimos aplicar-se-ia uma poltica baseada na menor durao do trabalho e aos outros, circular. Uma evoluo possvel considerar que os processos podem ser transferidos entre vrias listas de acordo com o modo como utilizam o processador. A lista mais prioritria corresponde aos processos que utilizam pouco tempo de processador (tpico dos interactivos - I/O bound). A gesto multilista tem muitas variantes. A soluo mais simples (retirar sempre da lista mais prioritria) pode conduzir a starvation em carga elevada. Prioridades Dinmicas uma evoluo. O ajuste de prioridade de um processo reflecte o seu comportamento. O critrio de alterao baseia-se na utilizao dos recursos crticos, principalmente do processador. O peso da mudana de contexto importante, pelo que uma optimizao possvel aumentar o quantum. na maioria dos sistemas o quantum fixo. Preempo Preempo designa a aco de retirar o processador a um processo em execuo devido existncia de outro mais prioritrio. indispensvel nos sistemas de tempo-real. A preempo tem, naturalmente, custos, devido ao peso das mudanas de contexto, pelo que alguns sistemas limitam o seu uso, na deixando um processo ser retirado sem decorrer um determinado tempo. Tempo Real Nestes sistemas as prioridades dos processos so geralmente fixas dado que esto associados a acontecimentos, que so notificados atravs dos mecanismos de sincronizao.

3.4. Implementao da Sincronizao 3.4.1. Seces Crticas Inibio das Interrupes A soluo mais simples para implementar a excluso mtua inibir as interrupes durante o posicionamento das variveis partilhadas e respectivo teste, para que no seja possvel a mudana de contexto. Mas isso tem desvantagens: ineficiente gesto da mquina resultante da paragem de todas as aces externas susceptveis de fazerem evoluir o estado do sistema. Por ex. no se pode fazer esperar os discos por causa de sincronizao entre utilizadores. Assim, a inibio de interrupes s poder ser usada quando a seco crtica for muito pequena ou o processador possui sistema de interrupes hierarquizado. Implementao dos Trincos Uma varivel do tipo trinco s implementvel se a sequncia de teste e posicionamento for indivisvel. Uma implementao possvel consiste na inibio das interrupes durante a execuo das operaes. Contudo, esta soluo no s coloca problemas ao escalonamento dos processos como no funciona em arquitecturas multiprocessador. Uma soluo mais geral implica a utilizao de mecanismos de hardware que garantam a possibilidade de efectuar, de forma atmica, o teste e modificao de uma posio de memria. Na maioria das mquinas existem instrues especficas Test and Set: Como se trata de uma nica instruo no pode ser interrompida. function TestAndSet (var Trinco: boolean): boolean; begin TestAndSet := Trinco; Trinco := true; end; Exame1poca2001-02 Grupo II a) e b) Exame2poca2000-01 Grupo III c) procedure Fechar (var Trinco: boolean); begin while TestAndSet (Trinco) do; end; Excluso Mtua em Arquitecturas Multiprocessador Test and Set no suficiente. A sequncia de teste e posicionamento envolve leitura e escrita, o que para o controlador de bus (de todos os processadores) sempre visto como 2 sequncias independentes. Nesta arquitectura temos portanto de descer ao nvel de gesto do bus para garantir a atomicidade das operaes elementares de sincronizao. Teste e modificao num nico ciclo de acesso memria. No M68000 a instruo TAS; no I8086 o prefixo lock torna uma instruo indivisvel. A rotina fechar conhecida por spin-lock fechar proc near mov a1, 1 ciclo: lock xchg a1, trinco or a1, a1 jnz ciclo ret fechar endp 3.4.2. Semforos A cada semforo est associado uma varivel que representa o seu valor e um apontador que indica o incio da lista. Esta estrutura de dados dever ser mantida nas tabelas centrais do sistema. No contexto do processo deve existir um apontador que permite referenciar outros contextos. A manipulao do apontador permite colocar logicamente o contexto na lista correspondente ao seu estado. As rotinas Assinalar e Esperar tm de ser sequncias indivisveis de aces. Basta pensar em Esperar, decrementa varivel, ainda no fez o teste e interrompido. Outro processo efectua

Esperar e fica logo bloqueado. O primeiro encontra semforo com valor negativo e bloqueia tambm. A manipulao da estrutura de dados do semforo deve ser includa numa seco crtica. Mas como semforos so objecto do ncleo, a seco crtica pode implementar-se com base na inibio de interupes, com as restries j apontadas. interessante analisar o funcionamento dos semforos em conjuno com uma poltica de escalonamento preemptvel porque existe interdependncia entre ambos. Vamos supor que um semforo de excluso mtua com uma lista de espera gerida no habitual FIFO e dois processos concorrentes P1 < P2 que pretendem aceder mesma seco crtica. Consideremos que P1 efectua primeiro a primitiva Esperar iniciando a execuo do cdigo da seco crtica. Quando P2 executar Esperar teremos a seguinte situao: - P1 a executar a seco crtica - P2 bloqueado no semforo Quando P1 libertar o semforo vai desbloquear P2 que passa para a lista dos processos executveis. Nesta situao, como considermos P2 era mais prioritrio, vai executar-se imediatamente, passando P1 do estado de Em Execuo para Executvel. Se a relao de prioridades fosse inversa, logicamente P1 continuaria a sua execuo e P2 apenas passaria para Executvel. De notar que, mesmo que existisse P3 com maior prioridade que os 2 outros, no poder aceder seco crtica pois a varivel do semforo permaneceu a zero. /* Programao de um semforo procedure Esperar (S:Semforo) begin Fechar (Trinco); S.Int := S.Int 1; if S.Int < 0 begin < bloquear processo e inclu-lo na fila de espera > end; Abrir (Trinco); end; procedure Assinalar (S:Semforo) begin Fechar (Trinco); S.Int := S.Int + 1; if S.Int <= 0 then begin < Retirar um processo da fila de espera transferi-lo para a fila dos executveis > end; Abrir (Trinco); end; 3.5. Implementao das Funes Sistema O sistema implementa mecanismos que, a vrios nveis, protegem o acesso s suas estruturas de dados. Primeiramente nenhuma operao do sistema operativo poder ser executada sem ser atravs da invocao das funes sistema fornecidas com o SO. De realar que funo sistema engloba a funo propriamente dita que se executa no ncleo e a rotina de interface que ligada (linked) com o cdigo do utilizador. Esta responsvel pela validao de parmetros, sua formatao e colocao nas estruturas adequadas e finalmente desencadear a interrupo. No retorno efectua o inverso e trata as indicaes de erros. A proteco das funes sistema implica que a chamada se efectue atravs de pontos de entrada especficos. Na maioria dos sistemas so utilizadas instrues especiais (trapas) que causam uma interrupo. A agulhagem para a rotina de sistema efectuada pela rotina de tratamento da interrupo com base num identificador da funo. O espao de endereamento do SO encontra-se protegido contra acessos do modo utilizador.

Para alm de assegurar a segurana este processo tem a vantagem do cdigo das funes sistema ser partilhado por todos os programas. Um segundo mecanismo de proteco aplica-se aos parmetros das funes sistema. Um utilizador no pode especificar como parmetro entidades do sistema ou zonas de memria que no lhe pertenam.

CAP. 4 - MECANISMOS DE GESTO DE MEMRIA 4.1. Introduo A exposio est dividida em 2 partes: - Os mecanismos de gesto de memria, determinam a organizao da memria do computador, ou seja, se o endereamento real ou virtual, se segmentada ou paginada, ou qual o tamanho das pginas ou segmentos. Estes mecanismos so em geral executados pelo hardware de gesto de memria do processador, devidamente programado pelo SO. - Os algoritmos de gesto de memria, so da exclusiva responsabilidade do SO. Eles determinam que decises devem ser tomadas, usando os mecanismos de baixo nvel para as levar a cabo. 4.1.1. Processo e Espao de Endereamento J foi dito que um programa executa as suas instrues num determinado espao de memria associado ao processo. Designa-se por espao de endereamento de um processo o conjunto de posies de memria que um programa executado por esse processo pode referenciar. O espao de endereamento est associado ao processo. Se houver uma falha, o hardware provoca uma excepo que tratada pelo SO, causando normalmente a terminao do processo em curso. 4.1.2. Hierarquia de Memria Do ponto de vista do SO a memria divide-se em: - Memria Primria (Fsica ou Central) pode ainda ser decomposta em central e cache, geralmente geridas pelo prprio hardware; voltil. - Memria Secundria (ou de Disco); persistente. Os tempos de acesso s memrias variam normalmente na razo inversa do seu custo. Por esta razo, a dimenso da memria secundria tipicamente uma ou mais ordens de grandeza superior. 4.1.3. Endereos Reais e Virtuais Os primeiros computadores suportavam apenas endereamento real, no qual os endereos gerados pelo programa tinham uma relao directa com os endereos da memria fsica do computador. No havia qualquer transformao pelo hardware. Um endereo real refere-se sempre memria fsica, nunca secundria. Desvantagens do mtodo: - A dimenso dos programas limitada pela dimenso da memria fsica - Um programa s pode funcionar nos endereos fsicos para onde foi escrito, no podendo ser executado numa outra mquina com um mapa de memria diferente. - A multiprogramao fica bastante dificultada, pois no possvel executar simultaneamente 2 programas que tivessem sido preparados para correr nos mesmos endereos fsicos. Para fazer face a estes problemas, numa mquina com endereamento virtual, os endereos gerados pelo programa so convertidos pelo processador e em tempo de execuo em endereos fsicos. funo do hardware de gesto de memria e dos SO fazer a correspondncia. Se a palavra estiver em memria secundria, a unidade de gesto de memria avisa o SO para este carregar a palavra em memria fsica. 4.2. Endereamento Real 4.2.1. Sistemas Monoprogramados (MS/DOS, Macintosh) Funcionamento O principal inconveniente o tamanho dos programas ser limitado. Para ultrapassar este problema desenvolveu-se a tcnica da sobreposio (overlay): O programa dividido numa parte residente, que est sempre em memria, e em overlays, que so mdulos independentes uns dos outros e que so carregados em memria a pedido do programa. Ex. Programa principal, overlay de inicializao, de simulao, de escrita de resultados. A comunicao feita por variveis situadas na zona que permanece residente, que correspondem a variveis globais do programa numa linguagem de alto nvel.

Este mtodo simples, at para o SO, mas tem a desvantagem de ter de ser o programador a indicar explicitamente quando deve ser carregado novo overlay, o que torna a programao mais difcil. ainda difcil de aplicar a certos programas e pode tornar-se lento. bvio que as limitaes fsicas se mantm: a soma da parte residente + overlay no pode exceder a memria fsica. Proteco Em geral o SO fica localizado no extremo inferior da memria. Uma vez que s existe um utilizador, o problema da proteco pode ser ignorado. Se um programa perder o controlo e corromper o SO, ter-se- de reinicializar o a mquina e carregar novamente o SO. Mquinas mais sofisticadas tm um registo limite indicando o endereo mnimo a que um programa pode aceder. Se tenta --> excepo (modo utilizador e modo sistema, j). 4.2.2. Sistemas Multiprogramados com Parties Fixas Funcionamento Para permitir multiprogramao necessrio que vrios programas possam coexistir em memria fsica. A foram mais simples dividir a memria em parties, carregando-se um programa em cada. Quando o programa da partio 1 se bloquear numa operao de E/S salvaguarda-se o contexto do processador e passa-se a executar o programa da partio 2, e assim sucessivamente. O grau de multiprogramao depende do n de parties Inicialmente os programas eram compilados para uma determinada partio, o que uma m gesto. Para resolver o problema surgiram os programas recolocveis: os compiladores no fazem referncia a endereos fsicos, mas geram tabelas que o carregador em memria (loader) converte. Assim a deciso da partio onde colocar feita pelo operador de sistema na altura. Alguns compiladores tm registo base que carregado com endereo fsico do incio da partio, que serve de base a indexao pelo hardware na altura de execuo. A isto tambm se chama endereamento baseado, que j uma aproximao do virtual pois tambm conta com o hardware. No entanto continuam relacionados com os fsicos a menos de uma constante. Resolve o problema da recolocao mas deixa outros em aberto. Dimenso dos Programas A tcnica dos overlays pode continuar a ser usada dentro das parties, sendo sempre limitada pela maior partio. noite pode juntar-se tudo numa partio. Fragmentao do tipo fragmentao interna (dentro do bloco/partio). Proteco A existncia de vrios utilizadores implica que cada um no aceda a outra partio que no a sua. H um par de registos que carregado com o endereo mximo e mnimo da partio actual, que o hardware depois controla. 4.2.3. Sistemas Multiprogramados com Parties Variveis Funcionamento O problema da fragmentao anteriormente referido pode ser resolvido mudando dinamicamente o nmero e dimenso das parties sem parar o sistema. Fragmentao Quando um programa termina e liberta a sua partio, 3 situaes podem ocorrer: O novo programa exactamente do tamanho do bloco livre (pouco provvel); Se for maior, no se poder executar; se for menor pode e deixa zona menor livre. Com o tempo gera-se fragmentos de memria espalhados pela memria (fragmentao externa); logo, de tempos a tempos tem de haver recompactao. Dimenso dos Programas Continua limitada pela memria fsica mas no necessrio parar o sistema.

Proteco igual anterior 4.3. Endereamento Virtual O principal objectivo dissociar os endereos gerados pelo programa dos fsicos, acabando, para o programador, com a limitao do tamanho dos programas. O mecanismo de traduo efectuado pelo hardware (para ser rpida), mais propriamente pela gesto de memria do processador. As outras componentes do processador (unidade de controlo, ULA) s manipulam endereos virtuais. Uma tabela de correspondncia ocupava muita memria. Por isso, a memria dividida logicamente em blocos contguos, existindo para cada bloco uma entrada na tabela de tradues. Um endereo passa a ter a forma (bloco, deslocamento) Os 2 mtodos mais importantes de dividir a memria em blocos so: paginao (blocos com o mesmo tamanho) e segmentao (blocos com tamanhos diferentes). 4.3.1. Segmentao Objectivos Diviso dos programas em segmentos lgicos que reflictam a sua subdiviso funcional (ex. rotina). A ideia base tentar suportar na gesto de memria as abstraces comuns das linguagens, nomeadamente: - Carregamento em Memria O segmento a unidade mnima a carregar em memria. Considera-se que todas as palavras dentro de um segmento tm a mesma probabilidade de ser acedidas. - Proteco feita em termos de blocos lgicos. - Eficincia O princpio da localidade de referncia diz-nos que, se acedermos a um endereo de um segmento lgico, com grande probabilidade os prximos acessos sero a endereos situados no mesmo segmento. Mecanismo de Traduo de Endereos Um endereo tem a forma (segmento, deslocamento) Existe uma tabela de segmentos composta pelo descritor de cada segmento. Cada descritor contm o endereo fsico do segmento (de base), a sua dimenso, informao respeitante proteco e utilizao do segmento. 2 registos da unidade de gesto (registo base da tabela de segmentos BTS) e registo limite da tabela de segmentos LTS) contm respectivamente o endereo real de incio da tabela e a sua dimenso. Quando o programa gera um endereo, o nmero do segmento comparado com o LTS. Se for inferior, somado com o BTS obtendo-se a entrada na tabela de segmentos correspondente a esse segmento. s vezes, para maior rapidez, usam-se, na soma, apenas alguns bits segmentos fsicos comeam na fronteira de 2 n. De seguida os bits de proteco so testados (ler, escrever, executar, acesso legal). Por fim, verificado se o deslocamento pretendido inferior ou igual dimenso do segmento. Se o endereo for vlido, o deslocamento somado ao endereo fsico do incio, obtendo-se o endereo fsico pretendido. Se algum teste falhar, o endereo invlido, o hardware interrompe a traduo e gera uma excepo. tudo feito pelo hardware. O SO s programa os vrios registos, preenche a tabela de segmentos e trata excepes. Existe uma tabela de segmentos por processo. Quando se d uma mudana de contexto, os registos base e limite tm de ser carregados com o endereo e dimenso da tabela de segmentos do novo processo. A dimenso mxima de um segmento est associada arquitectura da mquina. ex. Intel 80286 64Kbytes. Optimizao do Mecanismo de Traduo de Endereos A tabela de segmentos est em memria fsica. Se o hardware tiver de lhe aceder cada vez que o programa gera um endereo, o custo de acesso a uma posio de memria duplica, o que inaceitvel, pois a velocidade do computador est em grande parte limitada pelos acessos memria.

Em arquitecturas segmentadas a soluo habitual guardar em registos, de acesso rpido, as entradas da tabela de segmentos correspondentes aos segmentos em utilizao. O 80286 tem 4 registos para segmentos: cdigo, dados, pilha e um extra. A operao demorada, que ler o descritor da tabela de segmentos, s efectuada da primeira vez que o segmento for acedido tipo cache. Fragmentao A segmentao gera fragmentao externa. Uma maneira de a resolver copiar todos os segmentos para um dos extremos da memria, como no caso das parties variveis. Outra soluo usar a memria secundria. o que incrtemental. Em ambas o processamento interrompido. Proteco A unidade de proteco o segmento e est especificada no descritor, e feita a vrios nveis: - Como processos diferentes tm tabelas de segmentos diferentes, os espaos de endereamento virtual so distintos, no havendo forma de um processo poder referenciar zonas de memria de outro. - O deslocamento dentro do segmento verificado comparando-o com a dimenso presente no descritor. - O tipo de acesso ao segmento verificado. Partilha de Memria Entre Processos Basta ter na tabela nas vrias tabelas de segmentos uma entrada contendo o mesmo endereo fsico e dimenso. 4.3.2. Paginao Objectivos Oferecer ao programador um espao de endereamento (virtual) linear, em geral bastante maior que a dimenso da memria fsica da mquina. A ideia subjacente fazer com que o programador no precise de se preocupar com a gesto de memria quando escreve um programa. Mecanismo de Traduo de Endereos A memria dividida em blocos todos do mesmo tamanho, chamados pginas. Um endereo tem a forma (pgina, deslocamento) Existe uma tabela de pginas compostas pelo descritor de cada pgina. Cada descritor contm o endereo fsico da pgina, um bit de presena e informao respeitante proteco e utilizao da pgina. Dois registos de hardware de traduo de endereos, chamados Base da Tabela de Pginas (BTP) e Limite da Tabela de Pginas (LTP), contm respectivamente o endereo real de incio da tabela de pginas e dimenso desta. Quando o programa gera um endereo, o n da pgina comparado com o registo LTP. Se for inferior, somado com o BTP, obtendo-se a entrada na tabela de pginas correspondente a esta pgina. De seguida testam-se os bits... se o endereo for vlido, o deslocamento somado ao endereo fsico do incio da pgina, obtendo-se o endereo fsico pretendido. A soma pode ser s concatenao de bits... tambm pode haver excepo para o SO. Existe uma ou mais tabelas de pginas por processo. Quando se d uma mudana os vrios registos de base e limite tm de ser carregados com o endereo e dimenso das tabelas de pginas do novo processo. A dimenso das pginas est definida na arquitectura das mquinas no podendo nunca ser alterada. O espao virtual tpico de 4Gbytes (32 bits), a dimenso das pginas varia de 512 bytes (VAX) a 4 a 8 Kbytes (SUN). Tabela de Traduo de Endereos (TLB) A tabela de pginas reside em memria fsica. Como na segmentao o mecanismo obriga a acesso suplementar memria, tornando indispensvel a existncia de uma tabela interna unidade de gesto de memria que guarde as PTE das ltimas pginas acedidas. Agora no

possvel registos pois nunca possvel saber se a palavra a ser acedida est na pgina ou no (no h diviso lgica). A soluo comum consiste em guardar numa memria associativa de acesso muito rpido chamada TLB (Translation Lookaside Buffer) os descritores das ltimas pginas acedidas. feito em paralelo com o acesso tabela de pginas. Se for encontrado o endereo na TLB interrompido o acesso tabela de pginas. Se no, posto na TLB em FIFO. Os RISC usam TLB gerida por software. A dimenso destas tabela s pequena (64, 128 entradas) pois o seu custo elevado (90 a 95% de eficcia). Falta de Pgina A PTE tem um bit de presena (bit P) que indica se a pgina est ou no em memria primria. Se o bit estiver a zero, o hardware de gesto gera uma excepo que interrompe a instruo a meio. Diz-se ento que houve uma falta de pgina. O SO analisa a causa da excepo, determina que foi uma falta de pgina e inicia o processamento adequado. Em 1 lugar ter que alocar uma pgina livre em memria. Se uma pgina nova basta preench-la com zeros; se existe em memria secundria, necessrio l-la do disco. Quando o acesso ao disco terminar, o SO preenche a PTE com o endereo da pgina, pe o bit P a 1 e coloca o processo na fila dos executveis. As excepes geradas pela UGM so diferentes pois interrompem uma instruo ao meio e o processador tem depois de retom-la a meio. At porque uma instruo pode ter uma parte numa pgina e outra noutra. As instrues tm pois de ser recomeveis. A diferena importante que s as instrues que carregam um novo segmento podem originar uma falta de segmento. S estas tm de ser recomeveis, o que simplifica o hardware do processador. Fragmentao H fragmentao interna na ltima pgina de cada bloco (cdigo, dados, pilha). Quanto maiores forem as pginas maior o desperdcio. Proteco Faz-se da mesma forma que na segmentada: processos distintos tm tabelas de pginas diferentes e cada pgina contm os modos de acesso permitidos (leitura, escrita, execuo). No entanto, a granularidade de proteco a pgina --> implica mais complicado e deselegante que a segmentada para proteger bloco lgico. Partilha de Memria Entre Processos Basta ter nas tabelas de pginas dos processos um conjunto de PTE indicando o mesmo endereo fsico. Dimenso das Pginas opo importante. Pginas pequenas tm a vantagem de diminuir a fragmentao interna mas aumentam o nmero de faltas de pginas mantidas pelo SO. 4.3.3. Memria Segmentada/Paginada Segmentao segue aproximao lgica e elegante. Paginao segue aproximao fsica e eficiente. A arquitectura segmentada/paginada procura obter as vantagens de uma e de outra. O endereo tem a forma (segmento, pgina, deslocamento) O mecanismo de traduo de endereos pode ser visto na pg. 115 A proteco e partilha de segmentos feita como na segmentao pura. O 80386 tem uma arquitectura segmentada/paginada. Um endereo virtual tem 48 bits, os 16 mais significativos determinam o segmento, cuja dimenso mxima de 2 32 octetos. cada segmento subdividido em pginas de 4 Koctetos

CAP. 5 ALGORITMOS DE GESTO DE MEMRIA 5.1. Introduo Estes algoritmos so usados para decidir onde se deve colocar um bloco de programa dada a memria livre, quando transferir uma pgina ou segmento de memria secundria para primria e vice-versa e quando no existe mais memria livre que bloco retirar de memria para l colocar outro com maior prioridade. Dependem do SO. Existem 3 tipos de decises que o SO tem de tomar: - Alocao: onde colocar um bloco de memria - Transferncia: quando transferir um bloco de memria secundria para primria e vice-versa - Substituio: quando no existe mais memria livre, qual o bloco a retirar de memria para satisfazer o pedido. A complexidade dos algoritmos tem a ver com a arquitectura de memria do computador. 5.2. Alocao (colocao) de Memria So representados por duas rotinas: endereo = AlocMem (dimenso) LibMem (endereo) A 1 rotina devolve o endereo de um bloco de memria livre da dimenso igual ou maior que o pedido. O SO tem de utilizar estes algoritmos quando: - Na criao e terminao de processos - Por extenso do espao de endereamento. 5.2.1. Alocao de Pginas Como as pginas so todas do mesmo tamanho (uniformidade da memria), o algoritmo trivial: aloca-se qualquer pgina que esteja livre. As pginas livres so mantidas numa lista, geralmente gerida em FIFO. 5.2.2. Alocao de Segmentos mais complexa pois preciso encontrar um segmento com dimenso suficiente. Entre os blocos livres maiores que o pedido, tem que se decidir qual deles provocar menor fragmentao externa. Mas um algoritmo muito complicado pode comprometer o desempenho, por demasiado lento. A estrutura de dados manipulada pelas rotinas de alocao de segmentos composta por uma lista de blocos de memria livres. Cada registo contm o endereo do bloco livre e a sua dimenso. A lista est ordenada por endereos fsicos de forma a se poder agrupar blocos contguos na libertao. Certos algoritmos ordenam tambm por dimenso do bloco. Habitualmente os blocos tm granularidade mnima, do valor de uma potncia de 2. Embora provoque fragmentao interna, existem algumas vantagens: - Evita que se gerem fragmentos muito pequenos, que seriam de difcil aproveitamento e iriam aumentar o comprimento da lista, tornando a pesquisa lenta. - Os blocos devolvidos ficam naturalmente alinhados numa fronteira de palavra. - Os registos da lista de blocos livres precisam de menos bits. Os diversos algoritmos que iremos analisar diferem na poltica de escolha do bloco a devolver: Best-Fit Pesquisa a lista procura do bloco cuja dimenso seja a mais prxima (por excesso) da dimenso pedida. Deixa livre, normalmente, fragmento pequeno de difcil reutilizao. A lista ordenada por dimenso crescente de blocos. Em mdia preciso percorrer metade da lista para encontrar o bloco certo, e depois preciso reintroduzir o fragmento na posio adequada da lista. Worst-Fit Pesquisa a lista procura do maior bloco livre. A ideia o fragmento ainda servir. Tem a desvantagem de esgotar primeiro os blocos maiores, o que pode fazer com alguns pedidos subsequentes no possam ser atendidos.

A lista ordenada por ordem decrescente de dimenso dos blocos, pelo que o maior sempre o primeiro. Tambm preciso reintroduzir fragmentos. First-Fit Pesquisa a lista por ordem crescente (ou decrescente) de endereos e escolhe o primeiro bloco livre com dimenso suficiente. Procura optimizar o tempo de alocao diminuindo o nmero de registos a percorrer na lista. Gera um grupo de pequenos blocos no incio. mais rpido que os anteriores, embora gere maior fragmentao. No h necessidade de manter lista ordenada por dimenso. No tem de se reintroduzir fragmentos. Next-Fit um first-fit modificado, em que a pesquisa do bloco livre comea no ponto onde terminou o anterior, evitando-se a pesquisa dos fragmentos pequenos no incio das lista. Tem a desvantagem de espalhar fragmentos pela memria toda. Buddy Organiza a memria livre em blocos de dimenso bn, b e n n naturais. Normalmente b =2, o que origina o buddy binrio. Para satisfazer um pedido de dimenso D, percorre-se a lista procura de um bloco de dimenso R tal que 2k-1 < R < 2k. Se tal bloco no for encontrado, a lista percorrida procura de um bloco de dimenso 2k+i , i>0, que ser dividido em duas partes iguais, de dimenso 2k+i-1, chamados buddies. Um destes buddies ser ainda subdividido quantas vezes as necessrias at se obter um bloco de dimenso 2k. Se possvel, na libertao o bloco recombinado com o seu buddy, sendo a associao entre buddies repetida at se obter um bloco com a maior dimenso possvel. Este mtodo mais elaborado permite um bom equilbrio entre o tempo de procura e a fragmentao interna e externa. 5.3. Algoritmos de Transferncia Determinam quando um bloco de memria deve ser transferido entre memria secundria e central. Existem 3 alturas em que a transferncia pode ser feita: - A pedido (on request): o programa ou o SO determinam explicitamente quando se deve carregar o bloco em memria; - Por necessidade (on demand): o bloco acedido e gera-se uma falta de pgina ou segmento, sendo necessrio carreg-lo em memria - Por antecipao: o bloco carregado em memria pelo SO, pois este considera fortemente provvel que ele venha a ser acedido nos prximos instantes. 5.3.1. Transferncia de Segmentos (Swapping) Para o processo se executar tem de te todos (4) os segmentos carregados em memria. Quando um novo processo criado, possvel que no haja espao em memria para o conter. Nesse caso necessrio transferir um ou mais segmentos de outros processos par o disco. Geralmente escolhe-se um processo e transferem-se todos os seus segmentos, pois intil ter apenas alguns em memria. Nesta altura diz-se que o processo foi transferido para disco (swapped out). Um segmento sempre transferido como um todo. Este mecanismo denomina-se transferncia de segmentos (swapping) e permite, de uma forma simples e sem hardware sofisticado, oferecer um ambiente de multiprogramao. As transferncias descritas so feitas a pedido. Um processo transferido para memria quando est executvel mas swapped out e o SO considera que o deve carregar para executar em breve. A passagem para executvel pode acontecer mesmo quando estava swapped out, porque o sistema guarda o seu descritor residente em memria. Nunca h falta de segmento, o que permite algoritmos muito simples (Unix sobre PDP-11) Em mquinas mais complexas, que suportem faltas de segmento, possvel mais sofisticao, em que certos segmentos de um programa s so carregados por necessidade. Tem interesse se o processo constitudo por vrios segmentos. Tem a vantagem de s carregar um segmento em memria quando ele mesmo necessrio.

Os segmentos que no cabem de momento em memria so colocados numa zona separada de disco, chamada rea de transferncia (swap area). Aloca-se com na memria. Quando o segemento transferido para disco, guarda-se no seu descritor da tabela de segmentos o bloco de disco onde comea o segmento na rea de transferncia. Em memria segmentada no se utiliza, geralmente, tcnicas de carregamento por antecipao. Mas pode optimizar-se guardando os mais utilizados na swap area em blocos contguos. 5.3.2. Transferncia de Pginas O mecanismo normal de transferncia de pginas por necessidade (on demand). Quando a pgina se encontra no disco, a PTE contm, em vez do endereo real da pgina, o bloco de disco onde a pgina se encontra. Quando ocorre falta de pgina, o SO aloca uma pgina, retirando-a da lista de pginas livres, preenche a PTE com o endereo fsico da pgina e inicia a leitura do disco. Depois posiciona o bit P a 1 e coloca o processo na lista dos executveis. No inverso determina o bloco do disco... Tipicamente, cada processo tem uma tabela de pginas para o cdigo e outra para os dados e pilha. Existe ainda a do SO. As pginas de cdigo e dados inicializados em tempo de compilao podem ser lidas directamente do ficheiro. Quando o SO pe o programa em execuo, percorre a tabela de pginas do processo, coloca em cada PTE o bit P a 0 e escreve o n de bloco dessa pgina no ficheiro. O cdigo no lido duma vez, vo-se gerando faltas de pgina. Nestes caso possvel aplicar polticas de antecipao, que consistem em ler em avano algumas pginas. Tem 2 vantagens: diminui-se o n de faltas de pgina e optimizam-se os acessos ao disco. Pode ler-se pginas no necessrias. O sistema mantm uma zona de disco onde escreve as pginas, chamada rea de paginao. O bit P da PTE colocado a 0 e no lugar do endereo fsico de incio da pgina coloca-se o bloco de disco onde a pgina est guardada. Tem de se ver se j h em disco (ex. cdigo no preciso reescrever). A escrita de pginas em memria secundria feita em grupo. As pginas modificadas so guardadas numa fila at uma certa dimenso. 5.4. Algoritmos de Substituio 5.4.1. Substituio de Pginas Os algoritmos de substituio so particularmente importantes na memria paginada. Quando no h pginas livres, ter de se retirar uma pgina a um processo para satisfazer o pedido. O SO mantm 2 listas de pginas: a lista de pginas livres e a lista de pginas livres mas modificadas. As primeiras podem ser usadas a qualquer momento; as segundas tm de ser escritas em disco antes de serem reutilizadas. Se o n de pginas livres ficar abaixo de um mnimo, acordado o processo paginador, que ir libertar pginas, utilizando um dos algoritmos que a seguir veremos, at que o n suba acima de um valor mximo. Periodicamente a lista de pginas modificadas escrita em disco e as pginas desta lista passam para a lista de pginas livres. Um programa tende a concentrar as referncias memria em determinadas zonas durante certos perodos Princpio da localidade de referncia boa indicao para futuro prximo, para no retirarmos pginas que vo logo ser precisas. Os mtodos que vamos ver seguem todos este raciocnio. Todos eles mantm uma histria dos ltimos acessos memria feitos pelo programa, como forma de decidir qual a pgina que, em princpio, ser menos provvel de vir a ser acedida nos instantes seguintes. Menos Usada Recentemente (LRU) A que no seja acedida h mais tempo. No entanto, a sua aplicao rigorosa implica que se determine exactamente a pgina que no acedida h mais tempo. Uma possibilidade de o fazer seria registar na PTE uma marca de tempo (timestamp) cada vez que a pgina fosse acedida, procurando depois a que tivesse a marca mais antiga. Teria de ser efectuado pelo hardware de gesto de memria complexo e dispendioso. H variantes mais simples que dividem as pginas em grupos etrios. O Unix V mantm a idade em 3 bits na PTE e inicializados a 0.

Se o bit R estiver a 0 o processo paginador, acordado regularmente, incrementa-o; se R estiver a 1 o contador e o bit R so postos a zero. Quando o contador chegar a um n mximo a pgina marcada como invlida (bit P a 0) e posta na lista das pginas livres ou modificadas. No Usada Recentemente (NRU) simplificao do LRU. O processo paginador percorre regularmente as tabelas de pginas, analisa os bits R e M e volta a colocar o bit R a 0. As pginas dividem-se em 4 grupos: - Grupo 0 (R= 0, M=0) No referenciada, no modificada - Grupo 1 (R=0, M=1) No referenciada, modificada - Grupo 2 (R=1, M=0) Referenciada, no modificada - Grupo 3 (R=1, M=1) Referenciada e modificada O algoritmo escolhe uma pgina qualquer do grupo mais baixo que no esteja vazio. 2 bits de hardware apenas. possvel realizar o NRU em mquinas que no possuam o bit R (ver pg. 127) FIFO Escolhe a pgina que esteja h mais tempo em memria. A grande desvantagem que a pgina mais antiga , possivelmente, muito acedida. A vantagem a simplicidade do algoritmo. Em geral, nenhum SO usa FIFO puro, mas o VMS e outras Unix usam FIFO modificado, com 3 listas (ocupadas, livres e livres mas modificadas). Todas as listas so geridas em FIFO. O paginador em vez de percorrer as listas limita-se a retirar as de que necessita da lista de pginas ocupadas. Desta forma as mais antigas vo para as livres ou modificadas (cache). Espaos de Trabalho Os processos devem roubar pginas uns aos outros ou s a si mesmos? Se paginar contra si prprio, qual deve ser o n de pginas a manter em memria? Na dcada de 70 Denning desenvolveu a teoria dos espaos de trabalho (working sets). Define-se o working set de um processo num determinado intervalo de tempo como sendo o n de pginas acedidas pelo processo nesse intervalo. interessante verificar que para tempos razoveis (20, 50 ms) o working set de um processo se mantm constante. Se estiverem em memria menos pginas que o ws h constantes falhas de pgina. Se vrios tiverem este comportamento h colapso (thrashing) do sistema. Ex. no VMS um processo s colocado em memria central se existir um n mnimo de pginas livres (ws mnimo), que depois pode crescer at um valor mximo aps o que comea a paginar contra si mesmo. Se o n descer abaixo do ws mnimo (devido a um prioritrio, por exemplo) o proceso swapped out. 5.4.2. Substituio de Segmentos A deciso no pode ser tomada pelos mesmos critrios usados para a paginao, pois o segmento ideal a substituir pode ser demasiado pequeno. Geralmente usam-se 3 critrios: - Estado e Prioridade do processo: processos adormecidos e pouco prioritrios so os primeiros candidatos a ir para disco. - Tempo de permanncia do processo em memria: os mais recentes no devem sair logo - Dimenso do processo 5.5. Anlise Comparativa da Segmentao e Paginao 5.5.1. Segmentao Vantagens: - Adapta-se estrutura lgica do programa - Permite a realizao de sistemas simples sobre hardware simples - permite realizar eficientemente as operaes que agem sobre um segmento inteiro Desvantagens: - O programador tem de ter sempre algum conhecimento dos segmentos subjacentes - Os algoritmos tornam-se bastante complicados em sistemas mais sofisticados

- O tempo de transferncia de segmentos entre memria central e disco torna-se incomportvel para segmentos muito grandes - A dimenso mxima dos segmentos limitada. As caractersticas que tornam, a segmentao vantajosa para sistemas simples (PCs), transformam-se em desvantagens insuperveis para sistemas mais complexos. 5.5.2. Paginao Vantagens: - O programador no tem que se preocupar com a gesto da memria - Os algoritmos de alocao, transferncia e substituio so mais simples e eficientes - O tempo de leitura de uma pgina de disco razoavelmente pequeno - a dimenso dos programas virtualmente ilimitada Desvantagens: - O hardware mais complexo, no permitindo realizao de mquinas de baixo custo (por enquanto) - Operaes sobre segmentos lgicos so mais complexas e menos elegantes - O tratamento de faltas de pginas representa uma sobrecarga ao processamento. O aspecto da visibilidade pelo programador da organizao de memria de importncia fundamental. Nas mquinas de arquitectura segmentada, o programador tem vrias formas de gerir a memria: - O cdigo fica num segmento, os dados e a pilha noutro. o modelo mais usado. ... Um outro aspecto muito importante o desempenho. A paginao segue uma aproximao fsica, de acordo com o que for mais eficiente executar. A segmentao segue uma aproximao lgica, que nem sempre possvel executar com eficincia.

CAP. 6 COMUNICAO ENTRE PROCESSOS 6.1. Modelo de Comunicao Os mecanismos de sincronizao descritos no cap. 2 permitem controlar a execuo de um processo em funo do estado das variveis de sincronizao. Os mecanismos de comunicao permitem generalizar as interaces entre processos, associando a sincronizao e a transferncia de informao. A comunicao pode sempre reduzir-se a uma interaco entre um produtor e um consumidor de informao (mensagem interpretada segundo um determinado cdigo ou protocolo). Do ponto de vista do sistema, a mensagem normalmente considerada como uma sequncia de octetos no sendo importante a sua estrutura interna (protocolos). A transferncia suportada por um canal, que tem de oferecer fiabilidade, sendo, normalmente, mecanismo interno do SO. 6.1.1. Identificadores do Canal de Comunicao Nas primitivas de transferncia de informao necessrio identificar o canal, que define o par produtor/consumidor, podendo ser explicitado de forma directa ou indirecta. Na directa, a cada processo implicitamente associado um canal. O identificador atribudo pelo sistema na sua criao utilizado para o identificar nas primitivas de comunicao. Os canais so implicitamente criados e geridos pelo SO. Enviar (IdProcCons, Mensagem) Receber (IdProcProd, ApontMensagem) Esta soluo coloca alguns problemas, pois obriga a indicar explicitamente no cdigo o processo correspondente, tornado difcil a implementao de estruturas genricas, por ex., com vrios receptores sobre o mesmo canal. A indirecta melhora isso. Os canais so explicitamente criados. Enviar (IdCanal, Mensagem) Receber(IdCanal, ApontMensagem) Um processo pode possuir vrios canais, com significados especficos (especializados). Reciprocamente, um canal pode ser partilhado por vrios processos. Os canais devem ter identificadores, para os processos os designarem. a gesto dos identificadores com o SO (espao de nomes). Como qualquer outro objecto do sistema, tem de haver mecanismos de proteco dos canais que garantam a sua boa utilizao. Quando um canal criado fica a pertencer a um processo com poderes para determinar quais os processos que se lhe podero associar e eliminar o canal. Devido semelhana h SO que usam a estrutura de directrios do sistema de ficheiros para manter os identificadores dos canais. 6.1.2. Armazenamento das Mensagens O canal pode conter apenas uma mensagem ou ter capacidade para vrias. Se no tem capacidade de memorizao, o produtor tem de ficar bloqueado at que o receptor execute primitiva de recepo. A capacidade permite optimizar a estrutura das aplicaes e tem a ver com a dimenso e nmero de tampes do ncleo. 6.1.3. Estrutura das Mensagens A comunicao pode fazer-se atravs de mensagens individualizadas ou de uma interface em que os processos escrevem/lem sequncias de caracteres (byte stream). O primeiro tipo de interface o mais comum corresponde ao conceito habitual de um sistema de comunicaes por mensagens. Contudo o segundo vulgar nos sistemas de ficheiros e na interface das E/S. Normalmente so oferecidos os 2 e o 2 pode ser implementado atravs do primeiro com controlo do SO por algoritmos. 6.1.4. Sincronizao A primitiva de envio de mensagens pode ter diversas semnticas: - Assncrona O cliente envia o pedido e continua a execuo - Sncrona o cliente fica bloqueado at que o servidor leia a mensagem Cliente/Servidor o cliente fica bloqueado at que o servidor envie uma mensagem de resposta. A assncrona a mais vulgar.

Caso no haja memorizao tem de haver sincronizao estrita (sncrona por rendez-vous). A ltima no geralmente oferecida pelos SO comuns, sendo vulgar nos sistemas distribudos. 6.1.5. Implementao da Transferncia de Dados A implementao do canal um aspecto de grande importncia e relaciona-se com os mecanismos que o SO dever fornecer para permitir a transferncia da informao fsica. Numa aproximao simplista podemos pensar que bastava os processo terem acesso a uma zona de memria comum, mas h os mecanismos de proteco que no deixam um processo aceder a uma zona de memria fora do seu espao de endereamento. Torna-se portanto necessrio um suporte adicional dos mecanismos de gesto da memria ou funes de transferncia internas ao ncleo com privilgios. Ambas as solues so possveis. A primeira soluo corresponde possibilidade de o mecanismo de gesto de memria criar zonas de memria partilhada, mapeadas nos 2 espaos de endereamento. A maioria tem para o utilizador manipular explicitamente. A segunda uma chamada a uma funo do sistema. a mais vulgar, usando o espao do ncleo para a transferncia. A implementao do canal assume importncia vital nos sistemas distribudos, por protocolos. 6.2. Relaes Entre Processo Produtor e Processo Consumidor 6.2.1. Mestre / Escravo A estrutura mestre/escravo pressupe que o processo receptor tem a sua aco totalmente controlada por um processo mestre. - A actividade do escravo totalmente controlada pelo mestre - O mestre no tem de pedir permisso para utilizar o escravo mas no lhe pode atibuir nova tarefa antes que este tenha terminado a anterior. A sincronizao , portanto, estrita entre as operaes de envio e recepo de informao. - O canal que define a associao entre o mestre e o escravo fixo o modelo mais simples (de implementao), mas a sua rigidez limita a sua utilizao. ex: Prod ProcEscrita 6.2.2. Correio O correio baseia-se na possibilidade de transferncia assncrona de informao sob a forma de mensagens. ProcEscrita Gere Imp GereImp no trabalha par um nico processo, mas para o conjunto de processos no sistema. A informao transmitida tem de ficar armazenada no canal de comunicao, at que GereImp possa receb-la. Assim GereImp no escravo de um processo que quer imprimir mas sim de um processo autnomo do sistema, que oferece um servio aos restantes. O processo cliente no tem de ficar bloqueado espera que o servio solicitado na mensagem seja executado. As caractersticas do correio podem resumir-se: - O emissor no tem de pedir permisso para enviar mensagem. Pode, contudo, ficar bloqueado se a capacidade de memorizao do canal tiver sido excedida. - O emissor no tem qualquer controlo sobre o ou os receptores - O canal deve memorizar as mensagens durante o intervalo de tempo que decorre entre a sua produo e os eu consumo. O canal vulgarmente chamado caixa de correio. 6.2.3. Dilogo O dilogo um modelo de comunicao que se pode considerar como apresentando caractersticas comuns aos 2 anteriores. Como o 1 tambm estabelece um canal permanente entre os 2 processos. Contudo criado de forma dinmica. A associao durar o tempo da interaco. Por razes de eficcia quando a interaco longa. Ex. gestor de bandas magnticas. Inicialmente o cliente tem de pedir ao gestor das unidades de banda, atravs de uma caixa de correio, que lhe seja atribuda uma unidade. H analogia dos 2 ltimos modelos com as duas interfaces de comunicao em redes de dados (pacotes-datagram e ligao virtual).

Nos centralizados a interaco do tipo dilogo menos vulgar que a correio, que aparece contudo nos sockets Unix, por exemplo. Resumo das caractersticas: - Existe um canal fixo entre os processos, mas a sua criao dinmica - Um dos processos deve requisitar o estabelecimento da ligao - A associao entre cliente e servidor temporria. 6.2.4. Difuso Pode ser considerada um caso especial dos anteriores mas de capital importncia nos sistemas distribudos. Pretende-se enviar a mesma informao a um conjunto de processos. Distingue-se do correio porque, apesar de neste modelo tambm poderem existir vrios receptores, cada mensagem apenas lida por um processo. Exemplo de utilizao seleco de um processo interlocutor. Ex. vrios processos gestores de impressoras, um utilizador poder querer saber se algum controla uma a laser por ex. Quando se quer aumentar a fiabilidade a difuso tambm pode ser importante. ex. 2 sistemas de ficheiros com informao replicada. Pode implementar-se sobe um modelo de correio, obrigando o emissor a repetir a mensagem um n de vezes..., mas isso custoso. Existe crescente interesse nos sistemas distribudos. 6.3. Comunicao no Modelo Computacional 6.3.1. A Memria Partilhada o mais simples para implementao de um canal de comunicao entre 2 processos. A zona de memria deve fazer parte do espao de endereamento dos 2 processos. Nos sistemas de memria paginada e segmentada, como vimos, esta facilidade normalmente oferecida. A nvel do modelo computacional, a utilizao baseia-se numa primitiva que permite criar uma regio de memria partilhada e atribuir-lhe um nome lgico. A primitiva devolve o apontador no qual pode ser baseada a estrutura de dados de comunicao. Da posse do nome lgico, um outro processo pode requisitar o uso da regio. A primitiva de associao devolve um apontador, que corresponde mesma zona. Endereo = CriarRegio (Nome, Tamanho) Endereo = AssociarRegio (Nome) EliminarRegio (Endereo) Uma zona pode implementar a difuso. Para implementar qualquer dos outros modelos temos de recorrer aos mecanismos de sincronizao. O mestre/escravo simples: Mestre: - produzir informao - assinalar ao escravo - outras actividades - esperar resposta do escravo Escravo: - esperar sinal do mestre - processar a informao - enviar resposta - assinalar fim da operao Recorrendo a 2 semforos privados, para garantir a sequncia das aces: 6.3.2. Caixas de Correio Implica estrutura mais complexa. Para simplificar a vida dos programadores, os sistemas oferecem directamente objectos do tipo caixa de correio. Nas implementaes mais vulgares, as caixas tm capacidade de memorizao. Assim, o produtor s se bloqueia se caixa estiver cheia e o receptor bloqueia-se sempre que a caixa estiver vazia. A implementao mais vulgar das caixas de correio baseia-se na criao de um objecto controlado pelo sistema que efectua a sincronizao e faz as transferncias de informao.

Apesar de constiturem um mecanismo normalmente oferecido pelo sistema operativo, podemos facilmente programar uma caixa de correio com recurso a uma zona de memria partilhada e aos tradicionais mecanismos de sincronizao. fig. 6.9. pg. 148 Normalmente a mensagem especificada atravs de um apontador e de um parmetro que indica o respectivo tamanho ou utiliza-se um caracter terminador para a delimitar. A implementao segue a sincronizao mais habitual: o produtor bloqueia-se quando caixa cheia (semforo Cheio) e o consumidor sempre que no existam mensagens (semforo Vazio). No nosso modelo computacional vamos considerar a semntica mais vulgar (envio assncrono e cap. de armazenamento), as primitivas so: IdCC = CriarCCorreio (Nome, Parmetros) IdCC = AssociarCCorreio (Nome) EliminarCCorreio (IdCC) O nome da caixa dever ser mantido nas tabelas do sistema de forma a permitir que outro processo se lhe associe. A fig. 6.10. (pg.150) ilustra a programao de um modelo cliente/servidor, usando caixas de correio. 6.3.3. Ligaes Virtuais O modelo computacional de suporte ao dilogo necessita de primitivas que permitam estabelecer uma ligao virtual entre os processos. O processo servidor tem de declarar a sua disponibilidade de aceitar ligaes registando o nome do canal e colocando-se espera de pedidos de ligao. IdCanalServidor = CriarCanal (Nome) IdCanal = AceitarLigao (IdCanalServidor) A associao ao canal retorna o identificador do canal que fica dedicado ao par de processos. De forma recproca, a primitiva AceitarLigao devolve o identificador do canal que ficou associado comunicao. Do lado dos clientes o estabelecimento das ligaes mais simples, resumindo-se primitiva: IdCanal = PedirLigao (Nome) Ver fig. 6.12. pg. 153 Programao do Modelo de Dilogo

CAP. 7 AS ENTRADAS / SADAS 7.1. O Modelo das Entradas/Sadas A forma mais habitual de interaco de um programa com o ambiente que o rodeia atravs das Entradas/Sadas. Uma operao de E/S pode ser visualizada como o estabelecimento de um canal com um perifrico atravs do qual o processo recebe ou envia informao que pode ser gerada, armazenada ou afixada pelo perifrico fsico. Esta descrio esconde a grande complexidade, principalmente devido grande diversidade de perifricos. As operaes efectuadas pelos perifricos so muito variadas e at as suas caractersticas fsicas da interaco. EX: - Unidade de Transferncia de Informao (caracter, cadeias de caracteres, blocos de tamanho fixo) - Velocidade de Transferncia de alguns caracteres por segundo at 100 milhes de bits nas redes de fibra ptica - Representao dos Dados Ascii, Ebcdic Esta diversidade foi responsvel pelo facto das E/S serem a rea pior estruturada dos SO iniciais (agregado de rotinas totalmente dependente do perifrico fsico). Hoje em dia os controladores encarregam-se de interactuar com os dispositivos fsicos, apresentando uma interface mais clara com nveis de abstraco. Outra dificuldade do tratamento das E/S advm da necessidade de os processos acederem directamente ao hardware dos controladores e manipularem as interrupes que lhe esto associadas, devido aos mecanismos de proteco (utilizador) pelo que tero de ser feitos pelo ncleo ou processos com privilgios especiais. 7.1.1. Objectivos do Modelo de E/S A independncia entre o modo como as operaes de E/S so especificadas nos programas e a forma como so implementadas pelos perifricos fsicos, comeou a tornar-se importante em sistemas complexos e que pretendiam aceder a um conjunto de perifricos indiscriminadamente. A independncia em relao aos perifricos permitia uma gesto mais eficiente dos recursos. Com a generalizao dos sistemas de tempo partilhado isso tornou-se ainda mais importante (ex: visualizar antes de enviar para impressora). A noo que os perifricos deviam ser virtualizados tornou-se geral. de salientar que independncia na utilizao de um perifrico tem 2 vertentes: uma relacionada com a designao do perifrico e outra com a uniformizao das operaes efectuadas. A designao um problema semelhante ao da identificao directa ou indirecta dos canais. A uniformizao de operaes mais complexa. Se bem que existam operaes genricas como ler ou escrever, os perifricos possuem funes de inicializao, controlo e leitura do estado que lhes so prprias. Contudo, apesar da diversidade possvel construir solues baseadas em rotinas com parmetros genricos. H grandes semelhanas com os mecanismos de comunicao, que at pode permitir a integrao num modelo comum. Apesar disso, a redireco das E/S s adquiriu uso generalizado no sistema Unix. 7.1.2. Elementos do Modelo O modelo de E/S procura garantir uma uniformidade de interaco e solucionar os problemas de proteco. A interaco com os perifricos decomposta em 2 nveis: um prximo do utilizador, que apresenta uma interface de alto nvel independente dos perifricos, e outro interno ao sistema, especializado conforme o tipo de dispositivo. Vamos basear o modelo em 3 entidades: - Perifricos Virtuais - Funes de E/S um dos objectivos do modelo reduzir e uniformizar o n de operaes diferentes. Podemos levar ao limite de uma operao apenas: uma rotina chamada EfectuaES, teria um conjunto de parmetros que definem a operao e o perifrico virtual. - Gestor de Perifrico elemento do modelo que efectua a interaco real com o perifrico (device driver ou device handler). Assume frequentemente a forma de um processo independente. Pequeno ex. para ver como se articulam as diferentes entidades do modelo: A funo de E/S uma rotina sistema que inicia a operao de E/S enviando para o gestor de perifrico a informao necessria para que este a possa executar. Normalmente h uma

mensagem normalizada (I/O Request Block IORB). Os dados podem ser transferidos para tampes do sistema ou mantidos no espao de endereamento do processo at a operao se concluir. Podemos ainda considerar que o perifrico partilhado por diversos utilizadores. Ento gestor tem uma caixa de correio para os IORBs. O gestor est normalmente bloqueado. O gestor poderia ficar a testar se a operao j tinha terminado, mas isso pouco eficiente. O sistema notificado que a operao terminou, atravs de uma interrupo. A rotina de int. efectua um processamento mnimo (no convm int. muito tempo bloqueadas) e assinala ao gestor o fim da operao. O esqueleto do modelo E/S est na fig. 7.1. (pg. 158). 7.2. O Modelo Computacional das E/S O perifrico virtual pode ser visto como um canal de comunicao que explicitamente estabelecido e sobre o qual so trocadas informao entre o processo utilizador e o gestor de perifrico que na outra extremidade interactua com o perifrico. Temos de analisar como na comunicao, como um processo se associa a um perifrico e a sincronizao implcita nas operaes. 7.2.1. Associao ao Perifrico Virtual Traduz-se pelo estabelecimento de um canal de comunicao entre o processo e o gestor de perifrico. IdCanal = AbrirCanal (Nome) FecharCanal (IdCanal) Por exemplo, no Unix, os canais de E/S so logicamente integrados no sistema de ficheiros, pelo que so identificados como os ficheiros. Identificador normalmente um inteiro; local ao processo. 7.2.2. Funo de E/S A rotina de E/S deve comear por validar os parmetros independentes do perifrico. Depois, a rotina prepara um IORB contendo os campos necessrios execuo da operao de acordo com os parmetros fornecidos na chamada. EfectuaES (IdCanal, Operao, EndereoDados, Tamanho, Semforo) A execuo do gestor iniciada transmitindo-lhe o IORB pelo canal criado. H 2 modos de implementao do gestor que correspondem a 2 modos de o activar. Dependendo do tipo de sincronizao associado operao, o programa pode continuar ou bloquear-se no semforo. Na interaco com os perifricos vulgar considerar 2 tipos de interface para trx. de dados: - Sequncia de caracteres de tamanho varivel (bytestream) memria de massa - Blocos de tamanho fixo interactivos/de comunicao Sincronizao O problema idntico ao do modelo de comunicao. H um ganho significativo de desempenho se o processo apenas efectuar a transferncia para uma estrutura de dados tampo interna ao ncleo, prosseguindo imediatamente sem esperar que os dados sejam efectivamente escritos no dispositivo fsico. Isto na escrita. A leitura naturalmente bloqueante. No cap. 9 veremos leituras assncronas, para eliminar limitaes de progaramao de alguns algoritmos. Funes de E/S Nas Linguagens de Programao As linguagens de alto nvel incorporam no seu modelo computacional rotinas que permitem ao utilizador programar a interaco com os perifricos sem ter de se preocupar com problemas de sincronizao, formatao, gesto de tampes, etc. Mas esta incluso impe um funcionamento rgido no permitindo, por vezes, programar as formas de interaco desejadas. Um exemplo tpico o read em Pascal que no l uma cadeia de caracteres do terminal quando o programador o indica, s na linha completa, o que impede o controlo por setas. O C usa bibliotecas.

Leitura de um terminal Alfanumrico canal := AbrirCanal (TTY); Sem := CriarSemforo (0); <...> while not Fim do begin EfectuaES (Canal, LER, Car, 1, Sem); Esperar (Sem); case Car do CR : <...>; LF : <...>; ESC : <...>; otherwise <...> end; end; Entrada de um terminal numa linguagem de programao while not Fim do begin read (Car); case Car do CR : <...>; LF : <...>; ESC : <...>; otherwise <...>; end; end; 7.3. Gestores de Perifrico 7.3.1. Funcionalidade A funcionalidade do gestor pode ser esquematizada de forma simples (fig. 7.4., pg. 162), apesar da sua implementao ser, normalmente, muito complexa. O gestor deve receber o IORB, validar os parmetros dependentes do perifrico e descodificar a funo a executar pelo perifrico. Esta informao deve permitir construir a sequncia de comandos a enviar ao controlador. Pode ainda ter necessidade de transferir dados do espao de endereamento do utilizador para tampes prprios. Quando todas as tarefas de inicializao esto terminadas, a interrupo associada ao controlador deve ser desinibida e a operao de E/S desencadeada. Esta inicializao traduz-se muitas vezes por efectuar a 1 operao que provoque uma interrupo. Ex. trx. srie: o gestor escreve o 1 caracter e a rotina de int. encarrega-se de trx. o resto. A rotina de int. deve executar conjunto reduzido de operaes, para no inibir int. muito tempo. Depois de realizar operaes imprescindveis, assinala ao gestor o final da operao para que este conclua o processamento. Quando a op. termina, o gestor avisa o processo da sua concluso. Numa interface sncrona, esta aco corresponde a executar Assinalar sobre o semforo (trx. no IORB). O DOS bom exemplo. a interaco com os gestores de perifricos feita por um bloco de controlo (request header 13 campos fixos + rea varivel). Os gestores so carregados na inicializao do sistema (os que estiverem na lista do Config.Sys). 7.3.2. Processo Independente (grande flexibilidade) ou Funo Sistema A prioridade do gestor deve ser elevada e os seus privilgios ultrapassar as proteces. A gesto de memria necessita de ter em conta as caractersticas especiais do processo, dado que este no pode ser retirado de memria quando espera informao de um perifrico. Depois de indicado ao controlador de DMA o endereo para onde deve transferir os dados, este espao de memria fsica no deve ser atribudo a outro processo.

H sacrifcio do desempenho, devido a comutao dos processos. Por isso alguns sistemas implementam-nos directamente no interior do ncleo. Nesta implementao a rotina de E/S, em vez de enviar uma mensagem ao processo gestor de perifrico, chama uma rotina sistema que agulha para os procedimentos que implementam o gestor (fig. 7.5. pg.164). A rotina s retorna quando a E/S se conclui. Tal poder ocorrer imediatamente, se a operao apenas exigir manipulao de dados do ncleo, ou depender da execuo da operao pelo perifrico. Neste caso a rotina do gestor inicializa do mesmo modo o controlador e indica ao gestor de processos que pode continuar com outro processo at que a rotina de interrupo lhe indique que a operao do perifrico terminou. A vantagem desta soluo a maior simplicidade e reduo de operaes, dado que evita a comutao do processo. Contudo, a soluo com um processo independente permite melhor isolamento das entidades que interactuam com a E/S. 7.3.3. Programao do Gestor de Perifrico de grande complexidade, situando-se a todos os problemas de interaco com os controladores e com as restantes nveis do sistema. A prpria eficincia das E/S depende muito do gestor. O esquema base decompe-se em: - Descodificador de comandos (simples) - Rotinas de interaco com o controlador de hardware (simples) - Armazenamento temporrio dos dados - Interaco com a memria virtual - A rotina de interrupo. Armazenamento Temporrio dos Dados Nos perifricos de armazenamento de dados os gestores so escravos dos processo utilizadores, nos de comunicao no: tm de estar sempre prontos a receber dados sem aviso prvio. Tm de ter tampes, de tamanho geralmente varivel. O dimensionamento e gesto dos tampes uma das partes delicadas da programao de um gestor de perifrico. A utilizao de tampes alternados ou tampes circulares so as 2 tcnicas mais vulgares. A primeira consiste simplesmente na utilizao de 2 tampes comutando de um para outro quando um se encontra preenchido. Tem limitaes bvias a situaes de dbito pequeno ou controlado. A 2 melhor para recepo de informao de tamanho varivel. O dimensionamento obedece a uma anlise estatstica do trfego previsvel. A maioria dos protocolos permite parar quando cheio. A regulao do fluxo pode ser tratada pelo gestor mas normalmente relegada para software de nvel mais elevado. ex. do 1 caso so o controlo do fluxo de terminais assncronos (teclado), e do 2 gestor de rede local Ethernet, que ignora pacotes depois de cheio cabendo a software de camadas superiores recuperar a situao. Interaco Com a Gesto de Memria fundamental que as pginas envolvidas na transferncia de informao no sejam retiradas ao processo depois de se iniciar uma operao de E/S. Para tal o gestor deve assinalar gesto de memria que determinadas pginas devem ficar fixas (wired) durante a operao de E/S. Rotina de Interrupo Tem de ser programada com relativo cuidado porque qualquer erro fatal para funcionamento global do sistema. A sua estrutura tpica mais ou menos rgida: - Salvaguarda do contexto hardware que poder ser modificado pela rotina e que no foi automaticamente salvaguardado pelo processador - Bloquear as interrupes que possam interferir com o funcionamento da rotina - Determinar a causa da interrupo - Executar as operaes necessrias - assinalar ao gestor o respectivo acontecimento - repor a situao das interrupes - restaurar o contexto

interessante realar que na arquitectura do 80286 j foram includos no hardware mecanismos dedicados automatizao do arranque dos gestores de perifrico. Estas tarefas especiais (interrupt tasks) bloqueiam-se espera de interrupes e o hardware efectua automaticamente a comutao. 7.4. Partilha de Perifricos Alguns perifricos so utilizados exclusivamente por um processo. Por ex. unidade de banda magntica. Outros so partilhados de forma indirecta, como os discos. H ainda outros que apesar de obrigarem a utilizao exclusiva no necessita de ser atribudos a um processo, como por ex. as impressoras. Neste caso a soluo efectuar a E/S de forma indirecta. Em vez da rotina de E/S interactuar directamente com o gestor da impressora, comunica com um processo servidor que controla o gestor. O processo servidor interactua com os restantes processos utilizando os mecanismos de comunicao habituais e implementa gesto prpria com prioridades, etc. Esta partilha indirecta chama-se spooling e usa-se nas impressoras e plotters.

CAP. 8 SISTEMA DE FICHEIROS 8.1. Introduo voltil vs. persistente Neste captulo vamos abordar os aspectos mais importantes dos sistemas de ficheiros. A exposio est dividida em 3 partes: - Modelo Computacional: princpios gerais da organizao do SF e primitivas de acesso - Estrutura Interna do Sistema de Ficheiros: organizao da informao em disco - Controlo de Dispositivos de Memria Secundria: caractersticas fsicas dos dispositivos, optimizao dos tempos de leitura e escrita e sua relao com a organizao dos blocos em disco e com a utilizao das primitivas de acesso a ficheiros. 8.2. Modelo Computacional 8.2.1. Entidades Fundamentais Um ficheiro uma coleco de dados persistentes relacionados, identificados por um nome. Podemos decompor um ficheiro em 3 componentes: - Nome: identifica o ficheiro perante o utilizador - Descritor de Ficheiro: estrutura de dados em memria secundria com informao sobre o ficheiro (dimenso, datas de criao, modificao e acesso, dono, autorizaes de acesso) - Informao: dados guardados em disco Os nomes dos ficheiros so catalogados em directrios, que estabelecem a associao entre o nome e o descritor do ficheiro. O directrio pode conter os descritores dos ficheiros ou apenas os identificadores desses descritores. Neste caso, nomes diferentes podem corresponder ao mesmo descritor e, consequentemente, ao mesmo ficheiro. Um sistema de ficheiros um conjunto de ficheiros, directrios, descritores de ficheiros e estruturas de dados auxiliares, autnomos em termos de administrao e suporte fsico. Em geral cada SF reside num nico disco. SF tambm o mdulo do SO responsvel pelo acesso e organizao dos ficheiros. Por questes de desempenho, o acesso aos ficheiros feito em 3 etapas: - Abertura do ficheiro, dado o nome: o sistema pesquisa o directrio, copia o seu descritor para memria e guarda-o numa entrada da tabela de ficheiros abertos, cuja referncia, o identificador de ficheiro aberto, devolvida ao utilizador. - Leituras e escritas, dado o identificador de ficheiro aberto: este permite obter rapidamente a cpia do descritor do ficheiro em memria, onde est toda a informao necessria para aceder aos dados - Fecho do ficheiro: operao necessria para libertar a entrada na tabela de ficheiros abertos e actualizar o descritor de ficheiro em disco, caso tenha sido modificado. 8.2.2. Organizao dos Nomes dos Ficheiros Hierarquia de Nomes A organizao dos nomes de extrema importncia para o utilizador pois a face visvel externamente. A forma mais simples de organizar os nomes dar um nome a cada ficheiro, que se guardam num directrio nico (primeiros computadores em tratamento por lotes). Contudo levanta o problema da coliso de nomes. Uma primeira alterao foi atribuir um directrio a cada utilizador. No entanto, utilizadores com muitos ficheiros no os podia organizar de forma lgica. O Multics foi mo primeiro a propor organizao hierrquica na forma de rvore invertida: Comease pela raiz, os ficheiros so sempre folhas. O nome de um ficheiro, tambm chamado caminho de acesso (pathname), uma cadeia de caracteres que permite localizar o ficheiro na rvore. Nomes Absolutos e Nomes Relativos O caminho de acesso desde a raiz chamado nome absoluto. Em Unix, por ex. /a/b/c/d No entanto, ter de escrever sempre o nome completo fastidioso e pouco flexvel (ex. referncia a ficheiro em programa, no podia depois mudar de directrio). Por este motivo o SF suporta a noo de directrio corrente, podendo o ficheiro ser referenciado pelo nome relativo. Uniformidade dos Nomes

O Unix tem um espao de nomes uniforme. Ficheiros, directrios, dispositivos so referenciados usando exactamente a mesma sintaxe. Um dispositivo contendo um SF pode ser montado (primitivas mount e unmount) em qualquer directrio. Os dispositivos so acedidos por intermdio de ficheiros especiais agrupados no directrio /dev Esta uniformidade um dos pontos fortes do Unix, pois permite uma grande flexibilidade e coerncia de utilizao na redireco das E/S. O MS/DOS tem um espao uniforme para os ficheiros e directrios mas os dispositivos tm de ser referenciados explicitamente. ex: a:\b\c\d ou c:\a\b\c\d O VMS no tem uniformidade de nomes: um ficheiro composto por 3 partes: nome de dispositivo, cadeia de directrios e nome do ficheiro. Ex: a:[b.c]d Nomes e Extenses habitual os nomes terem extenses (so convenes) que do alguma informao sobre o contedo dos ficheiros. Alguns SO, como o Unix, no atribuem qualquer significado s extenses e aos nomes, pelo que no h restries. No VMS a extenso obrigatria. 8.2.3. Tipos de Ficheiros O tipo est relacionado com o seu contedo e forma de acesso. Um ficheiro composto por um conjunto de registos de determinado tipo. O mtodo de acesso pode ser sequencial (+ simples bandas magnticas), directo ou por chave. Os ficheiros de acesso directo so idnticos aos sequenciais mas pode posicionar-se em qualquer registo sem ter de percorrer os anteriores. No se pode inserir registos entre outros 2. Discos magnticos. O mtodo por chave permite inserir registos entre 2, pois a organizao interna destes ficheiros em rvore (ISAM Indexed Sequential Access Method) computadores de grande porte. O tipo de registos guardados num ficheiro pode ser de dimenso fixa ou varivel. No VMS por ex. um ficheiro de texto produzido pelo editor constitudo por registos de comprimento varivel, contendo cada registo uma linha. Os resultantes de compilaes so de dimenso fixa. Um caso particular muito importante so os registos tipo caracter pois com eles pode-se construir qualquer outro tipo. A interpretao do contedo dos ficheiros da responsabilidade dos programas que lidam com eles (ex. editor de texto sabe que caracter carriage return (13 em Ascii) significa fim de linha. O Unix suporta apenas este tipo de ficheiros. 8.2.4. Proteco Assume no SF uma importncia fundamental, pois os ficheiros constituem as entidades mais valiosas num computador e o acesso a pessoas no autorizadas significa catstrofe. Grande parte dos mecanismos de proteco que falmos (semforos, caixas de correio) esto relacionados, por vezes, mesmo baseadas na proteco do SF. O mecanismo de base o seguinte: quando um ficheiro criado, o SO guarda o nmero de utilizador que o criou e os direitos de acesso no descritor do ficheiro. As primitivas do SF acedem ao descritor e verificam se o utilizador que as efectua tem os direitos de acesso necessrios. Os identificadores (utilizador e dono) so geridos pelo SO.A verificao feita na cpia, abertura e remoo, pesquisa no directrio, pelo que na leitura e escrita j no necessrio. Na criao de processos tambm feito teste. Existem vrias formas de especificar os direitos de acesso: o mais intuitivo associar a cada ficheiro uma lista de acesso, especificando para cada utilizador, as operaes permitidas (Multics). Uma simplificao usada no Unix e no VMS consiste em agrupar utilizadores em grupos e especificar apenas a proteco para cada grupo. H 3 categorias de utilizadores: dono do ficheiro (owner), os utilizadores pertencentes ao mesmo grupo (group) e os restantes (world). menos potente mas eficiente pois apenas precisa de uns bits. 8.2.5. Sistema de Ficheiros e Entradas/Sadas Todos os SO procuram oferecer o acesso transparente aos dispositivos, de forma a que os programas funcionem em perifricos diferentes sem ser preciso alter-los. Podemos considerar que um ficheiro um dispositivo virtual, sendo as primitivas de acesso as mesmas que

especificmos para as E/S. No entanto o aceso a ficheiros mais frequente e complexo, sendo necessrio dispor de primitivas especiais (ex. apagar). Existem 2 formas de considerar o problema: - O SF situa-se num nvel acima das E/S implementado estas os mecanismos bsicos de acesso aos perifricos utilizados pelo SF para aceder ao disco. O SF usa servios do E/S. VMS - As E/S esto ao mesmo nvel que o SF. Os ficheiros so vistos como dispositivos virtuais e so acedidos com o mesmo tipo de funes (Unix). As primitivas E/S so mais complicadas que as que demos no cap. anterior mas tem a vantagem de servir tambm para o SF. Esta opo mais transparente. 8.2.6. Primitivas do Sistema de Ficheiros A maioria dos programas utiliza os mecanismos das linguagens de programao (instrues ou bibliotecas prprias que implementam modelo computacional prprio) para aceder ao SF. No utilizam directamente as do ncleo mas elas existem. Abertura, Criao e Fecho de Ficheiros Fd := Abrir (Nome, Modo) Fd := Criar (Nome, Proteco) Fechar (Fd) O modo leitura, escrita ou ambos. O SO verifica se o utilizador tem permisso para o modo especificado. Operaes Sobre Ficheiros Abertos Ler (Fd, Tampo, NumOctetos) Escrever (Fd, Tampo, NumOctetos) Posicionart (Fd, Posio) As 2 primeiras operam sobre o descritor de ficheiro, anteriormente obtido com Abrir ou Criar. Os mais simples (sequenciais) para os quais o SO mantm a posio actual numa varivel chamada apontador de ficheiro (file pointer). Os outros h posicionar para acesso a qualquer registo. Operaes Complexas Sobre Ficheiros Copiar (Origem, Destin) Mover (Origem, Destino) Apagar (Nome) LerAtributos (Nome, Tampo) EscreverAtributos (Nome, Atributos) Mover apenas se lhe muda o nome. Um ficheiro quando criado criado com um conjunto de atributos: - Proteco - Identificao do dono - Dimenso - Data de criao, ltima leitura e ltima escrita - Tipo do Ficheiro Operaes Sobre Directrios ListaDir (Nome, Tampo) MudaDir (Nome) CriarDir (Nome, Proteco) Mesmo no Unix existe CriaDir. No tem ListaDir mas sim um utilitrio que abre o ficheiro directrio e l o seu contedo. No VMS a 1 chamada devolve identificador; as seguintes devolvem as entradas seguintes do directrio. Certos sistemas, como o Unix tem um nmero reduzido de chamadas sistema, sobre as quais possvel construir utilitrios. 8.3. Estrutura Interna do Sistema de Ficheiros

O identificador de ficheiro aberto usado pelo SO para detectar se a operao se destina a um ficheiro ou a um dispositivo. Se for uma E/S chamado o gestor de perifrico, se for acesso a ficheiro chamada a gesto de ficheiros. O diferente tratamento deve-se a: - A organizao do sistema de ficheiros , geralmente, muito complexa - O tipo de dispositivos usados diferente (E/S disp. tipo caracter; disp. mem. sec. so tipo bloco - O sistema de ficheiros necessita de optimizaes especficas, pois o n de acessos grande implica que desempenho vital. A este nvel iremos considerar o disco como um vector de blocos, que podem ser lidos ou escritos dado o seu nmero de bloco. 8.3.1. Dispositivos Lgicos Um dispositivo fsico (disco, disquete, etc.) habitualmente subdividido em segmentos contguos chamados dispositivos lgicos, parties ou volumes. O SO gere o acesso aos dispositivos lgicos. A traduo do n de bloco lgico em fsico feita pelo gestor do perifrico por soma do n de bloco lgico com o bloco fsico do incio da partio. Cada partio contm um conjunto de informao totalmente independente das outras. 8.3.2. Directrios Conceptualmente, um directrio apenas uma tabela que associa nomes a descritores de ficheiros. Em certos SO o descritor est dentro do directrio, noutros este contm um apontador interno para o descritor (onde est o n dos blocos onde esto os dados). Neste caso possvel haver entradas diferentes (no mesmo ou noutro directrio) que apontem para o mesmo descritor, o que significa que o ficheiro pode ser acedido por vrios caminhos --> flexibilidade. 8.3.3. Ficheiros Um ficheiro representado pelo seu descritor, que contm toda a informao, execpto o seu nome e os dados propriamente ditos. A informao lida e escrita em sectores (habitualmente de 512 ou 1024 octetos). A gesto do disco feita em blocos de dimenso mltipla dos sectores. Em mquinas de memria paginada, cada bloco geralmente da dimenso das pginas. A unidade de alocao de zonas de disco mltipla dos blocos segmento (extent). Os segmentos pertencentes ao ficheiro so mantidos no seu descritor. A poltica de alocao tenta manter os ficheiros contguos em disco. Os blocos livres so mantidos numa estrutura de dados (simples lista ligada ou dividindo por cilindros) em memria secundria. Tudo mantido no chamado superbloco (replicado noutros blocos por segurana). 8.4. Controlo de Dispositivos de Memria Secundria Configurao fsica e tcnicas de optimizao dos acessos. Cada operao de leitura ou escrita composta pelas seguintes fases: - A gesto de ficheiros coloca o pedido de E/S na fila de pedidos pendentes para o dispositivo - O gestor de perifrico obtm um pedido da fila, programa o controlador do dispositivo para iniciar a operao e espera pela interrupo que indica o seu fim - Quando a interrupo ocorre, o gestor do perifrico devolve o pedido ao processo que o requereu e, se houver mais pedidos pendentes, repete. Os controladores de dispositivos de memria secundria so actualmente muito sofisticados, residindo numa carta ligada ao processador central por um bus especfico (ex. SCSI). Uma vez programado para executar f-lo autonomamente libertando o processador (leitura e escrita de sectores, formatao, configurao de pistas, etc.). 8.4.1. Tipos de Dispositivos Discos Magnticos Os mais usados actualmente. Composto por um conjunto de pratos sobrepostos. Em cada prato a informao escrita em pistas concntricas. Cada pista formada por um n de sectores. Um cilindro composto pelo conjunto das pistas com o mesmo raio.

As cabeas deslocam-se segundo o raio do dos pratos, accionadas por um brao nico. Capacidade de uma pista = N de sectores X N de octetos por sector Capacidade de um cilindro = N de pistas por cilindro X Capacidade de uma pista Capacidade de um disco = N de cilindros X capacidade de um cilindro O tempo de leitura ou escrita de um sector composto por: - Tempo de posicionamento (seek time): das cabeas no cilindro. Est relacionado com o movimento mecnico das cabeas e lento; depende do tempo de arranque (constante) e do n de cilindros percorridos. A distncia mdia 1/3 do n de cilindros, sendo este o valor usado para calcular o tempo mdio de posicionamento. - Tempo de Latncia: Tempo de espera pelo sector. Para rotao a 3600 rpm, o valor mximo 16,7 ms. O valor mdio metade. - Tempo de Transferncia: de um sector. dado pelo tempo de uma revoluo completa dividido pelo n de sectores por pista. A grandeza mais utilizada para caracterizar a velocidade de um disco o tempo mdio de acesso (soma dos 3 mdios). Disquetes So semelhantes a um disco s com um prato. A sua velocidade de acesso muito menor, bem como o custo. Discos pticos Tm pista em espiral. Actualmente (1989) so tipo WORM. baixo custo. Tm maior capacidade e menor velocidade que os magnticos (160ms) Discos Magneto-pticos Nova tecnologia. A informao escrita com uma combinao de polarizao magntica e raio laser, sendo a leitura ptica. A vantagem que podem ser apagados explicitamente, no suportando reescrita simples para apagar. 60 a 150 ms com leituras mais rpidas 3 vezes que escritas. Bandas Magnticas Sequencial. 9 pistas longitudinais (octeto mais bit de paridade) em cada fatia (frame). as fatias so agrupadas em blocos separados por gaps. 2400 ps So caracterizadas pelos seguintes parmetros: - Densidade: n de bits por polegada (800, 1600, 6150 ou at 30000) - Velocidade: n de polegadas por segundo (30 a 200) - Dimenso dos Gaps: 0,3 a 0,75 polegadas O factor de blocagem (escolha da dimenso dos blocos muito importante para bom aproveitamento pois os gaps so grandes. Usadas para backups. 8.4.2. Optimizao dos Acessos a Disco Constituem o suporte habitual do sistema de ficheiros. - O tempo de acesso a disco sempre muito maior que o tempo de acesso a memria central, pelo que o sistema de ficheiros justifica algoritmo complexo para evitar acessos a disco. - O tempo de posicionamento o factor determinante, pelo que a sua minimizao crucial. - Devem organizar-se os sectores de forma a ler o maior n possvel por revoluo. 8.4.3. cache de Blocos de Disco As linguagens de programao (rotinas) realizam sempre o acesso bloco a bloco, pelo que os pedidos devem ser resolvidos no bloco em cache, quando este fica totalmente preenchido escrito em disco e lido o bloco seguinte. O Unix optimiza no SO mantendo em disco uma cache com os ltimos blocos lidos. Periodicamente (30s) os blocos modificados so actualizados em disco. Na cache esto tambm o directrios que contm os utilitrios de sistema. Em contrapartida a cache implica mais uma cpia e no garante que a escrita seja mesmo feita quando pedida, o que pode ser mau para sistemas sem falhas (bases de dados)

8.4.4. Optimizao do Tempo de Posicionamento H 2 nveis: organizao da informao em disco e forma a concentrar dados logicamente relacionados e optimizao dos movimentos das cabeas. O segundo nvel consiste em ordenar os pedidos de acesso segundo a ordem mais favorvel: - Ordem de Chegada: simples e justo mas no optimiza operaes mecnicas - Menor Deslocamento: o primeiro a ser servido o que est mais prximo do actual. Aumenta o desempenho mas pode tornar-se injusto para os cilindros das extremidades. - Elevador: semelhante ao anterior mas aplica-se s aos pedidos situados no sentido actual de deslocamento. Visita menos os cilindros das periferias mas a discriminao no grande, sendo um dos mtodos mais usados pelos SO reais. - Elevador Circular: variante do anterior. Os pedidos aqui s so servidos num sentido, o outro serve apenas para movimentar as cabeas. Elimina a discriminao do anterior. O ideal com cargas baixas o elevador e com cargas elevadas o elevador circular, comportando-se este ltimo bem em todas as situaes de carga. 8.4.5. Optimizao do Tempo de Latncia O factor que se procura optimizar o nmero de sectores da mesma pista que se consegue ler durante uma nica rotao do disco. Acessos ao disco so em bloco mas devido a ter de interromper sector a sector e o disco continuar a rodar s se l um sector por cada revoluo caso estejam em sequncia. A tcnica mais usada ordenar os sectores duma pista segundo um factor de entrelaamento (interleave). Actualmente a tcnica mais usada pelos controladores ler uma pista completa para uma cache (64KB) sendo desnecessrio factor de entrelaamento.

CAP. 9 ACONTECIMENTOS ASSNCRONOS E EXCEPES 9.1. Acontecimentos Assncronos No modelo que temos vindo a considerar, um processo pode sincronizar-se com acontecimentos exteriores, quer provenientes das E/S quer da comunicao atravs de mecanismos de sincronizao. De um modo geral, quando um processo pretende conhecer que um dado acontecimento se produziu, bloqueia-se num semforo, cujo posicionamento corresponder notificao do acontecimento esperado. Este mtodo tem limitao bvia: o processo apenas pode esperar um acontecimento de cada vez e no mltiplos ou raros. O tratamento das temporizaes ilustra a limitao. Supondo que processo quer fazer uma aco ao fim de um certo tempo. Adormecer no soluo pois o processo quer continuar a executar-se e a temporizao funcionar como alarme (timeout). Ex. interaco cliente/servidor, cliente quer continuar e continuar espera da resposta por um perodo. Outro ex. consulta a base de dados por utilizadores e outros processos. Temos pois um problema clssico em programao sistema: decidir em qual dos dois possveis pontos de sincronizao se deve o processo bloquear. - Teste Peridico: Em vez de efectuar leituras bloqueantes, o processo testa apenas se existe informao na caixa de correio (espera activa) - Utilizar 2 Processos: Um efectua a leitura do terminal outro o tratamento das caixas de correio. Evita a espera activa e degradao do desempenho mas coloca outro problema: os processos no so independentes e precisam comunicar. de eliminar as caixas de correio pois colocaria outra vez o problema dos dois pontos de sincronizao entre os quais no se pode estabelecer prioridade. H mecanismos prprios. A situao anterior coloca-se sempre que as aces que condicionam a execuo de parte do programa so assncronas no sendo possvel o seu encadeamento de forma determinista. Necessitamos, portanto de um mecanismo sistema que permita lanar a execuo concorrente de rotinas no interior do espao de endereamento de um processo. So vulgarmente consideradas duas extenses ao modelo computacional para tratamento dos acontecimentos assncronos. - Permitir a criao de actividades independentes no interior de um processo. - Associar a determinados acontecimentos rotinas especficas que se executam de forma assncrona, quando o acontecimento de produz. 9.2. Modelo Multitarefa Os sistemas multitarefa podem criar, no contexto de um processo, um ambiente de programao concorrente. Light Weight Processes ou Threads. O modelo multitarefa pode ser encarado como uma reencarnao , no contexto de um processo, do modelo computacional. O modelo dedica a cada acontecimento uma tarefa. O seu interesse extravasa a resoluo do problema dos acontecimentos assncronos. As tarefas tornam-se uma ferramenta de programao que permite explorar o paralelismo dos algoritmos e fornece mecanismos para encapsular o tratamento de aces independentes no interior de um programa. Existem 2 implementaes diferentes dos ambientes multitarefa, dependendo da forma como efectuado o escalonamento. A gesto de tarefas pode ser implementada nvel do ncleo ou totalmente no espao de endereamento. A 1 soluo o ncleo efectua a multiplexagem do processador; na 2 a comutao entre tarefas tem de ser explicitamente programada pelo programador ou em bibliotecas que efectuam a comutao quando uma das tarefas desencadeia uma operao bloqueante (ex. um E/S). As primeiras so tarefas reais a segundas corotinas. SO distribudos implementam um modelo multitarefa, que flexibiliza a programao. As caractersticas prinicipais so: - As tarefas so processos simplificados, cuja criao no envolve a execuo de funes sistema complexas - As tarefas so criadas no contexto do processo partilhando o mesmo espao de endereamento - As tarefas so da responsabilidade interna do processo, pelo que o sistema no as gere com o mesmo grau de complexidade dos processos (proteco, escalonamento e gesto de memria) - Os mecanismos de sincronizao internos permitem implementar algoritmos de cooperao e gesto de recursos entre as tarefas. Primitivas

IdTarefa = CriarTarefa (Procedimento) EliminarTarefa (IdTarefa) fig. 9.3. pg.197 Programao num sistema Multitarefa (interaco com terminal e recepo de mensagens de outros utilizadores). As tarefas RecebeMensagem e TrataComando executam-se concorrentemente com o fluxo inicial que constitui o corpo do programa. O programador ter de definir a forma como as tarefas se cincronizam e como gerem as variveis comuns. 9.3. Rotinas Assncronas Constituem um mecanismo menos ambicioso mas fornecem soluo eficiente. A ideia associar a um acontecimento uma rotina que se executar assincronamente quando o acontecimento se produzir. Os acontecimentos podem ser definidos pelo sistema ou pelo programador (cap. 11 e 13) RotinaAssncrona (Acontecimento, Procedimento) O mecanismo de lanamento da rotina complexo. Apesar de transparente para o utilizador, o ncleo tem de efectuar operaes delicadas no contexto do processo. Na fig. 9.5 est a programao do problema anterior segundo esta nova forma. Este modelo assemelha-se ao tratamento das interrupes. Contudo a semelhana puramente funcional. As rotinas de interrupo no permitem a execuo de cdigo do utilizador, so um dos mecanismos mais internos do sistema. Segue-se programao em modelo multitarefa e rotinas assncronas do controlador de tarefas apresentado no cap. 2 9.4. Excepes So violaes do modelo computacional que obrigam a recuperar o estado da mquina virtual, quer atravs de procedimentos especificados pelo programador quer por aco prevista por defeito no sistema, normalmente a terminao do processo. Embora sejam tambm acontecimentos no previstos so diferentes dos assncronos pois no so provocados por elementos externos, que podem ser outros processos, gestores de perifricos ou servios como as temporizaes; so provocadas pelo programa quando executa uma aco no prevista no modelo computacional. As causas mais vulgares podem agrupar-se em: - Acesso ilegal memria: endereo invlido, tentativa de violao da proteco - Instruo ilcita - Aritmticas: overflow, underflow, diviso por zero - Emulao - Teste: para debuggers - Provocadas pela execuo de funes sistema importante distinguir 3 conceitos semelhantes mas que tm considerveis diferenas a nvel dos mecanismos que os controlam: - Interrupes globais a toda a mquina: o ncleo do sistema que assume o controlo - Excepes sistema relacionadas apenas com o processo que as provoca, devendo, portanto, ser tratadas no seu contexto. - Excepes no algoritmo do programa do utilizador Nesta seco apenas nos preocupamos com as sistema. O sistema tem um tratamento por omisso associado s excepes que, geralmente, faz terminar o processo. Sendo isso indesejvel na maioria das aplicaes (excepto emulao e teste). Nos SO tradicionais as excepes foram tratadas de forma no muito cuidada nem uniforme. Alguns sistemas introduziram a noo de tratamento de excepes (exception handler) definindo a forma como se podia associar uma rotina a um acontecimento. A sua modificao constitui a capacidade de tratamento de excepes por parte do utilizador, mas a sua programao delicada, porque ter de interactuar com a pilha do processo ou com os registos do processador para recuperar a situao de erro. No Unix a associao feita da mesma forma que a de um acontecimento assncrono a um tratamento.

Vamos considerar que um programa podia associar uma rotina atravs de uma funo Excepo. Por ex. diviso por zero. Neste caso devamos ter um acontecimento detectvel pelo sistema: diviso por zero (DivZero) de modo a poder efectuar a seguinte chamada: Excepo(DivZero, TrataDivZero) Isto ganha importncia no mbito dos sistemas distribudos, sendo que poucos SO do facilidades de programao destas rotinas de tratamento.

CAP. 10 NCLEO PARA SISTEMAS INTEGRADOS 10.1 Os Sistemas Integrados O 1 objectivo deste cap. a apresentao de um pequeno ncleo de SO, disponvel comercialmente, que implementa um modelo computacional semelhante ao descrito anteriormente. Uma 2 razo a importncia deste tipo de sistemas no desenvolvimento de aplicaes baseadas no microprocessador. Embedded Systems Sistemas Integrados. Ex. controlo de mquina ferramenta, central de comutao telefnica, controlo de avio. O desenvolvimento das aplicaes pode ser feito com base no controlo directo das interrupes, tentando responder s solicitaes exteriores, ou utilizar um SO que virtualize a mquina fsica. A 1 origina programao complexa, tempos elevados de testes e dificuldades de manuteno. A 2 fornece ao programador um conjunto de abstraces que permite ignorar detalhes do hardware, basear-se no modelo computacional documentado, melhorar segurana e fiabilidade, usar ferramentas de teste e afinao e aumentar portabilidade. H vrios fornecedores de ncleos (camadas inferiores apenas) multitarefa, sendo que todos apresentam os mecanismos bsicos de gesto de processos, sincronizao, gesto de memria e comunicao. Fornecem tambm mecanismo para uma gesto em tempo real pois o espectro das aplicaes mais exigente a este nvel. Por outro lado depois de desenvolvido o sistema s responde a um conjunto de situaes tpicas. A tnica na simplicidade para caberem em memrias de 8 a 12koctetos (EPROM). O desenvolvimento das aplicaes feito tambm de forma diferente dos SO tradicionais, dado que normalmente no so capazes de suportar a interaco com utilizadores. As aplicaes so portanto desenvolvidas em sistemas hospedeiros utilizando compiladores cruzados. As bibliotecas de interface do sistema so ligadas com o cdigo das aplicaes e o conjunto carregado no sistema alvo para teste e afinao. Vamos ver o RMX-EX 86 da Intel 10.2. Modelo Computacional do Ncleo RMX/EX As funes essenciais asseguradas por este pequeno ncleo so: - Gesto da concorrncia - Sincronizao entre tarefas - Comunicao entre tarefas - Tratamento das interrupes Os objectos sistema manipulados pelo modelo computacional so os clssicos: - Tarefas - Segmentos - Semforos - Regies - Mailboxes, uma extenso dos semforos com incluso de mecanismos para transferncia de mensagens - Queues, caixas de correio com interface do tipo sequncia de caracteres. Quando da criao de um objecto -lhe atribudo identificador (token 16 bits), que lhe permite ser identificado nas funes sitema 10.3. Tarefas Segue poltica preemptiva e no implementa quantum. A tarefa s abandona o processador quando se bloqueia, auto-suspende ou outra mais prioritria se torna executvel. Isto est de acordo com a filosofia tempo-real, para alm de simplificar o ncleo. Contudo esta no existncia de gesto em tempo partilhadodesvirtua algumas das premissas do modelo computacional concorrente, obrigando a anlise profunda dos algoritmos para que uma tarefa no monopolize o processador. Por outro lado simplifica a sincronizao entre tarefas pois permite ao programador contrlo determinista da comutao. 10.3.1. Estados das Tarefas Execuo (running) Executvel (ready) bloqueada (asleep) suspensa (suspended)

asleep-suspended 10.3.2. Prioridades So fixas, o que habitual nos sistemas de tempo-real. preciso muito cuidado na sua atribuio pois uma mais prioritria, se no se bloquear pode monopolizar. Varia entre 0 8mais alta) e 255. 10.3.3. Proteco Como o 8086 no tem qualquer mecanismo de proteco hardware, no h distino entre modo sistema e utilizador, o que obriga a que as aplicaes tenham fiabilidade muito elevada, para no escreverem em posies de memria do sistema. Cabe tambm ao programador definir as interaces entre as tarefas. 10.3.4. Criao e Terminao das Tarefas A simplicidade do ncleo patente aqui. O RMX/EX pressupe que o cdigo das tarefas j existe em memria, necessitando apenas de um apontador para a 1 instruo. IdTarefa = CREATE_TASDK (Prioridade, EndIncio, SegDados, SegPilha, TamPilha, Flags, PtrCodRot) PtrCodRet um apontador para uma palavra onde assinalado o sucesso o suceso ou insucesso da funo atravs de um cdigo de erro (genrico para todas as primitivas do RMX/EX) DELETE_TASK (IdTarefa, PtrCodRot) 10.4. Gesto de Memria segmentada, embora no pura, dispondo apenas de registos que definem a base dos segmentos de cdigo, dados e pilha correntes, para alm de um segmento genrico (extra). No existe portanto uma tabela de segmentos associados a cada tarefa com definido no cap.4. A gesto pois de grande simplicidade, limitando-se a gerir uma regio de memria que pode ser alocada sob a forma de segmentos pelas tarefas. Tm dimenso entre 16 e 64Koctetos sendo geridos em bloco. A zona de memria onde os segmentos se localizam definida na gerao do sistema, controlando o ncleo a sua aquisio e libertao. IdSegmento = CREATE_SEGMENT (Tamanho, PtrCodRet) DELETE_SEGMENT (IdSegemento, PtrCodRet) 10.5. Sincronizao 10.5.1. Suspenso A mais simples de sincronizao a suspenso a directa. Como no h mecanismos de proteco, qualquer tarefa pode ser suspensa desde que se conhea o token (se for 0 uma auto-suspenso) SUSPEND_TASK (IdTarefa, CodPtrRet) RESUME_TASK (IdTarefa, CodPtrRet) Podem ser suspensa vrias vezes, mantendo grau de supenso SLEEP (LimTempo, CodPtrRet) Se LimTempo = 0 s colocada no fim da lista. 10.5.2. Semforos A diferena mais significativa em relao aos semforos dados no cap. 2 a possibilidade de enviar ou receber um nmero qualquer de unidades. Foram pensados para gesto de recursos e cooperao entre processos, existindo um outro mecanismo para a implementao da excluso mtua. Assinalar: SEND_UNITS (IdSemaforo, Unidades, PtrCodRet) Esperar: UniRest = RECEIVE_UNITS (IdSemaforo, Unidades, LimTempo, PtrCodRet) Se a tarefa no consegue obter o n de unidades especificado, fica bloqueada. Se no existirem unidades para servir o primeiro pedido, os pedidos seguintes no sero atendidos, mesmo que existam unidades suficientes para o atender. A sada por temporizao permite desencadear alarmes, quando determinados acontecimentos no so assinalados no intervalo de tempo. IdSemaforo = CREATE_SEMAPHORE (ValorInicial, ValorMax, Flags, PtrCodRet)

DELETE_SEMAPHORE (IdSemaforo, PtrCodRet) Flags determina a forma de gesto da fila de espera: FIFO ou baseada na prioridade das tarefas. 10.5.3. Regies Para excluso mtua no acesso a variveis partilhadas. mais simples que o semforo. Uma primitiva permite adquirir o direito de aceder regio em excluso mtua, existindo a recproca libertao IdRegio = CREATE_REGION (Flags, PtrCodRet) DELETE_REGION (IdRegio, PtrCodRet) 3 funes permitem efectuar o controlo da regio. para alm das funes bvias, bloquear e libertar o acesso a uma regio, existe a primitiva ACCEPT que apenas adquire o direito regio quando ela est livre, evitando portanto o bloqueio da tarefa. RECEIVE_CONTROL (IdRegio, PtrCodRet) SEND_CONTROL (PtrCodRet) ACCEPT_CONTROL (IdRegio, PtrCodRet) O ncleo mantm a lista das regies que uma dada tarefa controla. Quando a tarefa executa SEND_CONTROL, a ltima regio que libertada. No caso de a tarefa ser eliminada, so libertadas todas as regies que detinha. Minimiza interblocagens, em relao aos semforos, alm de semntica mais simples. Fig. 10.2 Distribuidor de Memria em C do RMX/EX 10.6 Comunicao Duas tarefas que tenham acesso ao mesmo segmento podem utiliz-lo para transferir informao, sincronizando-se, se for necessrio, por intermdio de regies ou semforos. 10.6.1 Semforos com Mensagens (Mailboxes) modelo de correio A comunicao tratada como uma extenso dos semforos. Basicamente altera-se o significado da rotina assinalar para que esta passe no s a sinalizar um acontecimento mas tambm enviar uma mensagem. Reciprocamente, quando um processo executar Esperar, receber uma mensagem. Assinalar (IdSemaforo, Mensagem) Esperar (IdSemaforo, ApontTampao) estrutura de dados do semforo deve ser associada uma segunda fila onde so memorizadas as mensagens. evidente que a fila de processos estar vazia quando a de mensagens contm elementos e vice-versa. H um problema delicado que se prende com a forma como as mensagens so armazenadas durante a sua permanncia na fila do semforo. A soluo podia basear-se numa cpia, idntica implementao de uma caixa de correio, ou na memorizao na fila do semforo de apontadores para a mensagem. A 2 mais simples, originando porm uma gesto de memria mais complexa pois os dados a transferir devero passar do espao de endereamento do processo original para o de destino. Como este desconhecido (ser a tarefa que fizer Esperar) no se pode efectuar a cpia imediatamente. O RMX7EX soluciona o problema utilizando a infra-estrutura de gesto de memria. Quando uma tarefa pretende enviar uma mensagem, adquire um segmento e escreve nele. Na primitiva Assinalar enviado o identificador do segmento contendo a mensagem, o que implicitamente efectua a transferncia. A tarefa receptora receber o identificador do segmento contendo a mensagem, podendo copi-lo ou utiliz-lo directamente. SEND_MESSAGE (Ccorreio, Seg, Resposta, PtrCodRet) Seg = RECEIVE_MESSAGE (Ccorreio, LimTempo, PtrResposta, PtrCodRet) 1 O Processo P1 cria um segmento, o sistema devolve o identificador 2 - Escreve a mensagem 3 Faz SEND_MESSAGE para uma mailbox 4 O Processo P2 recebe a mensagem constituda pelo identificador do segmento 5 O processo P2 acede aos dados da mensagem 10.6.2. Filas de Caracteres

As mailboxes apenas permitem a transferncia de segmentos entre tarefas. Para determinados tipos de comunicao, esta estrutura demasiado pesada. Ex. terminal de caracteres para editor de linha. H vrias possibilidades: - Por cada caracter o processo gestor do terminal adquire um segmento... - Os dois processos utilizam um segmento comum com os mecanismos de sincronizao necessrios para garantir a coerncia da estrutura de dados. Ambas no so atraentes pois implicam diversas chamadas ao sistema para transferir um s caracter. O mais comum s transferir os caracteres quando j se chegou a um determinado n ou ao fim dum intervalo de tempo, embora diminua capacidade de interaco. O EX criou um novo objecto designado por queue que implementa uma caixa de correio com interface do tipo sequncia de caracteres. NOctLivres = SEND_QUEUE (Fila, PtrMens, Cont, LimTempo, PtrCodret) NOctetos = RECEIVE_QUEUE (Fila, Tampo, Cont, limTempo, PtrCodRet) PtrMens apontador para os dados a transferir Tampo apontador para a estrutura de dados que receber os octetos lidos NOctetos indica o n de octetos ainda existentes na fila e permite optimizar o algoritmo da tarefa produtora, de forma a evitar bloquear-se numa fila cheia. Na primitiva de envio, atarefa pode bloquear-se se a fila se encontra cheia, da o LimTempo. Fila = CREATE_QUEUE (DimOctetos, PtrCodRet) DELETE_QUEUE (Fila, PtrCodRet) 10.7. Entradas / Sadas O tratamento das interrupes, nestes sistemas integrados, tem particular importncia, pois a aplicao tem de controlar eficientemente o hardware. O sistema dispe de 2 mecanismos base: - Rotinas de Interrupo - Tarefas de Interrupo No 2 caso apenas o processamento imediato (no todo) tem de ser feito na rotina de interrupo. A vantagem libertar o mecanismo de interrupo. SET_INTERRUPT (Nvel, Flag, RotinaInterrupo, SegDados, PtrCodRet) Flag indica se a tarefa fica associada ao tratamento da interrupo 10.7.1. Rotina de Interrupo Tem de efectuar a salvaguarda e restauro dos registos e o processamento necessrio ao tratamento da interrupo. Durante a sua execuo as interrupes esto inibidas. Um ponto importante relaciona-se com a zona de dados acedida pela rotina durante a sua execuo. Quando comea o segmento de dados o da tarefa interrompida. pois necessrio definir um novo segmento. Tal pode ser feito de forma fixa no cdigo da rotina, modificando explicitamente o registo do segmento de dados, ou manter a programao da rotina genrica definindo o segmento de dados quando efectuada a associao interrupo parmetro SegDados de SET_INTERRUPT. A mudana efectuada pela chamada funo ENTER_INTERRUPT que comuta os segmentos. 10.7.2. Tarefa de Interrupo So criadas como as outras tarefas. Contudo quando executa SET_INTERRUPT com a flag diferente de 0, a sua prioridade modificada de acordo com uma tabela predefinida que correlaciona os nveis de interrupo com as prioridades das tarefas. Tem de efectuar WAIT_INTERRUPT para desinibir interrupts, enquanto nas rotinas de interrupo isso acontece logo que SET_INTERRUPT. mas as interrupes de mais alta prioridade podem continuar a ser atendidas. Uma interrupo assinalada tarefa com SIGNAL_INTERRUPT . Em flag especifica-se o n mximo de signals que se admitem sem tratamento. EXIT_INTERRUPT assinala ao hardware o fina da rotina e desmascara interrupts. 10.8. Organizao Interna do Ncleo 10.8.1. Estruturas de Dados

Objectos representados por descritores que memorizam caractersticas e estado. Existem 2 tipos de descritor: - Com 16 octetos (semforos, regies, mailboxes) - Com 32 octetos (tarefas e queues) A memria para os descritores alocada estaticamente na gerao dos sistema (interna ao ncleo e so 2 pilhas de apontadores) 10.8.2. Despacho Baseia-se na lista de tarefas no estado executvel organizada por ordem descendente de prioridade. A sua funo comutar a pilha de tarefas dado que os registos foram salvaguardados no mbito de uma rotina de interrupo que precede sempre uma comutao. 10.8.3. Sincronizao Como o sistema mantm em listas todos os objectos, as listas de semforos, regies, mailboxes e queues so geridas de forma idntica na criao e eliminao. Uma lista duplamente ligada referencia os descritores das tarefas suspensas; as asleep ou bloqueadas (semforo, mailbox ou queue) com limite de tempo so mantidas noutra lista. No descritor de tarefas existe um campo para manter a temporizao (relativa). O descritor do semforo uma varivel que memoriza o n de unidades actuais, o n mximo e 2 apontadores, um para o incio da fila de tarefas e outro para a ltima tarefa, de forma a implementar facilmente uma fila de espera. As regies s tm varivel para controlar o estado, mas no descritor da tarefa devem ser referenciadas as regies que a tarefa controla, para as eliminar todas quando a tarefa eliminada. As mailboxes tm uma estrutura com mais uma lista. As queues so mais complexas na sua estrutura. Tm associado um tampo circular para conter os caracteres com os respectivos ndices e apontadores para as 2 listas de processos correspondentes s tarefas produtoras e consumidoras.

CAP. 11 MODELO COMPUTACIONAL DO UNIX 11.1. A Evoluo do Unix O objectivo inicial era desenvolver um sistema de tempo partilhado simples e eficiente para minicomputadores. Mas no tem mecanismos para tempo real e a implementao de controladores de perifrico necessita de grande conhecimento do modo como o ncleo est implementado. A histria explica o aparente excesso de mecanismos. Bell -> Multics (proteco, memria virtual, sistema de ficheiros) --> Unix --> PDP-11 (gesto de memria e tratamento de excepes) linguagem C --> portabilidade. 11.2. Conceitos Fundamentais O Unix baseia-se num conjunto relativamente reduzido de conceitos que permitem grande uniformidade na sua utilizao. Do ponto de vista do utilizador: - Processos: elementos activos com estrutura interna simplificada, o que permite grande uniformidade na sua utilizao - O Sistema de Ficheiros: hierrquico simples mas coerente. Constitui o suporte para a comunicao entre processos e para as E/S - Interpretador de Comandos: Flexvel para o utilizador (shell). Facilmente extensvel e tem a possibilidade de redireccionar as E/S Mecanismos genricos (em todos) --> mecanismos de sincronizao e comunicao do sistema V --> mecanismos de comunicao do 4.2. BSD 11.3. Processos Segue o modelo geral de concorrncia. Um processo executa uma imagem (ambiente de execuo do processo), que do ponto de vista do utilizador: - Texto (cdigo do programa) - Dados do utilizador - Pilha do utilizador (User Stack) A zona de dados privada do processo o seu segmento de dados. O processo possui ainda um segmento reservado para a sua pilha de activao (stack pointer). O ncleo mantm um contexto interno por cada processo, onde se define o seu ambiente de execuo no SO. Associado a um processo existe ainda um conjunto de variveis que se relaciona com o ambiente de execuo do interpretador de comandos (definem directrio de base do utilizador, onde procurar executveis, editor, etc.), no seu segmento de dados. Identificadores um valor inteiro - pid Integram-se em grupos, para associar todos os que tm um antecessor comum e que podem receber acontecimentos assncronos e excepes.. O grupo identificado pelo pid do processo mais antigo. Proteco no Acesso aos Recursos definida hierarquicamente em 3 categorias: - Dono (owner): utilizador que normalmente criou o recurso - Grupo (group): conjunto de utilizadores com afinidades de trabalho que justificam direitos semelhantes - Restantes Utilizadores (world) Um processo tem associados dois identificadores que definem o seu nmero de utilizador User Identifier (UID) e o seu n de grupo (Group Identification) GID. Quando um utilizador se identifica os valores do UID e GID so obtidos do ficheiro de identificao (etc/password) que contm um registo descrevendo a informao necessria para validar a senha e estabelecer o ambiente de execuo do processo. importante no confundir o GID com o identificador de grupo mencionado anteriormente. O primeiro um mecanismo de proteco integrado na gesto administrativa do sistema e da

responsabilidade do gestor do sistema, enquanto o segundo um mecanismo interno do ncleo de que veremos a utilizao na seco 11.4. Privilgios Os privilgios detidos por um processo so definidos de forma esttica e associados classe a que o processo pertence. No Unix h (s) 2 classes ( uma das partes mais discutveis do Unix): - Utilizador - Superutilizador 11.3.2. Criao de um Processo So criados explicitamente pela primitiva fork. diferente dos outros SO pois a primitiva fork cria um novo processo absolutamente idntico ao processo pai. O filho herad todo o contexto (ncleo e utilizador) e continua a executar o mesmo cdigo na instruo a seguir ao fork. Tem identificao prpria e o tempo de utilizao do processador reiniciada. Esta implementao permite criar um processo de forma muito simples, sendo apenas necessrio copiar do processo pai o contexto sistema e os segmentos de dados e pilha. A criao de processo muito eficaz e esta caracterstica amplamente utilizada. Ex. shell. Para alm de eficiente permite transmitir implicitamente para o filho o ambiente de execuo do pai (ficheiros abertos, directrio corrente, dispositivos de E/S, prioridade, etc) IdProcesso = fork () Para o proceso pai a primitiva fork retorna o identificador do novo processo, enquanto para o filho retorna 0. Pode ainda retornar 1 (habitual no Unix para erros na execuo de funes sistema) quando o n de processos permitidos excedido. main() { int pid; pid = fork(); if (pid==0) { /* cdigo do processo filho*/ } else { /* cdigo do processo pai */ } /* instrues seguintes */ } Criao de um Subprocesso Fork main () { int pid; pid = fork (); if (pid ==0) { execl (/bin/who, who, 0); /* controlo devia ter sido transferido para o novo programa */ printf (Erro no execl\n); exit (-1); } else { /* algoritmo do processo pai */ } } Criao de um Subprocesso Exec vulgar contudo, pretender-se que o processo filho execute um programa diferente. Usa-se ento a primitiva exec , que modifica o segmento de dados e de texto do processo, mantendo-se o

contexto ncleo inalterado. Assim o novo tem o mesmo GID e UID. Isto permite passar ficheiros abertos de pai para filho, o que largamente utilizado na comunicao. int execl (NomeFicheiro, arg0, arg1,...,argn,0) char *NomeFicheiro, *arg0, *arg1,...,argn; int execv (NomeFicheiro, argv) char *NomeFicheiro, argv) char *argv[]; Uma variante da primitiva exec (execle, execve) permite definir os valores das variveis da shell. possvel a modificao dos cdigos de proteco associados a um processo, mas s por um processo superutilizador. Existe contudo um mecanismo associado ao carregamento de um novo programa que permite efectuar esta modificao: No cabealho do ficheiro executvel possvel indicar ao sistema que o UID e GID do processo devem ser alterados para os do dono do ficheiro executvel. evidente que apenas processos superutilizador podem modificar os cabealhos. daqui sai que passa ahaver o Effective User-Id e o real User-Id esta facilidade permite, por exemplo, a execuo de comandos que necessitam de privilgios acrescidos. O subprocesso lanado pelo shell pode assumir temporariamente os privilgios de superutilizador mantendo o sistema inalterados os cdigos de proteco do processo utilizador. O comando login utiliza estas facilidades. No ficheiro executvel indicado que pertence ao superutilizador. Quando se conclui o processo de identificao, chamada a funo setuid para modificar os cdigos de proteco para os que esto associados ao utilizador no ficheiro de identificao. 11.3.3. Terminao de um processo A funo sistema exit permite a um processo terminar normalmente a sua execuo. O processo pai pode bloquear-se espera da terminao do filho, atravs da primitiva wait, que retorna o identificador do processo que terminou. main () { int pid, estado; pid = fork (); if (pid == 0) { /* algoritmo do processo filho */ exit (0); } else { /* o processo pai bloqueia-se espera da terminao do filho */ pid = wait (&estado); } } Sincronizao entre processo Pai e Filho 11.4. Acontecimentos Assncronos Signals O tratamento de excepes e de acontecimentos assncronos tem no Unix especial importncia, pois extrapola funes e mecanismo de controlo de execuo dos processos. Pode ser assinalados a um processo em execuo atravs de um signal, que pode ter origens muito diversas: SIGHUP SIGINT SIGQUIT ... 11.4.1. Tratamento dos Signals Quando um signal enviado a um processo, a aco provocada por omisso conduz terminao do processo, dando alguns signals origem a um core. Mas tambm podems er associadas a rotinas de tratamento. signal (IdentificadorSignal, RotinaTratamento)

CAP. 11 MODELO COMPUTACIONAL DO UNIX 11.1. A Evoluo do Unix O objectivo inicial do Unix era construir um SO de tempo partilhado simples e eficiente para minicomputadores. o que levou ao seu desenvolvimento foi essa simplicidade aliada grande divulgao nos meios universitrios, para alm de aparecerem verses para muitas mquinas. Isto vai tornar, provavelmente, o Unix o SO mais vulgarizado nos PCs e estaes de trabalho de engenharia. Embora, nas verses mais recentes, a simplicidade no se tenha mantido, continua a ser uma das melhores alternativas quando se pretende assegurar continuidade das aplicaes, independentemente do hardware em que se executam. No panaceia para todas as aplicaes. Por ex. no dispe de mecanismos para tempo real e a implementao de controladores de perifrico exige grande conhecimento do SO. a histria explica o aparente excesso de mecanismos do SO. Cientistas do Lab. Bell, que j tinham participado no desenvolvimento do Multics, criam o Unix. Este sistema teve logo grande influncia conceptual na evoluo dos SO (memria virtual, proteco, sistema de ficheiros), mas a ambio tornou-o num sistema gigantesco e complexo. quando a Bell desiste, alguns cientistas saiem e criam verso simples em e no PDP-7 e depois no PDP-11. A linguagem C foi um importante desenvolvimento paralelo e garantiu-lhe portabilidade e clareza. Como a ATT no estava em condies de comercializar, vrias companhias criaram as suas verses. Depois a ATT decidiu suportar o sistema e a verso System V constitui uma referncia base que tende a ser imposta como norma. essa que vamos estudar. 11.2. Conceitos Fundamentais. O Unix baseia-se num conjunto relativamente reduzido de conceitos que permitem grande uniformidade na sua utilizao. Do ponto de vista do utilizador, as verses iniciais estruturavamse em torno de 3 entidades: - Os processos elementos activos numa estrutura interna simplificada -> bom desempenho - O sistema de ficheiros sistema de arquivo hierrquico simples mas coerente. Constituiu o suporte para comunicao entre processos e para as E/S - Interpretador de comandos Interface flexvel com o utilizador. facilmente extensvel e tem a possibilidade de redireccionar as E/S Vamos estudar: - Mecanismos genricos de todas as verses - Mecanismos de sincronizao e comunicao do V - Mecanismos de comunicao do BSD 4.2 11.3. Processos 11.3.1. Caractersticas Gerais Segue o modelo geral de concorrncia descrito nos cap. anteriores. Um processo executa uma imagem, que na terminologia Unix designa o ambiente de execuo do processo. Do ponto de vista do utilizador, a imagem formada por: - Texto (cdigo do programa) cdigo reentrante - Dados do utilizador zona privada de dados + zona reservada para a pilha de activao - Pilha do utilizador As variveis do ambiente do shell so mantidas a nvel de utilizador no seu segmento de dados, podendo ser modificado livremente, ao contrrio das variveis referentes ao contexto interno do processo que so memorizadas no ncleo. Identificadores O processo identificado no sistema pelo seu pid (n inteiro) atribudo na sua criao. Os processos integram-se em grupos (cada um identificado pelo pid do processo mais antigo hierarquicamente), ligados, cada, a um antecessor e podem receber acontecimentos assncronos e excepes. Proteco No Acesso Aos Recursos Para um recurso, a proteco definida hierarquicamente em 3 categorias:

- Dono (owner): utilizador que normalmente criou o recurso - Grupo (group): conjunto de utilizadores com afinidades de trabalho que justificam direitos semelhantes. - Restantes Utilizadores (world) Um processo tem associados 2 identificadores que definem o seu nmero de utilizador (UID) e de grupo (GID). Quando um utilizador se identifica, os valores de UID e GID so obtidos do ficheiro de identificao (etc/password) que contm um registo descrevendo a informao necessria para validar a senha e para estabelecer o ambiente de execuo do processo. importante no confundir o GID com o identificador de grupo mencionado anteriormente. O primeiro um mecanismo de proteco integrado na gesto administrativa e da responsabilidade do gestor de sistema, enquanto o segundo o mecanismo interno do ncleo de que veremos a utilizao na seco 11.4. Privilgios Os privilgios detidos por um processo so definidos de forma esttica e associados classe a que o processo pertence. Em Unix h apenas 2 classes: utilizador e superutilizador. Para os processos em modo utilizador o sistema valida todos os acessos aos recursos atravs dos respectivos cdigos de proteco, no podendo os processos modificar os valores de UID e GID. O superutilizador no s pode ultrapassar as proteces estabelecidas, como utilizar alguns mecanismos do ncleo vedados aos utilizadores normais. A existncia de apenas 2 classe uma das partes mais discutveis do Unix, sendo parcialmente responsvel por alguns problemas de segurana atribudos ao sistema. 11.3.2. Criao de um Processo Os processos so criados explicitamente atravs da primitiva fork, sendo que criado, com esta primitiva, um novo processo absolutamente idntico ao pai e herdando todo o contexto (ncleo e utilizador) e continua a executar o mesmo cdigo na instruo seguinte ao fork. A criao de processos , assim, muito simples e transfere implicitamente o ambiente de execuo do pai (ficheiros abertos, directrio corrente, dispositivos E/S, prioridade, etc.). bvio que o novo processo recebe uma nova identificao e o tempo de utilizao reinicializado. IdProcesso = fork() Para o processo pai a primitiva fork retorna o identificador do novo processo enquanto o valor retornado para o processo filho sempre 0. 1 quando h erro de sistema. vulgar, contudo, pretender-se que o processo filho execute um programa diferente, usando-se ento a primitiva exec, que modifica o segmento de dados e texto mas no o contexto ncleo (UID e GID), o que permite a passagem implcita dos ficheiros abertos para o processo filho, o que muito usado nos mecanismos de comunicao. int execl (NomeFicheiro, arg0, arg1, ... , argn, 0) char *NomeFicheiro, *arg0, *arg1, ..., *argn; ou int execv (NomeFicheiro, argv) char *NomeFicheiro char *argv[]; H variante exec (execle, execve) que define ambiente shell (que destrudo com exec). A modificao dos cdigos de proteco associados a um processo s pode ser feita por um processo superutilizador. Existe, contudo, um mecanismo associado ao carregamento de um novo programa que permite efectuar esta modificao. No cabealho do ficheiro executvel possvel indicar ao sistema que o UID e GID do processo devem ser alterados para os do dono do ficheiro executvel. Assim, o processo assume outra identidade no que toca ao controle de acesso aos recursos. evidente que apenas os processo superutilizador pode alterar cabealhos. H assim o Effective User-Id e o Real User-Id. 11.3.3. Terminao de um Processo A funo sistema exit. O processo pai pode bloquear-se espera da terminao do processo filho, atravs da primitiva wait. -----> Sincronizao entre Processo Pai e Filho main() {

int pid, estado; pid = fork(); if (pid == 0) { /*Algoritmo do processo filho */ exit(0); } else { /* O processo pai bloqueia-se espera da terminao do processo filho */ pid = wait (&estado); }} -----> Lanamento de um Subprocesso #include <stdio.h> main() { int pid, pid_term, estado; pid = fork(); if (pid == 0) { printf (Sou o processo filho\n); execl (bin/who, who, 0); printf (erro no exec\n); exit(-1); } else { printf (Criado o processo %d\n, pid); pid_term = wait (&estado); printf (Terminou o processo %d com o estado %i\n, pid_term, estado); }} 11.4. Acontecimentos Assncronos Signals O tratamento das excepes e de acontecimentos assncronos tem, em Unix, particular importncia, extrapolando a funo habitual e tornando-se num mecanismo de controlo da execuo de processos. Podem ser assinalados a um processo em execuo atravs da activao de um signal. Os acontecimentos susceptveis de serem assinalados por um signal tm origens muito diversas. Na tabela 11.1 (pg. 234) apresentam-se alguns dos mais utilizados. Alguns esto relacionados com interrupes provocadas pelo hardware (instruo ilegal, violao da proteco no endereamento). Outros so excepes (diviso por zero, n errado de argumentos na chamada a uma funo sistema); h ainda outros relacionados com a interaco com os terminais: tecla del, break. Os signals esto referenciados num ficheiro de texto que indicam o nome lgico e um valor numrico. 11.4.1. Tratamento dos Signals Quando um signal enviado a um processo, a aco provocada por omisso conduz terminao do processo, dando alguns origem ao core. Tambm podem ser associados a rotinas. signal (IdentificadorSignal, RotinaTratamento); ----->Tratamento de um Signal #include <stdio.h> #include<signal.h> ApanhaCTRLC() { char ch; printf(\nQuer terminar execuo (s/n) ? ); ch = getchar(); if (ch == s) exit(); else { printf(Vamos continuar\n); signal(SIGINT, ApanhaCTRLC); }} main () { signal (SIGINT, ApanhaCTRLC); printf(Associou-se um tratamento ao SIGINT\n); for(;;) sleep(10); }

Um signal tambm pode ser ignorado (SIG_IGN) ou, depois de ter sido associado a uma rotina, ser colocado na situao de omisso (SIG_DFL). A rotina signal devolve como parmetro de retorno o tratamento associado anteriormente excepo. No sistema V a associao s para um tratamento, voltando depois de default/omisso, podendo, claro, ser associada novamente. No perodo que medeia entre o lanamento da rotina de tratamento e a nova associao, a recepo de um signal far terminar o processo. tal aconselharia a que a associao fosse a 1 instruo da rotina, mas isso no isento de problemas, pois o processo pode receber uma srie de signals o que far esgotar a pilha conduzindo sua terminao. No BSD proibido inibindo a recepo de signals durante o tratamento. O mecanismo de signals de extrema importncia para o funcionamento de todo o sistema, dado que diversas situaes de bloqueio nos mecanismos de sincronizao podem ser interrompidas quando o processo recebe um signal. 11.4.2. Envio Explcito de Signals ( de um processo a outro) aspecto muito interessante, pois extrapola o mecanismo de excepes. A primitiva kill (pid, sig) ex: desencadear a leitura da caixa de correio. H uma particularidade interessante, que se pode ver neste exemplo: Quando o processo bloqueado num semforo, num mecanismo de comunicao ou na leitura de um ficheiro recebe um signal, automaticamente desbloqueado. Esta implementao faz com que a funo sistema causadora do bloqueio retorne antecipadamente. O utilizador avisado atravs de um cdigo de erro que indica que a funo no foi executada. O interesse (como no exemplo) libertar o processo do bloqueio na leitura de caracteres no interior da rotina LeComando. Isto pouco elegante pois obriga a testar e reinicializar todas as primitivas susceptveis de serem interrompidas assincronamente. ---->Acontecimentos Assncronos (b) void ProduzMensagem (buf) char *buf; { strcpy (buf, Mensagem de Teste); } cliente (pid_servidor) int pid_servidor: { int CCServ; if (CCServ = msget (SERVIDOR, 0)) < 0) erro(msgget Servidor); msg.ident = CLIENTE; ProduzMensagem (msg.texto); msg.mtype = 1; /*Envio mensagem e signal*/ msgsnd (CCServ, &msg, sizeof(msg), 0); kill (pid_servidor, SIGUSR1); } main() { int pid_servidor = getpid(); CCServ = msgget (SERVIDOR, 0777|IPC_CREAT); signal (SIGUSR1, LeCaixaCorreio); //L caixa de correio quando o Servidor lhe manda o SIGUSR1 if (fork() == 0) { cliente (pid_servidor); } else { LeComando(); /* vai ser interrompido por signal (est bloqueado aqui: semforo, leitura de ficheiro, comunicao) msgctl (CCServ, IPC_RMID, (struct msqid_ds *) 0); } No BSD faz-se com que o sistema ao saber que uma chamada sistema foi interrompida a reinicialize, quando possvel automaticamente. O signal SIGKILL no pode ser ignorado ou tratado pelo processo destinatrio e conduz sempre respectiva terminao.

A proteco contra o uso indevido dos signals feita com base na identificao do utilizador a que pertence o processo. Um processo s pode enviar signals aos processos que possuem o mesmo UID real ou efectivo (excepto os superutilizador). Se o pid especificado na rotina kill for 0, o signal enviado a todos os processos que pertencem ao mesmo grupo (difuso de signals), o que til p. ex. para enviar a todos os processos que implementam uma aplicao. Este mtodo usado pelo gestor de terminal para enviar os signals SIGINT e SIGQUIT. A compreenso da manipulao dos signals um exerccio interessante. ----> Cdigo Simplificado da Funo System subrotina que pode ser utilizada dentro de um programa em C para lanar um subprocesso bloqueando-se espera da sua terminao. #include <signal.h> int system(argv) char *argv[]; { int pid, status; void (*del)(), (*quit)(); del = signal (SIGINT, SIG_IGN); quit = signal (SIGQUIT, SIG_IGN); switch (pid=fork()) { case 0 : signal (SIGINT, del); signal(SIGQUIT, quit); execl (/bin/sh, sh, -c, argv, 0); exit(-1); case 1: status = ~0; break; default : while (wait(&status) != pid); } signal (SIGINT, del); signal (SIGQUIT, quit); return status; } Um processo pode bloquear-se espera de um signal, atravs da funo pause e pode requerer que lhe seja enviado um signal do tipo SIGALARM: alarm(Nmero de Segundos) H na biblioteca uma funo para adormecer um processo durante uns segundos e que utiliza as primitivas pause e alarm: sleep (Nmero de segundos) 11.5. Espao de Endereamento dos Processos Em Unix um processo executa-se no interior de segmentos (no sistema V regies). A deteco de um endereo invlido gera uma excepo que se traduz no signal SIGSEGV, o qual, a no ser tratado, conduz terminao do processo e gerao do ficheiro com a imagem de memria. 11.5.1. Modificao do Espao de Endereamento - Aumento da pilha (comum e automtica) - Alocao dinmica de dados (malloc) - Modificao do cdigo (tem a ver com o exec) Quando a regio de dados foi toda utilizada, chamada a funo sistema brk que aumenta a regio. 11.6. O Sistema de Ficheiros A abstraco ficheiro engloba tambm a interaco com os perifricos. Os ficheiros normais so muito simples porque constitudos por uma sequncia de octetos sem qualquer estrutura. Qualquer mecanismo que considere tipos mais complexos (numricos, estruturas) tem de ser implementado por bibliotecas ou rotinas especiais sobre esta abstraco fornecida pelo sistema. 11.6.1. Identificadores O SF organizado como uma rvore com uma nica raiz (root representada por /). Todos os ns da rvore no terminais so ficheiros directrios. Nas folhas esto os ficheiros habituais, directrios ou relacionados com as E/S.

A associao entre o ficheiro e o seu nome funciona em Unix de modo diferente. Um ficheiro pode ser referenciado a partir de vrios directrios atravs do estabelecimento de ligaes, designadas links em terminologia Unix. Um ficheiro s apagado quando no existe nenhum link para ele. 11.6.2. Utilizao dos Ficheiros Do ponto de vista do modelo computacional, um ficheiro pode ser considerado como um canal a que o programa se associa atravs de uma primitiva de abertura (open), que devolve um file descriptor (local ao processo) para um descritor na Tabela de Ficheiros Abertos do utilizador. a primitiva muito simples: Fich = open(Caminho de Acesso, ModoUtilizao) Para criar: Fich = creat (Nome, ModoProteco) Para ler e escrever: NLidos = read (Fich, Tampo, Ncaracteres) NEscritos = write (Fich, Tampo, Ncaracteres) Dada a necessidade de optimizar a gesto dos discos, existe uma memria tampo (cache) onde os dados so colocados antes de serem transferidos para disco. O programador utiliza conjunto de rotinas de biblioteca stdio, para maior eficincia (pginas). ----->Cpia de um Ficheiro ... 11.6.3. Ficheiros Especiais Os ficheiros que representam os perifricos so de um tipo especial que permite o sistema agulhar para o respectivo gestor de perifrico os pedidos das aplicaes. Uniformidade. 11.7. Comunicao Entre Processos Pipes Os pipes foram o mecanismo inicial para intercomunicao entre processos no Unix e constituiu um dos conceitos unificadores na estrutura do interpretador de comandos. Um pipe pode ser visualizado como um canal (byte stream) ligando 2 processos e permitindo um fluxo de informao unidireccional. Funcionalmente idntico a uma caixa de correio em que as mensagens so sequncias de octetos de qualquer dimenso. Para o programador, os pipes tm uma interface absolutamente idntica dos ficheiros. criado com a chamada funo sistema pipe, que devolve 2 descritores, um representando a extremidade de escrita e outro a de leitura P[0]. int P[] status = pipe (P) A sincronizao a habitual num mecanismo de comunicao. Um processo bloqueado quando escreve para um pipe j cheio. No caso da leitura, quando o pipe est vazio, o processo leitor bloqueado. -----> Utilizao de um Pipe #include <stdio.h> main () { char mensagem[] = Mensagem de teste; char tampo [1024]; int fd[2]; pipe(fd); for(;;) { write (fd[1], mensagem, sizeof(mensagem)); read (fd[0], tampo, sizeof(mensagem); printf(Leitura do pipe: %s\n, tampp); printf(Quer terminar (s/n)); if (getchar() == s) exit();}} Um pipe pode ser utilizado como um ficheiro ou em substituio do perifrico de entrada ou sada do programa. Esta ltima hiptese constitui um dos interesses maiores dos pipes, permitindo um mecanismo fcil de redireco das E/S entre processos. A redireco (sada de um ficheiro ser entrada de outro) obtida de forma muito simples aproveitando a funo dup que duplica um descritor de ficheiro colocando-o na primeira posio livre na tabela.

A fig. 11.12 ilustra a forma de efectuar a redireco da entrada para um processo filho. O processo cria um pipe antes de criar o filho, para o qual passam, como se sabe, todos os descritores. O processo filho fecha o seu descritor de entrada e duplica o descritor de leitura do pipe (posio 0, livre). 11.7.1. Pipes com Nome Como so locais, um processo no pode tentar abrir um que tenha sido criado por outro (sem relao hierrquica), o que limitava a programao de estruturas de comunicao. Ento criaramse os pipes com nome, utilizando-se o servio de nomes do SF, pelo que se comporta como um ficheiro. Usa-se a funo mknod para criar pipes com nome ou Fifos (terminologia V). ----> Cliente/Servidor com Named Pipes (a) ... Os pipes so um mecanismo interessante e inovador que permite a interligao entre os mecanismos de E/S, a comunicao entre processos e o SF. A maior limitao advm de, pelo facto de ser baseado no SF, restringe a funcionalidade (unidireccionalidade, interface byte stream) e o desempenho. No V e no BSD foram introduzidos outros mecanismos de comunicao para ultrapassar estas limitaes. 11.8. Sincronizao e Comunicao no Sistema V O sistema passou a dispor de semforos, memria partilhada e caixas de correio, embora com a preocupao de uniformizao das diversas semnticas: so todos criados por uma primitiva get que lhes atribui um identificador e uma primitiva de controlo ctl que permite obter informaes e parametrizar o funcionamento dos objectos. Todos os objectos de comunicao so identificados por um valor inteiro que corresponde a um ndice para as tabelas j referidas. 11.8.1. Semforos Os semforos em Unix no so so tratados individualmente mas em grupo, ao qual associado um identificador global no sistema (Chave dado pelo utilizador). IdSem = semget(Chave, NumSems, Semflg) Semflg um conjunto de definies do modo de utilizao do semforo, permite, por exemplo, especificar se o conjunto de semforos deve ser criado (IPC_CREAT), se se pretende utilizar a um j existente, se o seu uso exclusivo do processo (IPC_EXCL), etc. e permite tambm a especificao da proteco, como nos ficheiros. A funo retorna o identificador sistema do conjunto de semforos que ser utilizado nas primitivas de manipulao. A primitiva semop permite executar as funes Esperar e Assinalar semop (Semid, Sops, Nsops) Sops um apontador para uma tabela de estruturas que define as operaes e Nsops o n de estruturas na tabela. A tabela constituda por registos que identificam o semforo e a operao a executar: struct Sembuff { short SemNum; short SemOp; short SemFlg; } Em resumo, semop executa sobre o semforo SemNum do grupo definido por SemId a operao SemOp, tendo em ateno as condies indicadas por Semflg. A operao executada sobre o semforo depende do valor do parmetro SemOp, existindo diversos tipos de condio de bloqueio e libertao: SemOp = 0 a funo testa o valor da varivel do semforo. Se esta for zero, o processo continua; caso contrrio bloqueado, esperando que o valor do semforo seja zero. SemOp < 0 - SemOp adicionado ao valor do semforo. Se o resultado for zero, liberta os processos espoera da condio zero. Se a varivel do semforo for menor em valor absoluto que o valor de SemOp, o processo bloqueado, esperando que o semforo tenha um valor que lhe permita prosseguir. SemOp > 0 - SemOp adicionado varivel do semforo e os processos bloqueados que vejam satisfeitos os seus pedidos so desbloqueados. Corresponde a Assinalar, com possibilidade de enviar um n qualquer de unidades. Reciprocamente a operao com um n negativo corresponde a Esperar, indicando o n de recursos que se pretende obter. A utilizao de SemOp=0 corresponde utilizao de varivel binria de sincronizao.

No esquecer que um processo bloqueado num semforo tambm pode ser desbloqueado por um signal. A complexidade dos semforos (em grupos) tem a ver com a tentativa de resolver situaes de interblocagem. Caso o processo fique bloqueado numa das operaes, todas as anteriores so anuladas para que o conjunto dos semforos fique coerente. Quando o processo desbloqueado a operao reinicializada para todo o grupo. Ex: caso de um processo que tem de entrar em 2 seces crticas protegidas por semforos: struct Sembuf EspDupla [2]; /* Inicializao da estrutura que define a operao */ EspDupla[0].SemNum = 0; EspDupla[0].SemOp = -1; EspDupla[1].SemNum = 1; EspDupla[1].SemOp = -1; /*Operao sobre os 2 semforos */ semop (semid, EspDupla, 2); 11.8.2. Comunicao por Memria Partilhada No V, os processos podem declarar regies de memria partilhada como pertencentes ao seu espao de endereamento. A primitiva shmget cria uma regio de determinado tamanho, qual fica associada uma Chave fornecida pelo utilizador: IdRegPart = smhget (Chave, Tamanho, Flag) Depois de adquirida deve ser mapeada: EndVirtual = smht (IdRegPart, End, Flags) EndVirtual atribudo pelo ncleo se no puder ser End dado pelo utilizador, que normalmente deixa em branco A primitiva shmdt(End) retira a regio do espao de endereamento do processo. ----> Comunicao Por Memria Partilhada /*Produtor*/ #include <stdio.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> #define CHAVEMEM 10 main () { int shmid, *shmp, i; if ((shmid = shmget (CHAVEMEM, 1024, 0777|IPC_CREAT)) < 0) erro(shmget); printf (Criou uma regio com a chave %d\n, CHAVEMEM); if ((shmp = (int*) shmat (shmid, (char ) 0, 0)) == (int) 1) erro(shmat); for (i=0; i<256; i++) *shmp++ = i; } 11.8.3. Comunicao por Caixa de Correio No sistema V so idnticas s normais. As mensagens tm uma estrutura predefinida o primeiro campo especifica o tipo da mensagem seguindo-se a cadeia de octetos da informao. struct msgbuf { long Tipo; char Informao[];} A primitiva msgget permite criar ou utilizar a cx correio: Ccorreio = mssget (Chave, msgflg); -----> Cliente/Servidor com Caixa de Correio /* Cliente */ #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> #define TAMMSG 100

#define SERVIDOR 10 #define CLIENTE 11 struct msgTeste { long mtype; long ident; char texto[TAMMSG]; } msg; main () { int CCCliente, CCServ; if ((CCCliente = msgget (CLIENTE, 0777!IPC_CREAT)) < 0) erro (msgget CLIENTE); if ((CCServ = msgget (SERVIDOR, 0)) < 0 erro (msgget SERVIDOR); msg.ident = CLIENTE; msg.mtype = 1; ProduzMensagem (msg.texto); /*Envia pedido e recebe resposta */ ... 11.9 Comunicao Distribuda Sockets A verso Berkeley introduziu vrias alteraes na estrutura do sistema. Destacamos os sockets, que correspondem a uma proposta inovadora na comunicao entre processos e que certamente ir ser mantida nas futuras verses do Unix resultantes da fuso do sistema V e BSD 4.3 Os objectivos so: - Transparncia: a comunicao entre processos no devia ficar dependente da localizao dos processos numa nica mquina. - Compatibilidade: Pretendeu-se que o novo mecanismo se inserisse no mecanismo clssico de comunicao e de E/S do Unix. Desta forma os sockets apresentam uma interface baseada nos descritores de ficheiros como os restantes mecanismos. Podem ser considerados uma evoluo dos pipes, mas so bidireccionais. So criados num dado domnio que especifica os protocolos utilizados e as convenes de identificao. Os domnios mais interessantes so: domnio Unix (corresponde ao seu uso como caixas de correio numa mquina) e domnio Internet, que visa a comunicao entre mquinas diferentes e usa os protocolos Darpa. Os sockets tm tipos que estabelecem a semntica do funcionamento da comunicao. algumas das propriedades que podem ser definidas pelos tipos so: - Garantia da sequencialidade; - Mensagens no duplicadas; - Fiabilidade da comunicao; - Preservao das fronteiras das mensagens. Os tipos mais significativos so: - Stream Comunicao bidireccional, fivel e sequencial. Interface semelhante aos pipes ou aos ficheiros, propondo modelo de comunicao dilogo, como explicado no cap.6 - Datagram Comunicao bidireccional, sem garantia de sequencialidade, fiabilidade nem eliminao de mensagens duplicadas. So mais eficazes e sobre redes locais adequado a numerosas aplicaes. Criao de um Socket: IdSocket = socket (domnio, Tipo, Protocolo) O estabelecimento do circuito virtual (stream), permitindo o dilogo entre os processos cliente e servidor, feito por primitivas especficas. O sockete criado sem nome sendo preciso uma primitiva bind para se lhe associar uma designao: bind (IdSocket, EndSocket, TamanhoEnd) No domnio Unix, os nomes so caminhos (ex: /dev/sockexemplo). No Internet o identificador corresponde a uma estrutura mais complexa, composta por endereo Internet e n de porto de comunicao.

Sockets Com Ligao No stream, depois da criao o servidor atribui um nome ao socket para que os clientes possam pedir uma ligao. Porm, antes de aceitar a ligao, o servidor tem de indicar a sua disponibilidade para receber chamadas. A primitiva listen indica que o servidor est disponvel e especifica o n mximo de pedidos pendentes. listen (IdSocket, DimensoFila) Do lado do cliente a criao do socket semelhante: connect (IdSocket, EndSocket, tamanhoEnd) O estabelecimento da ligao s se verifica quando o servidor executa accept. Quando a ligao estabelecida o sistema cria um novo socket no servidor que ficar associado ao novo canal de comunicao: Nsd = accept (IdSocket, EndSocket, TamanhoEnd) O processo servidor poder criar um subprocesso para tratar este pedido, mantendo-se a recepo de novos pedidos de ligao no socket inicial. Depois da ligao estabelecida, os processo podem utiliza as primitivas write e read ou chamadas especficas send e recv. -----> Cliente / Servidor Com Sockets /* Servidor */ #include <signal.h> #include <sys/types.h> #include <sys/socket.h> #include <sys/un.h> #define MAXBUF 1024 #define NOME /tmp/Servico char buf[MAXBUF]; main () { int sd, ns, dim_serv, dim_cli; struct sockaddr_un end_cli, end_serv; if (( sd = socket (AF_UNIX, SOCK_STREAM, 0)) < 0) erro (socket); bzero ((char *) &end_serv, sizeof(end_serv)); end_serv.sun_family = AF_UNIX; strcpy (end_serv.sun_path, NOME); dim_serv = strlen (end_serv.sun.path) + sizeof(end_serv.sun_family); unlink (NOME); if (bind(sd, (struct sockaddr *) &end_serv, dim_serv) < 0) erro (bind); if (liste (sd, 1) <0) erro (listen); for(;;) { dim_cli = sizeof(end_cli); ns = accept (sd, (struct sockaddr *) &end_cli, &dim_cli); if (ns < 0) erro (accept) if (fork() == 0) { /*processo filho*/ printf(Servidor filho aceitou ligao ao socket %d\n, ns); close (sd); read (ns, buf, sizeof(buf)); TrataMensagem (buf); exit(); } close (ns); }} /* Cliente */ ... Comunicaes Urgentes

Para cada par de sockets existe um canal de comunicao independente, designado por out of band. As mensagens urgentes so geradas utilizando um modificador na funo send. Sockets Sem Ligao Datagram A interface semelhante caixa de correio. As primitivas so: sendto (s, buf, buflen, flag, to, tolen) recvfrom (s, buf, buflen, flags, from, fromlen) Espera Alternativa ...

CAP. 12 NCLEO DO SISTEMA UNIX 12.1. Organizao do Ncleo A simplicidade de utilizao e de concepo foi um dos objectivos essenciais do Unix. Diversas operaes do sistema foram agrupadas sob uma interface funcional nica (ex: pipes, ficheiros, gestores de perifricos). O sistema estruturou-se em torno de 2 entidades: - A Gesto de Processos, que engloba multiplexagem do processador (escalonamento), gesto de memria virtual e signals; + comunicao e sincronizao actuais. - Sistema de Ficheiros, que inclui gestores de perifricos, mecanismos de comunicao iniciais, pipes e named pipes. 12.2. Gesto dos Processos 12.2.1. Representao Interna dos Processos Tem um contexto utilizador (texto, dados e pilha), e um contexto sistema interno ao ncleo. O contexto ncleo repartido por 2 estruturas: proc (process) e u (user) O objectivo separar a informao que indispensvel manter em memria (process), para escalonamento (em tabela no ncleo, que estabelece logo o n mximo de processos com existncia simultnea no sistema), daquela que apenas necessria apenas quando o processo se encontra em execuo. A estrutura proc tem: p_stat p_pri p_sig p_time p_cpu p_pid p_ppid A estrutura u, armazenada em zona do espao de endereamento do ncleo: - Registos do processador - Pilha do Ncleo - Cdigos de proteco (UID, GID) - Referncia ao directrio corrente e por omisso - Tabela de ficheiros abertos do processo - Apontador para a estrutura proc - Parmetros da funo sistema em execuo. 12.2.2. Modo Utilizador e Modo Ncleo Um mesmo processo pode estar a ser executado num ou noutro modo. No modo utilizador est a executar o programa definido no seu segmento de texto. a mudana para modo ncleo d-se quando h uma excepo ou interrupo (provocada pelo hardware ou pelo utilizador). Ento h: - Mudana para o modo de proteco mais privilegiado do processador. - Mudana de espao de endereamento (do ncleo total) - Mudana de pilha. A pilha uma parte fundamental do contexto do processo. Quando h mudana de modo as informaes que permitiro o restauro, so guardadas. Se durante a execuo de uma interrupo houver outra, o modo mantm-se no ncleo. A pilha do ncleo pode ter vrios registos de activao correspondentes aos vrios nveis de interrupo. A pilha do ncleo est englobada na estrutura u. Uma das situaes mais usuais de passagem entre os dois modos de proteco nas chamadas s funes sistema (ex. interrupo do disco). A desvantagem desta simplicidade do tratamento das interrupes que torna difcil o controle do tempo do processo pois s tantas estamos a tratar interrupes que nada tm a ver com o processo, durante o seu share. 12.2.3. Criao de um Processo A primitiva fork limita-se a fazer uma rplica do pai:

- Reserva uma entrada na tabela proc - Atribuir um valor a pid (+1) - Copiar a imagem do processo pai. A de texto partilhada -> aumenta 1 o n de utilizadores que lhe podem aceder. As outras so copiadas. - Incrementar o n de utilizadores dos ficheiros abertos do pai - Criar um registo de activao na pilha do ncleo do novo processo. Colocar no estado executvel. - Retornar o valor do pid do novo para o pai. 12.2.4. Terminao de um Processo (funo exit) Tambm pode terminar quando recebe signal. exit efectua: - Fecha todos os ficheiros - Liberta o directrio corrente - Liberta as regies de memria - Escreve num registo de contabilidade a utilizao do processador, memria, E/S. - Envia signal death of child ao pai No retira completamente o processo do sistema. Todos os recursos so libertados excepo da estrutura proc (estado zombie), o que permite ao pai encontrar informao sobre o filho com wait. A eliminao de um processo pai no faz terminar os filhos. 12.2.5. Execuo de Outro Programa (funo exec) Depois de verificar que o ficheiro existe e executvel, o ncleo efectua: - Copia os parmetros da chamada a exec da pilha do utilizador para o ncleo, pois o contexto utilizador ir ser destrudo. - Liberta as regies de dados e pilha ocupados pelo processo e eventualmente a regio de texto se nenhum outro processo estiver a usar - Aloca novas regies de memria - Carrega o ficheiro de cdigo executvel - Copia os parmetros para a pilha utilizador - Cria um registo na pilha ncleo. Como referimos, os cdigos de proteco podem ser alterados na execuo da funo exec. 12.2.6. Gesto de Processos As prioridades em modo utilizador indicam a importncia relativa do processo e o modo como este tem utilizado o recurso principal do sistema, o processador. Ao contrrio, as prioridades em modo ncleo s se encontra definida quando o processo est bloqueado e no depende da utilizao do processador mas do tipo de recursos que o processo detm quando bloqueado; so sempre maiores que as de modo utilizador. Hierarquia: Modo Ncleo No pode receber signals Swapper E/S Disco Espera Tampo da cache Espera inode Podem receber signals Entrada terminal Sada terminal Terminao filho Modo utilizador Nvel 0 ... Nvel N Modificao Dinmica das Prioridades em Modo Utilizador So actualizadas periodicamente. O algoritmo de actualizao visa diminuir a prioridade dos processos que utilizaram recentemente o processador durante mais tempo. Gesto de prioridades como estrutura multilista circular.

O sistema tem um relgio interno com um perodo com valores entre 20 e 200 ms. Ao fim de cada 1s executado o algoritmo de escalonamento e efectuado o clculo das prioridades dos processos em modo utilizador. Para o clculo usada a informao na tabela proc sobre a utilizao do tempo de processador: Prioridade = TempoProcessador + Prioridade Base No sistema V a contabilizao do tempo de processador no uma mera adio, tentando-se amortecer a influncia de usos remotos por decaimento. TempoProcessador=TempoProcesaador/2 Prioridade = TempoProcessador/2 + Prioridade Base (ver tabela 12.1: Actualizao das prioridades em modo utilizador) pg. 272 Existe ainda um parmetro que influencia o clculo da prioridade, que o nice. O valor de nice mantido na tabela proc e adicionado frmula anterior. O valor definido atravs da funo sistema nice e assim o superutilizador pode dar-lhe valores negativos para aumentar a prioridade do processo. Os utilizadores apenas podem diminuir a prioridade sendo portanto nices (simpticos) para com os outros. Despacho O processo em execuo perde o direito a continuar a executar-se em 3 situaes: - Quando se bloqueia no interior de uma funo sistema - Quando termina - Quando retorna a modo utilizador e existe um processo mais prioritrio executvel (mecanismo de preempo). Como consequncia, um processo em modo ncleo nunca pode ser retirado de execuo, o que determinante para a impossibilidade de usar Unix em sistemas de tempo real. 12.3. Sincronizao Interna Um processo pode passar a um estado bloqueado no decorrer de uma chamada sistema. As razes de bloqueio so mltiplas. A maioria tem a ver com as E/S mas tambm com os mecanismos de sincronizao em modo utilizador (semforos, mailboxes). A sincronizao do ncleo conseguida atravs do bloqueio dos processos em acontecimentos events, que so representados por endereos (existe tabela na estrutura de dados do ncleo, com cada entrada associada a um acontecimento).

CAP. 13 Modelo Computacional do VMS PRIMITIVAS 1 - Criao e Terminao de Processos SYS$CREPRC ([Pidadr,] Image [, Input] [, Output] [, Error] [, Prvadr] [, Quota] [, Prcnam] [, BasPri] [, Uic] [, Mbxunt] [, Stsflg]) Image nome do ficheiro onde se encontra o cdigo executvel do processo Pidadr endereo da palavra que ir receber o identificador que o sistema associa ao processo quando criar a sua estrutura interna Prcnam nome (cadeia de caracteres) especificado pelo utilizador que permitir a identificao lgica do processo Input, Output, Error identificadores dos canais de entrada/sada e de notificao de erros durante a execuo dos processos Mbxunt caixa de correio onde o processo pai poder receber a informao de terminao do processo filho Baspri nvel mnimo de prioridade do processo Prvadr endereo de uma palavra de 64 bits que define os privilgios do processo Quota definio das quotas de utilizao dos recursos do sistema Uic Se for zero, indica que se trata de um subprocesso e o sistema atribu-lhe o valor de UIC do pai; se for diferente de zero, trata-se de um detached process. SYS$DCEXH permite definir rotina que ser invocada antes da terminao real do processo SYS$EXIT autoterminao habitual SYS$FORCEX e SYS$DELPRC permitem eliminar outro processo desde que executadas por um processo que possua os privilgios necessrios para faz-lo. A segunda normalmente utilizada quando se pretende que no seja executado o procedimento de terminao (ou quando se sabe que este no existe) 2 Acontecimentos Assncronos (AST) SYS$TIMER lana um temporizador ex: SYS$SETIMR (0, IntervaloBin, TicTac, 0); Num dos parmetros indicado o modo como se pretende tratar o acontecimento gerado pelo expirar da temporizao. Neste caso indicou a rotina TicTac que o AST que deve ser executado quando acabar a temporizao/acontecimento em que bloqueou. SYS$BINTIM (&Tempo, IntervaloBin) Converte para o formato interno do tempo. -> 3 Sincronizao Indirecta (event-flags) O posicionamento das event-flgs feito atravs de duas rotinas: SYS$CLREF indica a condio de bloqueio (posiciona) ex: SYS$CLREF (Efn96) SYS$SETEF assinala o acontecimento que a event-flag controla, mas antes tem de ser posicionada com SYS$CLREF ex: SYS$SETEF (Efn96) SYS$WAITFR bloqueia o processo quando a event-flag no est posicionada. (Quando recebe o assinala, posiciona a flag, logo h que posicion-la a seguir pelo SYS$CLREF) ex: SYS$WAITFR(Efn96) SYS$ASCEF cria um grupo de event-flags ou para se lhe associar. Atribui um nome ao grupo e especifica os identificadores locais (grupo 2 ou 3) a que fica associado. ex: Estado = SYS$ASCEF (Efn96, &EfnGrupo3, 0, 0) SS$_WASCLR testa se a event-flag j est posicionada. _ not? Primitivas para sincronizao mltipla sobre event-flags: SYS$WFLAND (efn, mascara) bloqueia o processo at que a todas as event-flags do grupo referenciado por efn e pertencentes ao subconjunto definido por mscara (palavra de 32 bits) estejam posicionadas

SYS$WFLOR (efn, mascara) reciprocamente, bloqueia o processo at que a primeira das eventflags seja posicionada 4 Comunicao Por Memria Partilhada SYS$CRMPSC ([inadr] [, retadr] [, acmode] [, flags] [, gsdnam] [, iden] [, relpag] [, chan] [, pagcnt] [, vbn] [, prot] [, pfc]) inadr e retadr vectores que contm o endereo inicial e o endereo final da regio. inadr fornecido pelo utilizador e retadr o endereo virtual onde o sistema localizou a regio flags definem a funo a executar O tipo de seco que corresponde a uma zona partilhada de memria designa-se por global section: SEC$M_GBL e SEC$M_PAGFIL so funes que devem fazer sempre parte da seleco gsdnam define o nome da seco global que permitir referenci-las nas primitivas de associao. A opo mais vulgar a zona de memria corresponder a uma extenso do espao de armazenamento: SEC$M_EXPREG especifica que a regio a alocar dever ser colocada na primeira posio livre do mapa de endereamento ( a opo por omisso utilizar os endereos especificados em inadr). pagcnt quando EXPREG especificado, especifica o tamanho e inadr deve especificar se se pretende mapear no espao de memria P0 ou P1. SYS$MGBLSC ( inadr [, retadr] [, acmode] [, flags], gsdnam [, iden] [, repag]) - Associao a uma seco global. SYS$DELTA Retira do espao de armazenamento as pginas previamente alocadas. ex: SYS$DELTA ( EndRegiao, 0, 0), com EndRegiao = gsdnam 5 - Entradas/Sadas (canal abstraco) Um canal deve ser associado ao processo antes de ser utilizado: SYS$ASSIGN permite efectuar a associao a um canal, cujo nome fornecido, devolvendo um identificador do sistema, que ser utilizado nas primitivas de escrita e leitura. SYS$QIO ([efn,] chan, func [, iosb] [, astadr] [, astprm] [, p1] [, p2] [, p3] [, p4] [, p5] [, p6]) chan identificador do canal func funo a executar

Você também pode gostar