Você está na página 1de 6

Universidade Federal de Ouro Preto UFOP Instituto de Cincias Exatas e Biolgicas ICEB Departamento de Computao DECOM

Trabalho Prtico 03

Bruno dos Santos Marques 12.2.4371 Prof Joubert de Castro Lima Disciplina: BCC266 Organizao de Computadores Agosto de 2013

Introduo
A linguagem C uma poderosa linguagem de programao disponvel para todos os entusiastas e pblico em geral que pretenda programar nela. Neste trabalho ser apresentado o desenvolvimento de uma simulao de um computador simples em continuao ao que foi feito no Trabalho Prtico 01 e 02. Este relatrio tem como objetivo a apresentao dos resultados e concluses obtidas no trabalho prtico proposto. A diferena entre este trabalho e os anteriores, foi a incluso de uma simulao de memria RAM.

Descrio do Problema
Precisamos executar um conjunto de instrues numa mquina hipottica. Neste caso simulando um computador simples, que executa uma determinada quantidade de instrues com o objetivo de somar, multiplicar, subtrair e dividir nmeros de um vetor. O trabalho usa o mesmo arquivo dos trabalhos anteriores, incluindo apenas a simulao de memria RAM que ser detalhado nesse trabalho.

Descrio de Materiais e Mtodos


Foi utilizado durante o desenvolvimento desse trabalho, a plataforma de programao CodeBlocks, sendo o cdigo desenvolvido na linguagem C++.

Partes do Cdigo
Para deixar o trabalho mais sucinto, segue apenas as partes de cdigo referentes ao Trabalho Pratico 03 e suas respectivas explicaes: Na funo int main: preencher(5*MAX); Topcode ram[MAX]; FILE* disco=fopen("programa.txt","r"); if(disco==NULL) { printf("Nao foi possivel abrir o arquivo.\n"); return 0; } preencherMemorias(ram,disco); Inicialmente foi implementado o programa gerador de instrues nesse trabalho, e a funo preencher se utiliza desse programa, criando um arquivo 5 vezes maior que o tamanho da RAM. Em seguida declarada a memria RAM. Logo abaixo, declarada a funo disco com base no que est no arquivo programa.txt gerado anteriormente. E antes de continuar feita uma verificao se o arquivo contm algum dado, caso contrrio o programa encerrado. while(IR!=4) { if(pc==MAX) { preencherMemorias (ram,disco); pc==0; } opcode op = MMU_acessoAssociativo(ram[pc]); mbr=memoriaDados[op.pos1]; mbr1=memoriaDados[op.pos2]; IR=op.oper; if(IR !=4) calculo(IR,mbr,mbr1); pc++; } Dentro do while, ele verifica se o PC igual ao tamanho da memria RAM, ele busca mais informaes no disco, chamando a funo preencherMemorias, e zerando o

contador PC. Segue as instrues como nos trabalhos anteriores, porm, em vez de acessar diretamente os dados, eles so recebidos da memria RAM. void preencherMemorias(Topcode* code, FILE* pfile) { int i = 0; int tam=0; char cod1[3], cod2[3], cod3[3], aux1, aux2; while( !feof( pfile ) && tam < MAX ) { fscanf(pfile, "%2s%c%2s%c%2s", cod1, &aux1, cod2, &aux2, cod3); code[i].oper = atoi(cod1); code[i].pos1 = atoi(cod2); code[i].pos2 = atoi(cod3); fscanf(pfile, "%c",&aux1); i++; tam++; } } A funo preencherMemorias fica responsvel pela parte que foi includa nesse trabalho, onde ele recebe as informaes que esto gravadas no arquivo de texto, e as envia para a memria RAM. free(ram); fclose(disco); Antes de finalizar o programa, liberada a memria usada por RAM e disco;

Experimentos
Durante o desenvolvimento deste trabalho foram feitos vrios testes, em busca de erros. Tambm foi necessrio fazer o ajuste das variveis, sempre verificando se eram necessrias ou no, para no terminar com variveis no utilizadas. Com o uso da memria podemos notar um aumento significativo da cache: Com o uso da memria podemos notar um aumento significativo da cache: Tamanho da memria: 2056 (simulando memria de 2GB) Tamanho do disco: 2056*5 Tamanho da cache 1: 4 Tamanho da cache 2: 8 Cache Hit: Cache 1: 1936 Cache 2: 1973 Cache Mis: Cache 1: 1981 Cache 2: 8 2000 1800 1600 1400 1200 1000 80 0 60 0 40 0 20 0 0

C ache H it 1

C ache H it 2

C ache Mis 1

C ache Mis 2

Com isso podemos notar que o uso da cache foi otimizado, principalmente em relao a cache 2, que o cache mis praticamente nulo.

Resultados
Ao fim do trabalho, obtive resultados interessantes, um deles foi a reviso de todo o contedo de programao do perodo passado, na questo de desenvolvimento do cdigo. Um ponto fraco encontrado, foi que tinha esquecido alguns conceitos, mas acabei lembrando durante pesquisas na internet para a resoluo do trabalho, e um ponto forte, alm de aprender um pouco uma nova linguagem, foi tentar manter o programa o mais simples possvel, em execuo e entendimento do cdigo.

Concluses
Aps tudo isso foi finalizado o desenvolvimento desse programa que tem como objetivo a simulao de um computador simples que faz as 4 operaes bsicas. Foi um trabalho interessante, que me ajudou a rever muitos conceitos aprendidos, e a praticar os mesmos, aprender nossos conhecimentos, afim de se chegar no resultado obtido. O trabalho em si no foi difcil, porm surgiram durante o seu desenvolvimento, erros de programao, que tiveram de ser verificados, mas isso foi superado. Ultrapassadas as dificuldades, foi possvel aperfeioar o trabalho e o cdigo fonte de modo a ser o mais organizado e eficiente possvel.