Académique Documents
Professionnel Documents
Culture Documents
Maurcio F. Magalhes 1
Eleri Cardozo 2
Agosto de 1992
Luis F. Faina 3
Sumrio
1 INTRODUO
1.1 O que um Sistema Operacional ? . . . . . . . .
1.2 Histria dos Sistemas Operacionais . . . . . . . .
1.3 Conceitos Bsicos em Sistemas Operacionais . .
1.4 O Sistema Operacional UNIX . . . . . . . . . .
1.5 Uma Viso Geral do Sistema Operacional UNIX
1.6 Arquitetura do Sistema Operacional UNIX . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
3
4
6
8
9
16
2 PROCESSOS
2.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 Escalonamento de Processos . . . . . . . . . . . . . . . . .
2.3 Gerenciamento de Processos no Sistema Operacional UNIX
2.4 Escalonamento de Processos no Unix . . . . . . . . . . . .
2.5 Controle de Processos no UNIX . . . . . . . . . . . . . . .
2.6 Comunicao e Sincronizao Inter-processos no UNIX . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
23
23
28
30
33
35
40
3 SISTEMA DE ARQUIVOS
3.1 Interface do Sistema de Arquivos . . . . . . .
3.2 Projeto do Sistema de Arquivos . . . . . . . .
3.3 Confiabilidade do Sistema de Arquivos . . . .
3.4 Desempenho do Sistema de Arquivos . . . .
3.5 O Sistema de Arquivos do UNIX (System V)
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
49
49
51
59
62
64
4 GERENCIAMENTO DE MEMRIA
4.1 Gerenciamento de Memria Sem Permuta ou Paginao .
4.2 Swapping (Permuta) . . . . . . . . . . . . . . . . . . .
4.3 Memria Virtual . . . . . . . . . . . . . . . . . . . . . .
4.4 Algoritmos de Troca de Pgina . . . . . . . . . . . . . .
4.5 Gerenciamento de Memria no UNIX . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
75
75
80
85
90
94
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5 ENTRADA/SADA
101
5.1 Princpios do Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
5.2 Princpios do Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
DCA-FEEC-UNICAMP
5.3
5.4
5.5
6 TPICOS ESPECIAIS
6.1 Padronizao em Sistemas Operacionais
6.2 Processos Leves (Threads) . . . . . . .
6.3 Arquitetura de Microprocessadores . . .
6.4 Intel 80386 . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
119
119
122
126
131
Captulo 1
INTRODUO
Programas computacionais (ou software) constituem o elo entre o aparato eletrnico (ou hardware) e o ser humano. Tal elo se faz necessrio dada a discrepncia entre o tipo de informao
manipulada pelo homem e pela mquina. A mquina opera com cadeias de cdigos binrios enquanto o homem opera com estruturas mais abstratas como conjuntos, arquivos, algoritmos, etc.
Programas computacionais podem ser grosseiramente divididos em dois tipos:
O mais importante dos programas do sistema o sistema operacional, que controla todos os recursos do computador e proporciona a base de sustentao para a execuo de programas aplicativos.
DCA-FEEC-UNICAMP
Nesta viso, a funo do sistema operacional apresentada ao usurio como uma mquina estendida ou mquina virtual que mais fcil de programar que o hardware que a suporta.
DCA-FEEC-UNICAMP
A maioria dos computadores de 2a gerao foram utilizados para clculos cientficos e de engenharia. Estes sistemas eram largamente programados em FORTRAN e ASSEMBLY. Sistemas operacionais tpicos 1 eram o FMS (Fortran Monitor Systems) e o IBSYS (IBMs Operating Systems).
DCA-FEEC-UNICAMP
O aumento do potencial destas mquinas criou um vastssimo mercado de software a elas dirigido. Como requisito bsico, estes produtos (tanto aplicativos quanto o prprio sistema operacional)
necessitavam ser amigveis, visando usurios sem conhecimento aprofundado de computadores e
sem inteno de estudar muito para utiliz-los. Esta foi certamente a maior mudana em relao ao
OS/360 que era to obscuro que diversos livros foram escritos sobre ele. Dois sistemas operacionais dominaram o mercado: MS-DOS para os computadores pessoais e UNIX para as estaes de
trabalho.
O prximo desenvolvimento no campo dos sistemas operacionais surgiu com a tecnologia de
redes de computadores: os sistemas operacionais de rede e distribudos.
Sistemas operacionais de rede diferem dos sistemas operacionais para um simples processador no
tocante capacidade de manipular recursos distribudos pelos processadores da rede. Por exemplo,
um arquivo pode ser acessado por um usurio num processador, mesmo que fisicamente o arquivo
se encontre em outro processador. Sistemas operacionais de rede provem ao usurio uma interface
transparente de acesso a recursos compartilhados (aplicativos, arquivos, impressoras, etc), sejam
estes recursos locais ou remotos.
Sistemas operacionais distribudos so muito mais complexos. Estes sistemas permitem que os
processadores cooperem em servios intrnsecos de sistemas operacionais tais como escalonamento
de tarefas e paginao. Por exemplo, num sistema operacional distribudo uma tarefa pode migrar durante sua execuo de um computador sobrecarregado para outro que apresente carga mais
leve. Contrrio aos sistemas operacionais de rede que so largamente disponveis comercialmente,
sistemas operacionais distribudos tm sua utilizao ainda restrita.
2
Que no CPU.
DCA-FEEC-UNICAMP
1.3.3 Multiprogramao
Multiprogramao um conceito mais geral que multitarefa e denota um sistema operacional
que prov gerenciamento da totalidade de recursos tais como CPU, memria, sistema de arquivos,
em adio ao suporte da execuo concorrente dos processos.
Em uma mquina podemos ter o conjunto de processos sendo executados de forma serial ou
de forma concorrente, ou seja, os recursos presentes na mquina podem ser alocados a um nico
programa at a concluso de sua execuo ou esses recursos podem ser alocados de modo dinmico
entre um nmero de programas ativos de acordo com o nvel de prioridade ou o estgio de execuo
de cada um dos programas.
No caso de um computador no qual o sistema operacional usado permite apenas a monoprogramao, os programas sero executados instruo-a-instruo, at que seu processamento seja concludo. Durante a sua execuo, o programa passar por diversas fases, alterando momentos em que
se encontra executando ou bloqueado aguardando, por exemplo, a concluso de uma operao de
entrada/sada de dados (normalmente lenta, se comparada velocidade de execuo das instrues
por parte do processador).
Atravs do uso da multiprogramao possvel reduzir os perodos de inatividade da CPU e consequentemente aumentar a eficincia do uso do sistema como um todo. O termo multiprogramao
denota um sistema operacional o qual em adio ao suporte de mltiplos processos concorrentes,
permite que instrues e dados de dois ou mais processos disjuntos estejam residentes na memria
principal simultaneamente.
O nvel de multiprogramao presente em um sistema pode ser classificado como integral ou
serial. A multiprogramao dita integral caso mais de um processo possa se encontrar em execuo
em um dado instante, enquanto que no caso da serial apenas um processo se encontra em execuo
a cada instante, sendo a CPU alocada aos processos de forma intercalada ao longo do tempo. Uma
vez que a maioria dos computadores apresenta apenas uma unica CPU, a multiprogramao serial
encontrada com mais frequncia.
DCA-FEEC-UNICAMP
1.3.4 Multiprocessamento
Embora a maioria dos computadores disponha de uma nica CPU que executa instrues uma a
uma, certos projetos mais avanados incrementaram a velocidade efetiva de computao permitindo
que vrias instrues fossem executadas ao mesmo tempo. Um computador com mltiplos processadores que compartilhem uma memria principal comum chamado um multiprocessador. O sistema
que suporta tal configurao um sistema que suporta o multiprocessamento.
Desenvolvido nos Laboratrios da Bell em meados da dcada de setenta, o sistema UNIX inicialmente atendia as necessidades especficas do grupo de Cincia da Computao da Bell. A razo da
aceitao do UNIX explicada pelos atributos abaixo:
escrito em linguagem de alto nvel, o que facilita seu transporte para diferentes plataformas;
interface simples para com o usurio (shell);
fornece primitivas que permitem o desenvolvimento de programas complexos a partir de programas mais simples;
estrutura hierrquica de arquivos;
formatao de arquivos baseada no conceito de stream (cadeia) de bytes;
interfaceamento simples e consistente com os dispositivos perifricos;
DCA-FEEC-UNICAMP
multiusurio/multiprogramado;
esconde a arquitetura do harware, permitindo que um programa execute em mltiplas plataformas.
man
sh
nroff
a.out
cpp
find
Ncleo
comp
make
cc
Hardware
who
as
date
ld
wc
vi
ed
grep
estrutura hierrquica;
DCA-FEEC-UNICAMP
10
O sistema de arquivo organizado na forma de rvore conforme pode ser visto no exemplo da
figura 1.2.
/
usr
bin
5bin
5include 5lib
tmp
etc
pub
emacs tex
dev
X11
tty00
tty01
sh ed vi
/ > raiz;
no-folhas > diretrios de arquivos;
folhas > diretrios ou arquivos regulares ou arquivos especiais de dispositivos.
DCA-FEEC-UNICAMP
11
O cdigo abaixo ilustra o programa copy que copia o contedo de um arquivo para outro.
/*
#include <stdio.h>
#include <sys/fcntl.h>
#include <sys/stat.h>
char buffer[512];
void copy(old, new)
int old, new;
{
int count;
while((count = read(old, buffer, sizeof(buffer))) > 0)
write(new, buffer, count);
}
main(argc, argv)
int argc;
char *argv[];
{
int fdold, fdnew;
if(argc != 3)
{
printf("Uso: copy f1 f2\n");
exit(1);
}
/* abre arquivo para leitura */
fdold = open(argv[1], O_RDONLY);
if(fdold == -1)
/* erro no open */
{
printf("Impossivel abrir %s\n", argv[1]);
exit(1);
}
/* cria arquivo novo */
fdnew = creat(argv[2], 0666);
if(fdnew == -1)
/* erro no creat */
{
printf("Impossivel criar %s\n", argv[2]);
*/
DCA-FEEC-UNICAMP
12
exit(1);
}
/* chama copy */
copy(fdold, fdnew);
exit(0);
}
/*
*/
*/
#include <stdio.h>
#include <sys/wait.h>
#include <sys/time.h>
main(argc, argv)
int argc;
char *argv[];
{
int pid;
struct timeval tv1, tv2;
double t1, t2;
pid = fork();
/* fork */
if(pid == 0) execl(argv[1], NULL);
/* processo filho */
gettimeofday(&tv1, NULL);
/* processo pai continua ... */
t1 = (double)(tv1.tv_sec) + (double)(tv1.tv_usec)/ 1000000.00;
wait(NULL);
/* sincroniza com o termino do filho */
gettimeofday(&tv2, NULL);
t2 = (double)(tv2.tv_sec) + (double)(tv2.tv_usec)/ 1000000.00;
printf("\nO tempo de execucao de %s eh: %lf\n", argv[1], (t2 - t1));
}
/*
*/
DCA-FEEC-UNICAMP
13
Uma das caractersticas marcantes do UNIX que este no suporta, no nvel do ncleo, muitas
das funes que fazem parte dos ncleos de outros sistemas operacionais. No caso do UNIX, estas
funes so, em geral, programas no nvel do usurio. O exemplo de programa mais destacado neste
caso o programa shell que o responsvel pela intepretao dos comandos do usurio.
Na maior parte das vezes o shell executa o comando fork e o processo filho executa o comando
solicitado atravs da chamada exec. As palavras restantes na linha de comando so tratadas como
parmetros do comando. O shell aceita trs tipos de comandos:
b) pipe : permite que um fluxo de dados seja estabelecido entre um processo produtor e um processo
consumidor.
Processos podem redirecionar a sua sada padro para um pipe a ser lido por outro processo que
tenha redirecionado a sua entrada padro para o mesmo pipe. Ex:
grep main a.c b.c c.c : lista as ocorrncias da palavra main nos arquivos a.c, b.c e c.c;
grep main a.c b.c c.c j wc -l : submete a sada do comando anterior a um utilitrio que conta o
nmero de linhas de um arquivo (wc, opo -l).
DCA-FEEC-UNICAMP
14
controle de execuo dos processos: criao, terminao, suspenso, comunicao entre processos;
escalonamento (ordem de acesso CPU) de processos;
alocao de memria principal para execuo dos processos. Caso a memria esteja escassa, o
ncleo move temporariamente processos da memria primria para a secundria 3 ;
alocao de memria secundria para armazenamento/recuperao eficiente dos dados do usurio (este servio constitui o sistema de arquivos);
acesso controlado aos dispositivos perifricos tais como terminais, fitas, discos, redes, etc.
o ncleo deteta que um dado arquivo um arquivo regular ou um dispositivo, mas esconde esta
distino dos processos do usurio;
o ncleo formata os dados em um arquivo para fins de armazenamento interno, entretanto,
este formato escondido do usurio, sendo retornado para este um stream no formatado de
bytes.
processos no modo usurio podem acessar as suas instrues e dados, mas no as instrues
e dados do ncleo ou de qualquer outro processo. Processos no modo ncleo podem acessar
endereos do ncleo ou do usurio;
algumas instrues so privilegiadas e resultam em erro quando executadas no modo usurio.
Interrupes e Excees
O UNIX permite que dispositivos tais como perifricos de E/S ou o relgio do sistema interrompam a CPU assincronamente. Geralmente, o hardware define prioridades para os dispositivos de
acordo com a ordem na qual as interrupes devero ser atendidas caso ocorram simultaneamente.
Uma condio de exceo refere-se ocorrncia de um evento no esperado provocado pelo
processo. Alguns destes eventos podem ser: endereamento ilegal da memria, execuo de instruo
privilegiada, diviso por zero, etc.
3
Esta transferncia pode ser do processo completo (swapping), ou de segmentos do processo (paginao).
DCA-FEEC-UNICAMP
15
As excees podem ser caracterizadas como algo que ocorre no meio da execuo de uma instruo, onde o sistema tenta reiniciar a instruo aps tratar a exceo. No caso das interrupes,
estas podem ser consideradas como se ocorressem entre a execuo de duas instrues, sendo que o
sistema continua a executar a partir da prxima instruo aps tratar a interrupo.
O UNIX utiliza um mesmo mecanismo para manipular as condies de interrupo e exceo.
Nveis de Execuo do Processador
O ncleo necessita muitas vezes impedir a ocorrncia de interrupes durante a execuo de
atividades crticas. Exemplo: o ncleo no deve aceitar interrupo do disco enquanto estiver operando sobre listas ligadas, isto porque o tratamento da interrupo pode interferir na atualizao dos
apontadores provocando inconsistncias.
Normalmente, os computadores possuem instrues privilegiadas que permitem definir o nvel
de execuo do processador. A atribuio do nvel de execuo do processador em um determinado
valor mascara a interrupo daquele nvel e dos nveis inferiores (tornando habilitadas as de nveis
superiores).
Na figura 1.3, caso o ncleo mascare a interrupo do disco, todas as interrupes, exceto a do
relgio e dos erros da mquina, so impedidas.
Erros de Hardware
Prioridade Alta
Relgio
Disco
Dispositivos de Rede
Terminais
Prioridade Baixa
Interrupo de Software
Gerenciamento de Memria
O ncleo reside permanentemente na memria principal, assim como, os processos em execuo
(ou pelo menos parte deles).
Quando da compilao, so gerados endereos no programa que representam variveis e instrues. O compilador gera estes endereos para uma mquina virtual como se nenhum outro programa fosse executar simultaneamente na mquina real. Quando da execuo do programa, o ncleo
aloca espao na memria principal atravs do mapeamento do endereo virtual no endereo fsico da
mquina. Este mapeamento depende das caractersticas do hardware da mquina.
DCA-FEEC-UNICAMP
16
traps
Nvel do usurio
Nvel do ncleo
comunicao
interprocessos
subsistema de arquivos
subsistema
de controle
de processos
escalonador
buffer cache
gerenciamento
de memria
caractere
bloco
drivers de dispositivos
controle do hardware
Nvel do ncleo
Nvel de hardware
hardware
DCA-FEEC-UNICAMP
17
DCA-FEEC-UNICAMP
TA
18
Tabela de Inodes
super
bloco
lista de inodes
blocos de dados
bloco de boot : contm o cdigo do bootstrap que lido na mquina quando da partida do
sistema operacional;
super-bloco : descreve o estado de um sistema de arquivo;
lista de inodes : tem o seu tamanho definido quando da configurao do sistema de arquivos.
Um dos inodes corresponde raiz do S.A. atravs deste inode que a estrutura de diretrios
do sistema acessada;
DCA-FEEC-UNICAMP
19
bloco de dados : contm arquivos e dados administrativos. Um bloco de dados s pode pertencer a um nico arquivo do sistema.
Processos
Um processo corresponde execuo de um programa e consiste de um conjunto de bytes que a
CPU interpreta como instruo de mquina, dado e pilha.
O processo executa uma sequncia de instrues que auto-contida e que no salta para um outro
processo. Ele l e escreve seus dados nas suas reas de dado e pilha, mas no pode ler ou escrever
nas reas de dado e pilha de outro processo. Os processos comunicam com outros processos e com o
resto do sistema atravs de chamadas de sistema.
Do ponto de vista prtico, um processo em UNIX uma entidade criada pela chamada fork.
Exceto o primeiro, qualquer outro processo criado atravs da chamada fork. O processo que chamou o fork identificado como processo pai e o que acabou de ser criado identificado como
processo filho. Todo processo tem um nico pai mas pode ter vrios filhos. O ncleo identifica
cada processo atravs de um nmero denominado process ID (PID). No caso do processo filho, ele
recebe como retorno aps a execuo do fork o valor 0, enquanto o processo pai recebe um valor
diferente de 0 que corresponde ao PID do filho. Atravs do teste do valor retornado pelo fork, um
processo pode distinguir se ele o processo pai ou o processo filho e, em consequncia, tomar a ao
correspondente.
O processo 0 um processo especial criado quando da iniciao do sistema (boot). Aps criar o
processo 1, conhecido como init, o processo 0 torna-se o processo swapper. O processo 1 ancestral
de qualquer outro processo no sistema, possuindo uma relao especial com estes, relao esta que
ser discutida nos captulos subsequentes.
Um arquivo executvel gerado quando da compilao de um programa consiste das seguintes
partes:
O ncleo carrega um arquivo executvel, gerado pelo compilador, durante a execuo de uma
chamada exec, consistindo o processo carregado de trs partes: texto, dado e pilha.
As regies de texto e dado correspondem s sees do texto e dados iniciados e no-iniciados
(bss). A pilha criada automaticamente e o seu tamanho ajustado dinamicamente pelo ncleo em
tempo de execuo. Um quadro (frame) da pilha contm os parmetros para a funo chamada, suas
variveis locais e os dados necessrios (apontador de pilha e contador de programa) para recuperar o
quadro anterior na pilha.
Como um processo no UNIX pode executar em 2 modos, ncleo ou usurio, utiliza-se uma pilha
separada para cada modo. O lado esquerdo da figura 1.7 mostra a pilha do usurio para o programa
copy quando da chamada de sistema write.
DCA-FEEC-UNICAMP
variveis locais
20
direo do
crescimento
da pilha
end. do quadro 2
end. de retorno apos
chamada do write
parmetros do write
(new, buffer, count)
quadro 3
call write
variveis locais
(count)
end. do quadro 1
end. de retorno aps
chamada do copy
parmetros do copy
(old, new)
variveis locais
(fdold, fdnew)
quadro 2
call copy
end. do quadro 0
end. de retorno aps
chamada do main
parmetros do main
(argc, argv)
quadro 1
call main
Pilha do Usurio
processamento da
chamada white
Pilha do Ncleo
quadro 0
incio
quadro 0
interface das chamadas de sistema
DCA-FEEC-UNICAMP
21
Quando um processo evoca fork o ncleo duplica o espao de endereo do processo antigo permitindo, quando possvel, que processos compartilhem regies ou, caso contrrio, fazendo uma cpia da
regio. Quando um processo evoca exit o ncleo libera as regies que o processo estava usando. A
figura 1.8 ilustra as estruturas de dados associadas ao controle dos processos.
pregion
Tabela de Regies
rea U
memria primria
Tabela de Processos
campo de estado;
identificadores dos usurios que possuem o processo;
um conjunto descritor de evento quando o processo est bloqueado.
A rea U contm informaes que descrevem o processo e que so acessadas somente durante a
execuo do processo. Os campos mais importantes so:
Contexto de um Processo
O contexto de um processo o estado definido pelo seu texto correspondendo aos valores das
suas variveis globais e estruturas de dado, os valores dos registros de mquina usados, os valores
armazenados no seu slot na tabela de processos e na rea U e o contedo das suas pilhas de usurio
e ncleo. Quando o ncleo decide executar um novo processo realiza-se uma mudana de contexto.
Quando da realizao de uma mudana de contexto o ncleo salva informaes suficientes de
modo a que posteriormente ele possa recuperar o contexto do processo anterior e continuar a sua
DCA-FEEC-UNICAMP
22
execuo. Da mesma forma, quando da mudana do modo usurio para o modo ncleo, o ncleo
salva as informaes necessrias para que o processo possa retornar ao modo usurio e continuar a
execuo. Neste ltimo caso, temos uma mudana de modo e no de um chaveamento de contexto.
Estados do Processo
A vida de um processo pode ser representada por um conjunto de estados (figura 1.9):
chamada de sistema
ou interrupo
Executando em
Modo Ncleo
Executando em
Modo Usurio
retorno
interrupo/retorno
2
escalonado
aguardando
evento
3
evento
Bloqueado
Pronto
Captulo 2
PROCESSOS
2.1 Introduo
No captulo anterior definimos o conceito de processo, bem como algumas generalidades sobre
como o sistema operacional UNIX gerencia processos. Neste captulo, avanaremos no estudo de
processos, analisando problemas de concorrncia, escalonamento e comunicao inter-processos.
23
DCA-FEEC-UNICAMP
24
2.1.2 Concorrncia
Em muitos sistemas operacionais, processos frequentemente compartilham outros recursos alm
da CPU. Por exemplo, durante uma chamada de sistema um processo pode ter acesso a uma tabela
mantida pelo ncleo. Neste caso, o ncleo deve inibir a comutao da CPU para outro processo, at
que todas as operaes na tabela forem efetuadas. Caso contrrio, a tabela fatalmente assumiria um
estado inconsistente onde apenas algumas alteraes foram processadas.
Em situaes como a exemplificada acima, a tabela definida como um recurso compartilhado,
e a parte do cdigo que o manipula como uma regio crtica. A execuo de uma regio crtica
deve ser um procedimento controlado a fim de evitar que os recursos compartilhados atinjam estados
inconsistentes.
dois processos no estejam simultaneamente dentro de suas regies crticas referentes ao mesmo recurso compartilhado (garantia de mtua excluso);
a garantia de mtua excluso se d independente da velocidade relativa dos processos ou nmero de CPUs;
nenhum processo executando fora de regies crticas bloqueie outro processo;
nenhum processo espere um tempo arbitrariamente longo para executar uma regio crtica (ou
sofra estarvao).
Vrios algoritmos de controle visando garantir as propriedades acima foram propostos. Estes
algoritmos so classificados segundo o modo com que esperam pela autorizao de entrada numa regio crtica: espera ocupada (competindo pela CPU durante a espera) ou bloqueada (no competindo
pela CPU).
Todo algoritmo de mtua excluso possui, invariavelmente, duas partes (implementadas como
duas funes distintas). A primeira funo evocada quando o processo deseja iniciar a execuo de
uma regio crtica. Quando esta funo retorna, o processo est apto a executar a regio crtica. No final da execuo, o processo evoca a segunda funo, anunciando que a regio crtica j foi executada.
Esta segunda funo, via de regra, provoca o retorno da primeira funo em outro processo.
2
Note que regies crticas delimitando diferentes recursos podem ser executadas por diferentes processos ao mesmo
tempo.
DCA-FEEC-UNICAMP
25
Para permitir que regies crticas que acessam recursos compartilhados distintos possam ser executadas ao mesmo tempo, cada recurso compartilhado possui um identificador (via de regra um nmero inteiro). Assim sendo, as duas funes que compem o algoritmo de garantia de mtua excluso
possuem este identificador como parmetro.
N processos, N > 2.
DCA-FEEC-UNICAMP
26
Soluo de Peterson
Obtida pela combinao das idias de variveis LOCK e TURN, criando-se tambm uma soluo
por software para o problema. Esta soluo evita os problemas individuais das solues anteriores,
mas pouco utilizada na prtica por utilizar espera ocupada.
Instruo TSL
Esta proposta requer uma pequena ajuda do hardware. Ela utiliza a instruo TSL (Test and Set
Lock) presente em muitos processadores. Esta instruo permite a implementao de variveis LOCK
cujo teste e atualizao so atmicos (em outas palavras, a instruo TSL indivisvel mesmo frente
a interrupes de hardware).
DCA-FEEC-UNICAMP
27
Note que os contadores de eventos nunca decrescem e partem sempre de 0. Contadores de evento
so mais convenientes que semforos para problemas to tipo produtor-consumidor com buffer limitado.
Monitores
Semforos e contadores de evento tornam simples a proteo de recursos compartilhados. Entretanto, uma simples troca na ordem da chamada das primitivas pode gerar uma situao de deadlock.
Em suma, a utilizao de semforos e contadores de eventos deve se processar com extrema cautela.
Monitores so uma proposta de mecanismo de sincronizao de alto nvel. Um monitor uma
coleo de procedimentos, variveis e estruturas de dados agrupados em um bloco. Os processos
podem acessar os procedimentos do monitor mas no suas estruturas internas. Monitores tm uma
caracterstica importante: somente um processo pode estar ativo 5 no monitor em um dado instante
(garantindo portanto a mtua excluso).
Monitores constituem-se em um conceito de linguagem de programao, ou seja, o compilador
reconhece que os monitores so especiais e pode manusear as chamadas do monitor diferentemente de
outras chamadas. Esta uma das desvantagens de monitores: precisam de linguagens de programao
que os incorpore.
A concluso que monitores, apesar de elegantes na manuteno de mtua excluso, de aplicao restrita, pois raras so as linguagens de programao que os incorporam.
Destino e fonte de mensagens so buffers alocados pelos processos para fins de envio e recepo
de mensagens. Mensagens so estruturas tipadas ou no cujo contedo interpretado unicamente
pelos processos emissor e receptor da mensagem.
5
DCA-FEEC-UNICAMP
28
Compartilhamento de Dados
Processos podem se comunicar atravs do compartilhamento de uma rea comum onde dados podem ser escritos por um e lidos por outro processo. O acesso a esta rea comum deve ser disciplinado
por um mecanismo de mtua excluso (tipicamente semforos) ou tornando as instrues de leitura
e gravao atmicas. Duas primitivas so necessrias:
REGISTER_RPC(servio) : utilizada por servidores para anunciar que servios esto aptos a
processar;
CALL_RPC(servio, parmetros, resultados) : utilizada por clientes para evocar servios.
DCA-FEEC-UNICAMP
29
importante observar que alguns desses objetivos so contraditrios. Se um algoritmo favorece o escalonamento de processos interativos certamento estar comprometendo os no interativos.
Vejamos agora alguns algoritmos de escalonamento.
DCA-FEEC-UNICAMP
30
DCA-FEEC-UNICAMP
31
Executando em
Modo Usurio
1
escalonado
chamada de sistema
ou interrupo
retorno
"Preemptado"
9
exit
Terminado
perda da CPU
Executando em
Modo Ncleo
interrupo/retorno
escalonado
aguardando
evento
Bloqueado
em Memria
evento
Pronto
em Memria
memria abundante
"swap out"
"swap out"
"swap in"
fork
memria escassa
Bloqueado
em Memria
Secundria
evento
6
Pronto
em Memria
Secundria
DCA-FEEC-UNICAMP
32
o estado do processo;
a localizao da rea U e do prprio processo, seja na memria primria ou secundria, bem
como o tamanho do processo;
o identificador do usurio (UID), isto , o dono processo;
o identificador do processo (PID), nico durante toda a vida do processo;
eventos aguardados pelo processo quando no estado bloqueado (dormindo);
parmetros de escalonamento, utilizados para decidir quais processos transitaro entre estados
de execuo nos modos usurio e ncleo;
sinais enviados ao processo, mas ainda no tratados;
marcas de tempo como tempo total CPU, despertadores armados pelo processo, etc, alm de
recursos consumidos do ncleo (estes parmetros so utilizados no cmputo da prioridade de
escalonamento do processo).
DCA-FEEC-UNICAMP
33
A figura 2.2 mostra as classes de prioridades adotadas. Prioridades em modo ncleo so subdivididas em dois grupos. O primeiro grupo, de elevada prioridade, constituido de processos bloqueados
a espera de swapping, E/S em disco, buffers de cache e inodes. Quando acordados, estes processos
completam suas respectivas chamadas de sistema ininterruptamente (visando a rpida liberao de
recursos do ncleo, tais como buffers).
O segundo grupo, de prioridade mais baixa que o primeiro, constitui-se de processos bloqueados
a espera de entrada de terminal, sada em terminal e terminao de processo filho. Tais processos
podem ser interrompidos, pois estes estados de bloqueio no demandam grandes recursos do ncleo.
Finalmente, processos aguardando apenas CPU (estado 7) so dispostos segundo um certo nmero de nveis de prioridade (este nmero dependente da particular implementao).
Processos numa mesma classe de prioridade so dispostos numa fila, como representado na figura
2.2 pelos crculos interligados.
DCA-FEEC-UNICAMP
prioridades
em modo
ncleo
Nveis de Prioridade
34
processos
swapper
no passvel
de interrupo
passvel de
interrupo
limiar de prioridade
em modo ncleo
nvel de usurio 0
nvel de usurio 1
nvel de usurio N
prioridades
em modo
usurio
caso a interrupo acorde um ou mais processos com prioridade de modo ncleo, aloque a
CPU quele de mais alta prioridade;
caso contrrio, se uma mudana de contexto se fizer necessria, aloque a CPU ao processo de
mais alta prioridade dentre as de modo usurio.
DCA-FEEC-UNICAMP
35
visa evitar o monoplio da CPU pelos processos que utilizam chamadas de sistema de forma
frequente.
3. A cada intervalo de tempo (tipicamente um segundo), as prioridades em modo usurio so
recomputadas. Processos que se utilizaram recentemente da CPU so penalizados em benefcio
dos processos que no a utilizaram.
*/
DCA-FEEC-UNICAMP
Tabela de Arquivos
pregion
arquivos abertos
dados
do pai
diretrio corrente
diretrio raiz
pilha
do pai
pilha do ncleo
texto
(compartilhado)
processo filho
rea U
Tabela de Inodes
pregion
arquivos abertos
dados
do filho
diretrio corrente
diretrio raiz
pilha
do filho
pilha do ncleo
36
DCA-FEEC-UNICAMP
37
...
/*
*/
No exemplo acima, o programa executa um fork, deixando a cargo do filho a execuo do novo
processo. Os descritores de arquivo fd1 e fd2 so passados como argumento para o novo programa.
Capturando estes argumentos, o novo programa capaz de executar operaes nos respectivos arquivos sem reabr-los.
/*
*/
/* prog1 */
main(argc, argv)
int argc;
char *argv[];
{
int fd1, fd2;
/* acessa descritores abertos pelo executor do exec */
sscanf(argv[1], "%d", &fd1);
sscanf(argv[2], "%d", &fd2);
...
}
/*
*/
de uma requisio de mudana de estado (ex: morte de um processo via kill -9);
do trmino do processo filho;
da corrncia de excees (ex: trap aritmtico);
de situaes irrecuperveis (ex: recursos exauridos durante o processamento de um exec);
da ocorrncia de erros inesperados (ex: utilizao de um pipe quebrado);
do disparo de despertadores de tempo (ex: retorno da chamada sleep);
de interrupes oriundas de terminais (ex:
"C );
DCA-FEEC-UNICAMP
sinal
SIGHUP
SIGINT
SIGILL
SIGFPE
SIGKILL
SIGSEGV
SIGSYS
SIGALRM
SIGSTOP
SIGCONT
SIGCHLD
38
significado
hang-up
interrupo
instruo ilegal (trap)
exceo aritmtica (trap)
trmino forado
violao de segmentao (trap)
argumento invlido em chamada de sistema
alarme de relgio
suspeno da execuo
continuao da execuo
mudane. status de proceso filho
DCA-FEEC-UNICAMP
39
*/
main()
{
signal(SIGINT, ger);
...
}
*/
/*
Todas as vezes que um SIGINT for enviado ao processo, a funo ger chamada assincronamente,
solicitando confirmao do trmino da execuo. Caso o usurio responda n, a funo retorna e o
programa continua normalmente.
A maneira como o ncleo processa sinais descrita sucintamente a seguir. Quando um sinal
enviado a um processo (pelo ncleo ou por outro processo), o ncleo simplesmente ativa o campo
correspondente ao sinal na tabela de processos. Neste campo est localizado tambm o gerenciador
do sinal (definido pelo processo ou default).
No momento que um processo passa do modo ncleo para o modo usurio, o ncleo verifica se
existe sinais enviados ao processo e ainda no tratados. Caso exista, o ncleo executa os seguintes
passos:
1. Salva o contador de programa e o stack pointer do processo.
2. Caso o processo no defina um gerenciador para o sinal, executa a ao default. Caso contrrio,
prossiga.
3. Associa temporariamente a ao default para o sinal.
4. Cria um novo quadro na pilha como se o processo estivesse evocando o gerenciador neste
momento.
5. Direciona o contador de programa para o endereo da rotina gerenciadora do sinal e atualiza o
stack pointer para levar em conta o aumento da pilha causado pela chamada do gerenciador.
DCA-FEEC-UNICAMP
40
O passo 3 merece um comentrio adicional. Ele existe para evitar que uma rajada de sinais ocasione um stack overflow pelo empilhamento de mltiplas chamadas do gerenciador (caso o intervalo
de ocorrncia dos sinais seja menor que o tempo de execuo do gerenciador). Entretanto, durante
a execuo da rotina gerenciadora, o processo fica numa condio vulnervel, pois a ao default
que ser executada face a ocorrncia de um novo sinal de mesmo tipo.
2.6.1 Pipes
O mecanismo original de comunicao inter-processos so os chamados pipes. Em geral, pipes
so empregados para estabelecer comunicao entre processos pai e filho. Um pipe um canal
unidirecional de comunicao, isto , a informao flui numa nica direo. Para estabelecer-se
comunicao bidirecional, so necessrios dois pipes.
Pipes podem ser vistos como um buffer conectando dois processos. Um processo escreve dados
num dos lados do buffer, enquanto o outro l estes dados no lado oposto. Esta forma de comunicao
pode ser obtida com o emprego de arquivos em disco. A diferena bsica que pipes so bloqueantes,
isto , a gravao em um pipe cheio ou a leitura em um pipe vazio causa o bloqueio do processo.
Pipes so implementados pelo ncleo como um sistema de arquivos. Cada pipe tem um inode
associado, sendo que o ncleo aloca blocos de dados medida que dados vo sendo escritos no pipe
(desalocando-os medida que so lidos).
Pipes so criados com a chamada de sistema pipe. A chamada retorna dois descritores de arquivos, sendo o primeiro para leitura e o segundo para gravao. Esta chamada, em geral, se processa
antes de ocorrer um fork. Se a comunicao for no sentido pai ! filho, o processo pai fecha o primeiro descritor (com a chamada close), e o filho o segundo. A partir da, o pai executa chamadas
write no segundo descritor e o filho read no primeiro. Um segundo pipe pode ser empregado para
a comunicao no sentido inverso, atentando-se para o fechamento correto dos descritores que no
sero empregados pelo processo.
Aps o final da sesso de comunicao, os lados abertos do pipe tambm so fechados a fim de
liberar os recursos a ele associados pelo ncleo.
Exemplo: enviar um string do processo pai para o processo filho.
/*
main{}
{
int fd[2];
char buff[32];
*/
DCA-FEEC-UNICAMP
41
*/
2.6.2 Mensagens
Troca de mensagens um mecanismo de comunicao mais flexvel que pipes. Enquanto um
pipe um canal sncrono e unidirecional, mensagens so canais tanto sncronos quanto assncronos
e bidirecionais.
Para o envio e recepo de mensagens, cria-se um port de comunio. Ports so identificados por
um nmero inteiro. A chamada de sistema msgget cria um port, retornando seu identificador local. O
primeiro parmetro uma chave atribuida ao port, seu identificador global. O segundo parmetro so
opes relativas a criao, acesso, etc. Via de regra, msgget retorna um port dado seu identificador
global, criando-o caso tal port inexista.
O ncleo mantm uma tabela de ports, e mensagens enviadas a ports so enfileiradas, sendo
recebidas na ordem que foram enviadas. A comunicao bidirecional, posto que, de posse de um
identificador local de port, um processo pode tanto enviar quanto receber mensagens neste port.
Mensagens so enviadas com a chamada de sistema msgsnd. A chamada possui quatro parmetros: o identificador do port para o qual a mensagem deve ser enviada; a estrutura que contm a
mensagem; seu tamanho em bytes; e a opo de envio assncrono (retornando um cdigo de erro caso
no exista espao para o ncleo armazenar a mensagem no port). A opo default o envio sncrono,
onde o processo bloqueia ante a impossibilidade de armazenamento da mensagem no port.
Estruturas contendo mensagens devem ser definidas como structs contendo dois campos: um
inteiro (tipo da mensagem); e uma cadeia de bytes (o contedo da mensagem). Exemplo:
struct mensagem {
int tipo;
/* tipo da mensagem */
DCA-FEEC-UNICAMP
char conteudo[1024];
};
42
*/
DCA-FEEC-UNICAMP
Tabela de
Memria
Compartilhada
Tabela de Regies
pregion
(processo 1)
Tabela de Processos
processo 1
processo 2
pregion
(processo 2)
memria principal
43
DCA-FEEC-UNICAMP
=
=
=
=
=
=
=
=
#include
#include
#include
#include
<stdio.h>
<sys/types.h>
<sys/ipc.h>
<sys/sem.h>
#define KEY 67
extern char *shmat();
main()
{
char *buff;
char *poema[16];
int i;
int sh;
/* acessa area compartilhada */
sh = shmget(KEY, 1024, 0777);
if(sh < 0)
{
printf("\nArea compartilhada nao criada\n");
exit(0);
44
DCA-FEEC-UNICAMP
45
}
/* assoacia area compartilhada a um endereco local */
buff = shmat(sh, 0, 0);
/* acessa texto da area compartilhada */
for(i = 0; i < 8; i++) poema[i] = (buff + i * 100);
for(i = 0; i < 8; i++)
printf("\n\n");
}
printf("\n%s", poema[i]);
*/
/*
2.6.4 Semforos
Semforo um mecanismo de sincronizao inter-processos composto das operaes DOWN
e UP. Via de regra, define-se um semforo para cada recurso compartilhado. O execuo da parte
cdigo que acessa tais regursos (regio crtica) abraada pelas operaes DOWN e UP.
Processos definem/acessam semforos com a chamada de sistema semget. Esta chamada requer
trs parmetros: um identificador global para um array de semforos; o nmero de semforos contido
no array; e um flag estipulando aes relativas a permisses e criao.
Operaes em semforos se processam atravs da chamada de sistema semop. Esta chamada
requer trs parmetros: o identificador local do semforo (obtido via semget); um array de estruturas
sembuf; e o nmero de estruturas no array. Cada estrutura efetua uma operao no semforo de ndice
estipulado na estrutura.
struct sembuf {
short sem_num;
short sem_op;
short sem_flag;
};
/* indice do semaforo */
/* operacao requisitada */
/* controle da operacao */
O segundo campo da estrutura sembuf opera no respectivo semforo de acordo com a seguinte
lgica. Se sem_op for:
negativo : Se a soma de sem_op com o valor do semforo for no negativa, some sem_op ao valor
do semforo e retorne. Se for negativa, bloqueie.
positivo : Some sem_op ao valor do semforo e retorne.
nulo : Retorne se o valor do semforo for nulo; bloqueie, caso contrrio.
DCA-FEEC-UNICAMP
46
fcil notar que fazendo sem_op 1 ou +1 implementa-se, respectivamente, as operaes bsicas DOWN e UP.
Similar a msgctl e shmctl, a chamada de sistema semctl empregada para obter e alterar o status
de semforos (permisses, desativao, etc).
O cdigo abaixo ilustra o uso de semforo para acesso a uma regio crtica (no caso, o vdeo).
/*
#include
#include
#include
#include
*/
<stdio.h>
<sys/types.h>
<sys/ipc.h>
<sys/sem.h>
/* cria um semaforo */
int DefSem(key)
key_t key;
{
int semid;
union semun arg;
semid = semget(key, 1, 0777 | IPC_CREAT);
arg.val = 1;
semctl(semid, 0, SETVAL, arg);
return(semid);
}
DCA-FEEC-UNICAMP
psem[0].sem_num = 0;
psem[0].sem_op = -1;
psem[0].sem_flg = SEM_UNDO;
semop(semid, psem, 1);
}
/* define operacao UP */
void UP(semid)
int semid;
{
struct sembuf vsem[2];
vsem[0].sem_num = 0;
vsem[0].sem_op = 1;
vsem[0].sem_flg = SEM_UNDO;
semop(semid, vsem, 1);
}
extern errno;
main()
{
char *poema[16];
int i;
int semid;
semid = GetSem(13);
if(semid < 0)
{
printf("\nSemaforo nao criado !\n");
exit(0);
}
poema[0]
poema[1]
poema[2]
poema[3]
=
=
=
=
47
DCA-FEEC-UNICAMP
poema[4]
poema[5]
poema[6]
poema[7]
=
=
=
=
48
while(1)
{
DOWN(semid);
/* entrada na Regiao Critica */
for(i = 0; i < 8; i++)
{
printf("\n%s", poema[i]);
sleep(1);
}
printf("\n\n");
UP(semid);
/* saida da Regiao Critica */
}
}
/*
*/
Captulo 3
SISTEMA DE ARQUIVOS
A parte mais visvel de um sistema operacional o seu sistema de arquivos. Programas aplicativos
utilizam o sistema de arquivos (via chamadas de sistema) para criar, ler, gravar e remover arquivos.
Usurios utilizam interativamente o sistema de arquivos (via shell) para listar, alterar propriedades
e remover arquivos. A convenincia e facilidade de uso de um sistema operacional fortemente
determinada pela interface, estrutura e confiabilidade de seu sistema de arquivos.
49
DCA-FEEC-UNICAMP
50
de entrada e sada no drive B, cada um deles dever ser especificado juntamente com o nome do
aquivo:
A:programa < B:entrada > B:saida
A maior parte dos sistemas operacionais suportam vrios tipos de arquivos. O UNIX, por exemplo, mantm arquivos regulares, diretrios e arquivos especiais. Arquivos regulares contm dados
e programas do usurio. Diretrios permitem identificar arquivos atravs de nomes simblicos (i.e.
sequncia de caracteres ASCII). Arquivos especiais so usados para especificar perifricos tais como
terminais, impressoras, unidades de fita, etc. Assim podemos digitar
cp abc /dev/tty
para copiar um arquivo abc para o terminal (arquivo especial /dev/tty).
Em muitos sistemas, arquivos regulares so subdivididos em diferentes tipos em funo de sua
utilizao. Os tipos so identificados pelos nomes com que os arquivos regulares terminam. Por
exemplo,
ARQUIVO.PAS - Programa fonte em Pascal
ARQUIVO.FTN - Programa fonte em Fortran
ARQUIVO.BAS - Programa fonte em Basic
ARQUIVO.OBJ - Arquivo objeto
ARQUIVO.BIN - Programa binario executvel
ARQUIVO.LIB - Biblioteca dos arquivos .OBJ usados pelo linker
ARQUIVO.TXT - Texto de entrada para formatao de programa
ARQUIVO.DAT - Arquivos de dados
Em certos sistemas, as extenses so simples conveno: o sistema operacional no faz uso delas.
Em outros, o sistema operacional tem regras rgidas em relao aos nomes. Por exemplo, o sistema
no executar um arquivo a menos que sua extenso seja .BIN.
3.1.2 Diretrios
Para organizar os arquivos, o sistema de arquivos prov diretrios, os quais em muitos casos
so tambm arquivos. Um diretrio contm tipicamente um nmero de registros, um por arquivo.
Sistemas primitivos admitiam um nico diretrio compartilhado por todos os usurios, ou um nico
diretrio por usurio. Os sistemas operacionais modernos permitem um nmero arbitrrio de diretrios por usurio (via de regra, formando uma hierarquia). A figura 3.1 ilustra estas trs situaes.
Quando o sistema de arquivos organizado como uma rvore de diretrios, algum meio se faz
necessrio para especificar nomes de arquivos. Dois mtodos so comumente empregados. No primeiro mtodo, cada arquivo identificado pela sequncia de diretrios desde o diretrio raiz at o
arquivo (caminho absoluto). Como um exemplo, o caminho /usr/mfm/mailbox significa que
o diretrio raiz (/) contm o subdiretrio usr, o qual contm o subdiretrio mfm, que por sua vez
contm o arquivo mailbox. Nomes absolutos para caminhos sempre comeam na raiz e so nicos.
DCA-FEEC-UNICAMP
51
Uma outra forma de especificar nomes de arquivos atravs de seu caminho relativo. usado em
conjunto com o conceito de diretrio de trabalho (ou diretrio corrente). Um usurio pode designar
um diretrio como diretrio corrente. Neste caso, todos os caminhos so referenciados a partir do
diretrio corrente. Se o diretrio corrente for /usr/mfm, ento o arquivo cujo caminho absoluto
/usr/mfm/mailbox pode ser referenciado simplesmente como mailbox.
diretrio raiz
arquivo
(a)
diretrio raiz
diretrio de usurio
(b)
diretrio raiz
subdiretrio
diretrio de usurio
(c)
Figura 3.1: Trs projetos de sistemas de arquivos: (a) diretrio nico compartilhado pelos usurios;
(b) um diretrio por usurio; (c) rvore arbitrria por usurio
DCA-FEEC-UNICAMP
52
como os diretrios so organizados, etc. Projetistas esto interessados em como o espao de disco
gerenciado, como os arquivos so armazenados, e como manipular arquivos de forma eficientemente
e confivel.
Salvo alguns sistemas operacionais, notadamente os voltados computao de tempo-real, onde o armazenamento
contnuo adotado por razes de desempenho.
DCA-FEEC-UNICAMP
42
136
45
127
65
254
321
342
123
415
971
7
99
640
589
737
872
543
321
13
53
1001001001011001
0000100100011000
0011001110100100
1000000100001001
0000000000001000
0100001100000011
1111000011000010
(b)
410
312
654
318
597
873
(a)
Figura 3.2: (a) blocos livre armazenados em lista ligada; (b) um mapa de bits.
DCA-FEEC-UNICAMP
54
FAT
x
EOF
13
FREE
12
10
FREE
11
EOF
12
EOF
13
EOF
14
BAD
15
} tamanho
do disco
12
10
13
Figura 3.3: Esquema de lista encadeada usado pelo MS-DOS. Os registros 0 e 1 so usadas para
especificao do tipo do disco. Os cdigos EOF e FREE so usados para End Of File e registros
Free, respectivamente.
misturados aleatoriamente na mesma tabela. Isso significa que toda a FAT deve estar presente em
memria, mesmo se somente um arquivo estiver aberto. Um mtodo mais eficaz, seria manter listas
dos blocos para diferentes arquivos em lugares diferentes. Isto o que o UNIX faz.
Associado a cada arquivo no UNIX, tem-se uma pequena tabela (no disco), chamada inode, como
mostrado na figura 3.4. Ela contm informaes sobre o arquivo tais como tamanho e proteo. Os
itens chaves so os 10 nmeros de blocos do disco e os 3 nmeros de blocos indiretos. Para arquivos
com 10 blocos ou menos, todos os endereos dos blocos de dados no disco so mantidos no prprio
inode, sendo sua localizao imediata.
Quando o tamanho de um arquivo supera 10 blocos, um bloco livre adquirido e o ponteiro
indireto simples passa a apontar para ele. Este bloco usado para armazenar os ponteiros dos blocos
de disco. Com um bloco de disco de 1K e endereos de disco de 32 bits, o bloco indireto simples
pode acessar 256 endereos de disco. Esse esquema suficiente para arquivos de at 266 blocos (10
no inode, 256 no bloco indireto simples).
Acima de 266 blocos, o ponteiro indireto duplo usado para apontar para um bloco de disco de
at 256 ponteiros, que no apontam para blocos de dados, mas sim para 256 blocos indiretos simples.
DCA-FEEC-UNICAMP
55
ponteiro para
blocos de dados
INODE
arquivo
numeros de links
identificador do proprietrio
grupo do proprietrio
tamanho do arquivo
data da criao
data do ltimo acesso
data da ltima modificao
DCA-FEEC-UNICAMP
56
DCA-FEEC-UNICAMP
bytes
usurio
nome do arquivo
tipo
(extenso)
tamanho
57
16
contador
de bloco
nmero de blocos de disco
(a)
10
nome do arquivo
tipo
(extenso)
atributos
2
hora
2
data
primeiro bloco
(na FAT)
tamanho
(b)
14
numero do inode
nome do arquivo
(c)
Figura 3.5: Registros de diretrios: (a) CPM; (b) MS-DOS; (c) UNIX
tro .. o nmero do inode do diretrio pai. Assim, o procedimento de procurar por ../src/prog.c
simplesmente localiza .. no diretrio de trabalho, acha o nmero do inode para o diretrio pai, e
pesquisa pelo diretrio src. Nenhum mecanismo especial necessrio para manipular estes nomes.
DCA-FEEC-UNICAMP
bloco 1
diretrio / (raiz)
1
1
4
7
14
9
6
8
17
11
bloco 132
(diretrio /usr)
.
..
inode #6
bin
dev
lib
etc
usr
tmp
var
pub
58
blk = 132
/usr no
inode #6
diretrio /usr
no bloco 132
bloco com os
arquivos do
diretrio /
/usr/mfm/mbox
no inode #85
bloco 416
(diretrio /usr/mfm)
.
51
..
6
321
106
85
539
cursos
papers
mbox
pvm
6
1
19
30
51
92
79
27
.
..
clt
ral
mfm
ec
wst
lpm
/usr/mfm no
inode #6
inode #51
blk = 416
diretrio /usr/mfm
no bloco 416
DCA-FEEC-UNICAMP
59
diretrio raiz
subdiretrio
diretrio de usurio
C
arquivo compartilhado
DCA-FEEC-UNICAMP
diretrio do
usurio C
proprietrio = C
contador = 1
(a)
diretrio do
usurio C
proprietrio = C
contador = 2
(b)
60
diretrio do
usurio B
proprietrio = C
contador = 1
(c)
Figura 3.8: (a) situao anterior conexo; (b) aps a conexo ter sido feita; (c) aps o proprietrio
remover o arquivo
blocos defeituosos. Estes blocos so armazenados num arquivo, acessado quando da construo da
lista de blocos livre. Conhecendo os blocos defeituosos, o sistema operacional no os incorpora na
lista de blocos livre, eliminando assim sua ocorrncia futura em arquivos de dados.
3.3.2 Backups
Mesmo com uma estratgia engenhosa para tratar os blocos defeituosos, importante se proceder
backups frequentes. Sistemas de arquivos em discos de pequena capacidade podem ser salvos em fita
magntica, por exemplo, fitas padro de 9 trilhas (com capacidade de 50 Megabytes por bobina) ou
fita de 8 mm (com capacidade de at 1 Gigabyte).
Para discos de grande capacidade (e.g. 1 Gigabyte), salvar o contedo inteiro em fitas inconveniente e consome muito tempo. Uma estratgia de fcil implementao, mas que diminui pela
metade a capacidade de armazenamento, prover cada computador com um segundo disco de igual
capacidade. Ambos os discos so divididos em duas metades: dados e backup. Diariamente, a poro
de dados de um disco copiada para a poro de backup do outro disco, e vice-versa. Deste modo,
se um disco for completamente destrudo, nenhuma informao perdida.
Uma outra alternativa o backup incremental. Em sua forma mais simples, copia-se para fita
todos os arquivos a cada semana ou ms, e, diariamente, apenas daqueles arquivos que foram modificados deste o ltimo backup completo. Num outro esquema, mais eficiente, copia-se apenas aqueles
arquivos que foram alterados desde o ltimo backup. Para implementar este mtodo, o horrio da
ltima duplicao para cada arquivo deve ser mantida no disco.
DCA-FEEC-UNICAMP
61
DCA-FEEC-UNICAMP
62
valores com os contadores dos inodes. Em um sistema de arquivos consistente, ambos contadores
coincidiro. Contudo, dois tipos de erros podem ocorrer: o contador do inode pode ser maior ou
menor que o da lista do utilitrio.
Se a contagem no inode for maior que o nmero de registros do diretrio, ento mesmo se todos
os arquivos forem removidos dos diretrios, o contador ainda ser diferente de 0 e o inode no ser
liberado. Este erro no catastrfico, mas consome espao no disco com arquivos que no esto em
nenhum dos diretrios. O contador de conexes do inode deve ser corrigido atravs da atribuio do
valor obtido pelo utilitrio.
Outro erro (potencialmente catastrfico) ocorre quando o contador do inode menor que o encontrado pelo utilitrio. A medida que os arquivos que apontam para o inode vo sendo removidos, o
contador do inode pode chegar a zero, momento que o inode e seus respectivos blocos so liberados.
Esta ao resultar em um dos diretrios apontando para um inode no mais em uso, cujos blocos
podem rapidamente ser atribuidos a outros arquivos. Novamente, a soluo forar o contador do
inode para o nmero real de registros do diretrio (obtidas pelo utilitrio).
Estas duas operaes, verificar blocos e verificar diretrios, so frequentemente integradas por
razes de eficincia (i.e., uma nica passagem sobre os inodes requerida). Outros controles heursticos so tambm possveis. Por exemplo, diretrios tm um formato definido, com um nmero
inodes e nomes ASCII. Se um nmero inode for maior que o nmero de inodes no disco, o diretrio
encontra-se num estado inconsistente.
DCA-FEEC-UNICAMP
63
manter blocos de dados na cache durante muito tempo antes que sejam descarregados em disco. Os
sistemas de arquivos adotam duas estratgias para tal. No UNIX, a chamada de sistema sync, fora
com que todos os blocos modificados sejam gravados em disco imediatamente. Quando o sistema
iniciado, um programa, usualmente chamado update, ativado. De 30 em 30 segundos, a atualizao
da cache estabelecida. Como resultado, na pior hiptese, perde-se os blocos gravados nos ltimos
30 segundos em caso de uma pane.
A soluo do MS-DOS gravar todo bloco modificado para o disco to logo ele tenha sido
escrito. Caches nas quais blocos modificados so reescritos imediatamente no disco so chamadas
caches de escrita direta. Elas requerem muito mais E/S de disco que caches de escrita no direta.
A diferena entre estas duas tcnicas pode ser vista quando um programa escreve num buffer de 1K,
caracter por caracter. O UNIX coleta todos os caracteres da cache, e escreve o bloco de uma vez em
30 segundos, ou quando o bloco for removido da cache.
O MS-DOS faz acesso a disco para cada um dos caracteres escritos. Naturalmente, muitos programas fazem bufferizao interna, procedendo gravaes em disco apenas quando existir uma
determinada quantidade de bytes pendentes. A estratgia adotada pelo MS-DOS foi influenciada pela garantia que a remoo de um disco flexvel de sua unidade no causa perda de dados. No UNIX,
necessria uma chamada sync antes da remoo de qualquer meio de armazenamento (ou da parada
programada do sistema).
Cache no a nica maneira de aumentar o desempenho do sistema de arquivos. Uma outra
maneira reduzir a quantidade de movimentos do brao do disco, colocando blocos que esto sendo
acessados em sequncia, preferencialmente em um mesmo cilindro. Quando um arquivo escrito, o
sistema de arquivos aloca os blocos um por vez, a medida do necessrio. Se os blocos livre estiverem
gravados em um mapa de bits, e o mapa de bits inteiro est na memria principal, fcil escolher
um bloco que est mais perto do bloco anterior. Com uma lista de blocos livre, parte da qual est no
disco, mais difcil alocar blocos prximos.
Entretanto, com uma lista de blocos livre alguns agrupamentos de blocos podem ser feitos. O
artifcio manter a trilha do disco armazenada no em blocos, mais em grupos consecutivos de
blocos. Se uma trilha consistir de 64 setores de 512 bytes, o sistema pode usar blocos de 1K bytes
(2 setores), porm alocando espao no disco em unidades de 2 blocos (4 setores). Isto no o
mesmo que ter um bloco de 2K, posto que na cache ainda se usa blocos de 1K com transferncia
para disco tambm de 1K. Entretanto, a leitura sequencial reduz o nmero de busca de um fator de 2,
melhorando consideravelmente o desempenho.
Outra variante fazer uso do posicionamento rotacional. Quando se alocam blocos, o sistema
atenta para colocar blocos consecutivos de um arquivo no mesmo cilindro, mas intercalados. Deste
modo, se um disco tiver um tempo de rotao de 16.67 mseg e 4 mseg so necessrios para o processo
do usurio requerer e acessar um bloco do disco, cada bloco deve ser colocado em ao menos um
quarto da distncia do seu antecessor.
Um outro agravante no desempenho dos sistemas que usam inodes, ou algo similar, que para
ler at mesmo um pequeno arquivo, seja necessrio 2 acessos no disco: um para o inode e outro para
o bloco. Caso todos os inodes estejam prximos do incio do disco, distncia mdia entre o inode
estar em torno da metade do nmero de cilindros, o que exige longas buscas.
Melhor alternativa instalar os inodes no meio do disco, reduzindo a mdia de busca entre o
inode e o primeiro bloco de um fator de 2. Uma outra idia consiste em dividir o disco em grupos
DCA-FEEC-UNICAMP
64
de cilindros, cada qual com os seus prprios inodes, blocos, e lista de blocos livre. Quando se cria
um novo arquivo, qualquer inode pode ser escolhido, mas tendo-se o cuidado de achar um bloco no
mesmo grupo de cilindros onde o inode est. Caso nenhum bloco esteja disponvel, escolhe-se um
bloco do cilindro mais prximo.
DCA-FEEC-UNICAMP
65
rea de dados
(tamanho do bloco)
ponteiro p/ prximo
(fila de hash)
ponteiro p/ anterior
(fila de hash)
ponteiro p/ prximo
(lista de blocos livre)
ponteiro p/ anterior
(lista de blocos livre)
DCA-FEEC-UNICAMP
66
colocados em uma fila hash circular, duplamente ligada, em uma forma equivalente estrutura da
lista de buffers livre.
Todo buffer est na fila hash, no existindo, entretanto, significado para a sua posio na fila. Um
buffer pode encontrar-se, simultaneamente, na lista de buffers livre, caso o seu estado seja livre, e na
fila hash (por exemplo, o buffer 64 da figura 3.10). Desta forma, o ncleo pode procurar um buffer
na lista hash caso ele esteja procurando um buffer especfico, ou ele pode remover um buffer da lista
de buffers livre caso ele esteja procurando por um buffer livre qualquer. Resumindo, um buffer que
se encontra na lista hash pode ou no encontrar-se na lista de buffers livre.
fila de hash
28
17
97
98
50
64
14
38
cabea
f(b) = b mod 4
cauda
Figura 3.10: Estrutura do cache de buffers: fila de hash e lista de buffers livre
DCA-FEEC-UNICAMP
67
ao bloco. Os algoritmos para leitura/escrita em blocos do disco usam um algoritmo (getblk) para
alocao de buffers a partir do pool.
Existem cinco cenrios tpicos associados ao algoritmo getblk (figura 3.11):
1. O ncleo encontra o buffer correspondente ao bloco na fila hash e o buffer est livre. Neste
caso, o algoritmo marca o buffer como ocupado, remove-o da lista de buffers livre e retorna
um ponteiro para o buffer.
2. O ncleo no encontra o buffer correspondente ao bloco na fila hash e aloca um buffer da lista
de buffers livre, reposicionando-o na fila de hash.
3. O ncleo no encontra o buffer correspondente ao bloco na fila hash e, na tentativa de alocar
um buffer da lista de buffer livre (como no cenrio 2), encontra um buffer na lista de buffers
livre marcado com escrita adiada (delayed write). Neste caso, o ncleo deve escrever (assincronamente) o buffer no disco e continuar a procura de um buffer livre para o bloco.
4. O ncleo no encontra o buffer correspondente ao bloco na fila hash, e a lista de buffers livre
encontra-se vazia. Neste caso, o processo bloqueado at que outro processo devolva um
buffer lista de buffers livre.
5. O ncleo encontra o buffer correspondente ao bloco na fila hash, mas o seu buffer est ocupado
(outro processo est acessando exatamente este bloco). Neste caso, o processo bloqueado at
que o outro processo conclua a operao sob este bloco.
Note que em qualquer cenrio acima, ou o algoritmo getblk volta um buffer j posicionado na fila
de hash para que a operao de E/S possa continuar; ou bloqueia o processo a espera de buffer ou
liberao do bloco.
Alm do algoritmo getblk, existem outros quatro algoritmos que operam o cache de buffers:
1. brelse: libera um bloco, retornando-o lista de blocos livre.
2. bread: l sincronamente (com espera) o bloco do disco para o buffer.
3. breada: l assincronamente (sem espera) o bloco do disco para o buffer.
4. bwrite: escreve um bloco do buffer para o disco.
iget: retorna um inode previamente identificado, possivelmente atravs da sua leitura do disco
via o cache de buffers;
DCA-FEEC-UNICAMP
68
Algoritmo GETBLK
entrada: nmero do bloco, nmero da unidade lgica
sada: buffer trancado pronto para receber bloco do disco
{
do {
if(bloco na fila de hash)
{
if(buffer ocupado)
// cenrio 5
{
sleep(evento "buffer desocupado")
continue
}
marca buffer "ocupado"
// cenrio 1
{
if(lista de buffers livre vazia) // cenrio 4
{
sleep(evento "lista de buffers livre no vazia")
continue
}
remova buffer da lista de buffers livre
if(buffer marcado "delayed write")
// cenrio 3
{
escreva assincronamente o contedo do buffer em disco
continue
}
// cenrio 2
reposicione buffer na fila de hash
retorne buffer
} while(TRUE)
}
Estes algoritmos utilizam outros que manipulam o cache de buffers (getblk, brelse, bread, breada,
bwrite).
DCA-FEEC-UNICAMP
69
Estrutura do Inode
Um inode existe estaticamente no disco e o ncleo realiza a sua leitura para a memria quando
necessita manipul-lo. O inode no disco contm os seguintes campos (ver figura 3.4):
A cpia do inode em memria contm os seguintes campos em adio aos campos do inode em
disco:
DCA-FEEC-UNICAMP
70
no do bloco: ((no do inode-1) / nmero de inodes por bloco) + nmero do bloco inicial da lista
de inodes
offset: ((no do inode-1) MOD (nmero de inodes por bloco) * tamanho do inode no disco
Quando o ncleo libera um inode (algoritmo iput) ele decrementa seu contador de referncia.
Caso o valor do contador se torne 0, o ncleo escreve o inode no disco caso a cpia na memria seja
diferente da cpia no disco. O inode colocado na lista de inodes livre na hiptese de que este inode
possa ser necessrio posteriormente.
Estrutura de um Arquivo Regular
A indicao dos blocos do disco que constituem um determinado arquivo encontra-se no inode
associado ao arquivo. Esta indicao traduz-se na utilizao de 13 nmeros para blocos. Os 10 primeiros nmeros (blocos diretos) contm nmeros para blocos de disco; o 11o nmero um indireto
simples, o 12o um indireto duplo e o 13o um indireto triplo. Esta soluo, conforme discutido anteriormente, permite que os 10 primeiros nmeros componham um arquivo de 10 Kbytes. Elevando-se
este nmero para 11, 12 e 13, tem-se, respectivamente, arquivos de at 256 Kilobytes, 64 Megabytes
e 16 Gigabytes (mximo para o UNIX).
Os processos enxergam o arquivo como um conjunto de bytes comeando com o endereo 0 e
terminando com o endereo equivalente ao tamanho do arquivo menos 1. O ncleo converte esta
viso dos processos em termos de bytes em uma viso em termos de blocos: o arquivo comea com o
bloco 0 (apontado pelo primeiro nmero de bloco no inode) e continua at o nmero de bloco lgico
correspondente ao tamanho do arquivo.
Um exame mais detalhado das entradas dos blocos no inode pode mostrar que algumas entradas
possuem o valor 0, indicando que o bloco lgico no contm dados. Isto acontece caso nenhum
processo tenha escrito dados no arquivo em qualquer offset correspondente a estes blocos. Deve ser
observado que nenhum espao em disco desperdiado para estes blocos. Este layout pode ser criado
pelo uso das chamadas lseek e write.
DCA-FEEC-UNICAMP
71
3.5.4 O Super-Bloco
At o momento consideramos a hiptese de que um inode havia sido previamente associado a
um arquivo e que os blocos do disco j continham os dados. Ser discutido na sequncia como o
ncleo atribui inodes e blocos do disco. Para isto importante conhecer a estrutura do super-bloco.
O super-bloco um segmento contnuo de disco formado pelos seguintes campos:
DCA-FEEC-UNICAMP
72
DCA-FEEC-UNICAMP
73
DCA-FEEC-UNICAMP
74
Captulo 4
GERENCIAMENTO DE MEMRIA
Memria um importante recurso que deve ser cuidadosamente gerenciado. Enquanto a capacidade de armazenamento dos computadores vem crescendo continuamente, a complexidade do
software cresce talvez taxas maiores. A parte do sistema operacional que gerencia a memria
chamada de gerenciador de memria, sendo o objeto deste captulo.
Dentre outras tarefas, o gerenciador de memria monitora quais partes da memria esto em uso
e quais esto disponveis; aloca e libera memria para os processos; gerencia a permuta de processos
entre memria principal e secundria (quando a memria principal no capaz de abrigar todos os
processos).
4.1.1 Monoprogramao
O esquema mais simples possvel de gerenciamento de memria consiste em ter-se somente um
processo na memria durante toda a sua execuo. O usurio carrega um programa do disco ou fita
para a memria, podendo este fazer uso de toda a mquina. Se a memria for insuficiente, o programa
simplesmente tem sua execuo rejeitada. Embora essa tcnica ter sido comum em meados da dcada
de sessenta, ela no mais utilizada.
A tcnica usada em microcomputadores mostrada na figura 4.1. A memria dividida entre o
sistema operacional e um processo do usurio. O sistema operacional pode estar no final da memria
RAM (Random Access Memory) como mostrado na figura 4.1(a), ou em ROM (Read Only Memory),
como mostrado na figura 4.1(b), ou ainda tendo os device drivers em ROM e o resto do sistema
operacional na RAM ocupando a parte baixa da memria, como mostrado na figura 4.1(c).
O IBM PC utiliza o modelo da figura 4.1(c), com os device drivers localizados no bloco de 8K
mais alto dentro do espao de 1M de endereamento. O programa na ROM chamado de BIOS
75
DCA-FEEC-UNICAMP
76
programa do
usurio
programa do
usurio
programa do
usurio
(a)
(b)
(c)
Figura 4.1: Trs formas de organizar a memria para o sistema operacional e um processo do usurio
Quando o sistema organizado dessa maneira, somente um processo pode estar em execuo
por vez. O usurio entra com um comando no terminal, e o sistema operacional carrega o programa
requerido do disco para a memria e o executa. Quando o processo termina, o sistema operacional
reassume a CPU e espera por um novo comando para carregar um outro processo na memria j
liberada pelo primeiro.
DCA-FEEC-UNICAMP
77
Modelagem da Multiprogramao
Quando a multiprogramo usada, o percentual de utilizao da CPU aumenta. A grosso modo,
se a mdia dos processos utilizam CPU somente 20% do tempo que permanecem na memria, com 5
processos em memria, a CPU dever estar ocupada o tempo todo. Este modelo otimista, entretanto,
pois assume que os 5 processos nunca estejam esperando por E/S ao mesmo tempo.
O melhor modelo ver o uso da CPU do ponto de vista probabilstico. Suponha que os processo
gastem em mdia uma frao p do tempo a espera de E/S. Com n processos na memria por vez, a
probabilidade que todos os n processos estejam esperando por E/S pn . A utilizao da CPU ento
1 pn. A figura 4.2 mostra a utilizao da CPU em funo de n, chamado grau de multiprogramao.
utilizao da CPU (%)
100
20% de E/S
80
50% de E/S
60
80 de E/S
40
20
10
Figura 4.2: Utilizao da CPU como uma funo do nmero de processos na memria
Da figura est claro que caso os processos gastem 80% do seu tempo esperando por E/S, ao
menos 10 processos devem estar na memria por vez para obter um desperdcio de CPU em torno de
10%. Quando se considera que um processo interativo aguardando comandos do terminal est num
estado de espera de E/S, deve ficar claro que tempos de espera para E/S superiores a 80% so usuais.
Processos utilizando disco e fitas com elevada frequncia, tambm contribuem para o aumento deste
percentual.
DCA-FEEC-UNICAMP
78
memria em (possilvelmente diferentes) n parties. Estas parties podem, por exemplo, ser estabelecidas na configurao do sistema operacional.
Quando um processo inicia, este pode ser colocado em uma fila de entrada para ocupar a menor
partio de tamanho suficiente para acomod-lo. Desde que as parties so fixas, qualquer espao
em uma partio no usado pelo processo perdido. A figura 4.3(a) apresenta este esquema de
partio.
partio 4
partio 4
700K
partio 3
partio 3
400K
partio 2
partio 2
200K
partio 1
partio 1
100K
sistema
operacional
sistema
operacional
(a)
(b)
Figura 4.3: (a) Parties de memria fixa com filas de entrada separadas para cada partio; (b)
partio de memria fixa com uma fila simples de entrada
A desvantagem de se ordenar os processos que chegam em filas separadas torna-se aparente
quando a fila para a maior partio est vazia, mas a fila para a menor partio est cheia, como no
caso das parties 1 e 4 na figura 4.3(a). Uma organizao alternativa manter uma fila nica como
na figura 4.3(b). Toda vez que uma partio liberada, a mesma alocada ao primeiro processo
da fila. Uma vez que indesejvel gastar uma partio grande com um processo pequeno, uma
estratgia mais eficaz procurar em toda fila de entrada a maior tarefa para a partio liberada. Note
que o ltimo algoritmo discrimina os processos pequenos, quando usualmente desejvel dar a eles
o melhor tratamento, no o pior.
Este sistema, com parties fixas definidas pelo operador, foi usado pelo sistema operacional
OS/360 nos grandes mainframes da IBM por muitos anos. Ele era chamado de MFT (Multiprograming with a Fixed number of Task). Ele simples de se entender e igualmente simples de implementar: os processos que chegam so colocados em uma fila at que uma partio adequada seja liberada,
quando ento so carregados e executados.
DCA-FEEC-UNICAMP
79
Realocao e Proteo
Multiprogramao introduz dois problemas essenciais que devem ser resolvidos: realocao e
proteo. Da figura 4.3 est claro que diferentes processos sero executados em endereos diferentes. Quando um programa ligado (linked) 1 , o linker deve saber em qual endereo na memria o
programa comear.
Por exemplo, suponha que a primeira instruo de um programa uma chamada para um procedimento de endereo relativo 100 dentro do arquivo binrio produzido pelo linker. Se o programa
for carregado na partio 1 da figura 4.3(a), esta instruo saltar para o endereo absoluto 100,
em plena rea do sistema operacional. O que necessrio uma chamada para 100K + 100. Se o
programa for carregado na da partio 2, ele deve ser executado como uma chamada para 200K +
100, e assim por diante. Este problema conhecido como o problema da realocao.
Uma soluo possvel modificar realmente as instrues quando o programa carregado para
a memria. Programas carregados na partio 1 tm 100K adicionados para cada endereo, programas carregados na partio 2 tm 200K adicionados ao endereamento, e assim sucessivamente. Para
realizar a realocao durante o carregamento, o linker deve incluir no programa binrio uma lista contando quais palavras do programa so endereos para ser realocados e quais so cdigo, constantes,
e outros itens que no devem ser realocados.
Realocao durante o carregamento no resolve o problema da proteo. Pelo fato de programas
operarem endereos absolutos de memria, no existe maneira de proibir um programa de ler ou
gravar em qualquer posio de memria. Em sistemas multi-usurios indesejvel permitir que
processos leiam e escrevam em posies de memria alocadas a outros processos.
A soluo de proteo adotada pela IBM na famlia 360 foi dividir a memria em blocos de 2K
bytes e atribuir um cdigo de proteo de 4 bits para cada bloco. A cada processo atribuido um
cdigo nico de 4 bits, gravado tambm nos blocos de memria que ele ocupa. Este cdigo parte
do registro PSW (program status word) quando o processo tem a posse da CPU. O hardware protege
qualquer tentativa de programa em execuo de acessar a memria cujo cdigo de proteo difere
daquele presente na PSW. Desde que somente o sistema operacional pode mudar os cdigos de proteo dos blocos de memria e dos processos, processos do usurio esto protegidos de interferncias
entre s e com o sistema operacional.
Uma soluo alternativa, adotada por praticamente todos os microprocessadores atuais, para realocao e proteo equipar a mquina com dois registradores especiais no hardware, chamados de
registradores de base e limite. Quando um processo escalonado, o registrador de base carregado com o endereo do comeo da sua partio, e o registrador limite carregado com o tamanho
da partio. Cada endereo de memria referenciado tem o contedo do registrador de base a ele
adicionado antes de ser enviado para o barramento de acesso memria.
Por exemplo, se o registrador de base for 100K, uma instruo CALL 100 efetivamente modificada para CALL (100K + 100). Endereos so comparados com o registrador de limite para prevenir
endereamento fora do espao alocado ao processo. O hardware tambm protege os registradores
de base e limite para evitar que programas dos usurios os modifiquem. O IBM-PC usa uma verso
simplificada deste esquema: tem-se registradores de base (os registradores de segmento), mas no
registradores de limite.
1
Isto , o programa principal, subrotinas escritas pelo usurio, e bibliotecas so combinados dentro de um espao de
endereamento nico.
DCA-FEEC-UNICAMP
80
Uma vantagem adicional do uso de registrador de base para realocao que um programa pode
ser movido na memria aps ter sua execuo iniciada. Depois de ter sido movido, tudo que se precisa
para torn-lo pronto para execuo em outra posio da memria mudar o valor do registrador
de base. Quando a realocao feita por alterao dos endereos do programa quando o mesmo
carregado, sua execuo em outra posio de memria demanda que todos os endereos sejam
novamente recomputados.
DCA-FEEC-UNICAMP
81
sistema
operacional
(a)
sistema
operacional
sistema
operacional
(b)
(c)
sistema
operacional
sistema
operacional
sistema
operacional
sistema
operacional
(d)
(e)
(f)
(g)
Figura 4.4: Mudanas na alocao de memria com processos chegando e deixando a memria
(regies hachuradas representam espao no usado)
Na prtica, os segmentos de dados e pilha de um processo tendem a crescer durante a sua execuo. Alocao dinmica de memria e recurso (presentes em praticamente em todas as linguagens
modernas de programao) so exemplos tpicos de crescimento destes segmentos. Se o processo necessitar expandir sua memria e existir um buraco adjacente, simplesmente o buraco pode vir a ser
incorporado ao espao de endereamento do processo. De outra forma, se o processo est adjacente a
outro processo, o primeiro dever ser movido para um burraco grande o suficiente para armazena-lo,
ou um ou mais processos tero que ser movidos para disco com o intito de criar espao na memria. Se o processo no puder crescer na memria e a rea do disco reservada para abrigar processos
permutados estiver cheia, o processo deve ser terminado.
Se for esperado que muitos processos crescero na memria quando executados, uma boa poltica
seria alocar uma pequena rea extra toda vez que o processo permutado ou movido. Contudo,
quando os processos so permutados para o disco, somente a rea de memria atualmente em uso
deve ser copiada, sendo desnecessrio permutar a rea extra de memria. A figura 4.5(a) mostra a
configurao da memria na qual a rea para crescimento foi alocada para os dois processos.
DCA-FEEC-UNICAMP
82
B (pilha)
espao para crescimento
espao para crescimento
B (dados)
B
espao em uso
B (texto)
A (pilha)
espao para crescimento
espao para crescimento
A
sistema
operacional
(a)
espao em uso
A (dados)
A (texto)
sistema
operacional
(b)
Figura 4.5: (a) Espao para crescimento do segmento de dados. (b) espao para crescimento da pilha
e do segmento de dados.
memria considervel pode ser desperdiada se o tamanho do processo no for um mltiplo exato da
unidade de alocao.
Um mapa de bits (ocupando uma poro fixa da memria) prov uma maneira simples de gerenciar memria, uma vez que o tamanho do mapa de bits depende somente do tamanho da memria e
do tamanho da unidade de alocao. O problema principal com isto que quando se decide trazer
um processo de k unidades de alocao para a memria, o gerenciador de memria deve pesquisar no
mapa de bits uma sequncia de k consecutivos bits 0 no mapa. Esta operao lenta, razo pela qual
os mapas de bits so evitados na prtica.
DCA-FEEC-UNICAMP
D
16
11111000
11111111
10011111
83
....
24
(a)
(b)
A
P
B
5
C
P 15 17
9 14
D
B 18 19
P 20 25
P: processo
B: buraco
(c)
Figura 4.6: (a) parte da memria com 5 processos e 3 buracos (as marcas mostram as unidades de
alocao da memria e as regies hachuradas esto livres); (b) mapa de bits correspondente. (c) a
mesma informao como uma lista ligada
evocados quando o gerenciador de memria necessita um segmento de memria de M bytes.
Algoritmo First-fit
o algoritmo mais simples. O algoritmo procura ao longo da lista de segmentos at encontrar
um buraco de tamanho maior ou igual a M. Caso o buraco tenha tamanho superior a M (N), o buraco
quebrado em dois segmentos: um para o processo (de tamanho M) e o outro para a memria no
usada (de tamanho N - M). First-fit um algoritmo rpido pois finaliza a busca o mais cedo possvel.
Algoritmo Next-fit
Este algoritmo trabalha da mesma forma que o first-fit, exceto que quarda a posio da lista onde
o ltimo buraco foi alocado. Da prxima vez que chamado, o algoritmo comea a procurar a partir
deste ponto.
Algoritmo Best-fit
Este algoritmo procura pela lista inteira e toma o buraco de tamanho mais prximo de M. um
algoritmo lento e cria na memria buracos pequenos que dificilmente sero alocados. Entretanto, para
M grande, o best-fit aumenta as chances de se encontrar na lista um buraco de tamanho adequado,
posto que minimiza o uso buracos grandes para atender alocaes pequenas.
Como um exemplo, considere a figura 4.6. Se um bloco de tamanho 2 for solicitado, o algoritmo
first fit alocar o buraco 5, e o best fit o buraco 18.
DCA-FEEC-UNICAMP
84
DCA-FEEC-UNICAMP
85
da memria principal.
Em outros sistemas, quando um processo criado, um espao para permuta alocado em disco
(usando um dos algoritmos descritos acima). Sempre que um processo em memria d lugar a outro
processo, ele colocado no espao em disco a ele previamente alocado. Quando um processo termina, o seu espao para permuta em disco desalocado. Esta tcnica mais eficiente que a anterior
pois uma nica alocao de espao em disco por processo necessria (lembre-se que um processo
pode ser permutado vrias vezes durante a sua execuo). Entretanto, uma rea maior de disco deve
ser reservada para swapping.
4.3.1 Paginao
A maioria dos sistemas com memria virtual usa uma tcnica chamada paginao. Em qualquer computador existe certo conjunto de endereos de memria que programas podem referenciar.
Quando um programa usa uma instruo como MOVE REG,1000, ele est movendo o contedo do
endereo de memria 1000 para o registrador REG (ou vice versa, dependendo do computador). Endereos podem ser gerados usando indexao, registradores base, registradores de segmento, dentre
outras maneiras.
Estes endereos gerados pelos programas so chamados endereos virtuais e formam o espao
virtual de endereamento do processo. Em computadores sem memria vitual, o endereo virtual
DCA-FEEC-UNICAMP
86
colocado diretamente no barramento de memria e causa uma palavra da memria fsica com mesmo
endereo ser lida ou escrita. Quando memria virtual usada, os endereos de memria no vo
diretamente para o barramento de memria. Ao invs disso, eles vo unidade de gerenciamento
de memria (Memory Management Unit, MMU), onde um hardware especfico mapeia os endereos
virtuais nos endereos da memria fsica como ilustrado na figura 4.8.
processador
CPU
endereo
virtual
memria
control.
de disco
MMU
barramento
endereo fsico
DCA-FEEC-UNICAMP
espao de
endereamento
virtual (tabela)
espao de
endereamento
real (fsico)
0
2
87
0
0-4K
1
1
1
4-8K
2
6
2
8-12K
3
0
3
12-16K
4
4
4
16-20K
5
3
5
20-24K
6
X
6
24-28K
7
X
7
28-32K
8
X
9
5
10
X
11
7
12
X
X
14
: pgina de 4 Kbytes
X
15
X
Figura 4.9: Relao entre endereo virtual e endereo fsico de memria, dada pela tabela de pginas
truo MOV REG,32780, o qual referencia o byte nmero 12 dentro da pgina virtual 8 (comeando
em 32768). A MMU observa que a pgina est sem mapeamento (indicada por um x na figura 4.9),
e fora a CPU a causar uma interrupo (trap) no sistema operacional. Este trap chamado uma
falta de pgina (page fault). O sistema operacional remove o page frame menos usado e escreve
seu contedo de volta no disco. Ele ento busca a pgina referenciada para o page frame liberado,
atualiza o mapa, e retorna instruo interrompida.
Agora vajamos como a MMU trabalha e porque temos de escolher um tamanho de pgina como
uma potncia de 2. Na figura 4.10 temos um exemplo de um endereco virtual, 8196 (0010000000000100
em binrio), sendo mapeado usando o mapa da MMU da figura 4.9. O endereo virtual de 16 bits
divido em um nmero de pgina de 4 bits e offset de 12 bits dentro da pgina. Com 4 bits para
o nmero da pgina, podemos representar 16 pginas, e com 12 bits para o deslocamento (offset),
podemos enderear todos os 4096 bytes dentro da uma pgina.
DCA-FEEC-UNICAMP
88
pgina virtual = 2
tabela de pginas
endereo | bit presente/ausente
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
010
001
110
000
100
011
000
000
000
101
000
111
000
000
000
000
1
1
1
1
1
1
0
0
0
1
0
1
0
0
0
0
110
off-set de 12 bits
copiado diretamente
DCA-FEEC-UNICAMP
89
4.3.2 Segmentao
Paginao prov uma tcnica para implementao de um grande espao enderevel numa memria fsica limitada. Para algumas aplicaes, um espao enderevel bi-dimensional mais conveniente. Idealmente, cada programa deve ter um nmero muito grande de segmentos (i.e. 232 = 4G),
cada um consistindo de grande nmeto de bytes (i.e. tambm 232 ). Os primeiros 64K de segmentos
podem ser revervados para procedimentos, dados, e pilhas, pertencentes ao programa em execuo.
Os segmentos restantes podem conter um arquivo por segmento, tal que processos possam diretamente enderear todos seus arquivos, sem ter que abr-los e usar primitivas especiais de E/S para l-los
e escrev-los. Cada arquivo cresce ou reduz-se completamente, independentemente dos outros nesta
disposio, com cada byte da memria sendo endereado por um par (segment, offset).
Iniciada com o projeto MULTICS, a idia de memria segmentada sobrevive at hoje. Uma
implementao tpica prov suporte de hardware para at 16 processos, cada um com espao de
endereamento virtual de 1024 pginas de 2K ou 4K. Se introduzirmos pginas de 4K para este
exemplo, cada processo ter um espao de endereamento virtual de 4M, consistindo de 1024 pginas
de 4K cada.
Este esquema poderia ser implementado dando a cada processo sua prpria tabela com 1024
nmeros de page frames. Entretanto, esta tcnica raramente empregada. Em vez disto, o hardware
da MMU contm uma tabela com 16 sees, uma para cada um dos 16 processos. Cada seo tem 64
descritores de segmento, ento o espao de endereamento para cada processo de 4M dividido em
64 segmentos, cada um contendo 16 pginas de 4K. As tabelas de segmento e pgina so descritas
na figura 4.11(a).
Cada um dos descritores de segmento contm um tamanho de segmento (0 16 pginas), bits
de proteo dizendo se um segmento pode ser lido ou escrito, e um ponteiro para a prpria tabela
de pginas. Cada uma das tabelas de pginas contm 16 entradas, cada entrada apontando para uma
page frame na memria (guardando o nmero da page frame).
Quando o sistema operacional comea um processo, ele carrega um nmero de 4 bits do processo
num registrador especial do hardware. Sempre que o processo referencia a memria, a MMU traduz
o endereo virtual como se segue. Toma-se o nmero de 4 bits do processo e os 6 bits de mais alta
ordem dos 22 que compem o endereo virtual (necessrios para o endereo de 4M), combinando-os
em um nmero de 10 bits usados para indexar a tabela de segmentos e localizar o descritor de segmento relevante. Note que existem exatos 210 = 1024 segmentos na tabela: 64 segmentos/processo
X 16 processos.
Verifica-se ento os bits de proteo no descritor de segmentos para ver se o acesso permitido.
Se o for, a MMU ento verifica o nmero da pgina extrada do endereo virtual com o tamanho do
segmento no descritor de segmentos, para verificar se o segmento grande o bastante. Caso seja, o
nmero da pgina usado como um ndice para a tabela de pginas, cujo endereo fornecido no
descritor de segmento (todas tabelas de pginas so mantidas numa memria rpida especial dentro
da MMU). Uma vez que o nmero da estrutura de pgina encontrado, ele combinado com o
deslocamento do endereo virtual para formar o endereo fsico da memria, o qual ento posto no
barramento.
Uma das caractersticas chave deste modelo que quando o sistema operacional escolhe um
processo, tudo o que ele tem de fazer mudar o registrador do nmero de 4 bits do processo. Isto
faz com que no tenha que recarregar todas as tabelas de segmento ou de pgina. Dois ou mais
DCA-FEEC-UNICAMP
tabela de segmentos
tamanho
.
.
.
proteo
64 descritores de
segmento p/ proc. 0
tabela de
pginas
.
.
.
.
.
.
90
endereamento
fsico
1 segmento
(at 16 pginas)
64 descritores de
segmento p/ proc. 1
(a)
4 bytes
processo #
segmento #
pgina #
12
off-set na pgina
ndice do segmento
endereamento virtual de 22 bits
(b)
Figura 4.11: (a) MMU usada em muitos computadores baseados no 68000; (b) endereamento virtual
para um sistema de 4M
processos podem dividir um segmento se seus descritores de segmentos apontam para a mesma tabela
de pginas. Qualquer mudana feita por um processo numa pgina deste segmento automaticamente
visvel para os outros processos.
Enquanto o modelo da figura 4.11 prov cada um dos 16 processos com somente 64 segmentos
de 64K cada, a idia pode facilmente ser estendida para espaos de endereo mais largos ao preo
de uma tabela maior dentro da MMU. A maior parte do espao para as tabelas de pginas. Se
tivssemos quatro vezes mais memria para as tabelas de pginas dentro da MMU e seus contedos
com 4 processos em vez de 16, o MMU poderiamos suportar 64 segmentos de 1M por processo.
DCA-FEEC-UNICAMP
91
Apesar de ser possvel escolher uma pgina aleatria para dar lugar pgina em demanda, o
desempenho do sistema melhorado se for escolhida uma pgina pouco usada (referenciada). Se uma
pgina muito usada removida, ela provavelmente ter de ser trazida de volta em breve, resultando
um esforo adicional. Algoritmos eficientes de troca de pgina visam minimizar este esforo.
DCA-FEEC-UNICAMP
92
pelo sistema operacional. Periodicamente (i.e., a cada interrupo de relgio), o bit R zerado, para
distinguir pginas que no foram referenciadas recentemente daquelas que tenham sido.
Quando uma falta de pgina ocorre, o sistema operacional examina todas as pginas e as classifica
em 4 categorias baseado nos valores correntes de seus bits R e M:
Ainda que as pginas na classe 1 paream, primeira vista, impossveis de existir, elas ocorrem
quando as pginas da classe 3 tm seu bit R zerado pela interrupo do relgio. Interrupes de
relgio no zeram o bit M porque esta informao necessria para determinar se uma pgina ter
que ser reescrita no disco ou no.
O algoritimo No Recentemente Usada (Not Recently Used, NRU), remove uma pgina aleatria
da classe no vazia de numerao mais baixa. Implcito neste algoritmo que melhor remover uma
pgina modificada que no foi referenciada pelo menos no ltimo tick de relgio (tipicamente 20
mseg), que uma pgina no modificada mas muito usada. As caractersticas principais do NRU que
ele fcil de entender, eficiente de se implementar, e gera um desempenho que, enquanto certamente
no timo, geralmente tido como adequado.
DCA-FEEC-UNICAMP
93
DCA-FEEC-UNICAMP
94
duas partes. Primeiro, os contadores so cada um deslocados 1 bit para a direita antes do bit R ser
incrementado. Segundo, o bit R incrementado no bit mais a esquerda.
Quando ocorre ume falta de pgina, a pgina de menor contador removida. bvio que a pgina
que no tenha sido referenciada por, digamos, quatro ticks de relgio ter quatro zeros significativos
em seu contador, tendo assim um valor mais baixo que o contador de uma pgina que tenha sido
referenciada nos quatro ltimos ticks de relgio.
Uma diferena entre LRU e Aging que, no ltimo os contadores tm um nmero finito de
bits (tipicamente 8). Portanto, no podemos classificar as pginas segundo referncias anteriores
capacidade do contador.
DCA-FEEC-UNICAMP
95
validade: flag que indica se o contedo da pgina vlido (isto , o endereo fsico guarda o
contedo da pgina);
proteo: indica se o contedo da pgina do tipo READ ONLY ou READ/WRITE.
descritor de bloco com os seguintes campos:
dispositivo de swap com rea disponvel para ler/gravar o contedo da pgina;
nmero do bloco alocado pgina;
o tipo da pgina: swap, arquivo executvel, demand fill e demand zero (definidos mais
adiante).
Finalmente, a tabela de uso de swap acessada pelo dispositivo de swap e nmero do bloco neste
dispositivo. Esta tabela armazena apenas um contador de referncia indicando quantas pginas se
utilizam deste bloco em disco.
Deve-se notar que algumas informaes so replicadas em tabelas distintas. Esta replicao visa
beneficiar a eficincia do esquema de paginao, diminuindo o nmero de consultas s tabelas.
A figura 4.12 ilustra uma referncia ao endereo virtual 1493K. O hardware mapeia este endereo na pgina nmero 794. O contedo desta pgina pode estar em memria ou no dispositivo de
swap #1, bloco 2743. As tabelas de frames e de uso de swap mostram seus respectivos contadores de
referncia em 1, informando que o processo o nico a utilizar esta pgina tanto em memria como
em disco. As tabelas de pginas e a de frames apontam para o endereo fsico de memria onde os
dados referentes a esta pgina esto armazenados.
A Chamada fork num Sistema Paginado
A figura 4.13 mostra a situao imediatamente aps uma chamada de sistema fork num sistema
paginado. A rea de texto no duplicada tendo tanto o processo pai quanto o filho as mesmas
entradas para a tabela de pginas (estas pginas so do tipo READ ONLY). O ncleo duplica as
tabelas de pginas que contm as reas de dados e de pilha. As entradas destas tabalas compartilham
as mesmas entradas na tabela de frames (com o contador de referncia agora em 2). Todas as entradas
na tabela de pginas so marcadas como COPY-ON-WRITE, significando que quando qualquer um
dos dois processos alterar o contedo da pgina, a mesma deve ser desmembrada, desvinculando-se
os endereos fsicos de memria e as entradas na tabela de frames.
DCA-FEEC-UNICAMP
end. virtual
1493K
descritor de bloco
pag. 794
96
frame 794
contador ref. 1
swap em uso
disp. swap #1
contador ref. 1
bloco 2743
DCA-FEEC-UNICAMP
pregion do processo pai
texto
97
dados/
pilha
dados/
pilha
reg. texto
contador ref. 2
contador ref 1
contador ref. 1
frame 967
frame 613
contador ref. 1
contador ref. 2
DCA-FEEC-UNICAMP
98
inode
lista de blocos
0
regio
.
.
.
inode
279
84
descritor de bloco
bloco lgico 84
DCA-FEEC-UNICAMP
99
....
memria
pgina no refenciada (idade aumentando)
pgina em
swap-in
disco
swap-out
DCA-FEEC-UNICAMP
100
copia o contedo da pgina em falta para a nova pgina, e decrementa seu contador de referncia.
Se o contador vai a zero, a pgina marcada como COPY-ON-WRITE pode ser reusada. A tabela de
pgina do processo aponta para a nova pgina, agora com permissao de escrita. A partir deste ponto,
o processo retoma sua execuo.
Captulo 5
ENTRADA/SADA
Uma das principais funes do sistema operacional controlar todos os dispositivos de entrada/sada (E/S) do computador, emitindo comandos para os dispositivos, atendendo interrupes e
manipulando erros. Deve tambm prover uma interface entre os dispositivos e o resto do sistema,
que seja simples e fcil de usar (se possvel, a interface deve ser a mesma para todos os dispositivos).
O cdigo de entrada/sada representa uma frao significativa do total do sistema operacional. A
forma como o sistema operacional gerencia E/S o objeto deste captulo.
101
DCA-FEEC-UNICAMP
102
Tudo o que fazem gerar interrupes em intervalos regulares. Contudo, este modelo geral o
suficiente para ser usado como base na construo de um sistema operacional com bom nvel de
independncia dos dispositivos de E/S. O sistema de arquivo, por exemplo, negocia apenas com
dispositivos de blocos abstratos, e deixa a parte dependente do dispositivo para o software de mais
baixo nvel, chamado acionadores de dispositivos (device drivers).
impressora
interface
controlador-dispositivo
CPU
memria
controlador
de disco
controlador
de impressora
outros
controladores
barramento
Figura 5.1: Um modelo para conexo da CPU, memria, controladores e dispositivos de E/S
A interface entre o controlador e o dispositivo , via de regra, uma interface de baixo nvel. O
disco, por exemplo, pode ser formatado com 8 setores de 512 bytes por trilha. O que realmente sai
do driver, entretanto, uma lista serial de bits, partindo com um prembulo, depois os 4096 bits no
setor, e finalmente o checksum ou o cdigo de correo de erro. O prembulo escrito quando o
disco formatado, e contm o nmero de cilindros e de setores, o tamanho do setor, e outros dados.
A tarefa do controlador converter a lista serial de bits em um bloco de bytes e realizar alguma
correo de erro necessria. O bloco de bytes tipicamente primeiro montado, bit por bit, em um
buffer mantido no controlador. Aps o checksum ter sido verificado e o bloco declarado livre de erro,
ele pode ento ser copiado para a memria principal.
DCA-FEEC-UNICAMP
103
O controlador para o terminal CRT (catode ray tube) tambm trabalha como um dispositivo serial
de bits e em baixo nvel. Ele l da memria o byte contendo o caracter a ser exibido, e gera os sinais
usados na modulao do feixe do CRT para causar a escrita na tela. O controlador tambm gera os
sinais para o feixe CRT fazer o retrace horizontal aps ele ter terminado de esquadrinhar a linha,
como tambm, sinais para fazer o retrace vertical aps a tela toda ter sido esquadrinhada. Se no
tivssemos um controlador CRT, o sistema operacional teria que gerar estes sinais no tubo. Com o
controlador, o sistema operacional inicia-o com poucos parmetros, tais como o nmero de caracteres
por linha e o nmero de linhas por tela, deixando o controlador tomar conta do direcionador do feixe
de raios catdicos.
Cada controlador tem alguns poucos registradores que so usados para comunicao com a CPU.
Em alguns computadores estes registradores so parte do espao de endereamento regular. A tabela
5.1 mostra os endereos de E/S e os vetores de interrupo alocados para alguns dos controladores
do IBM PC. A atribuio de endereos de E/S para dispositivos feita por um decodificador lgico
associado ao controlador. Alguns IBM PC-compatveis usam diferentes endereos de E/S.
dispositivo
relgio
teclado
porta serial secundria
disco rgido
impressora
vdeo monocromtico
vdeo colorido
disco flexvel
porta serial primria
endereo E/S
040 - 043
060 - 063
2F8 - 2FF
320 - 32F
378 - 37F
380 - 3BF
3D0 - 3DF
3F0 - 3F7
3F8 - 3FF
vetor int.
8
9
11
13
15
14
12
Tabela 5.1: Alguns exemplos de controladores, os seus endereos de E/S e seus vetores de interrupo
no IBM PC
O sistema operacional realiza E/S escrevendo comandos nos registradores dos controladores. O
controlador de disquete do IBM PC, por exemplo, aceita 15 diferentes comandos, tais como read,
write, seek, format, e recalibrate. Muitos dos comandos tm parmetros, os quais so tambm
carregados nos registradores do controlador. Quando um comando aceito, a CPU pode abandonar
o controlador atender a outra tarefa. Quando completado, o controlador causa uma interrupo com
o objetivo de permitir que o sistema operacional tome o controle da CPU e teste o resultado da
operao. A CPU obtm o resultado e o status do dispositivo pela leitura de um ou mais bytes de
informao nos registradores do controlador.
DCA-FEEC-UNICAMP
104
Esta operao executada somente aps o bloco todo ter sido transferido. Ento, o controlador causa
uma interrupo.
Quando o sistema operacional reassume a CPU, ele pode ler o bloco do buffer do controlador
(byte a byte ou palavra a palavra) numa operao cclica, onde em cada ciclo um byte ou palavra
transferido do controlador para a memria.
Obviamente, o ciclo de transferncia de bytes dos controladores para a memria consome um
tempo aprecivel da CPU. DMA foi criado para livrar a CPU desta tarefa. Quando utilizado, a CPU
fornece duas informaes ao controlador (alm do endereo do bloco a ser lido): o endereo de
memria para onde o bloco deve ser copiado e o nmero de bytes a serem transferidos (ver figura
5.2).
unidades de disco
memria
controlador
de disco
buffer
CPU
registradores
end. memria
contador
barramento
DCA-FEEC-UNICAMP
105
Um deadlock ocorre quando existe um conjunto de processos bloqueados onde cada processo aguarda um evento
para continuar sua execuo, evento este que para ocorrer necessita da ao de outro processo pertencente a este mesmo
conjunto.
DCA-FEEC-UNICAMP
106
DCA-FEEC-UNICAMP
107
DCA-FEEC-UNICAMP
108
Quando um arquivo criado e preenchido com dados, novos blocos de disco tm que ser alocados
para o arquivo. Para realizar esta alocao, o sistema operacional precisa de uma lista ou mapa de
bits dos blocos livres no disco, mas o algoritmo para localizar um bloco livre independente do
dispositivo e pode ser implementado acima do nvel do driver.
Alguns dispositivos, tais como as fitas magnticas, podem ser usadas somente por um simples
processo em um dado momento. o sistema operacional que examina a requisio para usar o
dispositivo e aceita ou no, dependendo da disponibilidade do dispositivo requisitado.
A manipulao de erros tambm feita nesta camada. Um erro tpico causado por um bloco do
disco ruim e que no pode mais ser lido. Aps o driver tentar ler o bloco vrias vezes, ele informa
ao software independente do dispositivo a razo. O erro ento tratado. Se ocorreu num arquivo do
usurio, suficiente informar o erro para o mesmo. Entretanto, se o erro ocorreu numa rea crtica, o
sistema operacional deve apresentar uma mensagem e, eventualmente, terminar sua execuo.
DCA-FEEC-UNICAMP
109
A figura 5.3 resume o sistema de E/S, mostrando todas os nveis e funes principais de cada
nvel.
camada
funcionalidade
processos do usurio
software independente
do dispositivo
drivers de dispositivos
gerenciadores
de interrupo
dispositivos
requisio de E/S
resposta da requisio
DCA-FEEC-UNICAMP
110
gerencivel, mas em grandes computadores, com dezenas de discos, deixar o controle de todos os
dispositivos para o usurio intolervel.
A figura 5.4 mostra a idia por detrs dos discos RAM. O disco RAM dividido em n blocos,
dependendo de quanto de memria foi alocado para ele. Cada bloco tem o mesmo tamanho que o
tamanho do bloco usado em discos rotativos. Quando o driver recebe um bloco para ler ou escrever,
ele apenas computa onde na memria de disco da RAM o bloco est, e l ou escreve nesta posio
de memria. Normalmente, a transferncia deve ser feita pela chamada de um procedimento em
linguagem assembly, que copia os dados gerados pelo programa do usurio com a mxima velocidade
com a qual o hardware capaz de operar.
processos do usurio
sistema operacional
DCA-FEEC-UNICAMP
111
40
2
9
720
512
368640
6 ms
77 ms
200 ms
250 ms
22 ms
Tabela 5.2: Parmetros de unidades de discos flexveis (360 Kbytes) para o IBM PC
DCA-FEEC-UNICAMP
112
indexada pelo nmero do cilindro, com todas as requisies pendentes para cada cilindro, encadeadas
juntas numa lista.
Para este tipo de estrutura de dados, podemos melhorar o algoritmo de escalonamento FirstCome, First-Served. Considere um disco com 40 cilindros. Uma requisio chega para ler um bloco
no cilindro 11. Enquanto a busca para o cilindro 11 est em progresso, novas requisies chegam
para os cilindros 1, 36, 16, 34, 9, e 12, nesta ordem. Elas so inseridas na tabela de requisies
pendentes, tendo cada cilindro um lista separada. As requisies so mostradas na figura 5.5.
posio inicial
X
0
X
5
X X
10
X
15
X
20
25
X
30
cilindro
sequncia de movimentos
tempo
DCA-FEEC-UNICAMP
113
requisio termina, o disk driver testa o bit. Se UP, o brao movido para a prxima requisio
pendente de posies mais altas, se houver. Se no h requisies pendentes para posies mais altas,
o bit de direo revertido. Quando o bit mudado para DOWN, o movimento ser para a prxima
requisio de posio mais baixa, se houver.
A figura 5.6 mostra o algoritmo do elevador usando as mesmas sete requisies da figura 5.5,
assumindo que o bit de direo esteja inicialmente em UP. A ordem na qual os cilindros so servidos
12, 16, 34, 36, 9, e 1, gerando movimento do brao de 1, 4, 18, 2, 27, e 8, num total de 60 cilindros.
Neste caso, o algoritmo do elevador suavemente melhor que SSF, embora seja usualmente pior.
Uma propriedade interessante do algoritmo do elevador que dada uma coleo de requisies, o
limite superior para o total de movimentos fixado: ele apenas duas vezes o nmero de cilindros.
posio inicial
X
0
X
5
X X
10
X
15
X
20
25
X
30
cilindro
sequncia de movimentos
tempo
DCA-FEEC-UNICAMP
114
Manipulao de Erros
Discos RAM no tm preocupao sobre seek ou na otimizao rotacional: em algum instante
todos os blocos podem ser lidos ou escritos sem nenhum movimento fsico. Uma outra rea na qual
discos RAM so consideravelmente mais simples que discos rotativos a manipulao de erros.
Discos rotativos so submetidos por uma larga variedade de erros. Alguns dos mais comuns so:
funo do disk driver manipular cada um desses erros da melhor maneira possvel. Erros de
programao ocorrem quando o driver diz ao controlador para executar uma operao de seek em um
cilindro no existente, ler de um setor no existente, usar uma cabea no existente, ou transferir de
ou para uma posio de memria inexistente.
Erros checksum transientes so causados por poeira no ar entre a cabea e a superfcie do disco.
Em muitos casos eles podem ser eliminados pela repetio da operao algumas vezes. Se o erro
persiste, o bloco deve ser marcado como defeituoso.
Um modo de evitar blocos defeituosos escrever um programa especial que toma a relao
destes blocos como entrada, e cria um arquivo contendo todos os blocos defeituosos. Uma vez que
este arquivo tenha sido criado, para o alocador do disco parecer que estes blocos esto ocupados,
no os alocando para outros arquivos. Como o arquivo de blocos defeituosos nunca lido, os blocos
defeituosos permanecero inertes no disco.
Evitar a utilizao de blocos defeituosos constitui numa tarefa rdua. Alguns controladores inteligentes reservam algumas poucas trilhas, no normalmente disponveis para programas do usurio.
Quando um disco formatado, o controlador determina quais blocos so defeituosos e automaticamente substitui por uma trilha de reserva. A tabela de mapas de trilhas defeituosos para trilhas de
reserva mantida na memria interna do controlador e no disco. Esta substituio transparente para
o driver.
Erros de seek so causados por problemas mecnicos no brao. O controlador mantm o rastreamento da posio do brao internamente. Para realizar um seek, ele emite uma srie de pulsos para
o motor do brao, um pulso por cilindro, para mover o brao para o novo cilindro. Quando o brao
chega no destino, o controlador l o nmero do cilindro (escrito quando o drive foi formatado). Se o
brao est no lugar errado, um erro de seek ocorre.
Alguns computadores corrigem o erro de seek automaticamente, mas outros (incluindo os IBM
PCs) apenas atribuem um bit de erro e abandonam o resto para o driver. O driver manipula este
erro pela emisso de um comando recalibrate, que move o brao to longe ele possa ir, e reinicia o
controlador interno do cilindro corrente em 0. Usualmente isto soluciona o problema. Caso contrrio,
o dispositivo deve ser reparado.
DCA-FEEC-UNICAMP
115
DCA-FEEC-UNICAMP
116
A figura 5.7 mostra o esquema bsico de entrada/sada no UNIX. Quando um processo executa
uma chamada de sistema open, por exemplo, o ncleo acessa o inode do arquivo passado chamada e
descobre que um arquivo associado a um dispositivo de E/S. Atravs de uma tabela de chaveamento
de dispositivo, o ncleo obtm o endereo da rotina de open para este dispositivo. Uma vez iniciado
o dispositivo, um campo na tabela de arquivos (ver Cap. 3) adicionado, sendo o ndice deste campo
(descritor) retornado ao processo.
open close read write ioctl
open
close
read
mount umount
write
rotinas do
cache de buffers
tabela de chaveamento
(dispositivos orientados a caracter)
tabela de chaveamento
(dispositivos orientados a bloco)
open
driver
close
strategy
driver
gerenciador de interrupes
gerenciador de interrupes
vetor de interrupo
interrupes
dispositivo
dispositivo
dispositivo
bloquear um arquivo;
DCA-FEEC-UNICAMP
117
Para dispositivos do tipo bloco, chamadas read e write seguem o mesmo procedimento. Para
tais dispositivos, na qual o driver tem que iteragir com as rotinas de buffer cache, o procedimento
outro. Uma rotina denominada strategy perfaz as operaes de leitura e escrita em tais dispositivos.
Quando uma operao de leitura ou escrita requisitada, o ncleo identifica a rotina strategy
definida para o dispositivo, passando mesma o endereo do cabealho do buffer para onde os dados
devem ser copiados, caso leitura, ou contendo os dados para escrita.
5.5.2 Streams
Stream um conceito que prov maior modularidade na implementao de drivers para dispositivos do tipo caracter (principalmente drivers de rede que so estruturados em mltiplas camadas).
Um stream um conjunto de pares de listas ligadas. Uma lista armazena requisies de escrita
e na outra esto as leituras que o dispositivo j efetuou (figura 5.8). Cada par de listas implementa
um determinado nvel de abstrao, desde os mais altos (como as chamadas de sistema) at os mais
baixos (como controle direto do dispositivo), passando por nveis intermedirios (como protocolos).
A figura 5.8 mostra um driver de terminal empregando o conceito de stream.
write
cabea do STREAM
fila de entrada
put
disciplina de linha
fila de entrada
put
driver do terminal
fila de entrada
read
inode do arquivo
do dispositivo
fila de sada
push
fila de sada
push
fila de sada
Figura 5.8: Driver de terminal composto de um stream com trs pares de listas
DCA-FEEC-UNICAMP
118
Quando um processo escreve dados num stream, o ncleo envia os dados para a prxima lista,
at chegar ao dispositivo. Quando o driver recebe dados do dispositivo, ocorre o processo inverso:
os dados so enviados at chegar lista de nvel mais alto, permanecendo a disposio do processo
que requisitou a operao.
Cada lista do stream consiste numa estrutura de dados contendo:
Captulo 6
TPICOS ESPECIAIS
O objetivo deste captulo consiste na discusso de alguns itens importantes no contexto dos sistemas operacionais. A primeira questo abordada procura discutir o esforo internacional com relao
definio de um padro de interface atravs do Projeto POSIX. Posteriormente, apresenta-se o
conceito de thread que um novo modelo voltado para a programao concorrente e que tem sido
implementado na maior parte dos novos sistemas operacionais. Por ltimo, o captulo discute alguns
aspectos do projeto de hardware dos processadores 8088/8086, 80286 e 80386; trata-se de uma discusso introdutria que procura enfatizar a evoluo ocorrida nesta famlia de processadores tendo
como objetivo facilitar a implementao de ambientes multiprogramados.
119
DCA-FEEC-UNICAMP
120
software de aplicao
plataforma de aplicao
ambiente externo
semforos binrios;
fixao de processo na memria;
memria compartilhada;
escalonamento preemptivo baseado em prioridade;
notificao de evento assncrono;
comunicao entre processos;
DCA-FEEC-UNICAMP
standard
1003.1
tpico
chamadas de sistema
1003.2
1003.2a
1003.4
1003.4a
1003.5
1003.6
shell e utilitrios
portabilidade
tempo-real
processos leves
interface ADA
segurana
1003.7
1003.8
1003.9
1003.12
administrao
transparncia
interface Fortran
interface de rede
1003.15
1003.17
1201.1
escalonamento em batch
diretrio de servios
sistema grfico
1224
1238.0
1238.1
X.400
funes de suporte
FTAM
121
escpo
servios bsicos
tais como E/S e controle de processos
linguagem de comando e utilitrios
utilitrios para time sharing
facilidades p/ programaes em tempo-real
facilidades para programao concorrente
chamadas do 1003.1 em ADA
segurana multinvel,
controle de acesso, etc
adio de usurios, status checking, etc
acesso transparente (via rede) a arquivos
chamadas do 1003.1 em Fortran
servios de comunicao
independente de protocolo
funes para processamento no interativo
registro e localizao de servios
funes de interfaceamento grfico
baseado em janelas
correio eletrnico padro OSI
funes de baixo nvel padro OSI
transferncia de arquivos padro OSI
Tabela 6.1: Grupos representativos dos padres de interface do IEEE para programas aplicativos. O
standard 1003.1 est completo (ISO 9945.1); os standards 1003.2 a 1003.6 3 1003.9 encontram-se
prximo de uma verso final; os demais standards esto ainda em discusso.
Uma rea que ainda encontra-se em discusso relaciona-se s threads. Um thread um processo
leve que utiliza o espao de endereamento de um processo convencional (pesado) e requer um menor
overhead na criao, gerenciamento e execuo, do que um processo convencional. A mquina
necessita manter menos informaes de estado para uma thread e, apesar dela executar no espao de
endereamento do processo pai, ela o elemento de escalonamento e manipulao de sinais.
O grupo de trabalho POSIX 1003.4a est discutindo quanto do contexto deve estar associado a
uma thread e como uma notificao de evento assncrono ser negociada pela thread. Enquanto estas
questes no forem completadas, o POSIX 4.a no far parte do padro POSIX 4.
Por ltimo, o Comit identificou 4 perfis para os sistemas de tempo real: mnimo, controle,
dedicado e propsito geral. O objetivo dos perfis o de permitir que o ncleo seja configurado para
uma instalao ou aplicao especfica.
O perfil mnimo usado nos sistemas dedicados, autnomos, com poucos dispositivos de E/S
e no utiliza memria de massa. Neste caso o sistema formado somente por um nico processo
DCA-FEEC-UNICAMP
122
DCA-FEEC-UNICAMP
123
processo
espao de
endereamento
virtual
do processo
thread #1
descritores
de arquivos
thread #2
pipes
semforos
thread #N
gerenciadores
de sinal
DCA-FEEC-UNICAMP
124
thread
registradores
pilha
prioridade
DCA-FEEC-UNICAMP
125
DCA-FEEC-UNICAMP
126
alta prioridade
30
...
0
round-robin
baixa prioridade
alta prioridade
30
...
0
baixa prioridade
alta prioridade
30
round-robin
...
baixa prioridade
processos inativos
31
alta prioridade
30
...
0
round-robin
baixa prioridade
DCA-FEEC-UNICAMP
127
registradores gerais;
registradores especiais;
registradores de segmento.
Os registradores AX, BX, CX, DX, SI e DI contm operandos das instrues lgicas e aritmticas.
Em instrues mais complexas estes registradores possuem papel especializado.
No caso dos registradores de segmento, o CS contm o endereo base do segmento de cdigo em
execuo (CS : IP - contador de instruo). Quando ocorre uma transferncia sem que o registrador
CS varie o seu contedo, diz-se se que ocorreu uma transferncia perto; caso o contedo de CS
varie, a transferncia ocorrida dita longe; o registrador SS contm o endereo de base da pilha
atual; o registrador SP aponta para o topo da pilha; DE e ES permitem a especificao de segmentos
de dados.
6.3.2 Sumrio
Como o 8088 no oferece nunhum mecanismo de proteo memria ou E/S, no se trata
de uma plataforma para suportar multiprogamao. Devido ao esquema de memria segmentada,
m cdigo escrito para o 8088 transportvel somente para sistemas que possuam, exatamente, a
mesma semntica de segmento e esquema de endereamento. O modelo de memria segmentada
e o pequeno conjunto de registradores adiciona um nvel de complexidade ao desenvolvimento de
programas e ferramentas de programao de suporte ao 8088.
DCA-FEEC-UNICAMP
128
DCA-FEEC-UNICAMP
129
16MB
seletor
....
offset
16-bit de offset
+
limite do
segmento
descritor
....
....
0
tabela de descritores
memria fsica
reservado
direitos de acesso
end. de base (B0-15)
end. de base (B16-23)
limite
DCA-FEEC-UNICAMP
130
Proteo
O conceito de proteo fundamental em sistemas multiprogramados e com endereamento virtual. O sistema operacional deve ser protegido das aplicaes e estas devem ser protegidas entre si.
O 80286 suporta um modelo de proteo que permite ao sistema operacional isolar-se das aplicaes
do usurio, isolar as aplicaes do usurio entre si e validar os acessos memria.
Sempre que a memria referenciada, o hardware da unidade de gerenciamento de memria
(MMU) no 80286 testa a referncia para verificar se ela satisfaz o critrio de proteo. Como este
teste feito antes que uma instruo se complete, qualquer violao proteo que ocorra durante o
teste far com que o 80286 provoque uma exceo. Os nveis de privilgio do 80286 so usados para
proteger dados e cdigos crticos do sistema contra cdigo menos confivel; o sistema usa LDTs para
isolar cada segmento de processo atravs da alocao de uma LDT para cada um e pelo chaveamento
de LDTs quando os processos so chaveados. Quando um seletor que referencia um segmento
carregado no registro de segmento, o processador carrega no somente o endereo de base e o limite
de segmento no cache de descritor mas, tambm, a informao de proteo.
O bit de acesso desativado toda a vez que o seletor carregado no registrador de segmento;
ele ativado sempre que o segmento lido ou escrito, e pode ser usado pelo sistema operacional
para monitorar o uso do segmento. O bit Presente no descritor indica se o segmento se encontra na
memria permitindo que o sistema operacional gerencie a memria virtual.
Testes de Tipo e Limite
O campo de tipo de um descritor distingue entre diferentes formatos de descritor e especifica o
uso previsto para o segmento. Indica, por exemplo, se o descritor corresponde a segmento de cdigo,
segmento de dados ou segmento especial usado pelo sistema. O bit de escrita indica se o segmento de
dados somente de leitura ou de leitura/gravao. No caso de segmentos de cdigo este bit impede
que gravaes ocorram nestes segmentos.
O campo limite do segmento no descritor indica o tamanho do segmento. Caso um programa
tente acessar um offset alm do limite de um segmento, uma falha de proteo indicada.
Nveis de Privilgio
O 80286 possui um esquema de proteo de 4 nveis: nvel 0, representa o nvel de privilgio mais
alto (sistema opreacional); o nvel 3 representa o nvel de menor confiana (programas do usurio).
Os nveis de privilgio so encontrados em trs reas da arquitetura do 80286: descritores (DPL)
- indica o nvel de privilgio necessrio para acessar o segmento; seletores (RPL) - representa o
nvel de privilgio de um procedimento que fornece um seletor como parmetro; o 80286 mantm,
internamente, o nvel de privilgio atual (CPL). Normalmente, CPL tem o mesmo valor do DPL
do segmento de cdigo em execuo. O valor do CPL muda quando o controle transferido entre
segmentos de cdigo com DPLs diferentes. O 80286 determina o direito de um procedimento acessar
segmentos comparando o CPL com os nveis de privilgio (DPL e RPL) dos segmentos envolvidos.
Quando um programa carrega o seletor de um segmento de dado no registro de segmento, o 80286
testa para ver se o programa pode acessar o segmento, ou seja, se CPL menor ou igual ao DPL do
segmento que contm o dado.
DCA-FEEC-UNICAMP
131
6.3.4 Sumrio
O modelo protegido do 80286 fornece as funes necessrias para implementao de um sistema
operacional baseado em memria virtual e multiprogramao. Devido limitao dos 64 Kb na
arquitetura de endereamento, a programao do 80286 no trivial e o cdigo fonte de difcil
transporte. Programas grandes no 80286 devem alterar os registradores de segmento frequentemente,
tornando lenta sua execuo.
DCA-FEEC-UNICAMP
registradores gerais
registradores especiais
registradores
de segmento
32 bits
32 bits
32 bits
EAX
AX
EIP
IP
CS
EBX
BX
EFLAGS
FLAGS
SS
ECX
CX
DS
EDX
DX
ES
ESI
SI
FS
EDI
DI
GS
EBP
BP
ESP
SP
132
DCA-FEEC-UNICAMP
133
aplicao, mas oferece ao programador de sistema uma grande flexibilidade no projeto de diferentes
modelos de memria.
Segmentao
A traduo de endereo segmentado ocorre no modo protegido do 80386, esteja ou no a paginao habilitada. A arquitetura de memria segmentada do 80386 utiliza as mesmas construes
que so empregadas no endereamento e proteo da memria virtual do 80286. O 80386 usa os
mesmos descritores, tabelas de descritores, registradores de sistema e mecanismos de proteo, da
mesma forma que o 80286 os utiliza. A caracterstica de 32 bits na segmentao do 80386 resulta
d a redefinio dos campos reservados nos descritores do 80286 para suportar endereamento de 32
bits. Como o 80286 requeria que estes campos fossem 0, todo cdigo de sistema e aplicao que
zerem os campos reservados no descritor, executa no 80386 sem modificao. Neste caso, como o
endereamento de 32 bits ocorre, os 8 bits de mais alta ordem dos endereos fsicos gerados pelo
80386 so sempre 0. Portanto, quando o cdigo do 80386 encontra-se executando, endereos fsicos
maiores que 16 Mb no so gerados pelo 80386 e o sistema, no caso, comporta-se como um 80286
rpido executando em modo protegido.
Como no 80286, um descritor de segmento formado por 8 bytes e contm o endereo de base
do segmento, o tamanho do segmento ou limite, informaes de acesso que descrevem qual o tipo de
segmento e como este pode ser utilizado. A figura 6.7 ilustra o contedo do descritor de segmento
para o 80386.
G D/B
legenda:
G: bit de granularidade
D/B: default/big bit
DPS: disponvel para o sistema
DCA-FEEC-UNICAMP
134
campo de limite de segmento de 24 bits e vrios novos bits de acesso. Um endereo de base de
segmento pode estar em qualquer ponto na faixa do 4 Gb.
O limite de 24 bits especifica o tamanho do segmento dependendo do bit de granularidade. Caso
este bit esteja desativado, o limite definido em unidades de 1 byte at o mximo de 1 Mb. Caso o
bit de granularidade esteja ativado o limite definido em unidades de 4 Kb at o mximo de 4 Gb.
No caso de um sistema 80286 executando no 80386, ele sempre ter este bit desativado de modo que
o limite seja interpretado como 16 bits e tendo a granularidade de 1 byte.
Paginao
Conforme visto no captulo 4, paginao uma tcnica de gerenciamento da memria virtual
utilizando blocos de tamanho fixo (pginas) em oposio aos segmentos de tamanho variado no caso
dos sistemas segmentados. O 80386 utiliza a arquitetura de pginas para fornecer um mecanismo
de alocao de memria fsica em um sistema contendo grandes segmentos. Como o 80386 permite
segmentos que podem ser muito maiores do que 64 Kb, o gerenciamento da memria sem utilizao
de uma tcnica do tipo paginao seria muito difcil, na medida em que o segmento deve residir em
posies contguas da memria. Ainda, a permuta (swapping) de segmentos de tamanho variado para
a memria secundria poderia resultar em um baixo desempenho do sistema. Desta forma, o esquema
de paginao no 80386 permite que os segmentos residam em espaos no contnuos da memria e
permite que a memria virtual seja gerenciada em termos de blocos pequenos e de tamanho fixo. Em
sees anteriores, referiu-se ao endereo de 32 bits resultante da traduo do endereo segmentado,
como endereo fsico. No 80386, entretanto, este endereo chamado de endereo linear. Caso o
80386 no tenha o esquema de paginao habilitado, o endereo linear o mesmo que o endereo
fsico. Entretanto, se o mecanismo estiver habilitado pelo bit de paginao no registrador CR0, ento
o endero linear no mais igual ao endereo fsico. Neste caso, o endereo linear de 32 bits
traduzido pela unidade de paginao do 80386 em um endereo fsico final de 32 bits.
Quando a paginao encontra-se habilitada, o 80386 divide a memria em unidades de 4 Kb
de endereos contguos (pginas). O endereo linear neste caso traduz uma tupla ordenada que
especifica a tabela de pginas e o offset dentro da pgina. A figura 6.8 ilustra o formato do endereo
linear.
A unidade de paginao do 80386 realiza a traduo dinmica do endereo atravs de 2 mapeamentos diretos. A estrutura usada pela unidade de paginao para mapear endereos a tabela de
pginas (ver captulo 4). Esta tabela constitui-se reside numa pgina de 1K entradas de 32 bits denominadas especificao de pgina. Dois nveis de tabelas de pginas so utilizadas para enderear
uma pgina da memria. O primeiro nvel o diretrio de pginas, o qual localizado pelo registrador CR3. Este diretrio enderea at 1 K tabelas de pginas do segundo nvel. Uma tabela de pginas
do segundo nvel enderea at 1 K pginas. Portanto, cada tabela de pgina do segundo nvel pode
mapear 4 Mb (1 Kb * 4 Kb) de memria fsica e um diretrio de pginas pode mapear 1 K * 4 Mb
= 4 Gb de memria fsica. A figura 6.9 ilustra como o 80386 converte um endereo linear em um
endereo fsico.
As entradas das tabelas de pginas possuem o mesmo formato sejam elas do primeiro ou do
segundo nvel. Como cada pgina limitada a 4 Kb, a entrada da tabela de pgina (PTE) utiliza
somente os 20 bits de mais alta ordem para designar uma pgina. Os outros 12 bits so utilizados
para definir os atributos da pgina. A figura 6.10 ilustra o formato de uma entrada na tabela de
DCA-FEEC-UNICAMP
22 21
diretrio
especifica tabela de
pgina no diretrio
de pginas
135
deslocamento
12 11
pgina
0
offset
especifica pgina na
tabela de pginas
DCA-FEEC-UNICAMP
136
4 GB
seletor offset
diretrio de pginas
tabela de pginas
pgina
descritor
....
tab. de pgina
pgina
....
tabela de descritores
0
CR3
memria fsica
registro de base
c/ diretrio de pginas
Figura 6.9: Converso de endereo segmentado em linear e linear em fsico no 80386
em hardware as pginas mais recentemente utilizadas.
6.4.1 Sumrio
O microprocessador Intel 80386 possui um sofisticado esquema de gerenciamento e proteo
de memria quando comparado com seus antecessores. Esta sofisticao permite a construo de
sistemas operacionais modernos (Windows NT, OS/2 de 32 bits, etc) ou a migrao de sistemas que
outrora necessitavam de plataformas de hardware dispendiosas, como o caso do UNIX.
DCA-FEEC-UNICAMP
31
12 11
DS
0
00
00 U/S R/W P
legenda:
P: bit "presente"
R/W: bit escrita/gravao
U/S bit "user/supervisor"
A: bit de acesso
D: bit "dirty"
DS: disponvel para o sistema
obs:
endero da pgina virtual = nmero da pgina virtual
137