Se pudermos manter na memória apenas os fragmentos de código e dados que estão a ser usados, então poderemos melhorar a utilização da memória e manter mais processos activos. Ao não mantermos o programa todo em memória, permite-nos pensar em ter programas que sejam maiores do que a quantidade de memória disponível. O utilizador veria então a máquina com um grande espaço de endereçamento apesar de a memória necessária para suportar tudo que ele faz não exista, isto é a memória virtual.
Esse mecanismo pode fazer parte de um sistema de administração de memória. Deve ser executado automaticamente sem que o utilizador precise de saber que ele existe. Código e dados que não estejam a ser usados são mantidos numa memória secundária, habitualmente o disco.
Neste sistema, o espaço de endereçamento virtual é dividido em blocos de igual tamanho chamados páginas. A memória é também dividida em blocos capazes de conter uma página, chamam-se molduras de página. Um endereço de memória virtual tem o seguinte formato:
número da página | deslocamento na página |
Para localizar a moldura que contém a página associada a um endereço de memória virtual, utiliza-se uma tabela de páginas. A tabela de páginas é consultada sempre que se acede a um endereço de memória virtual. Se a página existir em memória, o endereço físico em memória é calculado a partir do número da moldura que contém a página e do deslocamento indicado no endereço. Se a página não existe em memória tem de ser copiada da memória secundária. Uma das páginas em memória poderá ter de ser removida da sua moldura para dar lugar à nova página. O algoritmo que determina qual a página que deve ser removida é extremamente importante já que pode afectar consideravelmente a performance do sistema, pois pode acontecer que se removam páginas que estão para ser referenciadas proximamente.
Interrupções do relógio: %d Comandos de leitura: %d Comandos de escrita: %d Loads: %d Stores: %d Hit ratio: %.2f // em percentagem (por exemplo 85.43) Miss ratio: %.2f // em percentagem (por exemplo 14.57) Algoritmo: %s // LRU ou NFU ------------------------------ Page | Mold Load Last Cont R M ------------------------------ // de i = 0 até i = número de páginas - 1 continuar com %4d | %4d %4d %4d %4d %d %d // i ... // moldura em que está a página i (- se não se aplica) ... // ciclo de transferência em número de comandos (- se não se aplica) ... // ciclo da última referência em número de comandos (- se não se aplica) ... // valor do contador de 8 bits (- se não se aplica) ... // valor do bit R (- se não se aplica) ... // valor do bit M (- se não se aplica) ------------------------------Eventuais dúvidas sobre o formato de impressão podem ser esclarecidas através da análise dos exemplos que a seguir se apresentam.
Input | Output |
#isto é um comentario C 1024 2048 4096 lru 10 W 0 56 W 1027 57 R 0 R 2058 R 1027 V |
load M(0) P(0) write M(0) D(0) V(56) load M(1) P(1) write M(1) D(3) V(57) read M(0) D(0) V(56) store M(1) P(1) load M(1) P(2) read M(1) D(10) V(0) store M(0) P(0) load M(0) P(1) read M(0) D(3) V(57) Interrupções do relógio: 0 Comandos de leitura: 3 Comandos de escrita: 2 Loads: 4 Stores: 2 Hit ratio: 20.00 Miss ratio: 80.00 Algoritmo: LRU ------------------------------ Page | Mold Load Last Cont R M ------------------------------ 0 | - - - - - - 1 | 0 - 5 - - 0 2 | 1 - 4 - - 0 3 | - - - - - - ------------------------------ |
#isto é outro comentario C 1024 2048 4096 nfu 10 W 0 56 W 1027 57 R 0 R 2058 R 1027 V |
load M(0) P(0) write M(0) D(0) V(56) load M(1) P(1) write M(1) D(3) V(57) read M(0) D(0) V(56) store M(0) P(0) load M(0) P(2) read M(0) D(10) V(0) read M(1) D(3) V(57) Interrupções do relógio: 0 Comandos de leitura: 3 Comandos de escrita: 2 Loads: 3 Stores: 1 Hit ratio: 40.00 Miss ratio: 60.00 Algoritmo: NFU ------------------------------ Page | Mold Load Last Cont R M ------------------------------ 0 | - - - - - - 1 | 1 2 - 0 1 1 2 | 0 4 - 0 1 0 3 | - - - - - - ------------------------------ |
Um conjunto mais alargado de exemplos de input/output pode ser obtido aqui.
O que entregar? Um ficheiro .tar que inclua:
O código deve compilar e executar nas máquinas da sala das aulas práticas. Uma boa estruturação e legibilidade do código será valorizada.