Beruflich Dokumente
Kultur Dokumente
Recent c hanges
List all pages
INSTITUTO TECNOLÓGICO DE AERONÁUTICA
Site Manager
Alunos: José Gerardo Arruda Junior e Diego Alvarez
Curso: CES-33 - Sistemas Operacionais
Page tags Professor: Edgar Toshiro Yano
new page
fold
e dit this pane l Table of Contents
Proposta do Blog
Memória no Linux: características principais
Paginação e proteção
Paginação de memória
Implementação
Memória associativa ou TLB
Algoritmos para substituição de páginas
Algoritmo FIFO
…wikidot.com/gerenciamento-de-memoria:jose-gerar… 1/21
29/10/2010 Gerenciamento de memória no Linux - CES33 - Siste…
Algoritmo LRU
Algoritmo Ótimo
Algoritmo MRU
Algoritmo CLOCK
Algoritmo NRU
Algoritmo LFU
Algoritmo MFU
Algoritmo WS
Interfaces para o gerenciamento de memória
Compartilhamento de memória
Princípio da memória compartilhada
Mapeamento de arquivos na memória virtual
Tratamento de áreas de memória fixas
Partições Fixas
Problemas
Segurança
Realocação e Proteção
Área de Swap
Problemas
Testando os limites do sistema
RLIMIT_DATA
RLIMIT_AS
RLIMIT_NPROC
RLIMIT_STACK
Número máximo de processos
Tamanho máximo de processo
Maior área de heap
Maior área de pilha
Esgotamento da área de swap
Referências Bibliográficas
…wikidot.com/gerenciamento-de-memoria:jose-gerar… 2/21
29/10/2010 Gerenciamento de memória no Linux - CES33 - Siste…
operacional novamente selecionando os 4MB de cada
programa que deverão ser mantidos nas seções de memória
a cada instante, com as suas partes sendo copiadas do
disco rígido para a memória e vice-versa, quando
necessário. A utilização da memória virtual torna o
computador mais lento, embora faça com que ele aparente
ter mais memória RAM do que realmente tem.
Paginação e proteção
O Linux usa um esquema de paginaç ão de três níveis. Embora tenha sido utilizado no
processador Alpha, esse esquema também é empregado de maneira modificada em todas as
arquiteturas. Cada endereço virtual é quebrado em até quatros campos. O campo diretório é
usado como índice do diretório global, sendo que existe um privado para cada processo. O
valor encontrado é um ponteiro para um dos diretórios intermediários de página, o qual é
indexado por um campo do endereço virtual. A entrada selecionada aponta para a tabela de
página final, a indexada pelo campo página do endereço virtual. A entrada encontrada
aponta para a página requisitada. No Pentium, que usa paginação em dois níveis, cada
diretório intermediário de página tem somente uma entrada, de modo que, efetivamente, a
entrada do diretório global é quem escolhe a tabela de página a usar.
Para a proteção existe um gerenciador de memória virtual evitando que processos no modo
Kernel e no modo User se misturem.
Paginação de memória
…wikidot.com/gerenciamento-de-memoria:jose-gerar… 3/21
29/10/2010 Gerenciamento de memória no Linux - CES33 - Siste…
O tratamento mais simples seria uma longa tabela de página com uma entrada por página
(Essas entradas são conhecidas como entradas de tabela de páginas ou PTE - page table
entries). No entanto, esta solução resultaria em uma tabela de página que seria muito
grande para ser encaixada na MMU, dado que tem que ser na memória. A solução, portanto
são tabelas de páginas de multiníveis. Desse modo, a medida que o tamanho dos processos
cresc em, novas páginas são alocadas e, quando o são, a parte da memória associada à
tabela de página é preenchida.
Esse método de gestão de memória que permite que o espaço de armazenamento seja não
contíguo. A paginação é suportada por hardware ou por uma combinação do hardware com o
software, dividindo-se a memória física em blocos de tamanho fixo, chamados frames, cujo
tamanho é uma potência de 2. A memória lógica é dividida em bloc os do mesmo tamanho, as
chamadas páginas.
…wikidot.com/gerenciamento-de-memoria:jose-gerar… 4/21
29/10/2010 Gerenciamento de memória no Linux - CES33 - Siste…
Outro ponto importante é que a tradução de endereços virtuais para físicos tem de ser
rápida. Isso requer que a tradução seja feita, tanto quanto possível no hardware. Como não
é nada prático colocar a tabela de página por completo na MMU, a MMU apresenta o que é
chamado de TLB: translation lookaside buffer
Im plem entação
A MMU (memory managemen unit) da CPU armazena o mapeamento das tabelas de página
mais recentemente usadas. Esse processo é chamado Translation Lookaside Buffer (TLB).
Quando um endereço virtual precisa ser traduzido em um endereço físico, a busca é feita
inicialmente na TLB. Se a requisição for encontrada, o endereço físico é retornado e o
acesso à memória continua. No entanto, se não foi encontrado, a CPU gera uma page fault
e o sistema operacional terá um interrupt handler para lidar com elas.
…wikidot.com/gerenciamento-de-memoria:jose-gerar… 6/21
29/10/2010 Gerenciamento de memória no Linux - CES33 - Siste…
Algoritm o FIFO
…wikidot.com/gerenciamento-de-memoria:jose-gerar… 7/21
29/10/2010 Gerenciamento de memória no Linux - CES33 - Siste…
Algoritm o LRU
Apesar de o LRU apresentar um bom desempenho ele também possui algumas deficiências
quando o padrão de acesso é sequencial (em estruturas de dados do tipo vetor, lista,
árvore), dentro de loops, etc. A implementação do LRU também pode ser feita através de
uma lista, mantendo as páginas mais referenciadas no início (cabeç a) e a menos
referenciadas no final da lista. Portanto, ao substituir retira-se a página que está no final da
lista. O maior problema com esta organização é que a lista deve ser atualizada a cada nova
referência efetuada sobre as páginas, o que torna alto o custo dessa manutenção.
Algoritm o Ótim o
O algoritmo ótimo, proposto por Belady em 1966, é o que apresenta o melhor desempenho
computacional e o que minimiza o número de faltas de páginas. No entanto, sua
implementação é praticamente impossível. A idéia do algoritmo é retirar da memória a página
que vai demorar mais tempo para ser referenciada novamente. Para isso, o algoritmo
precisaria saber, antecipadamente,
todos os acessos à memória realizados pela aplicação, o que é impossível em um caso real.
Por estes motivos, o algoritmo ótimo só é utilizado em simulações para se estabelecer o
valor ótimo e analisar a eficiência de outras propostas elaboradas.
Algoritm o MRU
O algoritmo MRU (Most Recently Used) faz a substituição da última página acessada. Este
algoritmo também apresenta algumas variações, semelhante ao LRU. Por exemplo, o MRU-n
escolhe a n-última página acessada para ser substituída. Dessa forma, é possível explora
com mais eficiência o princípio de localidade temporal apresentada pelos acessos.
Algoritm o CLOCK
Este algoritmo mantém todas as páginas em uma lista circular (em forma de relógio). A
ordem mantida segue a seqüência em que elas foram carregadas em memória. Além disso, é
adicionado um bit de uso que indica se a página foi referenciada novamente depois de ter
sido c arregada. Ao precisar substituir uma página o algoritmo verifica se a página mais
antiga está com o bit zerado (o
que significa que a página não foi mais referenciada) para ser substituída. Se ela não estiver
o bit é zerado e a próxima página da fila mais antiga será verificada. Esse processo continua
até que uma página antiga com o bit zerado seja encontrada para ser substituída.
Algoritm o NRU
…wikidot.com/gerenciamento-de-memoria:jose-gerar… 8/21
29/10/2010 Gerenciamento de memória no Linux - CES33 - Siste…
O algoritmo NRU (Not Recently Used) procura por páginas que não foram referenciadas nos
últimos acessos para serem substituídas. Tal informação é mantida através de um bit. Este
algoritmo também verifica, através de um bit de modificação, se a página teve seu conteúdo
alterado durante sua permanência em memória. Esta informação também vai ajudar a
direc ionar a escolha da página. As substituições das páginas seguem a seguinte prioridade:
páginas não referenciadas e não modificadas, páginas não referenc iadas, páginas não
modificadas e páginas referenciadas e modificadas.
Algoritm o LFU
O LFU (Least Frequently Used) escolhe a página que foi menos acessada dentre todas as
que estão carregas em memória. Para isso, é mantido um contador de acessos associado a
cada página (hit) para que se possa realizar esta verificação. Esta informação é zerada cada
vez que a página deixa a memória. Portanto, o problema desse algoritmo é que ele prejudica
as páginas recém-carregadas, uma vez que por estarem com o contador de acessos zerado
a probabilidade de serem substituídas é maior. Qual uma possível solução para este
problema? (Estabelecer um tempo de carência) Só páginas fora desse tempo é que podem
ser substituídas. Tal estratégia deu origem ao algoritmo FBR (Frequency-Based
Replacement).
Algoritm o MFU
O MFU (Most Frequently Used) substitui a página que tem sido mais referenciada, portanto,
o oposto do LFU. O controle também é feito através de contadores de acesso. O maior
problema deste algoritmo é que ele ignora o princípio de localidade temporal.
Algoritm o WS
O algoritmo WS (Working Set) possui a mesma política do LRU. No entanto, este algoritmo
não realiza apenas a substituição de páginas ele também estabelec e um tempo máximo que
cada página pode permanecer ativa na memória. Assim, toda página que tem seu tempo de
permanência esgotado ela é retirada da memória. Portanto, o número de páginas ativas é
variável. O WS assegura que as páginas pertencentes ao working set processo
permanecerão ativas em memória. Os algoritmos apresentados são alguns dos disponíveis na
literatura. Outras implementações ou variações dos destacados aqui podem ser encontradas
também.
1. Criação do processo
Determina o tamanho do processo
Cria a tabela de página
…wikidot.com/gerenciamento-de-memoria:jose-gerar… 9/21
29/10/2010 Gerenciamento de memória no Linux - CES33 - Siste…
Compartilhamento de memória
O compartilhamento de uma região de memória entre dois ou mais processos (executando
programas) corresponde a maneira mais rápida deles efetuarem uma troca de dados. A zona
de memória compartilhada (denominada segmento de memória compartilhada) é utilizada por
cada um dos processos como se ela fosse um espaço de endereçamento que pertencesse a
cada um dos programas. Em outras palavras, o compartilhamento de memória permite aos
processos de trabalhar sob um espaço de endereçamento comum em memória virtual. Em
conseqüência, este mecanismo é dependente da forma de gerenciamento da memória; isto
significa que as funcionalidades deste tipo de comunicação interprocessos são fortemente
ligadas ao tipo de arquitetura (máquina) sobre a qual a implementação é realizada.
…wikidot.com/gerenciamento-de-memoria:jose-gerar… 10/21
29/10/2010 Gerenciamento de memória no Linux - CES33 - Siste…
O desacoplamento da memória compartilhada permite ao processo de se desassociar de um
segmento quando ele não desejar mais utilizá-lo. Após esta operaç ão, o processo perde a
possibilidade de ler ou escrever neste segmento de memória compartilhada.
Os sistemas operacionais modernos permitem que mais de um proc esso seja carregado em
memória, de modo que quando um fica bloqueado esperando por uma operação de E/S outro,
que esteja carregado em memória, poderá usar a CPU. Dessa forma, a multiprogramação
ajuda a melhorar a utilização da CPU evitando desperdícios de ciclo de processamento.
O problema da organização em múltiplas filas é que jobs pequenos podem precisar esperar
pela liberação de memória (partição mais adequada para o mesmo), embora exista memória
disponível (partição grande), como é o caso da partição 1 e 3. Por outro lado, isso não
ocorre no esquema de uma única fila. Nesta organização (b) sempre que uma nova partição
é liberada o job mais próximo do iníc io da fila e que caiba nessa partição pode ser carregado
nela para ser executado pela CPU. No entanto, esta estratégia pode desperdiçar muito
espaç o ao armazenar um job pequeno em uma partição grande. Assim, uma opção mais
interessante seria pesquisar em toda a fila de entrada e alocar a partição disponível ao maior
job que pudesse ser carregado. Qual o problema dessa solução? (Discriminar jobs pequenos!)
Qual a solução? (Ter pelo menos uma partição pequena!).
Existe uma outra possibilidade consiste em estabelecer uma quantidade máxima k de vezes
que um job pudesse ser excluído da escolha de receber uma partiç ão. Assim, sempre que ele
fosse preterido teria seu contador incrementado e, ao chegar em k vezes, ele teria que
receber uma partição.
Problem as
Segurança
Realocação e Proteção
Uma solução adotada para isso foi dividir a memória em unidades de 2 KB e associar um
código de proteção de 4 bits a cada uma dessas regiões. Durante a execução de um
processo, o PSW contém um código de 4 bits que é testado com todos os acessos à
memória realizados pelo processo, e gera uma interrupção se tentar acessar uma região de
código diferente.
Área de Swap
Mesmo com o aumento da eficiência da multiprogramação e, partic ularmente, da gerência de
memória, muitas vezes um programa não podia ser executado por falta de uma partição livre
disponível. A técnica de swapping foi introduzida para contornar o problema da insuficiência
de memória principal.
O swapping é uma técnica aplicada à gerência de memória para programas que esperam por
memória livre para serem executados. Nesta situação, o sistema escolhe um processo
residente, que é transferido da memória principal para a memória secundária (swap out),
…wikidot.com/gerenciamento-de-memoria:jose-gerar… 13/21
29/10/2010 Gerenciamento de memória no Linux - CES33 - Siste…
geralmente disco. Posteriormente, o processo é carregado de volta da memória secundária
para a memória principal (swap in) e pode continuar sua execução como se nada tivesse
ocorrido.
O algoritmo de escolha do processo a ser retirado da memória princ ipal deve priorizar aquele
com menores chances de ser executado, para evitar o swapping desnecessário de um
processo que será executado logo em seguida. Os processos retirados da memória estão
geralmente no estado de espera, mas existe a possibilidade de um processo no estado de
pronto também ser selecionado. No primeiro caso, o processo é dito no estado de espera
outswapped e no segundo caso no estado de pronto outswapped.
Para que a técnica de swapping seja implementada, é essencial que o sistema ofereça um
loader que implemente a relocação dinâmica de programas. Um loader relocável que não
ofereça esta facilidade permite que um programa seja colocado em qualquer posição de
memória, porém a relocação é apenas realizada no momento do carregamento. No caso do
swapping, um programa pode sair e voltar diversas vezes para a memória, sendo necessário
que a relocação seja realizada pelo loader a cada carregamento.
…wikidot.com/gerenciamento-de-memoria:jose-gerar… 14/21
29/10/2010 Gerenciamento de memória no Linux - CES33 - Siste…
conteúdo do registrador, gerando, assim, o endereço físico. Dessa forma, um programa pode
ser c arregado em qualquer posição de memória.
Problem as
Neste Blog exploraremos alguns desses limites com a execução de alguns testes, dentre
eles: o número máximo de processos criados (RLIMIT_NPROC), o tamanho máximo de um
processo (RLIMIT_AS), a maior área de heap (RLIMIT_DATA), a maior área de pilha
(RLIMIT_STACK), além de uma breve discussão sobre o esgotamento da área de swap.
…wikidot.com/gerenciamento-de-memoria:jose-gerar… 15/21
29/10/2010 Gerenciamento de memória no Linux - CES33 - Siste…
Alguns desses valores podem ser explorados com o uso do comando "ulimit" na linha de
comando, que nos auxilia dando uma direção quanto aos valores esperados. O help de
"ulimit" nos fornece o seguinte detalhamento de uso da função:
3 4
Portanto, vemos que o uso de ulimit c om as opções -d, -l, -u e -s nos fornece os valores de
RLIMIT_DATA, RLIMIT_AS, RLIMIT_NPROC e RLIMIT_STACK, respec tivamente:
RLIMIT_DATA
…wikidot.com/gerenciamento-de-memoria:jose-gerar… 16/21
29/10/2010 Gerenciamento de memória no Linux - CES33 - Siste…
junior@junior:~$ ulimit -d
unlimited
RLIMIT_AS
junior@junior:~$ ulimit -l
32
RLIMIT_NPROC
junior@junior:~$ ulimit -u
24499
RLIMIT_STACK
junior@junior:~$ ulimit -s
8192
Nos próximos itens serão realizados testes buscando explorar tais limites.
Para a checagem no número máximo de processos permitidos, exec utamos o seguinte código
em C:
#include <stdio.h>
main() {
int i = 0;
while (fork() != -1) { // Enquanto não houver falha na criação de processos,
i++; // Incrementa i
printf("\n%d",i); // Imprime o número de fork's encadeados
sleep(10); // Delay inserido para possibilitar a impressã
}
while(1); // Permite que o processo continue executanto num loop infinito.
}
…wikidot.com/gerenciamento-de-memoria:jose-gerar… 17/21
29/10/2010 Gerenciamento de memória no Linux - CES33 - Siste…
3 4
Ao executar o programa observou-se que o último número impresso no console foi 14,
significando que o número máximo de processos está entre 214 e 215, confirmando o valor
de RLIMIT_NPROC = 24499 obtido pelo comando ulimit -u.
Para obter esse resultado houve dificuldades devido ao travamento do sistema antes de
qualquer impressão na tela. O uso do delay sleep(10) foi crucial para que o valor impresso
pudesse ser observado.
junior@junior:~$ ulimit -l
32
A área de heap permite a alocação dinâmica de memória por meio de chamadas, por
exemplo, malloc. A área de heap cresce em sentido oposto à pilha e em direção a esta. Uma
maneira de testar sua capacidade é, portante, alocando memória c ontinuamente, até seu
esgotamento, como mostrado no programa abaixo:
#include<stdio.h>
#include<stdlib.h>
main(){
int i = 0, *p;
while(1){
i++;
p = (int*)malloc(sizeof(int));
printf("\n%d Mb alocados até o momento...", sizeof(int)*i/1024/1024)
}
}
3 4
Resultado da execução:
…wikidot.com/gerenciamento-de-memoria:jose-gerar… 18/21
29/10/2010 Gerenciamento de memória no Linux - CES33 - Siste…
(...)
359 Mb alocados até o momento...
359 Mb alocados até o momento...
359 Mb alocados até o momento...
(...)
Desse modo, uma forma de testar a capacidade da área de pilha é justamente empilhar
sucessivamente vários endereços de retorno, via chamadas recursivas, atá que sua
capacidade seja esgotada. O seguinte programa foi utilizado levando-se em conta esse
raciocínio:
#include<stdio.h>
#define T_ADRESS 32
//Variáveis Globais
int nChamadas = 0;
float capacidadeUtilizada = 0;
void fRecursiva();
main(){
fRecursiva();
}
void fRecursiva(){
nChamadas++;
capacidadeUtilizada = capacidadeUtilizada + T_ADRESS;
printf("\n%da chamada:\t %f kB da pilha foram utilizados...", nChamadas,
fRecursiva();
}
3 4
…wikidot.com/gerenciamento-de-memoria:jose-gerar… 19/21
29/10/2010 Gerenciamento de memória no Linux - CES33 - Siste…
Resultado da execução:
(...)
261734a chamada: 8179.187500 kB da pilha foram utilizados...
261735a chamada: 8179.218750 kB da pilha foram utilizados...
261736a chamada: 8179.250000 kB da pilha foram utilizados...
261737a chamada: 8179.281250 kB da pilha foram utilizados...
Falha de segmentação
O resultado acima nos diz que, consirerando um uso de 32bytes da pilha a cada chamada
recursiva obtemos a capacidade de pilha de 8MB esperada com o uso de ulimit -s. Deve-se
levar em conta que, antes da execução do programa já havia algo na pilha.
Referências Bibliográficas
Livros:
Sites:
http://www.vivaolinux.com.br/artigo/Estudo-sobre-os-tipos-de-gerenciamento-do-
SO-Linux?pagina=2
http://www.webartigos.com/articles/2959/1/estudo-sobre-os-gerenciamentos-do-
sistema-operacional-linux/pagina1.html
http://www15.brinkster.com/sharkdj/sistemasoperativos/Detalhe_GM.html
http://pt-br.kurumin.wikia.com/wiki/Kuruma
http://ricardobarcelar.com/aulas/so/aula6-mem_virtual.pdf
http://www.dca.ufrn.br/~adelardo/cursos/DCA409/node96.html
http://regulus.pcs.usp.br/~jean/so/AULA%2013%20-
%20Ger%EAncia%20de%20Mem%F3ria.pdf
http://www.alexcoletta.eng.br/2008/gerenciamento-de-memoria/
http://www.scribd.com/doc/5566086/08GERENCIA-DE-MEMORIA
…wikidot.com/gerenciamento-de-memoria:jose-gerar… 20/21
29/10/2010 Gerenciamento de memória no Linux - CES33 - Siste…
http://www.marcelotoledo.org/stuff/artigos/processos_no_linux/gerenciamento_de_processos_no_linux.html
Powered by Wikidot.com Help | Terms of Service | Privacy | Report a bug | Flag as objectionable
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License
Crim inal Justice Writing & Rhetoric, 3 Análise Matem ática T rum pet ex ercise
Collaboratory pm III database
C olby C om m unity C olle ge for trum pe t playe rs, stude nts
a nd te ache rs
…wikidot.com/gerenciamento-de-memoria:jose-gerar… 21/21