Projeto 3

Propaganda
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.
Download