Porque estudar Gestão em TI?

O curso de Gestão da Tecnologia da Informação é um curso relativamente novo na área de informática, que busca capacitar o aluno a definir o melhor meio computadorizado a ser utilizado na gestão...Continue lendo

Piratas da Informática

Na década de 70,pensava-se que computadores eram coisas caras,interessantes apenas para grandes organizações.Não deixava de ser verdade,mas uma revolução estava começando...Continue lendo

Primórdios da computação

Os computadores eletrônicos aparecerem só na década de 40, mais apesar disso,seus fundamentos podem ser registrados a centenas e até mesmo milhares de anos antes...Continue lendo

Sociedade da Informação

Apesar de parecer simples determinar o que venha a ser sociedade da informação, se formos esboçar todas suas características, veremos que é muito mais complexo do que imaginamos...Continue lendo

Definição de TI

A sigla TI (Tecnologia da informação) abrange todas as atividades desenvolvidas por meio de recursos tecnológicos.É basicamente um conjunto de recursos computacionais que tem como intuito...Continue lendo

domingo, 24 de junho de 2012

Memória Virtual

Memória virtual é uma técnica pela qual é possível utilizar uma parte do disco rígido como se fosse memória RAM, assim sendo, o sistema operacional é capaz de executar aplicações mesmo que a soma de todos os programas em execução simultânea supere a da memória RAM  instalada no computador. Uma vantagem da técnica de memória virtual é permitir um número maior de processos compartilhando a memória principal, já que apenas panes de cada processo estarão residentes. Isto leva a uma utilização mais eficiente também do processador.
Existe um forte relacionamento entre a gerência da memória virtual e a arquitetura de hardware do sistema computacional. Por motivos de desempenho, é comum que algumas funções da gerência de memória virtual sejam implementadas diretamente no hardware. Além disso, o código do sistema operacional deve levar em consideração várias características especificas da arquitetura, especialmente o esquema de endereçamento do processador.

Proteção de memória

Em qualquer sistema multiprogramável, deve existir mecanismos para preservar as áreas de memória do sistema operacional e dos diversos processos dos usuários. O sistema operacional deve impedir que um processo tenha acesso ou modifique uma página do sistema sem autorização. Caso uma página do sistema operacional seja indevidamente alterada, é possível que, como conseqüência, haja uma instabilidade no funcionamento do sistema ou sua parada completa. Até mesmo páginas dos processos de usuários necessitam ser protegidas contra alteração, como no caso de frames contendo código executável.
Um primeiro nível de proteção é inerente ao próprio mecanismo de memória virtual por paginação.Neste esquema, cada processo tem a sua própria tabela de mapeamento e a tradução dos endereços é realizada pelo sistema. Desta forma, não é possível a um processo acessar áreas de memória de outros processos, a menos que haja compartilhamento explícito de páginas entre processos. A proteção de acesso é realizada individualmente em cada página da memória principal, utilizando-se as entradas das tabelas de mapeamento, onde alguns bits especificam os acessos permitidos.

Compartilhamento de memória

Em sistemas que implementam memória virtual, é bastante simples a implementação da reentrância,possibilitando compartilhamento de código entre os diversos processos. Para isso, basta que as entradas das tabelas de mapeamento dos processos apontem para os mesmos frames na memória principal, evitando,assim, várias cópias de um mesmo programa na memória.
O compartilhamento de memória também é extremamente importante em aplicações que precisam compartilhar dados na memória. O mecanismo de paginação permite que processos façam o mapeamento de uma mesma área na memória e, consequentemente, tenham acesso compartilhado de leitura e gravação.
 
Memória virtual por paginação.

A memória virtual por paginação é a técnica de gerência de memória onde 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 páginas no espaço virtual são denominadas páginas virtuais., enquanto as páginas no espaço real são chamadas páginas reais ou frames. Cada processo possui sua própria tabela (entrada na tabela de páginas – ETP), com informações de mapeamento que permitem ao sistema localizar a página real correspondente. Quando um programa é executado, as páginas virtuais são transferidas da memória secundária para a
memória principal e colocadas nos frames.
A definição do tamanho de página é um fator importante no projeto de sistemas que implementam memória virtual por paginação. O tamanho da página está associado à arquitetura do hardware e varia de acordo com o processador.
As páginas grandes tornam menor o tamanho das tabelas de páginas, ocorrendo o problema da fragmentação interna. A fragmentação só é encon­trada, realmente, na última página, quando o código não ocupa o frame por completo.
O principal argumento a favor do uso de páginas pequenas é a melhor utilização da memória principal. A partir do princípio da localidade, com páginas pequenas teriamos na memória apenas as partes dos programas com maiores chances de serem exe­cutadas. Quanto maior o tamanho de página, maiores as chances de ter na memória código pouco referenciado, ocupando espaço desnecessariamente. Além disso, pági­nas pequenas reduzem o problema da fragmentação interna

Memória virtual por segmentação

Memória virtual por segmentação é a técnica de gerência de memória onde o espaço de endereçamento virtual é dividido em blocos de tamanhos diferentes chamados segmentos. Na segmentação é mais simples o compartilhamento de memória, pois a tabela de segmentos mapeia estruturas lógicas e não páginas.
Enquanto na técnica de paginação o programa é dividido em páginas de tamanho fixo. sem qualquer ligação com sua estrutura, na segmentação existe uma relação entre a lógica do programa e sua alocação na memória principal.
Na técnica de segmentação, apenas os segmentos referenciados são transferidos da memória secundária para a memória principal. Se as aplicações não forem desenvolvidas em módulos, grandes segmentos estarão na memória desnecessariamente, reduzindo o compartilhamento da memória e o grau de multiprogramação.

Memória virtual por segmentação com paginação

Memória virtual por segmentação com paginação é a técnica de gerência de memória onde o espaço de endereçamento é dividido em segmentos e por sua vez, cada segmento divido em páginas.
Nessa técnica, um endereço virtual é formado pelo número do segmento virtual (NSV), um número de página virtual (NPV) e um deslocamento. Através do NSV, obtém-se uma entrada na tabela de segmentos, que contém informações da tabela de páginas do segmento. O NPV identifica unicamente a página virtual que contém o endereço, funcionando como um índice na tabela de páginas. O deslocamento indica a posição do endereço virtual em relação ao início da página na qual se encontra. O endereço físico é obtido, então, combinando-se o endereço do frame, localizado na tabela de páginas, com o deslocamento, contido no endereço virtual.

Política de busca de busca de páginas

A política de busca de páginas determina quando uma página deve ser carregada para a memória. Basicamente, existem duas estratégias para este propósito: paginação por demanda e paginação antecipada. Na paginação por demanda (demand paging), as páginas dos processos são transferidas da memória secundária para a memória principal apenas quando são referenciadas. Na paginação antecipada (antecipatory paging ou prepaging), o sistema carrega para a memória principal, além da página referenciada, outras páginas que podem ou não ser necessárias ao processo ao longo do seu processamento.

Políticas de alocação de páginas

Em algumas situações, quando um processo atinge o seu limite de alocação de frames e necessita alocar novas páginas na memória principal, o sistema operacional deve selecionar, dentre as diversas páginas alocadas, qual deverá ser liberada. Este mecanismo é chamado de politica de substituição de páginas.
A política de alocação de páginas determina quantos frames cada processo pode manter na memória principal. Existem, basicamente, duas alternativas: alocação fixa e alocação variável. Na política de alocação fixa, cada processo tem um número máximo de frames que pode ser utilizado durante a execução do programa. Caso o número de páginas reais seja insuficiente, uma página do processo deve ser descartada para que uma nova seja carregada. Na política de alocação variável, o número máximo de páginas alocadas ao processo pode variar durante sua execução em função de sua taxa de paginação e da ocupação da memória principal.
A política de alocação fixa de páginas apresenta dois problemas. Se o número máximo de páginas alocadas for muito pequeno, o proces­so tenderá a ter um elevado número de page faults, o que pode impactar no desem­penho de todo o sistema. Por outro lado, caso o número de páginas seja muito grande, cada processo irá ocupar na memória principal um espaço maior do que o necessário, reduzindo o número de processos residentes e o grau de multiprogramação. Nesse caso o sistema pode implementar a técnica de swapping, retirando e car­regando processos da/para a memória principal.

Políticas de substituição de páginas

Os algoritmos de substituição de páginas têm o objetivo de selecionar os frames que tenham as menores chances de serem referenciados em um futuro próximo; caso contrário, o frame poderia retornar diversas vezes para a memória principal, geran­do vários page faults e acessos à memória secundária. A partir do princípio da loca­lidade, a maioria dos algoritmos tenta prever o comportamento futuro das aplicações em função do comportamento passado, avaliando o número de vezes que uma pági­na foi referenciada, o momento em que foi carregada para a memória principal e o intervalo de tempo da última referência.
A melhor estratégia de substituição de páginas seria aquela que escolhesse um frame que não fosse mais utilizado no futuro ou levasse mais tempo para ser novamente refe­renciado.
Abaixo segue os algoritmos de substituição de páginas:

•Ótimo
O algoritmo ótimo seleciona para substituição uma página que não será mais referenciada no futuro ou aquela que levará o maior intervalo de tempo para ser nova­mente utilizada. Apesar de este algoritmo garantir as menores taxas de paginação para os processos, na prática ê impossível de ser implementado, pois o sistema operacional não tem como conhecer o comportamento futuro das aplicações.

•Aleatório
O algoritmo aleatório, como o nome já sugere, não utiliza critério algum de sele­ção. Todas as páginas alocadas na memória principal têm a mesma chance de serem selecionadas, inclusive os frames que são freqüentemente referenciados. Apesar de ser uma estratégia que consome poucos recursos do sistema, é raramente implementada, em função de sua baixa eficiência.

•FIFO(First-ln-First-Out)
No FIFO, o algoritmo seleciona a página que está há mais tempo na memó­ria principal. O algoritmo pode ser implementado associando-se a cada página o momento em que foi carregada para a memória ou utilizando-se uma estrutura de fila, onde as páginas mais antigas estão no início e as mais recentes no final.

•LFU(Least-Frequently-Used)
O algoritmo LFU seleciona a página menos referenciada. Para isso, é mantido um contador com o número de referências para cada página na memória principal. O algoritmo evita selecionar pági­nas que são bastante utilizadas.

•LRU(Least-Recently-Used)
O algoritmo LRU seleciona a página na memória principal que está há mais tempo sem ser referenciada. Se considerarmos o princípio da localidade, uma página que não foi utilizada recentemente provavelmente não será referenciada novamente em um futuro próximo.

•NRU(Not-Recently-Used)
Para a implementação deste algoritmo é necessário um bit adicional, conhecido como bit de referência (BR). O bit indica se a página foi utilizada recentemente e está presente em cada entrada da tabela de páginas.
Quando uma página é carregada para a memória principal, o bit de referência é alterado pelo hardware, indicando que a página foi referenciada (BR = 1). Periodi­camente, o sistema altera o valor do bit de referência (BR = 0), e à medida que as páginas são utilizadas, o bit associado a cada frame retorna para 1. Desta forma, é possível distinguir quais frames foram recentemente referenciados.

•FIFO com buffer de páginas
O algoritmo FIFO com buffer de páginas combina uma lista de páginas alocadas (LPA) com uma lista de páginas livres (LPL). A LPA organiza as páginas alocadas há mais tempo na memória no início da lista, enquanto as páginas mais recentes no seu final. Da mesma forma, a LPL organiza todos os frames livres da memória prin­cipal, , sendo que as páginas livres há mais tempo estão no início e as mais recentes no final.

•FIFO circular (clock)
Para a implementação do algoritmo existe um ponteiro que guarda a posição da página mais antiga na lista. Cada página possui associado um bit de referência, indicando se a página foi recentemente referenciada. Quando é neces­sário substituir uma página, o sistema verifica se o trame apontado tem o bit de referência desligado (BR = 0). Nesse caso, a página é selecionada para descarte, pois, além de ser a mais antiga, não foi utilizada recentemente. Por outro lado, se a página apontada tem o bit de referência ligado (BR = 1), o bit é desligado e o ponteiro incrementado, pois, apesar de ser a página mais antiga, foi utilizada recentemente. O processo se repete até ser encontrada uma página com bit de refe­rência igual a zero.
Swapping

A técnica de swapping em memória virtual possibilita a uma aplicação utilizar mais memória do que a fisicamente existente.
Quando existem novos processos para serem executados e não há memória principal livre suficiente para alocação, o sistema utiliza o swapping, selecionando um ou mais processos para saírem da memória e oferecer espaço para novos processos. Depois de escolhidos, o sistema retira os processos da memória principal para a memória secundária (swap out), onde as páginas ou segmentos são gravados em um arquixo de swap (swap file). Com os processos salvos na memória secundária, os trames ou segmentos alocados são liberados para novos processos.

Trhashing

O trhashing é a excessiva transferência de páginas/segmentos entre a memória principal e a secundária.
Na memória virtual por paginação, o thrashing ocorre em dois níveis: no do próprio processo e no do sistema. No nível do processo, a excessiva paginação ocorre devi­do ao elevado número de page faults gerado pelo programa em execução.
O thrashing no sistema ocorre quando existem mais processos competindo por memória principal que espaço disponível.
O thrashing em sistemas que implementam segmentação também ocorre em dois níveis. No nível do processo, a transferência excessiva de segmentos é devida à modu­larização extrema do programa.

x