Escolar Documentos
Profissional Documentos
Cultura Documentos
Sistemas Operacionais
Rmulo Silva de Oliveira 1
Abstract: For more than 40 years, operating systems have been developed
with the goal of making the utilization of computers more efficient and more
comfortable. A huge number of concepts, abstractions, mechanisms and
algorithms were created and improved. This paper is a tutorial on the
fundamental techniques applied in the construction of contemporary operating
systems. We also discuss distributed operating systems and real-time operating
systems.
1 Introduo
O sistema operacional procura tornar a utilizao do computador mais eficiente e
mais conveniente. A utilizao mais eficiente busca um maior retorno no investimento feito
no hardware, significa mais trabalho obtido do mesmo hardware. Uma utilizao mais
conveniente vai diminuir o tempo necessrio para a construo e utilizao dos programas.
Um enorme nmero de conceitos, abstraes, mecanismos e algoritmos foram criados e
aprimorados ao longo dos ltimos 40 anos. Este artigo um tutorial a respeito das tcnicas
fundamentais empregadas nos sistemas operacionais contemporneos. O artigo baseia-se, em
grande parte, no texto do livro Sistemas Operacionais, dos mesmos autores [1].
Para atingir os objetivos propostos, o sistema operacional oferece diversos tipos de
servios. Todo sistema operacional oferece meios para que um programa seja carregado na
memria principal e executado. Talvez o servio mais importante oferecido seja o que
permite a utilizao de arquivos e diretrios. Tambm o acesso aos perifricos feito atravs
do sistema operacional. medida que diversos usurios compartilham o computador, passa a
ser interessante saber quanto de quais recursos cada usurio necessita. Diversas informaes
sobre o estado do sistema so mantidas. Nessa categoria, temos a hora e a data correntes, a
lista de usurios utilizando o computador no momento, a verso do sistema operacional em
uso. Cabe tambm ao sistema operacional garantir que cada usurio possa trabalhar sem
sofrer interferncia danosa dos demais.
Os programas solicitam servios ao sistema operacional atravs das chamadas de
sistema. Elas so semelhantes s chamadas de sub-rotinas. Entretanto, enquanto as chamadas
de sub-rotinas so transferncias para procedimentos normais do programa, as chamadas de
sistema transferem a execuo para o sistema operacional. Atravs de parmetros, o
programa informa exatamente o que necessita. O retorno da chamada de sistema, assim como
o retorno de uma sub-rotina, faz com que a execuo do programa seja retomada a partir da
instruo que segue a chamada. Para o programador assembly (linguagem de montagem), as
chamadas de sistema so bastante visveis. Por exemplo, o conhecido "INT 21H" no MS-
DOS. Em uma linguagem de alto nvel, elas ficam escondidas dentro da biblioteca utilizada
pelo compilador. O programador chama sub-rotinas de uma biblioteca, e estas chamam o
sistema. Por exemplo, qualquer funo da biblioteca que acesse o terminal (como
printf()na linguagem C) exige uma chamada de sistema.
A parte do sistema operacional responsvel por implementar as chamadas de sistema
normalmente chamada de ncleo ou kernel. Os principais componentes do kernel de
qualquer sistema operacional so a gerncia de processador, a gerncia de memria, o
sistema de arquivos e a gerncia de entrada e sada. Cada um desses componentes ser
descrito nas prximas sees.
Os programas de sistema, algumas vezes chamados de utilitrios, so programas
normais executados fora do kernel do sistema operacional. Eles utilizam as mesmas
chamadas de sistema disponveis aos demais programas. Esses programas implementam
tarefas bsicas para a utilizao do sistema e muitas vezes so confundidos com o prprio
sistema operacional. Exemplos so os utilitrios para manipulao de arquivos: programas
para exibir arquivo, imprimir arquivo, copiar arquivo, trocar o nome de arquivo, listar o
contedo de diretrio, entre outros. O mais importante programa de sistema o
interpretador de comandos. Esse programa ativado pelo sistema operacional sempre que
um usurio inicia sua sesso de trabalho. Sua tarefa receber comandos do usurio e
execut-los. Para isso, ele recebe as linhas tecladas pelo usurio, analisa o seu contedo e
executa o comando teclado. A execuo do comando, na maioria das vezes, vai exigir uma
ou mais chamadas de sistema. Por exemplo, considere um comando do tipo "lista diretrio".
Para execut-lo, o interpretador de comandos deve, primeiramente, ler o contedo do
diretrio solicitado pelo usurio. A informao formatada para facilitar a sua disposio na
tela e, finalmente, novas chamadas de sistema sero feitas para listar essas informaes na
tela. O interpretador de comandos no precisa, obrigatoriamente, ser um programa de
sistema. Ele pode fazer parte do sistema operacional. Entretanto, a soluo descrita antes a
que oferece a maior flexibilidade. O que foi dito sobre o interpretador de comandos
igualmente vlido para a situao em que o sistema operacional oferece uma interface
grfica de usurio (GUI graphical user interface). A diferena est na comodidade para o
usurio, que passa a usar cones, menus e mouse para interagir com o sistema.
2 Gerncia do Processador
Em um sistema multiprogramado diversos programas so mantidos na memria ao
mesmo tempo. Vamos supor que o sistema operacional inicia a execuo do programa 1.
Aps algum tempo, da ordem de milisegundos, o programa 1 faz uma chamada de sistema.
Ele solicita algum tipo de operao de entrada ou sada. Por exemplo, uma leitura do disco.
Sem multiprogramao, o processador ficaria parado durante a realizao do acesso. Em um
sistema multiprogramado, enquanto o perifrico executa o comando enviado, o sistema
operacional inicia a execuo de outro programa. Por exemplo, o programa 2. Dessa forma,
processador e perifrico trabalham ao mesmo tempo. Enquanto o processador executa o
programa 2, o perifrico realiza a operao solicitada pelo programa 1.
Em geral conveniente diferenciar um programa de sua execuo. Para tanto usado
o conceito de processo. No existe uma definio objetiva, aceita por todos, para a idia de
processo. Na maioria das vezes, um processo definido como "um programa em execuo".
O conceito de processo essencial no estudo de sistemas operacionais. Um programa uma
seqncia de instrues. algo passivo e no altera o seu prprio estado. O processo um
elemento ativo, que altera o seu estado, medida que executa um programa. o processo
que faz chamadas de sistema, ao executar um programa.
possvel que vrios processos executem o mesmo programa ao mesmo tempo. Por
exemplo, diversos usurios podem estar utilizando simultaneamente o editor de texto
favorito da instalao. Existe um nico programa "editor de texto". Para cada usurio, existe
um processo executando o programa. Cada processo representa uma execuo independente
do editor de textos. Todos os processos utilizam uma mesma cpia do cdigo do editor de
textos, porm cada processo trabalha sobre uma rea de variveis privativa.
L im ite d e T e m p o
S e le o
A p to E x e c u ta n d o D e s t r u i o
C h a m a d a S is t e m a
R e t o r n o I m e d ia t o
Interrupo
de Hardware
B lo q u e a d o
E rro C rtic o
junto com os demais. Em outras palavras, o processo foi criado. A base da multiprogramao
o compartilhamento do processador entre os processos. Em um sistema multiprogramado,
necessrio interromper processos para continu-los mais tarde. Essa tarefa chamada de
chaveamento de processo, ou chaveamento de contexto de execuo. O local usado para
salvar o contexto de execuo de um processo o seu prprio bloco descritor.
Um processo uma abstrao que rene uma srie de atributos como espao de
endereamento, descritores de arquivos abertos, permisses de acesso, quotas, etc. Um
processo possui ainda reas de cdigo, dados e pilha de execuo. Tambm associado ao
processo um fluxo de execuo. Por sua vez, uma thread nada mais que um fluxo de
execuo. Na maior parte das vezes, cada processo formado por um conjunto de recursos
mais uma nica thread.
A idia de multithreading associar vrios fluxos de execuo (vrias threads) a um
nico processo. Em determinadas aplicaes, conveniente disparar vrias threads dentro do
mesmo processo (programao concorrente). importante notar que as threads existem no
interior de um processo, compartilhando entre elas os recursos do processo, como o espao
de endereamento (cdigo e dados). Devido a essa caracterstica, a gerncia de threads
(criao, destruio, troca de contexto) "mais leve" quando comparada com processos.
Threads so muitas vezes chamadas de processos leves.
3 Gerncia da Memria
Na multiprogramao, diversos processos so executados simultaneamente, atravs da
diviso do tempo do processador. Para que o chaveamento entre eles seja rpido, esses
processos devem estar na memria, prontos para executar. funo da gerncia de memria
do sistema operacional prover os mecanismos necessrios para que os diversos processos
compartilhem a memria de forma segura e eficiente. A tcnica particular que determinado
sistema operacional emprega depende, entre outras coisas, de o que a arquitetura do
computador em questo suporta. Em [2], [3], [4] e [5], podem ser encontradas as descries
de algumas solues empregadas em sistemas operacionais especficos. Uma excelente
descrio de arquiteturas contemporneas pode ser encontrada em [6] e [7].
A memria lgica de um processo aquela que o processo enxerga, ou seja, aquela
que o processo capaz de acessar. Os endereos manipulados pelo processo so endereos
lgicos. Em outras palavras, as instrues de mquina de um processo especificam endereos
lgicos. Por exemplo, um processo executando um programa escrito na linguagem C
manipula variveis tipo pointer. Essas variveis contm endereos lgicos. Em geral, cada
processo possui a sua memria lgica, que independente da memria lgica dos outros
processos. A memria fsica aquela implementada pelos circuitos integrados de memria,
pela eletrnica do computador. O endereo fsico aquele que vai para a memria fsica, ou
seja, usado para enderear os circuitos integrados de memria.
3.1 Paginao
O desperdcio de memria em funo da fragmentao externa um grande problema.
A origem da fragmentao externa est no fato de cada programa necessitar ocupar uma
nica rea contgua de memria. Se essa necessidade for eliminada, ou seja, se cada
programa puder ser espalhado por reas no contguas de memria, a fragmentao externa
eliminada. Esse efeito obtido com a paginao.
A Figura 2 ilustra o funcionamento da tcnica de paginao. O exemplo da figura
utiliza um tamanho de memria exageradamente pequeno para tornar a figura mais clara e
menor. O espao de endereamento lgico de um processo dividido em pginas lgicas de
tamanho fixo. No exemplo, todos os nmeros mostrados so valores binrios. A memria
lgica composta por 12 bytes. Ela foi dividida em 3 pginas lgicas de 4 bytes cada uma. O
endereo lgico tambm dividido em duas partes: um nmero de pgina lgica e um
deslocamento dentro dessa pgina. No exemplo, endereos lgicos possuem 5 bits.
A memria fsica tambm dividida em pginas fsicas com tamanho fixo, idntico
ao tamanho da pgina lgica. No exemplo, a memria fsica composta por 24 bytes. A
pgina fsica tem o mesmo tamanho que a pgina lgica, ou seja, 4 bytes. A memria fsica
foi dividida em 6 pginas fsicas de 4 bytes cada uma. Os endereos de memria fsica
tambm podem ser vistos como compostos por duas partes. Os 3 primeiros bits indicam um
nmero de pgina fsica. Os 2 ltimos bits indicam o deslocamento dentro da pgina fsica.
Um programa carregado para a memria pgina a pgina. Cada pgina lgica do
processo ocupa exatamente uma pgina fsica da memria fsica. Entretanto, a rea ocupada
pelo processo na memria fsica no precisa ser contgua. Durante a carga montada uma
tabela de pginas para o processo. Essa tabela informa, para cada pgina lgica, qual a
consultada a cada acesso memria. Uma soluo manter a tabela de pginas na prpria
memria. O problema desse mecanismo que agora cada acesso que um processo faz
memria lgica transforma-se em dois acessos memria fsica. Uma forma de reduzir o
tempo de acesso memria no esquema anterior adicionar uma memria cache especial
que vai manter as entradas da tabela de pginas mais recentemente utilizadas. Essa memria
cache interna MMU chamada normalmente de Translation Lookaside Buffer (TLB).
Na prtica, as tabelas de pginas possuem um tamanho varivel, ajustado
necessidade de cada processo. Ocorre que, se as tabelas puderem ter qualquer tamanho, ento
teremos fragmentao externa novamente (a maior razo para usar paginao foi a
eliminao da fragmentao externa). Para evitar isso, so usadas tabelas de pginas com
dois nveis. As tabelas de pginas crescem de pedao em pedao, e uma tabela auxiliar
chamada diretrio mantm o endereo de cada pedao. Para evitar a fragmentao externa,
cada pedao da tabela de pginas deve ter um nmero inteiro de pginas fsicas, mantendo
assim toda a alocao de memria fsica em termos de pginas, no importando a sua
finalidade. Entradas desnecessrias em cada pedao so marcadas como invlidas.
importante destacar que a implementao de paginao descrita aqui no a nica possvel.
Por exemplo, um esquema chamado Tabela de Pginas Invertida (Inverted Page Table)
usado em alguns processadores, como o PowerPC [6].
3.2 Segmentao
O conceito de pgina, fundamental para a paginao, uma criao do sistema
operacional para facilitar a gerncia da memria. Programadores e compiladores no
enxergam a memria lgica dividida em pginas, mas sim em segmentos. Uma diviso tpica
descreve um programa em termos de quatro segmentos: cdigo, dados alocados
estaticamente, dados alocados dinamicamente e pilha de execuo. possvel orientar a
gerncia de memria para suportar diretamente o conceito de segmento. Uma posio da
memria lgica passa a ser endereada por um nmero de segmento e um deslocamento em
relao ao incio do seu segmento. Em tempo de carga, cada segmento copiado para a
memria fsica, e uma tabela de segmentos construda. Essa tabela informa, para cada
segmento, qual o endereo da memria fsica onde ele foi colocado e qual o seu tamanho.
Uma diferena importante que a segmentao no apresenta fragmentao interna,
visto que a quantidade exata de memria necessria alocada para cada segmento.
Entretanto, como reas contguas de diferentes tamanhos devem ser alocadas, temos a
ocorrncia de fragmentao externa. Uma soluo possvel paginar cada segmento. Na
segmentao paginada o espao lgico formado por segmentos, e cada segmento
dividido em pginas lgicas. O grande atrativo da segmentao est na facilidade para
compartilhar memria. Cada segmento representa uma parte especfica do programa,
podendo ou no ser compartilhado. Segmentos tendem a ser homogneos nesse sentido. Isto
, todo o segmento pode ser compartilhado, ou nenhuma parte do segmento pode ser
compartilhada.
O tratamento de uma falta de pgina vrias ordens de grandeza mais lento que um
acesso normal memria. Quando um processo possui um nmero muito pequeno de
pginas fsicas para executar, a sua taxa de falta de pginas aumenta. medida que o
nmero de pginas fsicas diminui, a taxa de falta de pginas aumenta de tal forma que o
processo pra de realizar qualquer trabalho til. Nesse momento est ocorrendo thrashing.
4 Sistema de Arquivos
O sistema de arquivos a parte do sistema operacional mais visvel para os usurios.
Durante o tempo todo, usurios manipulam arquivos contendo textos, planilhas, desenhos,
figuras, jogos, etc. Esse fato exige que o sistema de arquivos apresente uma interface
coerente e simples, fcil de usar. Ao mesmo tempo, arquivos so normalmente
implementados a partir de discos magnticos. Como um acesso a disco demora cerca de
100000 vezes mais tempo do que um acesso memria principal, so necessrias estruturas
de dados e algoritmos que otimizem os acessos a disco gerados pela manipulao de
arquivos. importante observar que sistemas de arquivos implementam um recurso em
software que no existe no hardware. O hardware oferece simplesmente espao em disco, na
forma de setores que podem ser acessados individualmente, em uma ordem aleatria. O
conceito de arquivo, muito mais til que o simples espao em disco, uma abstrao criada
pelo sistema operacional. Nesse caso, temos o sistema operacional criando um recurso lgico
a partir dos recursos fsicos existentes no sistema computacional.
Existe ampla literatura que descreve os sistemas de arquivos dos sistemas
operacionais mais populares. O sistema de arquivos do UNIX System V release 2 descrito
em [2]. Em [3] tambm descrita uma soluo especfica, utilizada no sistema operacional
Xinu. A implementao utilizada no Minix descrita em [4], inclusive com o cdigo fonte.
Em [5] feita uma excelente descrio de diversos sistemas de arquivos utilizados no mundo
UNIX. Entre eles, System V release 4, Fast File System de Berkeley, Network File System
da Sun, Remote File Sharing da AT&T, Andrew File System da Carnegie-Mellon University
e muitos outros.
Arquivos so recipientes que contm dados. Cada arquivo contm dados que um
usurio, por alguma razo, resolveu colocar juntos no mesmo arquivo. Diretrios so
conjuntos de referncias a arquivos. Os diretrios permitem-nos separar os arquivos em
grupos, facilitando sua localizao e manuseio. Existem situaes nas quais importante
visualizar um nico disco fsico como se fossem vrios. Por exemplo, o mesmo disco fsico
pode ser particionado em dois discos lgicos ou parties. possvel, por exemplo, manter
todos os arquivos do sistema operacional (interpretador de comandos, compiladores, etc.) em
uma partio e todos os arquivos de usurios na outra partio. No momento de fazer uma
cpia de segurana (back-up) em fita ou CD, o particionamento do disco facilita a cpia dos
arquivos do sistema e dos usurios para fitas diferentes.
Cada arquivo identificado por um nome, o qual permite que o usurio faa
referncias a ele. Alm do nome, cada arquivo possui uma srie de outros atributos que so
mantidos pelo sistema operacional. Entre os mais usuais, esto: tipo do contedo, tamanho,
data e hora do ltimo acesso, data e hora da ltima alterao, identificao do usurio que
criou o arquivo, lista de usurios que podem acessar o arquivo.
Diversas operaes sobre arquivos so suportadas. As operaes bsicas so: criao
do arquivo, destruio do arquivo, leitura do contedo, alterao do contedo, escrita de
novos dados no final do arquivo, execuo do programa contido no arquivo, troca do nome
do arquivo, alterao na lista de usurios que podem acessar o arquivo. Em geral, essas
operaes bsicas correspondem a chamadas de sistema que os programas de usurio podem
usar para manipular arquivos. A partir das operaes bsicas, muitas outras podem ser
implementadas. Por exemplo, as operaes de impresso do contedo do arquivo ou a cpia
de seu contedo para outro arquivo podem ser implementadas a partir das operaes bsicas
de leitura e escrita.
A forma como os dados so dispostos dentro de um arquivo determina sua estrutura
interna. Existe, na prtica, uma enorme quantidade de diferentes tipos de arquivos, cada
tipo com sua estrutura interna particular. Alm disso, a cada dia, novas aplicaes so criadas
e, em conseqncia, novos tipos de arquivos so criados. No vivel para o sistema
operacional conhecer todos os tipos de arquivos existentes. Para o sistema operacional, cada
arquivo corresponde a uma seqncia de bytes. A exceo so os arquivos contendo
programas executveis, cuja estrutura interna definida pelo sistema operacional.
Mtodo de acesso diz respeito forma como o contedo de um arquivo acessado. O
mtodo de acesso mais simples o seqencial. Nesse caso, o contedo do arquivo pode ser
lido seqencialmente, pedao a pedao. O acesso seqencial muito usado. Por exemplo,
compiladores fazem uma leitura seqencial dos programas fontes. Muitas aplicaes no
podem ser implementadas com o acesso seqencial e apresentar um desempenho aceitvel.
No mtodo de acesso relativo, o programa inclui na chamada de sistema qual a posio do
arquivo a ser lida. As posies do arquivo so numeradas a partir de 0 (ou a partir de 1 em
alguns sistemas), sendo que cada posio corresponde a um byte. Em muitos sistemas
operacionais, existe o conceito de posio corrente no arquivo. Nesse caso, a chamada de
sistema para leitura ou escrita no informa uma posio. Essa sempre acontece a partir da
posio corrente. A posio corrente ento avanada para imediatamente aps o ltimo
byte lido ou escrito.
4.3 Diretrios
Os diretrios so as estruturas do sistema de arquivos que contm a informao
"quais arquivos existem no disco". Um diretrio pode ser entendido como sendo um
conjunto de arquivos ou um conjunto de referncias a arquivos. Existem diversas formas
de estruturar os diretrios de um sistema. A mais simples ter um nico diretrio para o
disco inteiro. Essa soluo, conhecida como diretrio linear, aceitvel apenas para
sistemas de arquivos muito pequenos.
possvel ter no diretrio principal uma entrada para cada usurio do sistema. Essa
entrada no corresponde a um arquivo, mas sim a um subdiretrio que, por sua vez, contm
os arquivos do usurio correspondente. possvel estender o conceito de subdiretrios de tal
forma que os usurios tambm possam criar livremente os seus prprios subdiretrios. O
resultado um sistema de diretrios organizado na forma de rvore. Em um sistema de
diretrios organizado na forma de rvore, qualquer arquivo ou subdiretrio pode ser
identificado de forma no ambgua atravs do caminho (pathname) para atingi-lo a partir da
raiz da rvore. Utilizando a notao do sistema operacional UNIX, "/" representa a raiz da
rvore. A subrvore pertencente ao usurio Joo inicia no subdiretrio "/usr/joao". O usurio
Joo possui um total de trs arquivos: "/usr/joao/teste", "/usr/joao/so/trab1" e
"/usr/joao/so/trab2". Facilmente, a rvore de diretrios cresce at uma altura tal que passa a
ser desconfortvel fornecer sempre o caminho completo at cada arquivo ou diretrio. Ao
mesmo tempo, a cada momento, um usurio tipicamente manipula apenas arquivos de um
dado diretrio. O conceito de diretrio corrente facilita a identificao dos arquivos.
Uma questo importante como especificar, no nome do arquivo, qual a partio de
disco na qual ele se encontra. Uma possibilidade preceder o caminho absoluto com uma
identificao da partio em questo. Por exemplo, "C:\fontes\prog.c" indica, no MSDOS, o
programa cujo caminho absoluto "\fontes\prog.c" a partir da raiz da partio identificada
por "C:". Uma forma alternativa usada no UNIX. Uma partio escolhida como principal.
O diretrio raiz do sistema de diretrios corresponde ao diretrio raiz dessa partio
principal ou partio de root. Todas as demais parties so montadas em subdiretrios
dessa partio principal. Atravs de um comando especfico, o administrador do sistema faz
com que um dado subdiretrio permita o acesso ao diretrio raiz da rvore sendo montada.
A forma mais simples de implementar diretrios e subdiretrios consider-los como
arquivos especiais, cujo contedo manipulado pelo prprio sistema operacional. Dessa
forma, todo o mecanismo de alocao, liberao e localizao de blocos fsicos no disco,
disponvel para arquivos, tambm usado para os diretrios.
Quando diretrios so implementados como conjuntos de descritores de arquivos, o
contedo de um diretrio corresponde aos descritores dos arquivos. Nesse caso, o nome do
arquivo ou subdiretrio faz parte do seu descritor. Nesse esquema, aps a leitura do diretrio,
o sistema de arquivos j possui na memria todas as informaes necessrias para procurar
pelo nome do arquivo buscado e, caso encontre, acessar o seu contedo. Por outro lado, os
nomes esto fortemente vinculados aos descritores de arquivos. Isso impede, por exemplo,
que um mesmo arquivo possua mais de um nome. Alm disso, diretrios tendem a ser
maiores e esto mais sujeitos a inconsistncias, pois informaes importantes esto
espalhadas por todo o disco.
Outra possibilidade separar um conjunto de blocos da partio para armazenar
exclusivamente os descritores de arquivos e de subdiretrios. Esse conjunto de blocos forma
um vetor de descritores, no qual cada descritor pode ser perfeitamente identificado pelo
nmero da partio e pela posio nesse vetor. Essa estrutura de dados forma o que
normalmente conhecido como um flat file system (na terminologia do UNIX). A estrutura
em rvore criada a partir de alguns arquivos do sistema flat (que na verdade atuam como
subdiretrios), cada um organizado internamente como uma tabela contendo nomes e
respectivos endereos no vetor de descritores. Dessa forma, para percorrer um caminho na
rvore dos diretrios, necessrio abrir o subdiretrio, procurar o nome desejado, pegar o
endereo flat associado e ler o respectivo descritor de arquivo do vetor de descritores. Esse
procedimento deve ser repetido para cada nome presente no caminho.
Cada partio autocontida no sentido de que todas as informaes necessrias para
o acesso aos seus arquivos esto contidas na prpria partio. As informaes incluem:
diretrios e subdiretrios contidos na partio; descritores dos arquivos na partio; blocos
de dados dos arquivos contidos na partio; lista ou mapa de blocos livres da partio.
5 Entrada e Sada
O objetivo primeiro de um computador solucionar problemas. Para tanto,
necessrio que algum tipo de mecanismo exista para que possamos informar esse problema
ao computador e recuperar sua soluo. Esse mecanismo constitui o que denominamos
genericamente de dispositivos de entrada e sada. Atualmente, possvel encontrar uma
grande variedade de dispositivos, desde dispositivos desenvolvidos para permitir a
comunicao do homem com o computador (teclado, mouse, monitor de vdeo, etc) at
dispositivos que possibilitam a comunicao entre computadores (modems, placas de redes,
etc), ou ainda aqueles destinados conexo de outros equipamentos ao computador
(unidades de fita, disquetes, disco rgido, CD-ROM, etc). Apesar dessa diversidade, esses
dispositivos de entrada e sada possuem alguns aspectos de hardware em comun. De acordo
com o sentido do fluxo de dados entre o computador e o dispositivo, esses podem ser
divididos em perifricos de entrada, perifricos de sada, ou ainda perifricos de entrada e
sada. Um perifrico pode ser visto como qualquer dispositivo conectado a um computador
de forma a possibilitar sua interao com o mundo externo. Os perifricos so conectados ao
computador atravs de um componente de hardware denominado interface. Considerando-se
a diversidade, a complexidade, e as diferentes formas de operaes em funo do tipo de
perifrico, as interfaces empregam no seu projeto um outro componente de hardware: o
controlador. A funo bsica de um controlador traduzir operaes genricas do tipo ler
dados, escrever dados, reinicializar, ler status ou escrever comando para uma
seqncia de acionamentos eletrnicos, eltricos e mecnicos capazes de realizar a operao
solicitada. Para isso, o controlador deve saber como o perifrico funciona, resultando que
cada tipo de perifrico necessita de um controlador diferente. A gerncia de E/S est
intimamente relacionada com aspectos de hardware de um computador.
O mecanismo de interrupes permite que um controlador de perifrico chame a
ateno do processador. Fisicamente, o barramento de controle usado pelos controladores
de perifricos para o envio de sinais eltricos associados com a gerao de uma interrupo.
Uma interrupo sempre sinaliza a ocorrncia de algum evento. Quando ela acontece, desvia
a execuo da posio atual de programa para uma rotina especfica. Essa rotina, responsvel
por atender a interrupo, chamada de tratador de interrupo. O tratador realiza as
aes necessrias em funo da ocorrncia da interrupo. Ele , simplesmente, uma rotina
que somente executada quando ocorre uma interrupo.
Drivers de dispositivos
driver driver driver driver driver
SCSI EIDE floppy rede teclado
Hardware
6 Segurana
Desde que diferentes usurios passaram a compartilhar o mesmo computador, a
segurana computacional tornou-se um problema relevante. Com a informatizao da
sociedade, o advento da Internet, o fcil acesso a computadores remotos e a disseminao
dos vrus de computador, segurana computacional tornou-se a preocupao nmero um de
muitas pessoas. Os principais objetivos do sistema operacional com respeito a segurana
garantir a confidencialidade (somente usurios autorizados podem ler determinada
informao), a integridade (informaes no so modificadas sem autorizao) e a
disponibilidade (recursos permanecem disponveis para usurios legtimos). Exemplos de
violaes destas propriedades so, respectivamente, ler arquivos de outros usurios sem
autorizao, vrus que instala-se em executveis, formatar o disco sem autorizao.
Segundo a taxonomia apresentada em [8], uma ameaa consiste de uma ao possvel
que, uma vez concretizada, produziria efeitos indesejveis sobre os dados ou recursos do
sistema. Uma vulnerabilidade uma falha ou caracterstica indevida que pode ser explorada
para concretizar uma ameaa. Um ataque uma ao que envolve a explorao de
determinadas vulnerabilidades de modo a concretizar uma ou mais ameaas.
A poltica de segurana de uma dada instalao corresponde ao conjunto de regras
que estabelecem os limites de operao dos usurios no sistema, isto , as autorizaes de
cada um. Os mecanismos de segurana do sistema operacional so responsveis pela
implantao de uma determinada poltica de segurana. Por exemplo, a poltica de segurana
tpica em um sistema operacional multiusurio exige que cada usurio seja identificado
univocamente pelo sistema. Para tanto, so empregados mecanismos de autenticao que
podem incluir senhas, cartes magnticos ou at mesmo dispositivos biomtricos.
Neste contexto, um sujeito uma entidade ativa que inicia requisies de servios e
recursos. Via de regra trata-se de um usurio ou de um processo executando em nome de um
usurio. Um objeto uma entidade passiva que armazena informaes e/ou admite um certo
conjunto de operaes. Mesmo que o sistema operacional no seja construdo com orientao
a objetos, esses conceitos so teis para entender a problemtica da segurana
computacional.
O controle de acesso a mediao das requisies de acesso a objetos iniciadas pelos
sujeitos. Cabe ao sistema operacional implementar um controle de acesso que imponha a
poltica de segurana definida para a instalao em questo. As vezes a poltica de segurana
efetivamente implantada no aquela desejada pela administrao do sistema, em funo de
falhas nos mecanismos de segurana ou limitaes de natureza prtica.
possvel classificar as diferentes solues para o controle de acesso conforme
acontece a distribuio de autoridade. No Controle de Acesso Discricionrio o proprietrio
do objeto deve determinar quem tem acesso a ele. Por exemplo, o usurio que criou o
arquivo decide quem pode ter acesso a este arquivo. o tipo de controle de acesso mais
utilizado em sistemas operacionais. O Controle de Acesso Obrigatrio baseia-se em uma
administrao centralizada que dita regras incontornveis para acesso aos objetos. Por
exemplo, pode-se definir nveis de segurana ordenados conforme a sensibilidade do objeto
e a confiabilidade do sujeito (no-classificado, confidencial, secreto e ultra-secreto). Um
sujeito com acesso "confidencial" jamais poder acessar um objeto "secreto". Finalmente, o
Controle de Acesso Baseado em Papis requer que os direitos de acesso sejam atribudos a
papis e no a usurios, os quais devem obter direitos atravs da incorporao de papis.
Leituras adicionais podem ser feitas em [9], [10] e [11].
A Matriz de Acesso [12] uma forma conveniente de representar-se o controle de
acesso existente em um dado sistema. A proteo do sistema representada por uma matriz,
onde as linhas correspondem aos sujeitos e as colunas correspondem aos objetos. Cada clula
da matriz indica quais operaes o sujeito daquela linha pode realizar sobre o objeto daquela
coluna. Operaes sobre a matriz so tambm controladas pelo mesmo mecanismo.
Na prtica a matriz de acesso de um sistema multiusurio muito grande para ser
armazenada exatamente como uma matriz pelo sistema operacional. Alm do que a maioria
de suas clulas estaria vazia, pois em geral um usurio no pode acessar arquivos de outros
usurios. Embora a matriz de acesso exista conceitualmente, a forma mais popular para
guardar as informaes atravs de listas de controle de acesso. Cada objeto possui uma
lista de controle de acesso, a qual essencialmente a sua coluna na matriz conceitual. Os
famosos bits "rwx" do Unix so uma forma simplificada de guardar esta informao.
A forma alternativa para armazenar a matriz de acesso faz-lo pelas linhas. Cada
sujeito associado a uma lista de capacidades (capabilities), a qual indica que operaes
sobre quais objetos ele tem direito. Em alguns sistemas as listas de capacidades so mantidas
pelo sistema operacional (Mach [13]). Em outros, cada capacidade corresponde a uma
informao criptografada que entregue ao processo e responsabilidade do processo
apresentar esta informao no momento de acessar o respectivo objeto (Chorus [13]).
7 Organizao Interna
Um sistema operacional tambm um programa de computador e, como tal, possui
uma especificao e um projeto. A especificao do mesmo corresponde lista de servios
que deve executar e as chamadas de sistema que deve suportar. Por outro lado, o seu projeto
ou design diz respeito a sua estrutura interna, como as diferentes rotinas, necessrias na
implementao dos servios, so organizadas internamente. O tamanho de um sistema
operacional pode variar desde alguns milhares de linhas no caso de um pequeno ncleo de
tempo real at vrios milhes de linhas, como na verso 2.4 do Linux, chegando a 30
milhes de linhas no caso do Windows 2000. Embora princpios bsicos como baixo
acoplamento e alta coeso sejam sempre desejveis, existem algumas formas de organizao
interna para sistemas operacionais que tornaram-se clssicas ao longo do tempo. Tambm
de kernel superior ao kernel monoltico, mas o processo de mais alta prioridade ainda deve
esperar at que a execuo do processo de baixa prioridade atinja um ponto de preempo.
Por outro lado, o kernel convencional preemptvel realiza o chaveamento de
contexto to logo o processo de mais alta prioridade seja liberado. Para isto, todas as
estruturas de dados do kernel que so compartilhadas entre processos devem ser protegidas
por algum mecanismo de sincronizao, como semforos, mutexes ou algo semelhante. Esta
soluo, usada no Solaris, resulta em melhor desempenho, considerando-se as diferentes
prioridades dos processos [5].
Modernamente uma organizao alternativa ao kernel tem sido proposta na qual a
funcionalidade tpica de kernel dividida em duas camadas. Esta soluo baseia-se na
existncia de um microkernel, o qual suporta os servios mais elementares de um sistema
operacional: gerncia de processador e uma gerncia de memria simples. Sobre o
microkernel existe um conjunto de processos servidores que implementam o restante da
funcionalidade: gerncia de perifricos, sistema de arquivos, memria virtual. Exemplos de
sistemas desse tipo so o Minix [4] e o Mach [13]. Internamente, o microkernel tem a forma
de um pequeno kernel monoltico. As desvantagens do kernel monoltico no so to srias
neste caso pois o cdigo do microkernel pequeno. Por sua vez, cada processo servidor pode
ser composto por vrias threads e constitui um espao de endereamento independente.
transparncia. Ele oferece processos e atributos vlidos em todo o sistema, mecanimos para
sincronizao de processos que so vlidos no importa em que computador o processo
executa, um esquema de proteo nico, um sistema de arquivos com viso nica e
independente da localizao do usurio e do arquivo. Em boa parte, o sistema operacional
distribudo perfeito ainda no existe, um objetivo a ser alcanado. Deve-se observar que,
mesmo nele, algumas operaes permanencem essencialmente locais, tais como gerncia da
memria fsica e escalonamento do processador local.
O termo transparncia, associado com SOD, aceita muitas interpretaes. Em geral,
quanto mais transparncia melhor. Temos a transparncia de localizao (usurio no sabe
onde os recursos esto), a transparncia de migrao (recursos migram sem mudar o nome),
a transparncia de replicao (usurios no percebem existncia de rplicas), a transparncia
de concorrncia (usurios no percebem o compartilhamento com outros usurios), a
transparncia de paralelismo (usurio no sabe o que feito em paralelo), entre outras.
Diversos so os servios que um SOD pode prestar. Podemos citar: servio de nomes
que mapeia nomes de aplicaes (ou outros nomes) para endereos de rede e de programas;
servio de autenticao que fornece mecanismos confiveis para restringir o acesso a dados
privados; servio de tempo, capaz de manter os relgios de um conjunto de computadores
em sincronismo e prximos do tempo real; tolerncia a faltas para que um computador
defeituoso no derrube todo o sistema; execuo remota; acesso a perifricos remotos;
sistema de arquivos distribudo; suporte para aplicaes de groupware; suporte para
aplicaes baseadas em RPC (Remote Procedure Call) ou objetos distribudos.
Na implementao de um Sistema Operacional Distribudo temos uma complexidade
excessiva, uma tecnologia em rpida evoluo, a possibilidade de novos servios em funo
da distribuio, alm da dificuldade resultante do estado global no ser conhecido. Na prtica
temos ento a abordagem atravs de desenvolvedores mltiplos, e o modelo Caixa Preta
invivel. O modelo mais usado passa a ser o dos Componentes Autnomos Cooperantes.
Cada Componente Autnomo Cooperante ao mesmo tempo fornece e solicita
servios. Servios de mais alto nvel so obtidos pela composio de outros servios. Nas
solues acadmicas o SOD baseado em um microkernel, o qual executa em todas as
mquinas do sistema. O conjunto de servios oferecido selecionado por instalao.
A idia original de SOD encontra uma realizao parcial no conceito de Middleware.
Componentes de Middleware [15] executam entre aplicao e sistema operacional local,
utilizando a infraestrutura de comunicao existente. O objetivo do middleware suportar
servios distribudos que vo facilitar a criao de aplicaes distribudas. Desta forma, a
API (Application Program Interface) do middleware complementa e at mesmo s vezes
substitui a API do sistema operacional local, passando a definir um ambiente computacional
distribudo, exatamente o papel que esperado de um SOD. A figura 4 ilustra essa situao.
O middleware procura a convivncia de novas aplicaes distribudas com velhas aplicaes
legadas, o que facilita sua aceitao pelo mercado. Esta preocupao menor nas solues
acadmicas, as quais possuem maior liberdade para explorar novas idias.
Interface do M iddlew a r e
M iddlew a re
P lataform a : P lataform a :
S istem a O p e r a c i o n a l S istem a O p e r a c i o n a l
H a rdware H a rdware
Previsibilidade Ncleo de
Futuro...
maior Tempo Real
Posix um padro para sistemas operacionais, baseado no Unix, criado pelo IEEE
(Institute of Electrical and Eletronic Engineers). Posix define as interfaces do sistema
operacional mas no sua implementao. Muitos SOTR atualmente j suportam a API do
Posix, como pode ser constatado atravs de uma visita s pginas listadas em
http://www.cs.bu.edu/pub/ieee-rts. Uma descrio completa do Posix capaz de ocupar um
livro inteiro [22]. Uma descrio detalhada do escalonamento em vrias verses do Unix
pode ser encontrada em [5].
Existem vrios projetos envolvendo adaptaes do Linux para tempo real. O RT-
Linux (http://luz.cs.nmt.edu/~rtlinux/) um sistema operacional no qual um microkernel de
tempo real co-existe com o kernel do Linux. O objetivo do projeto RED-Linux
(http://linux.ece.uci.edu/RED-Linux/) fornecer suporte de escalonamento tempo real para o
Linux, atravs da integrao de escalonadores baseados em prioridade, baseados no tempo e
baseados em compartilhamento de recursos [23]. O KURT-Linux
(http://hegel.ittc.ukans.edu/projects/kurt/), ou "Kansas University Real Time Linux Project"
um sistema operacional que permite o escalonamento explcito de qualquer evento [24].
Agradecimentos
Os autores agradecem ao Rafael R. Obelheiro pelas vrias sugestes e comentrios.
Referncias
[1] Oliveira, Rmulo Silva de, Carissimi, Alexandre da Silva e Toscani, Simo Sirineo.
Sistemas Operacionais. Editora SagraLuzzatto, ISBN 85-241-0643-3, 2001.
[2] Bach, M. The Design of the Unix Operating System. Prentice-Hall, 1986.
[3] Comer, D. Operating System Design: The Xinu Approach. Prentice-Hall, 1984.
[4] Tanenbaum, A. S., Woodhull, A. S. Operating Systems Design and Implementation.
2nd edition. Prentice-Hall, 1997.
[5] Vahalia, U. Unix Internals: The New Frontiers. Prentice-Hall, 1996.
[6] Jacob, B., Mudge, T. Virtual Memory: Issues of Implementation. IEEE Computer, pp.
33-43, June 1998.
[7] Jacob, B., Mudge, T. Virtual Memory in Contemporary Microprocessors. IEEE
Micro, pp. 60-75, July-August 1998.
[8] Obelheiro, Rafael R. Modelos de Segurana Baseados em Papis para Sistemas de
Larga Escala: A Proposta RBAC-JaCoWeb. Dissertao de mestrado, Programa de
Ps-Graduao em Engenharia Eltrica da UFSC, 2001.