====== Algoritmos de substituição de páginas ====== O objetivo deste projeto é escrever um programa para simular os principais algoritmos de substituição de páginas usados no gerenciamento da memória virtual. O programa deverá simular os seguintes algoritmos: * FIFO (//First In, First Out//) * OPT (Algoritmo ótimo) * LRU (//Least Recently Used//) O programa deverá receber como parâmetro o número de quadros disponíveis na RAM e ler da entrada padrão (//stdin//) a sequência de referências às páginas (uma referência por linha), conforme o exemplo a seguir: simula-vm 4 < referencias.txt ou cat referencias.txt | simula-vm 4 Neste exemplo, a memória RAM tem 4 quadros disponíveis e o arquivo ''referencias.txt'' contém as referências de acesso às páginas. O programa deve gerar como saída o número de falta de páginas verificado para cada algoritmo, de acordo com o exemplo a seguir: 4 quadros, 30 refs: FIFO: 17 PFs, LRU: 15 PFs, OPT: 11 PFs **Atenção**: deve ser usada a //string// de formato abaixo para a impressão do resultado na tela. ** Não imprima mais nada além disso**. printf ("%5d quadros, %7d refs: FIFO: %5d PFs, LRU: %5d PFs, OPT: %5d PFs\n", ...) ; Para testar seu código, use os seguintes arquivos, que correspondem às strings de referências usadas no livro do professor (capítulo V - //Gerência de Memória//): * {{:so:vsim-exemplo.txt|Arquivo 1}}, com resultados mostrados na figura 28 do livro. * {{:so:vsim-belady.txt|Arquivo 2}}, com resultados mostrados na figura 31 do livro. * {{:so:vsim-gcc.txt.gz|Arquivo 3}}, trecho de //tracing// de acessos à memória do compilador GCC (obtido e adaptado [[http://www.cse.nd.edu/~dthain/courses/cse341/spring2005/projects/memory/|desta página]]). Este //tracing// tem 106 referências a 64K páginas. Os seguintes resultados são esperados para este teste: ^ Quadros ^ FIFO ^ LRU ^ OPT ^ | 64 | 38496 | 30416 | 18377 | | 256 | 9859 | 6270 | 3107 | | 1024 | 1450 | 1273 | 1260 | | 4096 | 1260 | 1260 | 1260 | Deve ser entregue ao professor o código-fonte em C do simulador (arquivo ''simula-vm.c''), devidamente comentado. Dicas: * para ler os parâmetros da linha de comando use ''argc/argv'' * para ler dados da entrada padrão (//stdin//) use ''scanf'' n = 0 ; while ( (! feof(stdin)) && (n < MAXIMO) ) scanf ("%d\n", vetor[n++]) ;