Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

1
Sistemas Operacionais
Prof. MSc. Leandro KravczukProf. MSc. Leandro Kravczuk
proflkv@gmail.comproflkv@gmail.com
www.facebook.com/profleandrokvwww.facebook.com/profleandrokv
2
Bibliografia
Básica
Tanenbaum, A. S. Sistemas Operacionais Modernos. Ed. Pearson, 3ª Edição, 
2010.
Machado, F. B., Maia, L. P. Arquitetura de Sistemas Operacionais. LTC Editora, 4ª 
Edição 2007.
Silberschatz, A., Galvin, P. B., Gaine, G. Fundamentos de Sistemas Operacionais. 
LTC, 8ª Edição, 2010. 
Complementar
Deitel, H.M., Deitel, P. J., CHOFFNES, D. R. Sistemas Operacionais. Ed. Pearson, 3ª Edição, 2005.
Flynn, I. M., Mchoes, A. M. Introdução aos Sistemas Operacionais, Cengage Learning, 2002.
Tanenbaum, A. S., Woodhull, A. S. Sistemas Operacionais – Projeto e Implementação. Grupo A Editoras, 3ª 
Edição, 2008.
Silberchatz, A., Galvin, P. B., Gagne, G. Sistemas Operacionais com Java. 7ª Edição Campus, 2008.
Oliveira, R. S, Carissimi, A., Toscani, S. Sistemas Operacionais, Coleção Livros Didáticos Informática 
UFRGS, Vol 11, Grupo A Editoras, 4ª Edição, 2010.
3
Provas S.O.
1ºAV – 01 de Outubro
2ºAV – 03 de Dezembro
Obs: Entrega da parte escrita do P.I. II
4
Projeto Interdisciplinar II - Conteúdo Programático
• Levantamento histórico de dois Sistemas Operacionais;
• Vantagens e desvantagens da utilização dos Sistemas 
Operacionais escolhidos;
• Aplicabilidade dos Sistemas Operacionais escolhidos no meio 
acadêmico, doméstico e profissional;
• Comparativo entre os dois Sistemas Operacionais escolhidos (no 
meio acadêmico, doméstico e profissional);
• Estudo de caso de uma empresa existente, mostrando qual Sistema 
Operacional é atualmente utilizado (clientes e servidores) e qual o 
Sistema Operacional que melhor se adequaria para realidade da 
empresa escolhida.
5
Proj Interdisciplinar II
Quantidade de Alunos:
• Máximo de 10 pessoas por equipe
• Reuniões
Agendar pelo proflkv@gmail.com
Disponibilidade:
Segundas - 18:00 às 18:45 e/ou
Terças - 18:00 às 18:45 e/ou
por email proflkv@gmail.com
6
- Entrega do trabalho [impresso (encadernado) e por email 
(arquivo .doc ou .docx)] completo composto de capa, folha de 
rosto sumário, introdução, metodologia, referencial teórico (em 
média de oito a quinze folhas) e referências; 
- Apresentação do trabalho através de um pôster.
- Apresentação do PowerPoint utilizando o DataShow para toda turma.
- Entrega trabalho impresso: No dia da 2º AV
- Data para Apresentação do Pôster e DataShow: A combinar com o Prof.
7
Introdução
O que compõem um Sistemas Computacional?
Processadores; Memória; Discos; Impressora; Teclado; Monitor, 
Placas de Rede e outros dispositivos de entrada e saida.
Para gerenciar esses recursos existe o sistema operacional, cujo trabalho
é fornecer aos programas do usuário um modelo de computador melhor, 
mais simples e limpo e lidar com o gerenciamento de todos os recursos
mencionados.
8
Windows? Linux? Mac OS X?
O programa que os usuários interagem:
• Shell: interpretador de comandos
• GUI: Interface gráfica com o usuário
Eles não fazem parte do SO, embora o utilize para 
realizar seu trabalho.
Introdução
9
Introdução
A maioria dos computadores tem dois níveis de operação: modo 
núcleo e modo usuário.
O S.O. é a peça mais básica de software e opera em modo núcleo 
(modo supervisor). Nesse modo ele tem acesso completo a todo o 
hardware e pode executar qualquer instrução que a máquina seja 
capaz de executar. 
O resto do software opera em modo usuário, no qual apenas um 
subconjunto de instruções da máquina está disponível. As 
instruções que afetam o controle da máquina ou realizam E/S são 
proibidas para programas de modo usuário. 
10
Onde o SO se encaixa
11
O programa de interface com o usuário, shell ou GUI, é 
o nível mais inferior do software de modo usuário e 
permite que este inicie programas, como o navegador 
Web. Esses programas também usam muito o S.O.
Sistemas Operacionais ≠ Aplicações
SO: Grandes, complexos e têm vida longa. 
Difíceis de escrever; Evoluem com o tempo.
Introdução
12
É um software que executa em modo núcleo, ou 
seja, fornece aos aplicativos um conjunto de 
recursos abstratos claro em vez de recursos 
confusos de hardware e também gerencia esses 
recursos de hardware.
O que é um SO?
13
É uma máquina estendida
– Oculta os detalhes 
complicados que têm quer ser 
executados
– Apresenta ao usuário uma 
máquina virtual, mais fácil de 
usar
Exemplo: =>
O que é um SO?
14
SO transformam hardware feio em abstrações bonitas
15
O que é um SO?
É um gerenciador de recurso
• Cada programa tem um tempo com o recurso
Diferentes programas aguardam sua vez para utilizá-lo;
Ex: Múltiplas saídas são enfileiradas para imprimir em uma única 
impressora. O SO decide qual será a próxima saída a ser impressa.
• Cada programa tem um espaço no recurso
Cada um ocupa uma parte do recurso. 
Ex: A memória principal é dividida entre vários 
programas em execução, assim cada um pode residir 
ao mesmo tempo na memória. É mais eficiente 
mantê-los nela em vez de destinar toda memória a 
um só programa, principalmente se ele precisar de 
apenas uma pequena fração do total.
16
A História dos SOs
• Primeira geração 1945 - 1955
– Válvulas, painéis de programação
• Segunda geração 1955 - 1965
– transistores, sistemas em lote
• Terceira geração 1965 – 1980
– CIs e multiprogramação
• Quarta geração 1980 – presente
– Computadores pessoais
17
Aspectos Históricos dos S.O.’s
1ª Geração (1945-1955): Válvulas e Painéis de Programação
• Máquinas imensas com milhares de válvulas e 
milhões de vezes mais lentas que os mais 
lentos computadores atuais;
• Um mesmo grupo de pessoas projetava, 
construía, programava, operava e realizava a 
manutenção de cada máquina;
• No início da década de 50 a programação em 
painéis deu lugar à programação em cartões.
18
Aspectos Históricos dos S.O.’s
1ª Geração (1945-1955): Válvulas e Painéis de Programação
* Toda programação era feita em código de máquina absoluto e 
muitas vezes conectando plugs em painéis para controlar as 
funções básicas da máquina. 
• Não havia linguagens de programação (nem mesmo a linguagem 
assembly);
• Os S.O.s também não haviam sido inventados. 
• O programador reservava antecipadamente tempo de máquina em 
uma planilha, ia para a sala da máquina, inseria seu painel de 
programação no computador e passava algumas horas torcendo 
para que nenhuma das 20 mil válvulas queimasse durante a 
execução.
19
Aspectos Históricos dos S.O.’s
1ªGeração (1945-1955): Válvulas e Painéis de Programação
20
2ª Geração (1955-1965): Transistores e Sistemas em Lote (batch)
– Computadores de grande porte (mainframes), 
fabricados e comercializados com a 
expectativa de maior tempo de 
funcionamento.
- Separação entre projetistas, fabricantes, 
programadores e técnicos da manutenção;
– Sistemas operacionais típicos desta época: 
FMS (Fortran Monitor System) e o IBSYS, do 
IBM-7094.
Aspectos Históricos dos S.O.’s
21
2ª Geração (1955-1965): Transistores e Sistemas em Lote (batch)
– Ficavam isolados em salas especiais com ar-
condicionado, operadas por equipes 
profissionais;
– Somente grandes corporações, governo ou 
universidades podiam pagar vários milhões 
de dólares por estes computadores;
Aspectos Históricos dos S.O.’s
22
2ª Geração (1955-1965): Transistores e Sistemas em Lote (batch)
– Para uma tarefa se executada, o programador 
primeiro escrevia o programa em um papel e depois 
perfurava em cartões. Então levava o maço de 
cartões para a sala de entradas e entregava-o a um 
dos operadores. 
– Ao fim da execução, o operador ia até a impressora, 
retirava sua saídae levava para a sala de saídas, de 
modo que o programador pudesse retirá-la mais 
tarde.
Aspectos Históricos dos S.O.’s
23
2ª Geração (1955-1965): Transistores e Sistemas em Lote (batch)
• Sistema em Lote (batch): registro de vários jobs 
em fita magnética.
Aspectos Históricos dos S.O.’s
24
2ª Geração (1955-1965): Transistores e Sistemas em Lote (batch)
IBM1401
Aspectos Históricos dos S.O.’s
25
2ª Geração (1955-1965): Transistores e Sistemas em Lote (batch)
IBM7094
Aspectos Históricos dos S.O.’s
26
Aspectos Históricos dos S.O.’s
3ªGeração (1965-1980): Circuitos Integrados e Multiprogramação
– System/360 da IBM. Série de máquinas compatíveis (teoricamente), 
com a mesma arquitetura e conjunto de instruções, voltada tanto para 
a computação numérica quanto para a comercial
27
Aspectos Históricos dos S.O.’s
3ªGeração (1965-1980): CI’s e Multiprogramação
• Sistema Operacional: OS/360. Requisitos de Software: ser 
executado em sistemas pequenos e em sistemas muito grandes; 
ser eficiente em máquinas com poucos periféricos e também em 
computadores com muitos periféricos; ser eficaz em todos os 
diferentes usos.
• OS/360, “batendo”: milhões de linhas escritas em linguagem de 
montagem por milhares de programadores com milhares de erros e 
muitas correções (versões).
• OS/360, “assoprando”: atendia razoavelmente bem à maioria dos 
clientes; popularizava técnicas novas como a multiprogramação e 
spooling (simultaneous peripheral operation online).
28
Aspectos Históricos dos S.O.’s
3ªGeração (1965-1980): CI’s e Multiprogramação
• Multiprogramação: divisão da memória em vários jobs, 
com um job para cada partição. Enquanto um job 
esperava que a operação de E/S se completasse, um 
outro poderia usar a CPU.
• Spooling: job transferido do cartão para discos 
magnéticos, e, após a execução, liberados da partição 
destes discos, possibilitando a carga de um novo job. Os 
1401 já não eram mais necessários...
29
Aspectos Históricos dos S.O.’s
3ªGeração (1965-1980): CI’s e Multiprogramação
• Timesharing: variante da multiprogramação na qual 
cada usuário se conectava por meio de um terminal on-
line.
– CTSS (compatible time sharing system): 1º sistema 
timesharing, desenvolvido no MIT.
• MULTICS(Serviço de computação e de informação 
multiplexada): MIT, Bell Labs e General Electric e o 
fornecimento de “energia computacional”.
30
Aspectos Históricos dos S.O.’s
3ª Geração (1965-1980): CI’s e Multiprogramação
– MULTICS: 
• Projetado para suportar centenas de usuários em uma única 
máquina; 
• Bells Labs e General Eletric deixaram o projeto;
• Usuários extremamente leais;
• Várias idéias influenciaram positivamente os S.O.’s 
subseqüentes..
31
Aspectos Históricos dos S.O.’s
3ª Geração (1965-1980): CI’s e Multiprogramação
– Ken Thompson, do Bell Labs, escreveu uma versão 
monousuário do MULTICS denominada... UNIX.
– Após inúmeras versões incompatíveis do UNIX, foi 
desenvolvido o padrão POSIX (Portable Operating 
System-IX): interface mínima de chamadas ao 
sistema.
– Tanenbaum e o seu MINIX, em 1987-> Linus 
Torvalds escreve o LINUX.
32
Aspectos Históricos dos S.O.’s
4ª Geração (1980-Presente): Computadores Pessoais
– Em 1974, a Intel lançou a 1ª CPU de 8 bits, a 8080.
– Gary Kildall, consultor Intel, escreve um S.O. para a 
8080: CP/M (programa de controle para 
microcomputadores).
– A Intel abre mão dos direitos do CP/M para a firma de 
Kildall, a Digital Research.
– Em 1977, a Digital Research lança um remodelado 
CP/M e domina a microcomputação por cinco anos.
33
Aspectos Históricos dos S.O.’s
4ª Geração (1980 - Presente): Computadores Pessoais
CP/M
34
Aspectos Históricos dos S.O.’s
4ª Geração ( 1980 - Presente): Computadores Pessoais
– Início dos anos 80: Projeto do IBM PC. Bill Gates é 
procurado pela IBM para licenciar o BASIC e... 
Requisitar um S.O..
– Bill Gates recomenda o S.O. da Digital Research de 
Gary Kildall, que... Se recusa a se reunir com a IBM! 
IBM procura Mr. Gates novamente.
– Gates adquire o DOS (disk operating system) da 
Seattle Computer Products. Na verdade ele compra a 
Seatlle, empresa de Tim Paterson por 50 mil dólares.
35
Aspectos Históricos dos S.O.’s
4ª Geração ( 1980 – Presente ): Computadores Pessoais
– Atendendo a um pedido da IBM, Gates modifica o 
DOS. Dono da Microsoft, Gates contrata Tim 
Paterson para modificar o projeto original do DOS. 
Lança-se então o MS-DOS (Microsoft...Disk 
Operating System).
– MS-DOS lançado com o 80286, 80386 e 80486. O 
MS-DOS foi se aperfeiçoando, com aspectos cada 
vez mais avançados, muitos deles derivados do 
UNIX.
36
Aspectos Históricos dos S.O.’s
4ª Geração (1980-Presente) : Computadores Pessoais
– MS-DOS
37
4ª Geração (1980-Presente): Computadores Pessoais
– Doug Engelbart no Stanford Research Institute nos 
anos 60 criou a GUI (graphical user interface), que 
fora incorporada às máquinas do Xerox PARC.
– Steve Jobs incorporou a GUI ao Apple – Projeto Lisa: 
fracasso comercial!
– Steve Jobs e a 2ª tentativa com a GUI: Apple 
Macintosh...
38
Aspectos Históricos dos S.O.’s
MAC OS
39
Aspectos Históricos dos S.O.’s
4ª Geração (1980 - Presente): Computadores Pessoais
– Bill Gates lança o Windows, baseado na interface 
GUI e influenciado pelo sucesso do Macintosh. De 
1985 a 1995, o Windows foi apenas um interpretador 
de comandos.
– A seguir, Windows 95, com vários aspectos de um 
S.O., mas com boot e alguns programas do MS-DOS.
– Windows 98, versão levemente modificada do 95.
– Windows NT (new tecnology): totalmente 32 bits.
40
Aspectos Históricos dos S.O.’s
41
Aspectos Históricos dos S.O.’s
4ª Geração (1980-Presente): Computadores Pessoais
– Versão 5 do Windows NT renomeada para Windows 
2000. A expectativa de suceder tanto o Windows NT 
4.0 quanto o Windows 98 não obteve êxito.
– Lançou-se mais uma versão do Windows 98, 
denominada Windows Me (Millenium Edition).
– Windows XP, Windows Vista e Windows 7
– Unix e as máquinas RISC. MIT escreveu um sistema 
de janelas para UNIX denominada X Windows
42
Aspectos Históricos dos S.O.’s
43
Aspectos Históricos dos S.O.’s
44
4ª Geração ( 1980 - Presente): Computadores Pessoais
– Meados dos Anos 80: Sistemas Operacionais de 
Rede. Usuários podem conectar-se a máquinas 
remotas. Cada máquina executa seu próprio S.O. 
(local) e tem seu próprio usuário.
– Sistema Operacional Distribuído: composto de 
múltiplos processadores. Os usuários não precisam 
saber onde estão seus programas e arquivos. Tudo é 
tratado pelo S.O..
Aspectos Históricos dos S.O.’s
45
Hardware de Computadores
Um S.O. está intimamente ligado ao hardware do computador no qual ele é 
executado. Ele estende o conjunto de instruções do computador e gerencia 
seus recursos.
46
Processadores
O ‘cérebro’ do computador é a CPU. Ela busca 
instruções na memória e as executa. O ciclo básico de 
execução de qualquer CPU é: buscar a primeira 
instrução da memória, decodificá-la para determinar 
seus operandos e qual operação executar com esses, 
executá-la e então buscar, decodificar e executar as 
instruções subsequentes. O ciclo é repetido até que o 
programa pare. É dessa maneira que os programas são 
executados.
47
Conceitos em S.O.
Processos
– Essencialmente um Processo é um programa em execução;
– Associado a cada processo está o seu espaço de endereçamento , 
isto é, uma lista de locais da memória em que o processo pode ler e 
gravar. 
– Processo é um contêiner que armazena todas as informações 
necessárias para executar um programa.
Ex: Edição de vídeo, navegador da web e o receptor de email.
- Processos possuem ponteiros que sãoresponsáveis por mostrar a 
posição atual (o número do próximo byte ou registro a ser lido)
- Tabela de Processos: Tabela do S.O. onde todas informações 
relativas a um processo são armazenadas.
48
Conceitos em S.O.
– As principais chamadas de sistema de gerenciamento 
de processos são aquelas que lidam com a criação e o 
término de processos (ex: interpretador de comandos 
ou shell)
– Um processo pode criar outros processos (processos 
filhos), determinando uma estrutura de processos.
49
Conceitos em S.O.
– Processos relacionados que estiverem cooperando 
em alguma tarefa, precisam se comunicar e 
sintonizar suas ações. É a chamada comunicação 
entre processos.
Ex: processos remoto em redes
– A cada pessoa autorizada a usar um sistema é 
atribuida uma UID (identificação do usuário). A UID 
com poderes especiais e que pode violar muitas das 
regras de proteção é chamada de superusuário (em 
UNIX)
50
Conceitos em S.O.
Deadlock
– Ao interagirem, dois ou mais processos podem , 
algumas vezes, entrar em uma situação da qual eles 
não conseguem sair. É o chamado Deadlock.
– Imagine um computador, uma unidade de fita e um 
gravador de CD. A requisita a fita e é atendido. B 
requisita o gravador e é atendido. A requisita o 
gravador e espera. B requisita a fita e espera. Ambos 
esperam... deadlock!
51
Conceitos em S.O.
52
Conceitos em S.O.
Gerenciamento de Memória
– No uso compartilhado da memória, qualquer 
programa residente deve manter-se livre de 
interferências dos outros programas. O 
gerenciamento de memória é responsável por esse 
mecanismo de proteção.
– O gerenciamento de memória é responsável também 
pelo controle do espaço de endereçamento dos 
processos.
• Memória Virtual
53
Conceitos em S.O.
Arquivos
– Uma característica importante de um S.O. é a 
capacidade de esconder peculiaridades de discos e 
outros elementos de E/S e apresentar um modelo 
abstrato de arquivos independentes de dispositivo.
– Diretório: forma de agrupamento de arquivos.
– As entradas de diretório podem ser arquivos ou 
outros diretórios. Esta possibilidade determina uma 
hierarquia - o sistema de arquivo.
54
Conceitos em S.O.
Sistema de Arquivos
55
Conceitos em S.O.
– Cada arquivo dentro da hierarquia de 
diretórios pode ser especificado fornecendo-
se o caminho a partir do topo da hierarquia 
de diretórios, o diretório-raiz.
• Ex: CS101, slide anterior
• Antes que possa ser trabalhado, um arquivo 
precisa ser aberto e, nesse momento, as 
permissões são verificadas.
56
Conceitos em S.O.
– Montagem do sistema de 
arquivos.
Ex: Cd-ROM, Pen Drive
57
Conceitos em S.O.
Pipe: é um tipo de pseudoarquivo que pode ser 
usado para conectar dois processos. 
58
Conceitos em S.O.
Entrada e Saída (E/S)
– O S.O. deve gerenciar os dispositivos de E/S. 
– Alguns programas se aplicam a qualquer recurso de E/S; 
outros, como os drives, são específicos a cada dispositivo.
• Ex: Teclado, Monitores e impressoras.
59
• Segurança
– É tarefa do S.O. gerenciar o sistema de 
segurança para que os arquivos, p.e., sejam 
acessíveis apenas por usuários autorizados.
• Ex: Proprietário, membros do grupo do proprietário 
e qualquer usuário.
Os 3 bits são conhecidos como bits rwx
Conceitos em S.O.
60
Conceitos em S.O.
• Shell: interpretador de comando do UNIX. 
– Não é parte do Sistema Operacional, porém é um software 
importante que trabalha junto ao S.O. 
– É a interface principal entre o usuário à frente de seu terminal e 
o S.O. (a menos que o usuário esteja usando uma GUI). A 
Interface GUI é um programa sendo executado na camada 
superior do S.O., como um shell. 
Exemplos: COMMAND.COM, EXPLORER.EXE, 
BShell, CShell.
61
Conceitos em S.O.
– Exemplos de comandos interpretados pelo 
Command.com:
• dir; cd; md;
– Exemplos de comandos interpretados pelo 
Shell do Linux:
• ls; cd; mkdir; rm; find
62
Conceitos em S.O.
• Os Sistemas Operacionais têm duas 
funções principais: 
– Fornecer abstrações aos programas de 
usuários;
– Administrar os recursos do computador 
(transparente para os usuários e feita 
automaticamente).
63
Conceitos em S.O.
Chamada de Sistema (System Call): interface entre o sistema 
operacional e os programas de usuário.
64
Conceitos em S.O.
System Call
65
Modo Kernel e de Usuário do Processador:
para que os programas de usuário não tenham acesso a 
determinadas instruções do processador, foram criados 
modos de acesso a estas instruções. O Modo Kernel ou 
Modo Protegido é restrito ao Sistema Operacional.
66
Estrutura UNIX
– Kernel: é o núcleo do sistema operacional, controla o 
hardware traduzindo comandos UNIX em instruções 
de hardware. O usuário não trabalha diretamente 
com o kernel.
– Sistema de arquivos: é o modo do UNIX armazenar 
informações de qualquer tipo, como por exemplo, 
gráficos, textos, etc.
– Shell: é um programa que atua como interface entre 
o kernel e o usuário.
– Aplicativos: são programas que podem ser 
invocados pelo shell para realizar diversas tarefas.
67
Aspectos Sobre a Estrutura dos 
Sistemas Operacionais
• As rotinas do S.O. oferecem serviços aos 
usuários e às suas aplicações. O conjunto 
destas rotinas é chamado de núcleo, ou 
kernel.
• Os usuários podem interagir com o 
núcleo do S.O. por meio de: aplicações, 
utilitários ou linguagem de comando.
68
Estrutura do S.O.
• Funções essenciais do núcleo do S.O.
– Tratamento de interrupções e exceções
– Criação e eliminação de processos.
– Sincronização e comunicação entre processos.
– Escalonamento e controle dos processos.
– Gerência de memória
– Gerência de sistemas de arquivos
– Gerência de dispositivos de E/S
– Suporte a redes locais e distribuídas
– Contabilização do uso do sistema, além de auditoria 
e segurança
69
Estrutura do S.O.
• Estrutura de um Sistema Operacional
• É a maneira como o código do sistema é 
organizado e o inter-relacionamento entre seus 
diversos componentes. Esta estrutura pode variar 
conforme a concepção do projeto.
• Abordaremos: Sistemas Monolíticos, Sistemas 
de Camadas, Micronúcleo, sistemas cliente-
servidor, Máquinas Virtuais e exonúcleo.
70
Estrutura do S.O.
Sistemas Monolíticos:
• O S.O. inteiro é executado como um único programa no modo 
núcleo. O S.O. é escrito como uma coleção de rotinas, ligadas 
a um único grande programa binário executável. Exs: linux, 
MS-DOS.
71
Estrutura do S.O.
Sistemas Monolíticos:
Sua estrutura básica para o S.O. é a seguinte:
1) Um programa principal invoca a rotina do serviço requisitado;
2) Um conjunto de rotinas de serviço executam as chamadas de sistema;
3) Um conjunto de rotinas utilitárias auxiliam as rotinas de serviço.
Segundo esse modelo, para cada chamada de sistema há uma rotina de serviço 
que se encarrega dela. As rotinas utilitárias realizam tarefas necessárias para as 
várias rotinas de serviço, como buscar dados dos programas dos usuários. 
72
Estrutura do S.O.
Sistemas de Camadas: 
Sistema é dividido em níveis sobrepostos. Cada nível oferece 
funcionalidades que podem ser acessadas somente pelas camadas 
superiores. Exs: MULTICS, THE (Technishe Hogeschool Eindhoven), 
WINDOWS, maioria das versões UNIX.
arquitetura do OpenVMS
73
Estrutura do S.O.
Arquitetura em Camadas:
– Tem como vantagem isolar as funções do sistema operacional, 
facilitando a manutenção e a depuração, além de criar uma 
hierarquia de níveis de modos de acesso, protegendo as 
camadas mais internas.
– Uma desvantagem deste modelo é o desempenho. Cada nova 
camada implica em novo modo de acesso.
– A maioria dos atuais sistemas comerciais utiliza duas camadas,onde existem os modos de acesso usuário (não-privilegiado) e 
kernel (privilegiado).
74
• Tradicionalmente, todas camadas entram no núcleo, 
mas isso não é necessário. 
• Erros no núcleo podem derrubar o sistema 
instantaneamente. Entretanto, processo de usuário 
podem ser configurados com menos potência de modo 
que um erro não seja fatal. 
• A densidade de erro por mil linha de código: dez erros. 
Nem todos fatais...
Por conta disso, os fabricantes inserem botões de 
reinicialização nos computadores. 
75
Estrutura do S.O.
Micronúcleo
Idéia: alcançar alta confiabilidade por meio da divisão do 
S.O. em módulos pequenos, bem definidos, e apenas 
um desses módulos – o micronúcleo – é executado no 
modo núcleo e o restante é executado como processos 
de usuário comum. 
* 10 erros por 1000 linhas de código. Em um S.O. monolítico de 5 milhões de linhas 
de código contenha 50 mil erros no núcleo (nem todos fatais).
* botão de reset
Ex: Erro no áudio em um sistema micronúcleo x Erro no áudio no sistema monolítico.
Próximo Slide
76
Estrutura do S.O.
Micronúcleo
Ex: Erro no áudio em um sistema micronúcleo x Erro no áudio no sistema monolítico. 
Quando há a execução de cada driver de dispositivo e de cada sistema de arquivos 
como um processo de usuário separado, um erro em um deles pode quebrar aquele 
componente, mas não pode quebrar o sistema inteiro. Desse modo, um erro na 
unidade de áudio fará com que o som seja adulterado ou interrompido, mas não 
travará o computador. 
Por outro lado, em um sistema monolítico, com todas unidades no núcleo, uma 
unidade de áudio defeituosa pode facilmente dar como referência um endereço de 
memória inválido e para o sistema instantaneamente. 
Muitos foram implementados e utilizados, e são especialmente comuns em 
aplicações de tempo real, industriais, de aviônica e militares, que são cruciais e têm 
requisitos de confiabilidade muito altos. 
77
Estrutura do S.O.
Modelo cliente-servidor:
Idéia: Os servidores prestam algum serviço, e os clientes usam esses 
serviços. Frequentemente a camada inferior é micronúcleo, mas ele 
não é obrigatório. 
A comunicação entre clientes e servidores é feita por meio de troca de 
mensagens. Para obter um serviço, um processo cliente constrói uma 
mensagem dizendo o que deseja e a envia ao serviço apropriado. Este 
faz o trabalho e envia a resposta de volta.
Ex: Páginas na Web
78
Estrutura do S.O.
• Máquina Virtual:
– Cria uma camada intermediária entre o hardware e o 
sistema operacional chamada Monitor de Máquina 
Virtual. Esta camada oferece, para cada máquina 
virtual, uma cópia virtual do hardware. 
• Exemplos: VM/370, JVM.
79
• Como cada máquina virtual é uma cópia exata do hardware, cada uma 
delas pode executar qualquer S.O.. 
• Ex: Servidores de correio, web, ftp 
- Computadores diferentes x virtualizado. 
- Com a Virtualização, executa-se todos eles na mesma máquina sem que 
uma falha em um servidor afete o resto.
• Ex: Hospedagem na Web: 
- Hospedagem compartilhada: o cliente recebe uma conta de acesso a um 
servidor da web, mas não é permitido controlar o software do servidor
- Hospedagem dedicada: o cliente terá uma maquina própria (pouco 
econômico)
Quando uma cia aluga máquinas virtuais, uma única máquina física pode 
executar muitas máquinas virtuais e cada uma delas parece ser uma 
maquina completa.
• Ex: Usuários finais que querem executar dois ou mais S.O.s ao mesmo 
tempo. 
80
Estrutura do S.O.
81
Estrutura do S.O.
Monitor de Maquina Virtual
- Hipervisor tipo 1 x Hipervisor tipo 2
Máquina Virtual Java 
82
Estrutura do S.O.
Exonúcleo
A máquina real é dividida, ou seja, cada usuário 
recebe um subconjunto de recursos. 
Na camada mais inferior, executando em modo 
núcleo, há um programa denominado 
exonúcleo. 
Sua tarefa é alocar recursos às máquinas 
virtuais e então verificar as tentativas de usá-los 
para assegurar-se de que nenhuma máquina 
esteja tentando usar recursos de outra.
83
Estrutura do S.O.
Exonúcleo
• Vantagem: poupa uma camada de 
mapeamento.
– Nos outros projetos, cada máquina virtual pensa que 
tem seu próprio HD, com blocos indo de 0 a um valor 
máximo, de modo que o monitor de MV deve manter 
tabelas para remapear os endereços de disco( e 
todos recursos).
– Com o exonúcleo, ele precisa manter somente o 
registro de para qual máquina virtual foi atribuído qual 
recurso. 
84
Resumo
• Sistemas operacionais podem ser 
analisados de dois pontos de vista:
– Gerenciadores de recursos 
• O trabalho do S.O. é gerenciar as diferentes 
partes do sistema.
– Máquinas estendidas
• Oferece aos usuários abstrações que sejam mais 
convenientes ao uso do que a máquina real 
(incluem processos, espaços de endereçamento e 
arquivos)
85
Resumo
• Os S.O.s tem longa história. 
• Os computadores são constituídos de processadores, 
memórias e dispositivos de E/S.
• Os conceitos básicos sobre os quais todos S.O.s são 
construídos são: processos, gerenciamento de memória, 
gerenciamento de E/S, sistema de arquivos e 
segurança.
• Os S.O.s podem ser estruturados: Como Sistemas 
monolíticos, como hierarquia de camadas, como 
micronúcleo, como um sistema de máquina virtual, como 
um exonúcleo ou por meio do modelo cliente-servidor
86
Processos
• Processo: uma abstração de um programa em 
execução;
ex: múltiplas solicitações em um servidor web
chegada de emails, atualização de antivírus, 
imprimindo arquivos, gravando dvds e navegando na web
• Processo é um programa em execução, e seu conceito 
pode ser definido como o conjunto necessário de 
informações para a implementação da concorrência de 
programas. Estas informações estão reunidas nos 
contextos de software e de hardware e no espaço de 
endereçamento.
• Cada processo tem sua própria CPU virtual.
87
A parte de imagem com identificação de relação rId2 não foi encontrada no arquivo.
88
Processos
• Cada cpu só pode executar um processo por vez;
• A diferença entre um processo e o programa é sutil, mas 
crucial.
– Ex: Analogia Cientista confeiteiro (receita =programa, cientista = 
processador e ingredientes = dados de entrada)
• Processo constitui uma atividade. Ele possui programa, 
entrada, saída e um estado. Um único processador pode 
ser compartilhado entre vários processos, com algum 
algoritmo de escalonamento usado para determinar quando 
para o trabalho sobre um processo e servir outro
89
Processos
• Um programa executado duas vezes conta como dois 
processos. 
• S.O.s precisam de mecanismos para criar processos. 
Há quatro eventos principais que fazem com que 
processos sejam criados:
– Início do sistema (processos em primeiro plano e segundo 
plano);
– Execução de uma chamada de sistema de criação de processo 
por um processo em execução;
– Uma requisição do usuário para criar um novo processo;
– Início de uma tarefa em lote (batch job)
Daemons: Processos que ficam em background com a finalidade 
de lidar com alguma atividade. 
Como vê-los? ps (UNIX) ou gerenciador de tarefas (win)
90
Processos
– Um processo sem execução pode fazer chamadas de sistema (system 
calls) para criar um ou mais novos processos para ajudá-lo em seu 
trabalho. 
– Usuários podem iniciar um programa digitando um comando ou clicando 
em um ícone. Cada ação inicia um novo processo e executa nele o 
programa selecionado. 
» Janela Programas Windows
– Um novo processo (processo filho) é criado por um processo existente 
(processo pai) executando uma chamada de sistema para a criação de 
processo. Esse processo (pai) pode ser um processo de usuário que 
está executando, um processo de sistema invocado a partir do 
teclado/mouse ou um processo gerenciador de lotes.
91Processos
• Término de um processo:
– Saída normal (voluntária);
• Exit (unix) / ExitProcess (Windows). Fechar qualquer 
programa.
– Saída por erro (voluntária);
• Cc foo.c / erro ao fornecer parâmetros errados
– Erro Fatal (involuntário);
• Execução de uma instrução ilegal
– Cancelamento por outro processo (involuntário).
• Um processo executa uma chamada de sistema dizendo ao 
S.O. para cancelar algum outro processo (Unix Kill/ Windows 
TerminateProcess).
92
Processos
Estados de Processos
93
Processos
– Processos Foregroun de Background: Foreground: 
permite comunicação direta do usuário com o processo 
durante a sua execução.
– Background: não existe interatividade com usuário.
94
Processos
Processo PIPE
95
Thread
Thread é uma forma de um processo dividir a si mesmo em duas ou 
mais tarefas que podem ser executadas concorrentemente. 
Em hardwares equipados com uma única CPU, cada thread é 
processada de forma aparentemente simultânea, pois a mudança 
entre uma thread e outra é feita de forma tão rápida que para o 
utilizador isso está acontecendo paralelamente. Em hardwares com 
múltiplos CPUs ou multi-cores, as threads são realizadas realmente 
de forma simultânea;
96
Threads
Um thread é um fluxo único de controle sequencial dentro de um programa. 
Principais razões para existência dos threads:
• Tornar o modelo de programação mais simples. As aplicações são 
decompostas em múltiplos threads sequenciais que executam em quase 
paralelo. Isso deve-se ao fato de que em muitas aplicações ocorrem 
múltiplas atividades ao mesmo tempo.
• São mais fáceis (mais rápidos) de criar e destruir que os processos, 
pois não têm nenhum recurso associados a eles. 
• Ganho de desempenho. O uso de threads não resulta em ganho de 
desempenho quando todos eles são CPU-bound (muito processamento 
com pouca E/S). No entanto, quando há grande quantidade de 
computação e de E/S, os threads permitem que essas atividades se 
sobreponham e acelerem a aplicação.
97
Threads
Ex: Processador de textos. 
1º Usuário escrevendo um livro. Arquivo único/Divide em diversos arquivos
2º Altera frase na primeira folha, doc de 1000 páginas.
3º Figura abaixo.
98
Modelo de Thread Clássico
• Um modo de ver um processo é encará-lo como um meio de 
agrupar recursos relacionados. Um processo apresenta um espaço 
de endereçamento que contém o código e os dados do programa. 
• Outro conceito que um processo apresenta é o thread. Este tem um 
contador de programa que mantém o controle de qual instrução ele 
deve executar em seguida. Ele tem registradores, que contêm suas 
variáveis de trabalho atuais. Apresenta uma pilha que traz a história 
da execução.
• Apesar de um thread ter de executar um processo, ambos (o thread 
e seu processo) são conceitos diferentes. Processos são usados 
para agrupar recursos; threads são as entidas escalonadas para a 
execução sobre a CPU.
99
O que os threads acrescentam ao modelo de processo é permitir 
que múltiplas execuções ocorram no mesmo ambiente do processo, 
com um grande grau de independência uma da outra. 
Ter múltiplos threads executando em paralelo é análogo a múltiplos 
processos executando em paralelo em um único computador. No 
primeiro caso, os threads compartilham um mesmo espaço de 
endereçamento e outros recursos. No último, os processos 
compartilham um espaço físico de memória, discos, impressoras e 
outros recursos. 
Multithread é o termo usado para descrever a situação em que se 
permite a existência de múltiplos threads no mesmo processo.
Modelo de Thread Clássico
100
Modelo de Thread Clássico
101
Modelo de Thread Clássico
Threads distintos não são tão independentes quanto 
processos distintos.
Todos os threads têm exatamente o mesmo espaço de 
endereçamento, o que significa que eles também 
compartilham as mesmas variáveis globais. 
Cada thread pode ter acesso a qualquer endereço do 
processo. 
102
Escalonamento
Quando um computador é multiprogramado, ele muitas vezes 
tem múltiplos processos ou threads que competem pela CPU 
ao mesmo tempo. Essa situação ocorre sempre que dois 
processos estão simultaneamente no estado pronto. Se 
somente uma CPU estiver disponível, deverá ser feita uma 
escolha de qual processo executará em seguida. A parte do 
SO que faz a escolha é chamada de Escalonador, e o 
algoritmo que ele usa é o algoritmo de escalonamento. 
Escalonamento: seleção de um processo que deverá 
ser executado;
103
Introdução ao Escalonamento
Um bom escalonador pode fazer uma grande diferença no 
desempenho observado e na satisfação do usuário.
Computadores pessoais: geralmente existe apenas um processo 
ativo. É improvável que um usuário esteja, simultaneamente, 
trabalhando com um doc no processador de textos e compilando 
um programa em segundo plano. 
Hoje, a maioria dos programas para PC é limitada pela velocidade 
com que o usuário pode entrar dados (digitando ou clicando), e não 
pela taxa na qual a CPU é capaz de processá-los. 
Ex: Compiladores nos PCs atuais x exibir Vídeo em HD
104
Introdução ao Escalonamento
A situação muda quando falamos de Servidores e estações de 
trabalho de alto desempenho em rede. Nesse caso é comum haver 
múltiplos processos competindo pela CPU e o escalonamento 
torna-se importante novamente.
Ex: CPU precisa decidir entre executar um processo que reúne 
estatísticas diárias e um que atende às solicitações dos usuários. 
Além de escolher o processo certo para executar, o escalonador 
deve se preocupar em fazer o uso eficiente da CPU, pois chavear 
processos é muito custoso. 
105
Introdução ao Escalonamento
Como ele ocorre?
Primeiramente, deve-se ocorrer um chaveamento do modo 
de usuário para o modo núcleo. Depois, o estado atual do 
processo deve ser salvo. Em muitos sistemas, o mapa de 
memória deve ser salvo. Em seguida, um novo processo 
precisa ser selecionado pela execução do algoritmo de 
escalonamento. Depois, a MMU (unidade de gerenciamento 
de memória) tem de ser recarregada com o mapa de 
memória do novo processo. Por fim, o novo processo precisa 
ser iniciado. 
106
Comportamento do Processo
Quase todos processos alternam surtos de computação com 
requisições de E/S (de disco). 
Em geral, a CPU executa e então é feita uma chamada de sistema 
para ler de um arquivo ou escrever nele. Quando a chamada de 
sistema termina, a CPU computa novamente até que ela requisite 
ou tenha de escrever mais dado.
107
Comportamento do Processo
Alguns processos gastam maior parte do tempo computando. Outros passam 
maior parte do tempo esperando E/S.
Limitados pela CPU: apresentam longos surtos de uso da CPU e 
esporádicas esperas por E/S
Limitados pela E/S: têm pequenos surtos de uso da CPU e esperas 
frequentes por E/S
À medida que as CPUs se tornam mais rápidas, os processos tendem a ficar 
mais limitados por E/S.
108
Algoritmo de Escalonamento
Algoritmo de escalonamento não preemptivo escolhe um 
processo para executar e o deixa executar até que seja 
bloqueado ou até que ele voluntariamente libere a CPU.
O Algoritmo de escalonamento preemptivo escolhe um 
processo e o deixa em execução por um tempo máximo 
fixado. Se ainda estiver executando ao final desse intervalo 
de tempo, o processo será suspenso e o escalonador 
escolherá outro processo para executar. 
109
Algoritmos de Escalonamento
Para ambientes diferentes, são necessários diferentes algoritmos de 
escalonamento. Isso ocorre porque diferentes áreas de aplicação têm 
objetivos diferentes. 
110
Objetivos do Algoritmo de Escalonamento
Para projetar um algoritmo de escalonamento, é necessário ter alguma idéia 
do que um bom algoritmo deve fazer. Alguns objetivos dependem do 
ambiente (lote, interativoou tempo real), mas há também aqueles que são 
desejáveis para todos os casos...
Em todos sistemas: 
• Justiça: Processos semelhantes devem ter serviços semelhantes. Não é 
justo dar mais tempo de CPU a um processo do que a outro equivalente. 
Lembre-se que categorias diferentes de processos podem ser tratadas de 
modo diverso. 
• Políticas do sistema: Verificar sempre se a política estabelecida é 
cumprida.
• Equilíbrio: Manter, quando possível, todas as partes do sistema ocupadas. 
Se a CPU e os dispositivos de E/S puderem ser mantidos em execução o 
tempo todo, mais trabalho por segundo será feito do que se algum dos 
componentes estiver ocioso.
111
Nos sistemas em lote:
Os sistemas em lote são utilizados pelas empresas para folhas de 
pagamento, estoque, contas a receber, contas a pagar, cálculo de 
juros (em bancos), processamento de pedidos de indenização (em 
companhias de seguros) e outras tarefas periódicas. 
Nos sistemas em lote não há, em seus terminais, usuários 
esperando impacientemente por uma resposta rápida. 
Consequentemente, os algoritmos não preemptivos ou preemptivos 
com longo intervalo de tempo para cada processo são aceitáveis. 
Essa tática reduz os chaveamentos entre processos e assim 
melhora o desempenho. 
Categorias de algoritmos de Escalonamento
112
Objetivos do Algoritmo de Escalonamento
Nos sistemas em lote:
• Vazão: é o número de tarefas por hora que o sistema 
termina.
• Tempo de retorno: é estatisticamente o tempo médio do 
momento em que uma tarefa em lote é submetido até o 
momento em que ele é terminado. Ele indica quanto 
tempo, em média, o usuário tem de esperar pelo fim de 
um trabalho. Quanto menor, Melhor.
• Utilização da CPU: Procurar manter a CPU ocupada o 
máximo de tempo possível. 
113
Sistemas Interativos
Em um ambiente com usuários interativos, a preempção é essencial 
para evitar que um processo se aposse da CPU e negue serviço 
aos outros. 
Mesmo que nenhum processo execute intencionalmente para 
sempre, uma falha em um programa pode levar um processo a 
impedir indefinidamente que todos os outros executem. A 
preempção é necessária para impedir esse comportamento. 
Os servidores também caem nessa categoria, visto que 
normalmente servem a usuários (remotos) múltiplos, todos muito 
apressados.
Categorias de algoritmos de Escalonamento
114
Sistemas Interativos:
• Tempo de resposta: É o tempo entre a emissão de um 
comando e a obtenção do resultado. Deve ser o menor 
possível.
• Proporcionalidade: satisfazer as expectativas dos 
usuários. Quando uma requisição complexa demora, os 
usuários aceitam isso, mas, quando a demora ocorre 
com uma requisição simples, os usuários ficam irritados. 
Objetivos do Algoritmo de Escalonamento
115
Categorias de algoritmos de Escalonamento
Sistemas de Tempo Real
Em sistemas com restrições de tempo real, a preempção é, 
estranhamente, algumas vezes desnecessária, pois os processos 
sabem que não podem executar por longos períodos e, em geral, 
fazem seus trabalhos e bloqueiam rapidamente. 
A diferença com relação aos sistemas interativos é que os sistemas 
de tempo real executam apenas programas que visam ao progresso 
da aplicação. Já os sistemas interativos são de propósito geral e 
podem executar programas arbitrários não cooperativos ou até mal-
intencionados. 
116
Objetivos do Algoritmo de Escalonamento
Sistemas de Tempo Real:
Cumprimento dos prazos: evitar a perda de dados
Previsibilidade: evitar a degradação da qualidade em 
sistemas multimídia.
117
Escalonamento em Sistemas de Lote
Primeiro a chegar, primeiro a ser servido (First come, first served – FCFS)
Algoritmo de escalonamento não preemptivo;
Com esse algoritmo, a CPU é atribuída aos processos na ordem em 
que eles a requisitam. 
Como Funciona?
Há uma fila única de processos prontos. Quando a primeira tarefa 
entra no sistema é iniciado imediatamente e autorizado a executar 
por quanto tempo queira. Ele não é interrompido porque está sendo 
executado há muito tempo. À medida que chegam as outras tarefas, 
eles são encaminhados para o fim da fila. Quando o processo em 
execuação é bloqueado, o primeiro processo na fila é o próximo a 
executar. Quando um processo bloqueado fica pronto (assim como 
uma tarefa que acabou de chegar), ele é posto no fim da fila.
118
Escalonamento em Sistemas de Lote
Primeiro a chegar, primeiro a ser servido (First come, first served – FCFS)
Vantagens:
Ele é fácil de entender e igualmente fácil de programar. É também um 
algoritmo justo. Com esse algoritmo, uma única lista encadeada controla 
todos os processos prontos. Adicionar uma nova tarefa ou um processo 
desbloqueado requer apenas a inserção dele no final da fila.
Desvantagens:
Dependendo do tipo de processo orientado a computação, pode-se levar 
muito tempo para executá-lo. 
Ex:Um processo orientado à computação que execute durante um segundo 
por vez e muitos outros processos limitados por E/S que usem pouco 
tempo de CPU, mas que precisem realizar, cada um, mil leituras de disco 
antes de terminar. O resultado é que cada um dos processos limitados por 
E/S lê um bloco por segundo e demorará mil segundos para terminar. Com 
um algoritmo de escalonamento que causasse a preempção do processo 
orientado à computação a cada dez milissegundos (em vez de a cada um 
segundo), os processos de E/S terminariam em dez segundos, e não em 
mil segundos. 
119
Escalonamento em Sistemas de Lote
Tarefa mais curta primeiro (shortest job first)
Algoritmo de escalonamento não preemptivo;
Com esse algoritmo, quando temos várias tarefas igualmente 
importantes postadas na mesma fila de entrada à espera de serem 
iniciados, o escalonador escolhe a tarefa mais curta primeiro.
Ex: Quatro tarefas (A, B, C e D) com seus respectivos tempos de 
execução 8, 4, 4 e 4 minutos.
FCFS x Tarefa mais curta primeiro
É importante lembrar que a tarefa mais curta primeiro é adequado 
somente para situação em que todas as tarefas estejam disponíveis 
simultaneamente.
120
Escalonamento em Sistemas de Lote
Próximo de menor tempo restante (shortest remaining time next)
É um algoritmo de escalonamento preemptivo;
Com esse algoritmo, o escalonador sempre escolhe o processo cujo 
tempo de execução restante seja o menor. Novamente, o tempo de 
execução deve ser previamente conhecido. 
Quando chega uma nova tarefa, seu tempo total é comparado ao 
tempo restante do processo em curso. Se, para terminar, a nova 
tarefa precisar de menos tempo que o processo corrente, então 
esse será suspenso e a nova tarefa será iniciada. 
Esse esquema permite que novas tarefas curtas obtenham um bom 
desempenho.
121
Escalonamento em Sistemas Interativos
São comuns em computadores pessoais, servidores e 
outros tipos de sistemas.
Processos interativos geralmente seguem o padrão de 
esperar por comando, executar comando, esperar por 
comando, executar comando e assim por diante.
122
Escalonamento em Sistemas Interativos
Escalonamento por chaveamento circular (round-robin)
Um dos algoritmos mais antigos, simples, justo e amplamente usado é o circular. 
Ele pressupõe que todos os processos sejam igualmente importantes. 
Como ele funciona?
A cada processo é atribuído um intervalo de tempo (quantum) no qual ele é 
permitido executar. Se, ao final do quantum, o processo ainda estiver executando, a 
CPU sofrerá preempção e será dada a outro processo. Se o processo foi bloqueado 
ou terminou antes que o quantum tenha decorrido, a CPU é chaveada para outro 
processo. O escalonamento circular é fácil de implementar. O Escalonador só 
precisa manter uma lista de processos executáveis. Quando o processo usa todo o 
seu quantum, ele é colocado no final da lista.
Ex: Quantum de 4ms e chaveamento do processode 1ms = 20% desperdiçado
Quantum de 100ms e chaveamento de processo de 1ms = 1% desperdiçado
Adotar um quantum muito curto causa muitos chaveamentos de processo e reduz a 
eficiência da CPU, mas um quantum muito longo pode gerar uma resposta pobre às 
requisições interativas curtas. Um quantum em torno de 20ms a 50ms é bastante 
razoável.
O algoritmo circular pressupõe que todos os processo sejam igualmente importantes.
123
Escalonamento em Sistemas Interativos
Escalonamento por prioridades
A cada processo é atribuída uma prioridade, e ao processo executável com 
a prioridade mais alta é permitido executar.
Ex: em um PC, o processo que atualiza o antivirus em segundo plano deve 
receber uma prioridade mais baixa que a um processo que exibe um vídeo 
na tela em tempo real.
Para evitar que processos de alta prioridade executem indefinidamente, o 
escalonador pode reduzir a prioridade do processo em execução a cada 
tique de relógio. Se isso fizer com que sua prioridade caia abaixo da 
prioridade do próximo processo com prioridade mais alta, então ocorrerá 
um chaveamento de processo. Outra possibilidade é atribuir a cada 
processo um quantum máximo no qual ele pode executar. Quando esse 
quantum estiver esgotado, será dada a oportunidade para que o próximo 
processo com prioridade mais alta execute
124
Escalonamento em Sistemas Interativos
Escalonamento garantido
É quando o escalonador faz promessas reais sobre o 
desempenho aos usuários e cumpre-as. 
Ex: Se houver n usuários conectados enquanto você 
estiver trabalhando, você receberá cerca de 1/n de CPU. 
Para isso, o sistema deve manter o controle da 
quantidade de CPU que cada processo recebe desde 
sua criação. Então ele calcula a quantidade de CPU 
destinada a cada um ou o tempo desde a criação 
dividido por n.
125
Escalonamento em Sistemas Interativos
Escalonamento por loteria
A idéia básica é dar bilhetes de loteria aos processos, cujos 
prêmios são vários recursos do sistema, como tempo de 
CPU. Se houver uma decisão de escalonamento, um bilhete 
de loteria será escolhido aleatoriamente e o processo que 
tem o bilhete conseguirá o recurso. Quando aplicado ao 
escalonamento de CPU, o sistema pode fazer um sorteio 50 
vezes por segundo e, portanto, cada vencedor terá 20 ms de 
tempo de CPU como prêmio.
O escalonamento por loteria é altamente responsivo, ou seja, 
se aparece um novo processo e a ele são atribuídos alguns 
bilhetes, já no próximo sorteio da loteria sua probabilidade de 
vencer será proporcional ao número de bilhetes que ele tiver.
126
Escalonamento em Sistemas Interativos
Escalonamento por fração justa (fair-share)
A cada usuário é alocada uma fração da CPU, e o 
escalonador escolhe os processos de modo que garanta 
essa fração. Assim, se dois usuários tiverem 50% da 
CPU prometida a cada um deles, cada um obterá os 
50%, não importando quantos processos eles tenham 
gerado.
Ex: Imagine um sistema com dois usuários, cada qual 
com 50% da CPU prometida a ele. O usuário 1 tem 
quatro processos (A, B, C e D) e o usuário 2 tem 
somente um processo (E)...
127
Escalonamento em sistemas de tempo real
Um sistema de tempo real é aquele no qual o tempo tem 
uma função essencial. 
Em geral, um ou mais dispositivos físicos externos ao 
computador geram estímulos, e o computador deve 
reagir apropriadamente a eles dentro de um dado 
intervalo de tempo. 
Ex: monitoração de pacientes em UTI de hospitais e 
piloto automático de aeronaves. 
Nesses casos, ter a resposta certa, mas tardia, é tão 
ruim quanto não ter nada.
128
Escalonamento em sistemas de tempo real
Sistemas de tempo real são em geral categorizados 
como:
– Tempo real crítico: há prazos absolutos que devem ser 
cumpridos;
– Tempo real não crítico: o descumprimento ocasional de um 
prazo é indesejável, contudo tolerável. 
Em ambos os casos, o comportamento de tempo real é 
implementado dividindo-se o programa em vários processos 
cujo comportamento é previamente conhecido. 
De modo geral, esses processos têm vida curta e podem 
executar em bem menos de um segundo. Quando é detectado 
um evento externo, o trabalho do escalonador é escalonar os 
processos de tal maneira que todos os prazos sejam cumpridos. 
129
Escalonamento em sistemas de tempo real
Os eventos aos quais um sistema de tempo real pode precisar 
responder podem ser categorizados como:
– Periódicos: ocorrem em intervalos regulares;
– Aperiódicos: acontecem de modo imprevisível.
Os algoritmos de escalonamento de tempo real podem ser 
estáticos ou dinâmicos. Os primeiros tomam suas decisões de 
escalonamento antes de o sistema começar a executar. Os últimos 
o fazem em tempo de execução. 
O escalonamento estático só funciona quando há prévia 
informação perfeita disponível sobre o trabalho necessário a ser 
feito e os prazos que devem ser cumpridos. Os algoritmos de 
escalonamento dinâmico não apresentam essas restrições.
130
Gerenciamento de Memória
Programas tendem a expandir a fim de ocupar toda a memória 
disponível.
Hierarquia de Memórias é dividida em:
ü Memória cache (alguns megabytes, rápida, custo alto e volátil);
ü Memórial Principal (volátil, alguns gigabytes, de velocidade e custo 
médios;
ü Disco (não volátil, alguns terabytes, de velocidade e custos baixos;
ü Armazenamento removível (DVDs, Cds, USB)
A função do S.O. é abstrair essa hierarquia em um modelo útil e, 
então, gerenciar a abstração.
131
Gerenciamento de Memória
A parte do S.O. que gerencia (parcialmente) a 
hierarquia de memórias é denominada 
gerenciador de memória. 
Sua função é gerenciar a memória de modo 
eficiente: manter o controle de quais partes da 
memória estão em uso e quais não estão, 
alocando memória aos processos quando eles 
precisam e liberando-a quando esses processos 
terminam. 
132
Abstração de memória: espaços de endereçamento
Um espaço de endereçamento é o conjunto de 
endereços que um processo pode usar para endereçar a 
memória. Cada processo tem seu próprio espaço de 
endereçamento, independente dos que pertencem a 
outros processos. 
Ex: 
– espaço de endereçamento para números de telefone 
– espaço de endereçamento de todas cadeias de comprimento de 
2 a 63 caracteres que possam ser feitas usando letras, números 
e hífens, seguidas por .com
133
Troca de Memória
Em um sistema Windows ou Linux típico, algo entre 40-
60 processos ou mais podem ser inicializados quando o 
computador é iniciado. 
Ex: processos para verificação de atualização, email, 
conexões do sistema de rede, etc.
134
Troca de Memória
Dois métodos gerais para lidar com a sobrecarga de memória 
têm sido desenvolvidos com o passar dos anos:
– Swapping (troca de processos) consiste em trazer, em sua 
totalidade, cada processo para a memória, executá-lo 
durante um certo tempo e, então, devolvê-lo ao disco. 
Processos ociosos são armazenados no disco, de forma 
que não ocupem qualquer espaço na memória quando 
não estão executando. 
– Memória virtual permite que programas possam ser 
executados mesmo que estejam apenas parcialmente 
carregados na memória principal. 
135
Funcionamento de um sistema de 
troca de processos
136
Troca de Memória
Quando as trocas de processos deixam muitos 
espaços vazios na memória, é possível 
combiná-los todos em um único espaço 
contíguo de memória, movendo-os, o máximo 
possível, para os endereços mais baixos. Essa 
técnica é chamada de compactação de 
memória.
Desvantagem: tempo gasto transferindo blocos 
de uma região para outra da memória principal
137
Troca de memória
Um ponto importanto é a quantidade de memória que deve ser 
alocada a um processo quando este for criado ou trazido do disco 
para a memória. 
Se processos são criados com tamanhofixo então a alocação é 
simples: o S.O. alocará aquilo que é necessário.
Se a área de dados do processo puder crescer, problemas poderão 
ocorrer sempre que um processo tentar crescer. Se houver espaço 
livre disponível adjacente ao processo, ele poderá ser alocado e p 
processo poderá crescer nesse espaço. 
Caso contrário, o processo que necessita crescer poderá ser 
movido para uma área de memória grande o suficiente para contê-
lo ou um ou mais processos terão de ser transferidos para o disco a 
fim de criar essa área disponível. Se o processo não puder crescer 
na memória e a área de troca de disco (swap) estiver cheia, o 
processo deverá ser suspenso até que algum espaço seja liberado 
(ou pode ser terminado).
138
Alocação de espaço para um segmento de dados em expansão
139
Memória Virtual 
Introdução
Bloatware é o termo utilizado para definir softwares que usam 
quantidades excessivas de memória. 
O tamanho da memória está aumentando rapidamente, mas o 
tamanho dos softwares está aumentando muito mais rápido. 
Existe a necessidade de executar programas grandes demais para 
se encaixarem na memória, e certamente há necessidade de haver 
sistemas que possam dar suporte a múltiplos programas em 
execução simultânea, cada um dos quais é comportado pela 
memória individualmente, mas que, coletivamente, excedam a 
memória. 
140
Memória Virtual
Introdução
A troca de processos não é uma opção atrativa, visto que um disco SATA 
tem uma taxa de transferência de pico de, no máximo, 100MB/s, o que 
significa que leva pelo menos 10 seg para sair de um programa de 1GB e 
outros 10 seg para inicializar um programa de 1GB. 
A idéia básica por trás da memória virtual é que cada programa tem seu 
próprio espaço de endereçamento, que é dividido em blocos chamados 
páginas. 
Cada página é uma série contígua de endereços. Essas páginas são 
mapeadas na memória física, mas nem todas precisam estar na memória 
física para executar o programa. Quando o programa referencia uma parte 
de seu espaço de endereçamento que está na memória física, o hardware 
executa o mapeamento necessário dinamicamente. Quando o programa 
referencia uma parte de seu espaço de endereçamento que não está em 
sua memória física, o S.O. é alertado para obter a parte que falta e 
reexecutar a instrução que faltou.
141
Memória Virtual
Espaço de Endereçamento Virtual
Como o espaço de endereçamento virtual não tem 
nenhuma relação direta com os endereços reais, um 
programa pode referenciar endereços que estejam fora 
dos limites da memória principal.
Quando um programa é executado, somente uma parte 
do seu código fica residente, permanecendo o restante 
na memória secundária até o momento de ser 
referenciado.
142
Memória Virtual
143
Memória Virtual
Mapeamento
• Tradução de um endereço virtual para um 
endereço real.
• Por causa do mapeamento, um programa 
não mais precisa estar necessariamente 
em endereços contíguos na memória 
principal.
144
Memória Virtual
145
Memória Virtual
A memória virtual funciona bem em um sistema com 
multiprogramação, com pedaços e partes de diferentes 
programas simultaneamente na memória. Se um 
programa estiver esperando por outra parte de si próprio 
ser carregada na memória, a CPU poderá ser dada a 
outro processo.
146
Memória Virtual
Paginação
Em computadores sem memória virtual, o endereço 
virtual é idêntico ao endereço físico e para ler ou 
escrever uma posição na memória, ele é colocado 
diretamente no barramento da memória. 
Quando a memória virtual é usada, o endereço virtual 
não é colocado diretamente no barramento da memória. 
Em Vez disso, ele vai a uma MMU (memory 
management unit – unidade de gerenciamento de 
memória), que mapeia endereços virtuais em endereços 
físicos. 
147
Memória Virtual
148
Memória Virtual – Exemplo (parte 1)
Nesse exemplo, temos um computador que 
pode gerar endereços virtuais de 16 bits, de 
0 a 64 k - 1. Contudo, esse computador tem 
somente 32 kb de memória física. Assim, 
embora seja possível escrever programas de 
64kb, eles não podem ser totalmente 
carregados na memória para serem executados. 
Uma cópia completa do código do programa 
deve estar presente no disco, de modo que 
partes possam ser carregadas dinamicamente 
na memória quando necessário. 
O espaço de endereçamento virtual é dividido 
em unidades denominadas páginas. As 
unidades correspondentes na memória física 
são denominadas molduras de página. 
As páginas e as molduras de páginas são 
sempre do mesmo tamanho. Nesse exemplo, as 
páginas têm 4KB. Com 64KB de espaço de 
endereçamento virtual e 32KB de memória 
física, podemos ter 16 páginas virtuais e 08 
molduras de páginas. As transferências entre 
memória e disco são sempre em páginas 
completas. 
A série 0-4K significa que os endereços físicos 
ou virtuais nessa página dão 0 a 4095. A série 
4-8K refere-se aos endereços 4096 a 8191 e 
assim por diante. 
149
Quando um programa tenta acessar o endereço 
0, o endereço virtual 0 é enviado à MMU, que 
detecta que esse endereço virtual situa-se na 
página virtual 0 (de 0 a 4095), que, de acordo 
com seu mapeamento, corresponde à moldura 
de página 2 (de 8192 a 12287). A MMU 
transforma o endereço físico 8192 e o envia à 
memória por meio de barramento. 
A memória desconhece a existência da MMU e 
somente enxerga uma solicitação de leitura ou 
escrita no endereço 8192, a qual ela executa. 
Essa habilidade de mapear as 16 páginas 
virtuais em qualquer uma das oito molduras de 
página não resolve o problema de o espaço de 
endereçamento virtual ser maior do que a 
memória física disponível. As páginas rotuladas 
com um X na figura não são mapeadas.
O que acontece se um programa tenta usar uma 
página virtual não mapeada? A MMU constata 
que essa página virtual não está mapeada e 
força o desvio da CPU para o S.O. Essa 
interrupção é denominada falta de página. O 
S.O. escolhe uma moldura de página pouco 
usada e a salva em disco. Em seguida, ele 
carrega a página virtual na moldura de página 
recém-liberada, atualiza o mapeamento da 
tabela de páginas e reinicializa a instrução 
causadora da interrupção.
Memória Virtual – Exemplo (parte 2)
150
Memória Virtual
Mapeamento
Cada processo tem o seu espaço de endereçamento virtual. O mecanismo 
de tradução mantém tabelas exclusivas para cada processo, relacionando 
os endereços virtuais às posições na memória real.
151
Memória Virtual por Paginação
Existem Sistemas Operacionais que trabalham apenas 
com blocos de tamanho fixo (técnica de paginação), 
enquanto que outros utilizam blocos de tamanho 
variável (técnica de segmentação). Existem ainda 
aqueles que implementam ambas as técnicas 
(segmentação com paginação).
152
Memória Virtual por Paginação
Trata-se de uma técnica de gerência de memória em 
que o espaço de endereçamento virtual e o espaço de 
endereçamento real são divididos em blocos de 
mesmo tamanho chamados páginas.
As unidades correspondentes na memória física são 
denominadas molduras de página (page frames). 
As páginas e as molduras de páginas são sempre do 
mesmo tamanho. 
153
Memória Virtual
Quando um programa tenta usar uma página virtual não mapeada, 
a MMU constata que essa página virtual não está mapeada e força 
o desvio da CPU para o S.O. Essa interrupção é denominada falta 
de página (page fault). 
O S.O., então, escolhe uma moldura de página pouco usada e a 
salva em disco, ou seja, escreve seu conteúdo de volta no disco. 
Em seguida, ele carrega a página virtual referenciada pela instrução 
na moldura de página recém-liberada, atualiza o mapeamento da 
tabela de páginas e reinicializa a instrução causadora da 
interrupção.
154
MemóriaVirtual
O número da página é usado como índice 
para a tabela de páginas, a fim de obter 
a moldura de página física correspondente 
àquela página virtual. 
O objetivo da tabela de páginas é mapear 
páginas virtuais em molduras de página 
física. 
155
Em qualquer sistema de paginação, dois 
problemas importantes devem ser 
enfrentados:
– O mapeamento do endereço virtual para o 
endereço físico deve ser rápido;
– Se o espaço de endereço virtual for grande, a 
tabela de páginas será grande.
156
TLB – Memória Associativa
TLB (translation lookaside buffer – buffer para tradução de endereços) ou 
memória associativa é o pequeno dispositivo (hardware) capaz de 
mapear os endereços virtuais para endereços físicos sem passar pela 
tabela de páginas. 
Portanto, TLB é um dispositivo de hardware implementado a partir de uma 
pequena memória associativa que fica integrada na MMU de um 
processador. Destina-se a facilitar a tradução de endereços lineares em 
endereços físicos, evitando a consulta à tabela de páginas localizada na 
memória.
Quando um endereço é solicitado, o processador verifica se o endereço da 
frame respectiva existe no TLB. Se este for encontrado, é utilizado para 
gerar o endereço físico pretendido e o acesso à memória é iniciado. Em 
caso de falha, a tabela de páginas será consultada. Os projetistas 
observaram que os processos tendem a acessar com mais freqüência um 
número reduzido de páginas virtuais. Isto permite obter taxas de sucesso 
próximas de 100%, mesmo com TLBs de dimensões reduzidas.
157
TLB – Memória Associativa
O modo normal de tratar uma ausência de página na TLB, seja por 
hardware, seja por software, é acessar a tabela de páginas e 
executar as operações de indexação para localizar a página 
referenciada não encontrada na TLB.
O problema em se fazer essa pesquisa por software é que as 
páginas que contêm a tabela de páginas podem não estar 
mapeadas na TLB, ocasionando ausências adicionais na TLB 
durante o processamento. 
Essas ausências podem ser reduzidas se uma grande cache, 
gerenciada por software e contendo entradas do tipo TLB, for 
mantida em uma localização fixa com sua página sempre mapeada 
na TLB. Verificando primeiro essa cache, o S.O. pode reduzir 
substancialmente as ausências de página na TLB. 
158
TLB – Memória Associativa
Quando o gerenciamento da TLB por software é usada, 
devemos compreender a diferença entre dois tipos de 
ausência.
– Ausência leve (soft miss) ocorre quando a página referenciada 
não está na TLB, mas na memória (é necessário atualizar a TLB 
- os discos de E/S não são utilizados)
– Ausência completa (hard miss) ocorre quando a própria 
página não está na memória (e nem na TLB). Requer-se acesso 
ao disco para trazer a página. Uma ausência definitiva é milhões 
de vezes mais lenta que uma ausência temporária)
159
Memória Virtual
As TBLs podem ser usadas para acelerar 
a tradução de endereços virtuais para 
endereços físicos em relação ao esquema 
original de tabela de páginas na memória. 
160
Memória Virtual por Paginação
Políticas de Busca de Páginas
Determinam quando uma página deve ser 
carregada para a memória. Basicamente, 
existem duas estratégias para este 
propósito: 
* paginação por demanda
* paginação antecipada.
161
Memória Virtual por Paginação
Políticas de Busca de Páginas
– Paginação por Demanda: as páginas do processo 
são transferidas da memória secundária para a 
principal apenas quando elas são referenciadas.
– Paginação Antecipada: o sistema carrega para a 
memória, além da página referenciada, outras 
páginas que podem ou não ser necessárias ao 
processo durante o processamento.
162
Memória Virtual por Paginação
Políticas de Alocação de Páginas
Determinam quantos frames cada processo 
pode manter na memória principal. 
Existem duas possibilidades para este 
propósito: 
* alocação fixa 
* alocação variável.
163
Memória Virtual por Paginação
Políticas de Alocação de Páginas
Alocação Fixa
Cada processo tem um número máximo de frames que 
pode ser utilizado durante a execução do programa. 
O limite de páginas pode ser igual para todos os 
processos ou definido individualmente, no momento da 
criação do processo, com base no tipo de aplicação.
164
Memória Virtual por Paginação
Políticas de Alocação de Páginas
Alocação Variável
O número máximo de páginas alocadas ao 
processo pode variar durante a execução, em função da 
taxa de paginação e da ocupação da memória principal. 
Processos com elevadas taxas de paginação 
podem ampliar o limite de frames, a fim de reduzir o 
número de page faults.
165
Memória Virtual por Paginação
Política de Alocação de Página
166
Memória Virtual por Paginação
Políticas de Substituição de Páginas
Selecionar, entre as páginas alocadas, aquela que deverá sair da 
memória para dar lugar a outra página mais relevante para o 
processo. 
A necessidade de substituição de páginas acontece quando um 
processo atinge seu limite de alocação de frames.
No processo de substituição de páginas, antes de liberar a página, 
é necessário saber se ela foi alterada. As páginas que armazenam 
estruturas de dados e variáveis, ao serem alteradas, o sistema 
operacional deverá gravá-las na memória secundária antes do 
descarte (page out), preservando os seus conteúdos. Se a página 
não tiver sido modificada, a cópia em disco já estará atualizada e 
não será necessário reescrevê-la. A página a ser trazida para a 
memória simplesmente sobrescreve a página que está sendo 
destituída. 
167
Memória Virtual por Paginação
Embora seja possível escolher aleatoriamente 
uma página a ser descartada a cada falta de 
página, o desempenho do sistema será muito 
melhor se a página escolhida for uma que não 
estiver sendo muito usada. 
Se uma página intensamente usada for 
removida, é provável que logo ela precise ser 
trazida de volta, ocasionando custos extras. 
168
Memória Virtual por Paginação
Políticas de Substituição de Páginas
O sistema operacional mantém, então, um 
arquivo de paginação (page file), onde todas as 
páginas modificadas e descartadas são 
armazenadas. 
Sempre que uma página for outra vez 
referenciada, ocorrerá um page in, carregando 
esta página para a memória principal a partir do 
arquivo de paginação.
169
Substituição de Páginas
170
Memória Virtual por Paginação
Políticas de Substituição de Páginas
O sistema operacional identifica as páginas modificadas 
através de um bit que existe em cada entrada da tabela 
de páginas, chamado bit de modificação(dirty bit ou 
modify bit). 
– Política de Substituição Local: apenas as páginas do 
processo que gerou o page fault podem ser realocadas.
– Política de Substituição Global: todas as páginas na memória 
principal podem ser realocadas, independente do processo que 
causou o page fault.
171
Memória Virtual por Paginação
Políticas de Substituição de Páginas
– A política de alocação fixa permite apenas a 
utilização de uma política de substituição 
Local. 
– A política de alocação variável permite tanto a 
utilização de uma política de substituição 
Local quanto de uma política de substituição 
Global. 
172
Memória Virtual por Paginação
Algoritmos de Substituição de Páginas
– O maior problema na memória virtual por paginação não é 
decidir quais páginas devem ser carregadas para a memória 
principal, mas quais páginas devem ser liberadas.
– Os algoritmos de substituição de páginas têm o objetivo de 
selecionar os frames que tenham menores chances de serem 
referenciados em um futuro próximo.
– A partir do princípio da localidade, a maioria dos algoritmos 
tenta prever o comportamento futuro das aplicações em função 
do comportamentopassado, avaliando o número de vezes que 
uma página foi referenciada, o momento em que foi 
carregada para a memória principal e o intervalo de tempo 
da última referência.
173
Memória Virtual por Paginação
Algoritmos de Substituição de Páginas
Ótimo: seleciona uma página que não será mais 
referenciada no futuro ou aquela que levará o maior 
intervalo de tempo para ser novamente utilizada.
– Vantagem: menores taxas de paginação para os processos.
– Desvantagem: impossível implementação, pois o S.O. não tem 
como conhecer o comportamento futuro das aplicações.
174
Algoritmos de Substituição de Páginas
Algoritmo de substituição de página não usada recentemente (NRU)
A maioria dos computadores com memória virtual tem 2 
bits de status [o bit referenciado (R) e o bit modificado 
(M)], associados a cada página virtual, que permitem 
que o S.O. saiba quais páginas físicas estão sendo 
usadas e quais não estão.
O bit R é colocado em 1 sempre que a página é 
referenciada (lida ou escrita). O bit M é colocado em 1 
sempre que se escreve na página (isto é, a página é 
modificada). Os bits estão contidos em cada entrada da 
tabela de páginas. 
175
Algoritmos de Substituição de Páginas
Algoritmo de substituição de página não usada recentemente (NRU)
Os bits R e M podem ser usados para construir um algoritmo de 
paginação simples. Quando um processo é inicializado, os dois bits 
citados, para todas as suas páginas, são colocados em 0 pelo S.O.. 
Periodicamente (ex. a cada tique do relógio), o bit R é limpo, de 
modo que diferencie as páginas que não foram referenciadas 
recentemente daquelas que foram.
Quando acontece uma falta de página, o S.O. inspeciona todas as 
páginas e as separa em quatro categorias, com base nos valores 
atuais dos bits R e M:
– Classe 0: não referenciada, não modificada.
– Classe 1: não referenciada, modificada.
– Classe 2: referenciada, não modificada.
– Classe 3: referenciada, modificada.
176
O algoritmo NRU (not recently used – nada usada 
recentemente) remove aleatoriamente uma página da 
classe de ordem mais baixa que não esteja vazia.
Está implícito nesse algoritmo que é melhor remover 
uma página modificada, mas não referenciada, a pelo 
menor um tique do relógio (em geral, 20ms) do que uma 
página não modificada que está sendo intensamente 
referenciada. 
A principal vantagem do algoritmo NRU é ser fácil de 
entender e de implementar e, além disso, fornece um 
desempenho que, apesar de não ser ótimo, pode ser 
adequado.
Algoritmos de Substituição de Páginas
Algoritmo de substituição de página não usada recentemente (NRU)
177
Algoritmos de Substituição de Páginas
FIFO (First-In-First-Out)
FIFO (First-In-First-Out): 
O S.O. mantém uma lista de todas as páginas 
atualmente na memória, com a página mais antiga na 
cabeça da lista e a página que chegou mais 
recentemente situada no final dessa lista. Na ocorrência 
de uma falta de página, a primeira página da lista é 
removida e a nova página é adicionada no final da lista. 
Vantagem: parece sensato descartar páginas mais 
antigas.
Desvantagem: nem sempre uma página mais antiga 
deve ser descartada, pois ela pode estar sendo 
constantemente referenciada.
178
Algoritmos de Substituição de Páginas
FIFO (First-In-First-Out)
179
Uma modificação simples no algoritmo de substituição 
de página FIFO evitaria o problema de se jogar fora uma 
página intensamente usada. 
Isso é feito simplesmente inspecionando o bit R da 
página mais antiga, ou seja, a primeira página da fila. Se 
o bit for 0, essa página, além de ser a mais antiga, não 
estará sendo usada, de modo que será substituída 
imediatamente. Se o bit R for 1, ele será colocado em 0, 
a página será posta no final da lista de páginas e seu 
tempo de carregamento (chegada) será atualizado como 
se ela tivesse acabado de ser carregada na memória. A 
pesquisa então continua.
Algoritmos de Substituição de Página segunda chance
180
O que o algoritmo segunda chance faz é 
procurar uma página antiga que não tenha 
sido referenciada no intervalo de relógio 
anterior.
Sua desvantagem é porque ele é 
desnecessariamente ineficaz, pois 
permanece constantemente reinserindo 
páginas no final da lista.
Algoritmos de Substituição de Página segunda chance
181
Uma estratégia melhor é manter todas as páginas em 
uma lista circular em forma de relógio. Um ponteiro 
aponta para a página mais antiga. 
Quando ocorre uma falta de página, a página indicada 
pelo ponteiro é examinada. Se o bit R for 0, a página é 
removida, uma nova página é inserida em seu lugar no 
relógio e o ponteiro avança uma posição. Se R for 1, ele 
é zerado e o ponteiro avança para a próxima página. 
Esse processo é repetido até que uma página seja 
encontrada com R=0. Não é de surpreender que esse 
algoritmo seja chamado de relógio.
Algoritmos de Substituição de Página do relógio
182
Algoritmo de substituição de página usada menos 
recentemente (LRU)
Qual a Lógica provável?
* Páginas muito utilizadas nas últimas instruções 
provavelmente serão muito utilizadas novamente nas 
próximas instruções. 
* Páginas que não estão sendo utilizadas por um longo 
período de tempo provavelmente permanecerão 
inutilizadas por muito tempo. 
Essa idéia sugere um algoritmo realizável: quando 
ocorrer uma falta de página, elimine a página não 
utilizada pelo período de tempo mais longo. Essa 
estratégia é chamada de paginação LRU (least recently 
used – usada menos recentemente)
183
Algoritmo de substituição de página usada menos 
recentemente (LRU)
Embora a LRU seja teoricamente realizável, não é barato. Para 
implementar completamente o LRU, é necessário manter uma lista 
vinculada de todas as páginas na memória, com a página usada 
mais recentemente na dianteira e a página usada menos 
recentemente na parte de trás. 
A dificuldade é que a lista deve ser atualizada em cada referência à 
memória. Encontrar uma página na lista, deletá-la e posicioná-la na 
dianteira é uma operação demorada, mesmo no hardware.
184
Algoritmo de substituição de página não usada 
frequentemente (NFU)
A implementação desse algoritmo requer contadores em software, 
cada um deles associado a uma página, inicialmente zerados. 
A cada interrupção de relógio, o S.O. percorre todas as páginas na 
memória. Para cada página, o bit R, que pode ser 0 ou 1, é 
adicionado ao contador correspondente. Assim, esses contadores 
constituem uma tentativa de saber quantas vezes cada página já foi 
referenciada. Quando ocorrer uma falta de página, a página que 
tiver a menor contagem será selecionada para a substituição.
185
Algoritmo de substituição de página não usada 
frequentemente (NFU)
O problema principal com o algoritmo NFU é que ele nunca se 
esquece de nada. 
Ex: Em um compilador de múltiplos passos, páginas que foram 
intensamente referenciadas durante o passo 1 podem ainda ter um 
contador alto em passos bem posteriores. De fato, se acontecer de 
o passo 1 possuir o tempo de execução mais longo de todos os 
passos, as páginas que contiverem o código para os passos 
seguintes poderão ter sempre contadores menores do que as 
páginas do passo 1. Consequentemente, o sistema operacional 
removerá páginas que ainda estiverem sendo referenciadas, em 
vez daquelas que não o estão mais. 
186
Algoritmo de substituição de página não usada 
frequentemente (NFU)
Para corrigir isso deve ser utilizado um 
algoritmo de envelhecimento (aging). 
– Quando ocorre uma falta de página, a página que 
tem a menor contagem é removida. É claro que a 
página que não tiver sido removida por, digamos, 
quatro interrupções de relógio terá quatro zeros nas 
posições mais significativas de seu contador e, 
assim, possuirá um valor menor do que um contadorque não tiver sido referenciado por três interrupções 
de relógio. 
187
Algoritmo de substituição de página não usada 
frequentemente (NFU)
Esse algoritmo difere do LRU de duas maneiras.
– De acordo com o LRU, se uma página tiver de ser substituída, devemos 
escolher uma das duas. O problema é que não sabemos qual dessas 
páginas foi referenciada por último no intervalo entre as interrupções de 
relógio. Registrando somente um bit por intervalo de tempo, perdemos 
a capacidade de distinguir a ordem das referências dentro de um 
mesmo intervalo. 
– A segunda diferença entre o algoritmo LRU e o de envelhecimento é 
que , neste último, os contadores têm um número finito de bits. Imagine 
duas páginas, ambas com seus contadores zerados. Só nos resta 
substituir uma delas aleatoriamente. Na realidade, é bastante possível 
que uma das páginas tenha sido referenciada pela última vez nove 
intervalos atrás e a outra o tenha sido há mil intervalos. Não temos 
como verificar isso. 
188
Algoritmo de substituição de página do conjunto de trabalho
No modo mais puro de paginação, os processos são inicializados sem 
qualquer de suas páginas presentes na memória. 
Assim que a CPU tenta buscar a primeira instrução, ela detecta uma falta de 
página, fazendo o S.O. carregar na memória a referida página que contém 
essa primeira instrução. 
Outras faltas de página, para as variáveis globais e a pilha, geralmente 
ocorrem logo em seguida. 
O processo, depois de um certo tempo, tem a maioria das páginas de que 
necessita para ser executado com relativamente poucas faltas de páginas. 
Essa estratégia é denominada paginação por demanda, pois as páginas só 
são carregadas à medida que são solicitadas, e não antecipadamente. 
189
É fácil escrever um programa de teste que leia sistematicamente todas as 
páginas em um grande espaço de endereçamento e gere muitas faltas de 
página, de maneira que não exista memória suficiente para conter todas 
elas. 
Felizmente, a maioria dos processos não funciona assim. Eles apresentam 
uma prioridade denominada localidade de referência, a qual diz que, 
durante qualquer uma das fases de sua execução, o processo só vai 
referenciar uma fração relativamente pequena de suas páginas.
Algoritmo de substituição de página do conjunto de trabalho
190
Algoritmo de substituição de página do conjunto de trabalho
O conjunto de páginas que um processo está usando atualmente é 
denominado conjunto de trabalho (working set). Se todo esse conjunto 
estiver presente na memória, o processo será executado com poucas faltas 
de página até mudar para outra fase de execução (ex: o próximo passo em 
um compilador). 
Se a memória disponível for muito pequena para conter todo esse conjunto 
de trabalho, o processo sofrerá muitas faltas de página e será executado 
lentamente, pois a execução de uma instrução leva apenas uns poucos 
nanossegundos, mas trazer uma página do disco para a memória consome 
cerca de 10 milissegundos. Executar apenas uma ou duas instruções a cada 
10 milissegundos faria demorar uma eternidade para finalizar o 
processamento. 
Diz-se que um programa que gere faltas de página frequente e 
continuamente provoca ultrapaginação (thrashing). 
191
Algoritmo de substituição de página do conjunto de trabalho
Em um sistema multiprogramado, os processo muitas vezes são 
transferidos para disco, ou seja, todas as suas páginas são retiradas da 
memória, para que outros processos possam utilizar a CPU.
Uma questão que surge é: o que fazer quando as páginas relativas a um 
processo são trazidas de volta à memória???
Tecnicamente, nada precisa ser feito. O processo simplesmente causará 
falta de página até que seu conjunto de páginas tenha sido novamente 
carregado na memória. O problema é que, havendo 20, cem ou mesmo mil 
falta de página toda vez que um processo é carregado, a execução se torna 
bastante lenta e é desperdiçado um considerável tempo de CPU, pois o S.O. 
gasta alguns milissegundos de tempo de CPU para processar uma falta de 
página.
192
Algoritmo de substituição de página do conjunto de trabalho
Muitos sistemas de paginação tentam gerenciar o conjunto de 
trabalho de cada processo e assegurar que ele esteja presente 
na memória antes de o processo ser executado. Essa prática, 
denominada modelo do conjunto de trabalho (working set 
model) foi concebida para reduzir substancialmente a 
frequência de falta de página. 
Carregar páginas de um processo na memória antes de ele ser 
posto em execução também se denomina pré-paginação.
193
Algoritmo de substituição de página do conjunto de trabalho
A idéia principal do algoritmo de substituição de 
página com base no conjunto de trabalho é encontrar 
uma página que não esteja presente no conjunto de 
trabalho e removê-la da memória. 
194
Algoritmo de substituição de página WSClock
O algoritmo básico do conjunto de trabalho é enfadonho, pois 
é preciso pesquisar em cada falta de página toda a tabela de 
páginas para que seja localizada uma página adequada para ser 
substituída. 
Há um algoritmo melhorado, com base no algoritmo do 
relógio, que também usa informações do conjunto de trabalho: 
é o chamado WSClock. Em virtude da simplicidade de 
implementação e do bom desempenho, esse algoritmo é 
amplamente utilizado. 
195
Algoritmo de substituição de página WSClock
A estrutura de dados necessária é uma lista circular de molduras de 
página (assim como no algoritmo do relógio). Inicialmente, essa 
lista circular encontra-se vazia. Quando a primeira página é 
carregada, ela é inserida nessa lista.
À medida que mais páginas são carregadas na memória, elas 
também são inseridas na lista para formar um anel. Cada entrada 
dessa lista contém o campo Instante do último uso, do algoritmo do 
conjunto de trabalho básico, bem como o bit R (mostrado) e o bit M
(não mostrado)
196
Resumo dos algoritmos de substituição de página
Revisão:
– O algoritmo ótimo substitui, entre as páginas atuais, a 
página que será referenciada por último. Infelizmente, não 
há como determinar qual página será a última, de modo 
que, na prática, esse algoritmo não pode ser usado. 
Entretanto, ele é útil como uma medida-padrão de 
desempenho, à qual outros algoritmos podem ser 
comparados. 
197
Resumo dos algoritmos de substituição de página
Revisão:
– O Algoritmo de substituição de página não usada 
recentemente (NRU) divide as páginas em quatro 
classes, dependendo do estado dos bits R e M. Uma página 
aleatória da classe de ordem mais baixa é escolhida 
aleatoriamente. Esse algoritmo é fácil de implementar, mas 
ainda bastante rudimentar. Existem outros melhores. 
198
Resumo dos algoritmos de substituição de página
Revisão:
– O algoritmo FIFO gerencia a ordem em que as páginas 
foram carregadas na memória, mantendo-as em uma lista 
encadeada. A remoção da página mais velha torna-se 
trivial, mas essa página ainda pode estar em uso, de modo 
que o FIFO não é uma escolha adequada.
199
Resumo dos algoritmos de substituição de página
Revisão:
– Uma modificação do FIFO é o algoritmo segunda chance, 
que verifica se a página está em uso antes de removê-la. Se 
estiver, a página será poupada. Essa modificação melhora 
bastante o desempenho. O algoritmo do relógio é 
simplesmente uma implementação diferente do segunda 
chance: ele tem as mesmas propriedades de desempenho, 
mas gasta um pouco menos de tempo para executar o 
algoritmo.
200
Resumo dos algoritmos de substituição de página
Revisão:
– O Algoritmo de substituição de página usada menos 
recentemente (LRU) é um excelente algoritmo, mas não pode ser 
implementado sem hardware especial. Se o hardware não está 
disponível, ele não pode ser usado. O Algoritmo de substituição de 
página não usada frequentemente(NFU) é uma tentativa 
rudimentar de aproximação do LRU. Por outro lado, o algoritmo do 
envelhecimento é uma aproximação muito melhor do LRU e pode ser 
implementada eficientemente, constituindo uma boa escolha. 
– Os dois últimos algoritmos utilizam o conjunto de trabalho, que tem 
desempenho razoável, mas é de implementação um tanto cara. O 
WSClock é uma variante que não somente provê um bom desempenho, 
mas também é eficiente em sua implementação. 
201
Resumo dos algoritmos de substituição de página
Revisão:
Entre todos eles, os dois melhores algoritmos são o 
envelhecimento e o WSClock. Eles baseiam-se, 
respectivamente, no Algoritmo de substituição de página 
usada menos recentemente (LRU) e no conjunto de 
trabalho. Ambos oferecem um bom desempenho de paginação 
e podem ser implementados de forma eficiente.
202
Política de alocação local versus global
Algoritmo de substituição local alocam uma fração fixa de memória para cada 
processo. Algoritmos de substituição global alocam molduras de página entre os 
processos em execução. Assim, o número de molduras de páginas alocadas a cada 
processo varia no tempo. 
Em geral, os algoritmos globais funcionam melhor, especialmente quando o 
tamanho do conjunto de trabalho varia durante o tempo de vida de um processo. Se 
um algoritmo local é usado e o conjunto de trabalho cresce durante a execução do 
processo, uma ultrapaginação (thrashing) pode ocorrer mesmo que existam muitas 
molduras de página disponíveis na memória. 
Se o conjunto de trabalho diminuir durante a execução do processo, os algoritmos 
locais desperdiçam memória. Se um algoritmo global é usado, o sistema deve 
decidir continuamente quantas molduras de página alocar para cada processo. Uma 
das maneiras de fazer isso é o monitoramento do tamanho do conjunto de trabalho 
desse processo, conforme indicado pelos bits de envelhecimento (aging), mas essa 
estratégia não necessariamente evita a ultrapaginação. O conjunto de trabalho pode 
variar de tamanho em questão de microssegundos, enquanto os bits de 
envelhecimento representam uma medida rudimentar estendida a um número de 
interrupções de relógio.
203
Política de alocação local versus global
Outra prática se baseia em um algoritmo de alocação de 
molduras de páginas para processo. Uma possibilidade é 
determinar periodicamente o número de processos em 
execução e alocar para cada processo o mesmo número de 
molduras de página.
204
Controle de Carga
Sempre que os conjuntos de trabalho de todos os processos 
combinados excedem a capacidade da memória, pode-se 
esperar a ocorrência de ultrapaginação. 
Um bom modo de reduzir o número de processos que 
competem por memória é levar alguns deles para disco e 
liberar a memória a eles alocada. 
205
Controle de Carga
A idéia de remover processos para disco a fim de aliviar a carga sobre a 
memória origina-se do escalonamento de dois níveis, no qual alguns 
processos são colocados em disco e um escalonador de curto prazo é 
empregado para escalonar os processos restantes na memória. É claro que 
as duas idéias podem ser combinadas, de modo que se remova somente um 
número suficiente de processos para disco, a fim de fazer com que a 
frequência de faltas de página fique aceitável. Periodicamente, alguns 
processos são trazidos do disco para a memória, e outros, presentes na 
memória, são levados para disco. 
Contudo, outro fator a ser considerado é o grau de multiprogramação. 
Quando o número de processos presentes na memória principal é muito 
pequeno, a CPU pode ficar ociosa durante consideráveis períodos de 
tempo. Ao escolher considerar não só o tamanho dos processos e a taxa de 
paginação, mas também outros aspectos, como se o processo é do tipo 
limitado pela CPU ou por E/S e quais as características que os processos 
remanescentes na memória possuem. 
206
Tamanho de página 
O tamanho de página é um parâmetro que frequentemente 
pode ser escolhido pelo S.O..
A determinação do melhor tamanho de página requer o 
balanceamento de vários fatores conflitantes, o que leva a não 
se conseguir um tamanho ótimo geral. Há dois argumentos a 
favor de um tamanho pequeno de página:
– É provável que um segmento de código, dados ou pilha escolhido 
aleatoriamente não ocupe um número inteiro de páginas. Em média, 
metade da última página permanecerá vazia e esse espaço será 
desperdiçado. Esse desperdício é denominado fragmentação interna.
– Tamanhos grandes de páginas farão com que partes do programa não 
usadas ocupem a memória desnecessariamente. Entretanto, páginas 
pequenas implicam muitas páginas e uma grande tabela de páginas. 
207
Espaço separados de instruções e dados
A maioria dos computadores tem um espaço único de endereçamento para 
programas e dados. Se esse espaço de endereçamento for suficientemente grande, 
tudo funcionará bem. No entanto, muitas vezes esse espaço é muito pequeno, o que 
obriga os programadores a suar a camisa para fazer tudo caber no espaço de 
endereçamento. 
Uma solução consiste em espaços de endereçamento separados para instruções 
(código do programa) e dados. Esses espaços são denominados, respectivamente, 
espaço I e espaço D. 
Em um computador com esse projeto, ambos os espaços de endereçamento podem 
ser paginados, independentemente um do outro. Cada um deles possui sua própria 
tabela de páginas, que contém o mapeamento individual de páginas virtuais para 
molduras de página física. Quando o hardware busca uma instrução, ele sabe que 
deve usar o espaço I e a tabela de páginas do espaço I. Da mesma maneira, 
referências aos dados devem acontecer por intermédio da tabela de páginas do 
espaço D. A não ser por essa distinção, usar espaços separados de instruções e 
dados não causa nenhuma complicação especial e duplica o espaço de 
endereçamento disponível. 
208
Páginas Compartilhadas
Em grandes sistemas com multiprogramação, é comum haver vários 
usuários executando simultaneamente o mesmo programa. 
É nitidamente mais eficiente compartilhar páginas para evitar a situação de 
existirem duas cópias ou mais da mesma página presentes na memória. Um 
problema é que nem todas as páginas são compartilháveis. 
Em particular, as páginas somente de leitura (como as que contêm código 
de programa) são compartilháveis, mas páginas com dados alteráveis 
durante a execução não o são. 
Se o sistema der suporte aos espaços I e D, o compartilhamento de 
programas será obtido de modo relativamente direto, fazendo com que dois 
ou mais processos usem, no espaço I, a mesma tabela de páginas em vez de 
tabelas de páginas individuais, mas diferentes tabelas de páginas no espaço 
D. 
209
Em geral, em uma implementação que suporte compartilhamento desse 
tipo, tabelas de páginas são estruturas de dados independentes da tabela 
de processos. 
Cada processo tem dois ponteiros em sua tabela de processos: um 
aponta para tabela de páginas do espaço I e outro, para a tabela de 
páginas do espaço D. Quando o escalonador escolher um processo para 
ser executado, ele usará esses ponteiros para localizar as tabelas de 
páginas apropriadas e ativar a MMU. 
Mesmo sem espaços I e D separados, os processos ainda podem 
compartilhar programas (ou, às vezes, bibliotecas), mas o mecanismo é 
mais complicado.
Páginas Compartilhadas
210
Páginas compartilhadas
Quando dois ou mais processos compartilham o mesmo código, um problema 
ocorre com as páginas compartilhadas. 
Suponha que os processos A e B estejam ambos executando o editor e 
compartilhando suas páginas. Se o escalonador decide remover A da memória, 
descartando todas as suas páginas e carregando as molduras de página vazias com 
outro programa, ele leva o processo B a causar muitas faltas de página, até que suas 
páginas estejam novamente presentes na memória. 
Demaneira semelhante, quando o processo A termina sua execução, é essencial que 
o sistema operacional saiba que as páginas utilizadas pelo processo A ainda estão 
sendo utilizadas por outro processo, a fim de que o espaço em disco ocupado por 
essas páginas não seja liberado acidentalmente. Em geral, é muito trabalhoso 
pesquisar todas as tabelas de páginas para descobrir se uma determinada página é 
compartilhada, de modo que são necessárias estruturas de dados especiais para 
manter o controle das páginas compartilhadas – especialmente se a unidade de 
compartilhamento for de uma página individual ( ou de um conjunto delas), em vez 
de toda uma tabela de páginas. 
211
Bibliotecas compartilhadas
Se um programa for inicializado duas vezes, a maioria dos S.O. 
automaticamente compartilhará todas as páginas de texto, de modo que 
apenas uma cópia esteja na memória. As páginas de texto sempre são 
apenas para leitura, por isso não há nenhum problema nesse caso. 
Dependendo do sistema operacional, cada processo pode obter sua própria 
cópia provada das páginas de dados ou eles podem ser compartilhados e 
marcados como somente leitura. 
Em sistemas modernos, há muitas bibliotecas grandes usadas por muitos 
processos; por exemplo, a biblioteca que trata a caixa de diálogo de busca 
de arquivos para abrir e de bibliotecas gráficas múltiplas. Ligar 
estaticamente todas essas bibliotecas a cada programa executável no disco 
as tornaria mais infladas do que já são. 
212
Bibliotecas compartilhadas
Em vez disso, uma técnica comum é usar bibliotecas compartilhadas (que 
são chamadas de DLL ou bibliotecas de ligação dinâmica no Windows). As 
bibliotecas compartilhadas são carregadas quando o programa é carregado 
ou quando funções nelas são chamadas pela primeira vez. 
É claro que, se outro programa já tiver carregado a biblioteca 
compartilhada, não há necessidade de carregá-la novamente. Perceba que, 
quando uma biblioteca é carregada ou usada, não é a biblioteca inteira que 
é lida de uma só vez. As páginas entram uma a uma, de acordo com a 
necessidade; assim, as funções que não são chamadas não serão trazidas à 
RAM. 
213
Bibliotecas compartilhadas
Além de reduzir os arquivos executáveis e de economizar espaço na 
memória, as bibliotecas compartilhadas têm outra vantagem: se uma função 
em uma biblioteca compartilhada for atualizada para remover um erro, não 
é necessário recompilar os programas que a chamam. Os antigos arquivos 
binários continuam a funcionar. Essa característica é especialmente 
importante para softwares comerciais, em que o código-fonte não é 
distribuído ao cliente. 
Ex: Se a Microsoft encontra e repara um erro de segurança em algum DLL 
padrão, o Windows Update fará o download do novo DLL e substituirá o 
antigo, e todos os programas que usam o DLL automaticamente usarão a 
nova versão da próxima vez que forem inicializados. 
214
Arquivos Mapeados
As bibliotecas compartilhadas são realmente um caso especial de um recurso mais 
geral, chamado arquivos mapeados em memória. A idéia aqui é que um processo 
pode emitir uma chamada ao sistema para mapear um arquivo em uma porção de 
seu espaço de endereçamento virtual. Na maior parte das implementações, 
nenhuma página é trazida durante o período do mapeamento, mas, à medida que as 
páginas usadas, são paginadas, uma a uma, por demanda, usando o arquivo no 
disco como memória auxiliar. Quando o processo sai, ou explicitamente finaliza o 
mapeamento do arquivo, todas as páginas modificadas são escritas de volta no 
arquivo.
Os arquivos mapeados fornecem um modelo alternativo para E/S. Em vez de fazer 
leituras e gravações o arquivo pode ser acessado como um grande arranjo de 
caracteres na memória. Em algumas situações, os programadores acham esse 
modelo mais conveniente. 
Se dois ou mais processos mapeiam o mesmo arquivo ao mesmo tempo, eles 
podem se comunicar através da memória compartilhada. Gravações feitas por um 
processo na memória compartilhada são imediatamente visíveis quando o outro lê da 
parte de seu espaço de endereçamento virtual mapeado no arquivo. Dessa forma, 
esse arquivo fornece um canal de largura de banda elevada entre processos e 
muitas vezes é usado como tal. Se os arquivos mapeados em memória estiverem 
disponíveis, as bibliotecas compartilhadas podem usar esse mecanismo. 
215
Política de limpeza
A paginação funciona melhor quando existe uma grande quantidade de 
molduras de páginas disponíveis prontas a serem requisitadas quando 
ocorrem faltas de página. 
Se a moldura de página estiver ocupada e, além disso, for modificada, antes 
de uma nova página ser carregada na memória, uma página antiga deverá 
primeiro ser escrita em disco. Para garantir um estoque abundante de 
molduras de páginas disponíveis, muitos sistemas de paginação executam 
um processo específico, denominado daemon de paginação (paging 
daemon), que dorme quase todo o tempo, mas que é acordado 
periodicamente para inspecionar o estado da memória.
Se existirem apenas algumas molduras de página disponíveis, o daemon de 
paginação começa a selecionar as páginas a serem removidas da memória 
usando um algoritmo de substituição de página. Se essas páginas tiverem 
sido modificadas desde quando carregadas, elas serão escritas em disco.
216
Política de limpeza
Em qualquer eventualidade, o conteúdo anterior da página é lembrado. No 
caso de uma página descartada da memória ser novamente referenciada 
antes de sua moldura ter sido sobreposta por uma nova página, a moldura 
pode ser reclamada, ou seja, trazida de volta, retirando-a do conjunto de 
molduras de página disponível. 
Manter uma lista de molduras de página disponíveis fornece melhor 
desempenho do que pesquisar toda a memória em busca de uma moldura 
de página disponível todas as vezes em que isso se tornar necessário. O 
daemon de paginação garante que todas as molduras de páginas disponíveis 
estejam limpas e que não precisem ser escritas às pressas em disco. 
217
Interface da memória virtual
Uma razão para dar o controle do mapa de memória a programadores é 
permitir que dois ou mais processos compartilhem a mesma memória. Se os 
programadores puderem nomear regiões de memória, talvez se torne 
possível a um processo fornecer a outro o nome de uma região, de modo 
que esse segundo processo também possa ser mapeado na mesma região do 
primeiro. 
Com dois (ou mais) processos, compartilhando as mesmas páginas, surge a 
possibilidade de um compartilhamento em largura de banda elevada (ou 
seja, um processos escreve na memória compartilhada e outro lê dessa 
mesma memória).
218
Interface da memória virtual
O compartilhamento de páginas também pode ser usado na implementação 
de um sistema de troca de mensagens de alto desempenho. Em geral, na 
troca de mensagens, dados são copiados de um espaço de endereçamento 
para outro, a um custo considerável. 
Se os processos puderem controlar seus mapeamentos, uma mensagem 
poderá ser trocada retirando-se a página relacionada do mapeamento do 
processo emissor e inserindo-a no mapeamento do processo receptor. Nesse 
caso, somente os nomes de páginas devem ser copiados, em vez de todos os 
dados. 
219
Interface da memória virtual
Outra técnica avançada de gerenciamento de memória é a memória 
compartilhada distribuída. A idéia é permitir que vários processos em uma 
rede compartilhem um conjunto de páginas - possível, mas não 
necessariamente – por intermédio de um único espaço de endereçamento 
linear compartilhado. 
Quando um processo referencia uma página não atualmente mapeada, isso 
causa uma falta de página. O manipulador de falta de página localiza a 
máquina que contém a referida página e manda um pedido para liberar essa 
página de seu mapeamento e enviá-la pela rede. Quando a página chega, 
ela é mapeada namemória e a instrução que causou a falta de página é 
reinicializada.
220
Segmentação
A memória virtual discutida até agora é unidimensional porque o endereço virtual 
vai de 0 a algum endereço máximo, um após o outro. 
Levando em consideração que para muitos problemas é melhor ter dois ou mais 
espaços de endereçamento separados, podemos imaginar 5 tabelas, onde cada uma 
das quatro tabelas cresce continuamente quando a compilação prossegue. 
Entretanto, a última cresce e diminui de modo imprevisível durante a compilação. 
Em uma memória unidimensional, essas cinco tabelas teria, de ser alocadas em 
regiões contíguas do espaço de endereçamento virtual. 
Agora imagine o que ocorre se um programa tem um número excepcionalmente 
grande de variáveis, mas uma quantidade normal de todo o restante. A região do 
espaço de endereçamento alocada para a tabela de símbolos pode se esgotar, mas 
talvez existam várias entradas livres nas outras tabelas. Obviamente, o compilador 
poderia simplesmente emitir uma mensagem que informasse que a compilação não 
continuaria em virtude da grande quantidade de variáveis, mas essa atitude não 
parece muito interessante, pois se sabe que existem espaços não utilizados nas 
outras tabelas. 
221
Segmentação
Prover a máquina com muitos espaços de endereçamento completamente 
independentes é chamado de segmentos.
Pelo fato de cada segmento constituir um espaço de endereçamento separado, 
segmentos diferentes podem crescer ou reduzir independentemente, sem afetarem 
uns aos outros. Se uma pilha, em certo segmento, precisa de mais espaço de 
endereçamento para crescer, ela pode tê-lo, pois não existe nada em seu espaço de 
endereçamento capaz de colidir com ela. 
Segmento é uma entidade lógica que o programador conhece e usa como entidade 
lógica. Um segmento pode conter uma rotina, um arranjo, uma pilha ou um 
conjunto de variáveis escalares, mas em geral ele não apresenta uma mistura de 
diferentes tipos. A segmentação facilita o compartilhamento de rotinas ou dados 
entre vários processos. 
Como cada segmento forma uma entidade lógica da qual o programador está ciente 
– como uma rorina, um arranjo ou uma pilha –, diferentes segmentos podem possuir 
diferentes tipos de proteção . 
Ex: Um segmento de rotina pode ser especificado como somente para execução, o 
que proíbe tentativas de leitura ou escrita nele.
222
Gerência de Memória Virtual
Swapping
Utiliza-se a técnica de swapping em memória virtual para permitir aumento 
no grau de multiprogramação do sistema.
Há diferentes políticas aplicadas na escolha dos processos que devem ser 
retirados da memória principal. A maioria dessas políticas baseia-se no 
estado e na prioridade do processo.
O arquivo de swap é compartilhado por todos os processos que estão sendo 
executados no ambiente. Quando um processo é criado, o sistema reserva 
um espaço no arquivo de swap para ele. Quando o processo é eliminado, o 
sistema libera a área alocada.
223
Gerência de Memória Virtual
Swapping
Alguns sistemas utilizam um único arquivo para uso como arquivo de 
paginação e de swap.
Em alguns sistemas, o arquivo de swap é uma área em disco reservada para 
esta função.
O arquivo de swap (swap file) deve oferecer o melhor desempenho possível 
para as operações de swapping.
224
Sistemas de arquivo
Todas aplicações precisam armazenar e recuperar informação. Enquanto estiver 
executando, um processo pode armazenar uma quantidade limitada de informação 
dentro de seu próprio espaço de endereçamento. Contudo, a capacidade de 
armazenamento está restrita ao tamanho do espaço de endereçamento virtual. Para 
algumas aplicações, esse tamanho é adequado, mas, para outras, é pequeno demais. 
Um segundo problema em manter a informação dentro do espaço de endereçamento 
do processo é que, quando o processo termina, a informação é perdida. Em muitas 
aplicações (ex: banco de dados), a informação precisa ficar retida por semanas, 
meses ou até mesmo para sempre. É inaceitável que a informação em uso pelo 
processo desapareça quando ele é encerrado. Além disso, a informação não deve 
desaparecer se uma falha no computador eliminar o processo.
O terceiro problema é que muitas vezes é necessário que múltiplos processos 
tenham acesso à informação (ou a parte dela) ao mesmo tempo. A solução para esse 
problema é tornar a própria informação independente de qualquer processo. 
225
Sistemas de arquivo
Arquivos são unidades lógicas de informação criadas por processos. Em 
geral, um disco contém milhares de arquivos, um independente do outro. 
Na verdade, os arquivos também são uma espécie de espaço de 
endereçamento, mas eles são usados para modelar o disco e não a memória 
RAM.
Os processos podem ler os arquivos existentes e criar novos, se necessário. 
A informação armazenada em arquivos deve ser persistente, isto é, não 
pode ser afetada pela criação e pelo término de um processo. Um arquivo 
só desaparecerá quando seu proprietário removê-lo explicitamente.
226
Sistemas de arquivo
Arquivos são gerenciados pelo S.O. O modo como são estruturados, 
nomeados, acessados, usados, protegidos e implementados são um dos 
principais tópicos de um projeto de S.O.. De modo geral, essa parte do S.O. 
que trata dos arquivos é conhecida como sistema de arquivos.
Arquivo é um mecanismo de abstração. Ele oferece meios de armazenar 
informações no disco e de tê-las depois. Isso deve ser feito de um modo 
que isole o usuário dos detalhes sobre como e onde a informação está 
armazenada e como os discos na verdade funcionam. 
227
Arquivos: Nomeação de arquivos
Quando um processo cria um arquivo, ele dá um nome a esse arquivo. 
Quando o processo termina, o arquivo continua existindo e outros 
processos podem ter acesso a ele simplesmente buscando seu nome. 
As regras exatas para se dar nome a um arquivo variam de sistema para 
sistema, mas todos os S.O. atuais permitem cadeias de caracteres (strings) 
de uma até oito letras como nomes válidos de arquivos. Frequentemente 
dígitos e caracteres especiais também são permitidos. Muitos sistemas de 
arquivos permitem nomes com tamanhos de até 255 caracteres.
Alguns sistemas de arquivos distinguem letras maiúsculas de minúsculas e 
outros, não. O UNIX pertence à primeira categoria; o MS-DOS pertence à 
segunda. 
228
Arquivos: Nomeação de arquivos
Muitos S.O. permitem nomes de arquivos com duas partes separadas por um ponto. 
A parte que segue o ponto é chamada de extensão do arquivo e normalmente indica 
algo sobre o arquivo.

Mais conteúdos dessa disciplina