Universidade Federal do ABC Disciplina: BC 1518 – Sistemas Operacionais (SO) Projeto 3 - 2Q/2010 Memória Virtual Esse projeto tem como objetivo permitir o contato com técnicas de substituição de páginas mostradas na aula de memória virtual. Escreva um programa em Java que implemente o algoritmo de substituição de página FIFO. Primeiro, gere uma string de referência de página aleatória, na qual os números de página variam de 0 a 9. Aplique a string de referência de página aleatória ao algoritmo e registre a quantidade de falhas de página ocorridas. Implemente o algoritmo de substituição de modo que a quantidade de quadros de página também possa variar. Nesse algoritmo, suponha que estamos trabalhando com páginação por demanda. Segue os algoritmos que serão baseados na classe abstrata abaixo: public abstract class ReplacementAlgorithm { // número de falhas de página protected int pageFaultCount; // número de quadro de página física protected int pageFrameCount; //pageFrameCount – o núemro de quadros de página física public ReplacementAlgorithm(int pageFrameCount) { if (pageFrameCount < 0) throw new IllegalArgumentException(); this.pageFrameCount = pageFrameCount; pageFaultCount = 0; } //return – o número de falhas de páginas que ocorreram public int getPageFaultCount() { return pageFaultCount; } //int pageNumber – número de página a ser inserida public abstract void insert(int pageNumber); } } Figura 1 – Classe abstrata do Algoritmo de Substituição de Página Crie e implemente a classe FIFO – que estenda o algoritmo ReplacementAlgorithm. Essa classe implementará o método insert ( ). Para testar seu algoritmo, use as classes disponívels abaixo: a) PageGerator – uma classe que gera strings de referência de página com número de página variando de 0 e 9. O tamanho da string de referência é passado ao construtor PageGenerator. Quando um objeto PageGenerator é construído, o método getReferenceString retorna a string de referência como um array de inteiros. public class PageGenerator { private static final int DEFAULT_SIZE = 100; private static final int RANGE = 9; int[] referenceString; public PageGenerator() { this(DEFAULT_SIZE); } public PageGenerator(int count) { if (count < 0) throw new IllegalArgumentException(); java.util.Random generator = new java.util.Random(); referenceString = new int[count]; for (int i = 0; i < count; i++) referenceString[i] = generator.nextInt(RANGE + 1); } public int[] getReferenceString() { return referenceString; } } Figura 2 – Classe PageGenerator b) Test – usada para testar sua implementação FIFO da classe abstrata ReplacementAlgorithm. O Teste deve ser executado da seguinte forma: java Test <# de string de referência> <# de quadros de página> /** * use: * java Test <reference string size> <number of page frames> */ public class Test { public static void main(String[] args) { PageGenerator ref = new PageGenerator(new Integer(args[0]).intValue()); int[] referenceString = ref.getReferenceString(); /** Use either the FIFO or LRU algorithms */ ReplacementAlgorithm fifo = new FIFO(new Integer(args[1]).intValue()); ReplacementAlgorithm lru = new LRU(new Integer(args[1]).intValue()); // output a message when inserting a page for (int i = 0; i < referenceString.length; i++) { //System.out.println("inserting " + referenceString[i]); lru.insert(referenceString[i]); } // output a message when inserting a page for (int i = 0; i < referenceString.length; i++) { //System.out.println("inserting " + referenceString[i]); fifo.insert(referenceString[i]); } // report the total number of page faults System.out.println("LRU faults = " + lru.getPageFaultCount()); System.out.println("FIFO faults = " + fifo.getPageFaultCount()); } } Quando você tiver implementado o algoritmo, experimente um número diferente de quadros de página para determinar string de referência e registre o número de falhas de página. Para determinado tamanho de string de referência, qual é o número ideal de quadros de página para esse algoritmo. Crie um diretório “projeto3” e salve uma cópia dos arquivos. Então, compacteo no arquivo projeto3.zip. Envie uma cópia do arquivo para o email [email protected] com assunto BC1518-Projeto3 – Nome do Aluno até a data de entrega.