Como o uso de paginação e segmentação pode melhorar o uso de memória virtual?

Grátis

2 pág.

Como o uso de paginação e segmentação pode melhorar o uso de memória virtual?

  • Como o uso de paginação e segmentação pode melhorar o uso de memória virtual?
    Denunciar


Pré-visualização | Página 1 de 1

Questão 1/5 
Qual a diferença entre memória virtual por paginação e por segmentação? Em qual dos 
modelos ocorre fragmentação interna e externa e como isso ocorre? 
Nota: 20.0 
A principal diferença entre os dois sistemas está relacionada a forma como o espaço de 
endereçamento virtual está dividido logicamente. Na paginação, o espaço de 
endereçamento está dividido em blocos com o mesmo número de endereços virtuais 
(páginas), enquanto que na segmentação o tamanho dos blocos pode variar 
(segmentos). Na paginação ocorre a fragmentação interna que são os espaços livres nas 
páginas e na segmentação ocorre a fragmentação externa que são os espaços livres que 
sobram após a divisão dos frames. 
 
 
Questão 2/5 
Explique o funcionamento dos escalonamento circular Roud Robin ou RR. 
Nota: 20.0 
É um escalonamento do tipo preemptivo, quando um processo passa para o estado em 
execução existe um tempo-limite para uso continuo do processador denominado fatia 
de tempo (time-slice) ou quantum. 
 
 
Questão 3/5 
O que é um page fault, quando ocorre e quem controla a sua ocorrência? 
Nota: 20.0 
O page fault ocorre todas as vezes que um processo faz referência a um endereço 
virtual pertencente a uma página virtual que não se encontra mapeada em uma página 
real, ou seja, não está, no momento, na memória principal. A ocorrência de um page 
fault é verificada através do bit de validade presente na ETP da tabela de páginas 
referente à página virtual e controlada pelo sistema operacional. 
 
 
 
 
 
 
 
 
 
 
 
 
Questão 4/5 
Quais as desvantagens de um sistema operacional monotarefa do ponto de vista de uso 
dos recursos de hardware? 
Nota: 20.0 
Os sistemas monoprogramáveis se caracterizam por permitir que o processador, a 
memória e os periféricos permaneçam exclusivamente dedicados à execução de um 
único programa, gerando um elevado índice de ociosidade da CPU. 
 
 
Questão 5/5 
Explique o mecanismo de spooling de impressão? 
Nota: 20.0 
No momento em que um comando de impressão é executado, as informações que serão 
impressas são gravadas antes em um arquivo em disco, conhecido como arquivo de 
spool, liberando imediatamente o programa para outras atividades. Posteriormente, o 
sistema operacional encarrega-se em direcionar o conteúdo do arquivo de spool para a 
impressora.

Origem: Wikipédia, a enciclopédia livre.

Como o uso de paginação e segmentação pode melhorar o uso de memória virtual?

O programa acha que tem uma grande gama de endereços contíguos, mas, na realidade, as partes que está a utilizar estão dispersas em torno da RAM e as partes inactivas são guardadas em um arquivo em disco.

Memória virtual é uma técnica que usa a memória secundária como uma cache para armazenamento secundário. Houve duas motivações principais: permitir o compartilhamento seguro e eficiente da memória entre vários programas e remover os transtornos de programação de uma quantidade pequena e limitada na memória principal.

A memória virtual consiste em recursos de hardware e software com três funções básicas:[1][2]

  • (i) realocação (ou recolocação), para assegurar que cada processo (aplicação) tenha o seu próprio espaço de endereçamento, começando em zero;
  • (ii) proteção, para impedir que um processo utilize um endereço de memória que não lhe pertença;
  • (iii) paginação (paging) ou troca (swapping), que possibilita a uma aplicação utilizar mais memória do que a fisicamente existente (essa é a função mais conhecida).

Simplificadamente, um usuário ou programador vê um espaço de endereçamento virtual, que pode ser igual, maior ou menor que a memória física (normalmente chamada memória DRAM - Dynamic Random Access Memory).

A memória virtual deixou os programadores despreocupados com quanto de memória seu programa irá precisar para rodar no computador e se o respectivo programa poderia rodar com outros sem travar, podendo o programador se preocupar mais com a tarefa de programação do que com quanto o programa irá gastar de memória.[2]

Paginação para principiantes[editar | editar código-fonte]

Para o usuário que está com pouca memória RAM, paginação é muito útil pois possibilita que os seus programas utilizem um tamanho à sua escolha para usar como uma memória "RAM" virtual. Mas caso a memória do programa exceda a memória real do seu sistema, apenas as partes mais utilizadas pelo processo atual estarão na memória, enquanto o resto ficará armazenado no disco rígido.

Como o disco rígido é um hardware mais lento do que a memória RAM, essa memória virtual que foi dimensionada não será igual como se estivesse a utilizar uma memória RAM normal no computador.[3] A melhoria é significativa quando você usa memória virtual em um computador que não tem a mesma.[2]

História[editar | editar código-fonte]

Todos os computadores modernos de uso genérico utilizam memória virtual para executar a mais simples das aplicações, tais como processadores de texto, folhas de cálculo, jogos, leitores multimídia, etc. Os sistemas operacionais mais antigos, como o DOS e o Microsoft Windows de 1980,[4] ou os mainframes da década de 1960, geralmente não tinham a funcionalidade da memória virtual, com as excepções notáveis do Atlas B5000 e o Apple Lisa.

A memória virtual foi inicialmente criada para possibilitar a um programa ser executado em um computador com uma quantidade de memória principal (física) menor que o tamanho de todo o espaço utilizado pelo próprio programa.[5] Ou seja, o espaço ocupado pelas instruções, dados e pilha de execução de um programa pode ser maior que o espaço em memória principal disponível. Por exemplo, um programa que ocupa um total de 64 MiB pode ser executado em um computador com apenas 32 MiB disponíveis para o programa, bastando que o sistema operacional se encarregue de manter sempre na memória principal as partes adequadas à execução naquele momento.[6]

A memória virtual foi desenvolvida por volta de 1959-1962, na Universidade de Manchester para o Computador Atlas, terminado em 1962.[7] A ideia é atribuída a John Fotheringham,[8] no entanto, Fritz-Rudolf Güntsch, um cientista alemão, pioneiro da ciência computacional e, mais tarde, o criador do mainframe Telefunken TR 440, alega ter inventado o conceito em 1957, na sua tese de doutorado Logischer Entwurf eines digitalen Rechengerätes mit mehreren asynchron laufenden Trommeln und automatischem Schnellspeicherbetrieb (Conceito lógico para um sistema digital computacional com múltiplos sistemas assíncronos de armazenamento e modo de memória rápida automática).

Funcionamento[editar | editar código-fonte]

Existem dois mecanismos principais para implementação da memória virtual: paginação e segmentação[9]

Na paginação a memória física é dividida em blocos de bytes contíguos denominados molduras de páginas (page frames), geralmente com tamanho de 4 KiB (arquiteturas x86 e x86-64) ou 8 KiB (arquiteturas RISC) de tamanho. Por sua vez, o espaço de memória de um processo (contendo as instruções e dados do programa) é dividido em páginas que são fisicamente armazenadas nas molduras e possuem o mesmo tamanho destas.

Na segmentação existem vários espaços de endereçamento para cada aplicação (os segmentos). Neste caso, o endereçamento consiste em um par ordenado deslocamento, onde o deslocamento é a posição do byte dentro do segmento.

Na arquitetura x86 (32 e 64 bits), são usadas a segmentação e a paginação.[10] O espaço de endereçamento de uma aplicação é dividido em segmentos, onde é determinado um endereço lógico, que consiste no par [segmento:deslocamento]; o dispositivo de segmentação converte esse endereço para um endereço linear (virtual); finalmente, o dispositivo de paginação converte o endereço virtual para físico, localizando a moldura de página que contém os dados solicitados.

O endereço virtual é encaminhado para a unidade de gerenciamento de memória (MMU - Memory Management Unit), um dispositivo do processador, cuja função é transformar o endereço virtual em físico e solicitar este último endereço ao controlador de memória. A conversão de endereços virtuais em físicos baseia-se em tabelas de páginas, que são estruturas de dados mantidas pelo sistema operativo.[2]

As tabelas de páginas descrevem cada página da aplicação (num sistema em execução, existe pelo menos uma tabela de páginas por processo). Cada tabela é indexada pelo endereço virtual e contém o endereço físico da moldura correspondente ou a indicação de que a página está em um dispositivo de armazenamento secundário (normalmente um disco rígido).

Como o acesso à tabela de páginas é muito lento, pois está em memória, a MMU possui uma cache associativa chamada buffer de tradução de endereços (TLB - Translation Lookaside Buffer) que consiste em uma pequena tabela contendo os últimos endereços virtuais solicitados e seus correspondentes endereços físicos.

Linux em 32 bits[editar | editar código-fonte]

Na arquitetura x86 de 32 bits, o Linux pode endereçar até 4 GB de memória virtual (também chamado de espaço de endereçamento linear).[11] Este espaço é dividido em dois: o espaço do núcleo (kernel space) e o espaço do usuário (user space). O primeiro é único e protegido das aplicações comuns, e armazena, além do próprio código do núcleo, uma estrutura que descreve toda a memória física; este espaço é limitado a um gigabyte (1024 MB). Cada aplicação recebe um espaço de endereçamento de até 3 GiB para armazenar o código e os dados do programa.

Caso a memória física seja menor do que a necessária para conter todas as aplicações, o Linux pode alocar espaço em meios de armazenamento diversos (disco rígido, dispositivo de rede e outros). Este espaço é tradicionalmente conhecido como espaço de troca (swap space), embora o mecanismo adotado seja a paginação.

Windows em 32 bits[editar | editar código-fonte]

Analogamente ao Linux, as versões atuais do Windows de 32 bits usam um espaço de endereçamento de 4 GiB divididos em duas partes. Por padrão, o Windows reserva 2 GiB para o núcleo e permite que cada aplicação use até 2 GiB. Entretanto, é possível alterar essa configuração, e permitir que uma aplicação use até 3 GiB. Neste caso, obviamente, o espaço do núcleo será reduzido para um gigabyte .[12]

Diferentemente do Linux, o Windows usa apenas arquivos para paginação (paging files). Pode usar até 16 desses arquivos, e cada um pode ocupar até 4095 MiB de espaço em disco.

Espaços virtuais[editar | editar código-fonte]

Um sistema operacional convencional separa a memória virtual em espaço do núcleo e espaço do usuário, onde podem ser implementados threads(Tarefas).[13]

Espaço de usuário[editar | editar código-fonte]

Espaço de núcleo[editar | editar código-fonte]

O espaço do núcleo é estritamente reservado para o núcleo, extensões do núcleo e alguns drivers de dispositivos. Em muitos sistemas operacionais, o espaço de memória ocupada pelo núcleo nunca é paginada no disco. De outro lado, o espaço de memória do usuário (no qual funcionam todos os aplicativos de modo usuário) pode ser paginada no disco sempre que necessário.

Cada processo no espaço de usuário executa no seu próprio espaço de memória virtual e, exceto se requisitado, não pode acessar a memória de outro processo. Essa é a base de proteção de memória nos principais sistemas operacionais de hoje. Dependendo do privilégio, os processos podem requisitar ao núcleo o mapeamento de parte de outros espaços de memória de processos para os seus próprios como é o caso de depuradores. Os programas podem, inclusive, requisitar áreas de memória compartilhadas com outros processos.

Uma outra abordagem de sistemas operacionais experimentais é ter um único espaço de endereços para todo software e invocar a linguagem de programação da máquina virtual para certificar-se de que memória arbitrária não possa ser acessada - os aplicativos simplesmente não podem adquirir nenhuma referência dos objetos os quais não são permitidos o acesso. Essa abordagem tem sido implementada no JXOS, Unununium bem como no projeto de pesquisa da Microsoft Singularity.

Referências

  1. HENESSY, John L.; PATTERSON, David A. Arquitetura de computadores: uma abordagem quantitativa. Cap. 5. Rio de Janeiro: Campus, 2003.
  2. a b c d TANENBAUM, Andrew S. Sistemas operacionais modernos. Cap. 3. Rio de Janeiro: LTC. 1999.
  3. «HowStuffWorks - Como funciona a memória virtual». informatica.hsw.uol.com.br. Consultado em 13 de Março de 2011. Arquivado do original em 24 de maio de 2011
  4. «Windows Version History». Microsoft. Last Review: July 19, 2005. Consultado em 3 de dezembro de 2008
  5. Denning, Peter (1997). «Before Memory Was Virtual» (PDF). In the Beginning: Recollections of Software Pioneers. Consultado em 15 de julho de 2009. Arquivado do original (PDF) em 24 de fevereiro de 2012
  6. TANENBAUM, Andrew S.; WOODHULL, Albert S. Sistemas operacionais: projeto e implementação. Porto Alegre: Bookman. 1999.
  7. «The Atlas». www.computer50.org. Consultado em 13 de Março de 2011. Arquivado do original em 28 de julho de 2012
  8. "Dynamic storage allocation in the Atlas computer, including an automatic use of a backing store", Communications of the ACM, vol. 4, issue 10, pp. 435-436 - outubro de 1961
  9. STALLINGS, William. Operating systems - internals and design principles. 5. ed. Cap. 8. Upper Saddle River: Pearson - Prentice Hall. 2005.
  10. INTEL.Intel 64 and IA-32 architectures software developer’s manual - volume 3A: system programming guide, part 1. Cap. 3. Disponível em Intel - Manaul de processadores. Acesso em 14 maio 2010
  11. GORMAN, Mel. Understanding the Linux virtual memory manager. Cap. 4. Upper Saddle River: Prentice Hall, 2004.
  12. RUSSINOVICH, Mark E.; SOLOMON, David A. Microsoft Windows internals - Microsoft Windows Server 2003, Windows XP, and Windows 2000. 4. ed. Cap. 7. Redmond: Microsoft Press. 2005.
  13. Sistema Operacional Implementação de Processo e Threads Prof. Dr. Márcio Andrey Teixeira – Sistemas Operacionais

Bibliografia
  • Silberschatz, Galvin Gagne (2002). Fundamentos de Sistemas Operacionais. [S.l.: s.n.]
  • Hennessy, John L.; Patterson, David A. Computer Architecture. A Quantitative Approach. [S.l.: s.n.] ISBN 1-55860-724-2
  • TANENBAUM, Andrew S. (2003.). Sistemas operacionais modernos. 2. ed. São Paulo: Prentice-Hall,. [S.l.: s.n.] pp. 695 p. ISBN 85–87918–57–5
  • Murali. Virtual Memory Secrets. [S.l.: s.n.]

Ver também[editar | editar código-fonte]

  • Computador
  • Gerenciamento de memória

Referências

Ligações externas[editar | editar código-fonte]

  • «Como funcionam as memórias virtuais?» (em inglês)
  • «Partição SWAP do Linux» (em inglês)

Como o uso da paginação e segmentação pode melhorar o uso de memória virtual?

A principal diferença entre a paginação e a segmentação é a alocação da memória de maneira não fixa, a alocação depende da lógica do programa. O mapeamento é feito através das tabelas de mapeamento de segmentos. Os endereços são compostos pelo número do segmento e um deslocamento dentro do segmento.

Qual é a relação entre memória virtual e paginação?

O mecanismo de paginação viabilizou a implementação de memória virtual, em que um programa reside no disco e apenas páginas necessárias são trazidas à memória, sob demanda, é a chamada Paginação sob Demanda. Working Set é o conjunto de páginas acessadas por um processo durante um intervalo de tempo.

Qual a diferença entre memória virtual paginação e segmentação?

Os dois principais modelos de virtualização da memória se diferenciam pela política de divisão: a paginação utiliza blocos de tamanho fixo, e a segmentação utiliza blocos de tamanho variável alinhados com a divisão lógica do espaço de endereçamento.

Qual a diferença entre memória virtual por paginação e por segmentação em qual dos modelos ocorre a fragmentação interna e externa e como isso ocorre?

Na paginação está dividido em blocos com o mesmo número de endereços virtuais, enquanto que na paginação o tamanho do blocos pode mudar, ocorrendo fragmentação interna que são os espaços livres nas paginas e na segmentação ocorre a fragmentação externas que são os espaços livre que sobram apos a divisão dos frames.