Você está na página 1de 15

Modelo de Von Neumann

É o modelo de design da maioria dos computadores actuais.

Consiste num CPU, memória e periféricos de I/O. sendo que a memória contem programas (instruções)
assim como dados. Ambos são representados como valores numéricos (bits). Cada instrução tem o
respectivo opcode em binário.

Este tipo de organização da memória é denominado de stored-program.

Os primeiros computadores tinham programas "fixos" quer fosse por uma questão de simplicidade quer
fosse por uma questão de treino.

calculadora de secretária - "Fixed program Computer", pois trata-se de um computador que foi
programado para um único fim: fazer cálculo matemático básico e não pode ser reprogramada facilmente.

Nos primeiros computadores quando era possível reprograma-los, este processo era muito manual porque
envolvia bastante esforço mental e físico de quem o pretendia fazer.

O conceito de computador stored-program mudou tudo isso. O facto de se ter criado uma arquitectura
com um conjunto de instruções e por se ter descrito a computação como uma série de instruções
(programa), a máquina tornou-se muito mais flexível.

Devido ao facto de se tratar as instruções da mesma maneira como os dados, uma máquina do tipo stored-
program pode facilmente alterar o programa, e pode faze-lo sob controlo do programa.("under program
control")

Uma máquina do tipo stored-program também permite aos programas modificarem-se durante a sua
execução, com isto permitindo ao computador programar-se a si próprio.

No entanto, com a evolução da arquitectura estas funcionalidades foram postas de parte por vários
motivos.

A possibilidade de tratar instruções da mesma forma que dados é o que torna os assemblers, compiladores
e outras ferramentas de programação possíveis.

"Escrever programas que escrevem programas"

"on the fly compilation technology " -> programas que geram código - uma forma de o código se auto-
modificar que continuou popular.

Defeitos do modelo de Von Neumann:


As modificações feitas pelos programas podem causar danos consideráveis, quer seja por acidente, quer
seja por uma questão de design. Em alguns computadores com design do tipo stored-program, um
programa mal escrito ou escrito com fins malignos pode provocar danos nele próprio, noutros programas,
ou até no sistema operativo, podendo levar o computador a "crashar".

Esta possibilidade dos programas poderem criar e modificar outros programas é também frequentemente
aproveitada por malware. Um overflow do buffer é um exemplo muito comum de uma "mal formação" de
código. Software de malware pode usar o overflow do buffer para destruir a stack, reescrever o programa
existente e posteriormente modificar outros ficheiros dos programas no sistema tendo em vista a posterior
propagação do malware para outras máquinas.
Protecções na memória e outras formas de controlo de acessos podem ajudar a proteger contra
modificações de programas quer seja de forma acidental ou com fins malignos.

1º Modelo com Arq.de Von Neumann - EDVAC - 1945

1º modelo a correr um programa guardado na memória - Manchester SSEM ("the Baby"). 21 Junho 1948

O principal defeito deste modelo:


A separação entre o CPU e a memória leva ao "von Neumann bottleneck", que consiste no baixo fluxo
transferência de dados (throughput) entre o CPU e a memória comparada com a quantidade de memória.

Nas máquinas modernas, o throughtput é muito inferior à velocidade a que o CPU pode trabalhar. Este
fenómeno afecta seriamente a velocidade de processamento quando o CPU tem de fazer processamento
mínimo em grandes quantidades de dados.

O computador é continuamente forçado a esperar que dados vitais sejam transferidos para e da memória.
À medida que a velocidade do CPU e a quantidade de memória aumentaram muito mais depressa que o
throughput entre eles, o bottleneck tornou-se num grande problema.

O impacto deste problema é reduzido através do uso de uma cache entre o CPU e a memória central, e
pelo desenvolvimento de algoritmos de "branch predicition".

ARQUITECTURA DE HARVARD

Usa memórias diferentes para guardar os dados e os programas. (8051)

Processador - é o componente ou conjunto de componentes que governa todo o sistema. CPU - Unidade
Central de Processamento

DRAM - memória dinâmica (volátil) -> Central

SRAM - memória estática -> Cache

I/O - teclado, display, rato, impressoras, discos (memória secundária - não volátil),etc...

PC – contador de programa. Endereço da próxima instrução a ser executada

IR – registo de instruções. Contem o endereço da instrução que está a ser executada

MAR – registo de endereçamento à memória

MBR – registo temporário de dados

I/O AR – registo de endereçamento de memória

I/O BR – registo de armazenamento temporário de dados de E/S

The stack is accessed explicitly by the PUSH (meter) and POP (tirar) instructions to temporarily store
and retrieve data, or implicitly by the subroutine call (ACALL, LCALL) and return (RET, RETI)
instructions to save and restore the program counter.

A stack-based computer system is one that stores temporary information primarily in stacks, rather than
hardware CPU registers (a register-based computer system).
RAM - RANDOM ACCESS MEMORY - Permite o acesso a qualquer endereço de memória a qualquer
momento. (um bit num flip flop SRAM , ou como carga num capacitor - DRAM)

- volátil - perde-se o seu conteúdo quando a alimentação é desligada


- é a memória para onde são carregados os programas em execução e os dados do utilizador

ROM - Contem a BIOS (basic input/output system), o programa usado para fazer o bootstrap - Processo
de iniciar um computador (mais conhecido por booting).
Mantém instruções que definem o auto teste realizado na inicialização do computador (Power-on self test
- POST) e o programa necessário para executar o programa responsável por executar programas - sistema
operativo.

Memória Cache - Operação


Na área da computação, cache é um dispositivo de acesso rápido, interno a um sistema, que serve de
intermediário entre um operador de um processo e o dispositivo de armazenamento ao qual esse operador
acede. A vantagem principal na utilização de uma cache consiste em evitar o acesso ao dispositivo de
armazenamento - que pode ser demorado - e que vale a pena armazenar as informações procuradas em
meio mais rápido.

Uma cache é um bloco de memória para o armazenamento temporário de dados que possuem uma grande
probabilidade de serem utilizados novamente. A CPU e o disco rígido frequentemente usam caches, assim
como os navegadores Web.

Uma definição mais simples de cache poderia ser: uma área de armazenamento temporária onde os dados
frequentemente acedidos são armazenados para acesso rápido.

BARRAMENTOS:

O sistema de interligação dos diversos componentes dum computador designa-se por barramento (bus).

Barramento de dados tem por função transportar a informação (código e dados) entre os blocos
funcionais dum computador;

Barramento de endereços tem por função transportar a identificação (“endereço”) dos sítios onde se
pretende ler ou escrever dados;

Barramento de controlo agrupa todos os sinais eléctricos de controlo do sistema, necessários ao bom
funcionamento do computador.

BLOCOS PRINCIPAIS DO PROCESSADOR:


Os principais blocos que constituem um processador são:

Conjunto de registos para armazenar temporariamente a informação que vem da memória ou os valores
de variáveis (da aplicação ou de gestão do sistema)

Unidades funcionais (aritméticas, lógicas, de vírgula flutuante,...) para operar sobre as variáveis
Unidade de controlo (control path), que emite a sequência de sinais adequados ao funcionamento do
processador e para actuação noutros componentes do computador

O bloco que processa directamente a informação (constituído pelos registos e unidades funcionais) é
designado por data path.

FETCH DUMA INSTRUÇÃO


 No contador de programas (PC) irá estar o endereço da próxima instrução a ser executada
 O processador faz a busca da instrução na posição de memória que está armazenada no PC
 O PC é incrementado
 A não ser que a próxima instrução não esteja armazenada na posição seguinte (instruções
de desvio)
 A instrução é armazenada no registo de instrução (IR)
 O processador interpreta a instrução e realiza as operações requeridas

EXECUÇÃO DUMA INSTRUÇÃO


 Com o código da instrução armazenado no IR, a execução da instrução se resume a uma das
seguintes possibilidades:
 Processador-Memória: transferência de dados do processador para a memória ou da
memória para o processador
 Processador-E/S: transferência de dados entre o processador e um dispositivo de E/S
 Processamento de dados: execução de operações aritméticas ou lógicas sobre os dados
 Controle: especifica que a seqüência de execução de instruções seja alterada
 Combinação dessas 4 possibilidades

A linguagem do computador
Bit - 0 ou 1 e words com comprimentos fixos

A escolha dos dois dígitos permite que qualquer word possa ser interpretada como um número binário
mesmo que seja uma instrução. Níveis lógicos 0 ou 1 que correspondem a low ou high voltage,
respectivamente.

100011001010000 - > 3600 ou ADD do MIPS

Ambos são valores numéricos

O assembler traduz a instrução para código binário das instruções em assembly.

ADD A,B ----->>> 1000110010100000

A + B ---->>>> ADD A,B ----->>> 1000110010100000

A + B - linguagem de alto nível

Compilador – Faz a tradução das instruções nas HLL em código assembly. A maior parte dos
compiladores já passa directamente para linguagem máquina

Vantagens das HLL - Concisas, permitindo diminuir drasticamente o tempo de desenvolvimento;


independência do hardware
Sistema operativo - Conjunto de rotinas ou macro instruções responsáveis pela gestão dos recursos do
computador. processos, discos, processador, memória, gráficos, etc..

Programa - sequência de instruções elementares e macro instruções.

Interpretador - Existe ainda outro mecanismo que permitem executar programas escritos em HLL sem
usar a compilação: a interpretação.

Com um interpretador, as instruções de HLL são analisadas uma a uma, e o interpretador para cada
instrução em HLL, gera o código correspondente em linguagem máquina e executa de imediato esse
código, sem o guardar.

Não há propriamente uma tradução de um programa noutro, mas sim a análise dum programa seguida de
geração e execução do código máquina associado.

Loader - In computing, a loader is the part of an operating system that is responsible for loading
programs from executables (i.e., executable files) into memory, preparing them for execution and then
executing them.

- In computer science, a linker or link editor is a program that takes one or more objects generated by
compilers and assemblers them into a single executable program.

Linker - Also called link editor. A systems program that combines independently assembled machine
language programs and resolves all undefined labels into
an executable file. Object code gerado pelo assembler ou o compilador e livrarias estáticas.

Object code/file - código máquina gerado pelo assembler a partir dum ficheiro fonte.
MIPS: Microprocessor without Interlocked Stages
Em 1981 uma equipa liderada por John L.Hennesy da Univ. de Stanford começou a trabalhar no MIPS.
Pretendiam com esse novo de CPU aumentar a performance através do uso da técnica "deep instruction
pipeline).

Na arquitectura pipeline múltiplas instruções são executadas ao mesmo tempo. Isto é conseguido porque
módulos dentro do CPU trabalham em paralelo para que o CPU carregue e comece a executar uma
instrução antes da anterior terminar. Isto era o oposto que acontecia com as arquitecturas tradicionais
onde o CPU esperava que uma instrução terminasse para que carregar e executar a próxima, fazendo com
que o CPU não estivesse a ser aproveitado ao máximo pois várias áreas estavam paradas.

Uma das maiores barreiras para o pipelining era que esta arquitectura necessitava que interlocks fossem
implementados para assegurar que as instruções que demoravam mais ciclos de relógio a serem
completadas parassem o pipeline de carregar mais dados. basicamente parar enquanto não fossem
completadas.

Um dos principais aspectos do MIPS é que exige que todas as instruções levem apenas um ciclo de
relógio a ser completadas removendo assim a necessidade de interlocks.

Assim os CHIPS podiam trabalhar com velocidades de relógio muito mais altas.

Se interlocks fossem utilizados provavelmente a velocidade seria mais baixa por causa dos tempos de
implementação.

Uma multiplicação que é uma instrução complexa de executar foi substituída por múltiplas mas simples
somas que eram executadas em pipeline aumentando assim a velocidade de execução.

A velocidade estava nos pipelines e não nas instruções.

Cores do MIPS estão entre os cores mais potentes como sendo dos mais usados em PDAs, set-top-boxes,
routers Cisco,N64, PS1, PS2,PSP, jogos de Arcada, impressoras, TVs digitais, modems DSL e cabo, etc..
Várias versões de SOs foram criadas para MIPS. Windows NT e CE, Linux,BSD Unix System V,etc..

Pensava-se que o MIPS e outros processadores RISC potentes iriam ultrapassar a arquitectura Intel IA32
depois do lançamento de Windows CE e NT para MIPS, no entanto, depois do lançamento de versões
mais rápidas de Pentiums a Microsoft deixou de lançar versões do NT para MIPS, passando apenas a
programar para computadores com CPU arquitectura Intel.

Devido ao facto da SGI ter abandonado o MIPS em detrimento das arquitecturas Itanium e IA32, o uso de
MIPS nos desktops desapareceu quase por completo.

Outras vantagens do MIPS são o baixo consumo de energia e baixo aquecimento do CPU. Estas aliadas à
variedade de ferramentas de desenvolvimento para sistemas embebidos disponíveis deverão fazer com
que o MIPS mantenha um papel de destaque nos sistemas embebidos.

Porquê usar assembly?

- Eficiência em termos de tempo de execução

- Tamanho dos programas

- Tolerância de erros e falhas:


- Os compiladores e demais ferramentas de geração de código geram um elevado overhead e nem sempre
o comportamento é o esperado

- Optimização: os compiladores são óptimos a gerar código de forma automática, mas não entendem os
algoritmos.

Possibilita acesso aos recursos de hardware

Princípios do Assembly

P1 . A simplicidade favorece a regularidade

No MIPS qualquer instrução aritmética tem que ter os 3 operandos que tem por objectivo diminuir a
complexidade do hardware.

RS,RT,RD

P2 . Mais pequeno é mais rápido

Um número reduzido de registos permite construir circuitos mais rápidos. Quanto maior o número de
registos, maior a CPU e maiores os tempos de atraso. Maior área, mais tempo leva entre os componentes
da CPU e as memórias. É o compilador que distribui os registos disponíveis assim como tem a
responsabilidade de atribuir uma zona de memória (RAM) ao array, assim como escolher o registo de
indexação.

Operandos em memória exigem mais instruções e maior tempo de execução - problemas de optimização
do compilador (manter em registos as variáveis mais frequentemente utilizadas)

P3 . Um bom projecto implica bons compromissos


Ex dum compromisso: no MIPS todas as instruções têm 32 bits. O 8051 não.

P4 . O caso mais comum deve ser mais rápido

Como uma parte considerável das instruções aritméticas lida muito frequentemente com valores
numéricos pequenos, implementou-se no MIPS o formato I que permite executar operações sobre valores
imediatos, tendo para isso no código da instrução um campo para constantes de 16bits. Se quisermos
operar sobre constantes maiores pudemos recorrer à instrução lui (para carregar para os MSB de um
registo o valor imediato) e por vezes ao registo $at.

Conclusão:

Se a maior parte das operações lida com valores pequenos não há necessidade de incluir campos maiores
para constantes nas instruções. Esta opção aumenta a velocidade de operação do processador.

Procedimentos
To compile a particular procedure, a compiler
must know which registers it may use and which registers are reserved for other procedures.

Registers $a0–$a3 (4–7) are used to pass the first four arguments to routines
(remaining arguments are passed on the stack). Registers $v0 and $v1
(2, 3) are used to return values from functions.

Registers $t0–$t9 (8–15, 24, 25) are caller-saved registers that are used to hold temporary quantities that
need not be preserved across calls

Registers $s0–$s7 (16–23) are callee-saved registers that hold long-lived values that should be preserved
across calls.

caller-saved registers - são registos usados para guardar informação que não é necessário ser preservada
entre chamadas de procedimentos. Um chama o outro. Um registo que não é guardado pela rotina que é
chamada.

callee-saved - é o contrário.

Register $gp (28) is a global pointer that points to the middle of a 64K block of memory in the static data
segment.

Register $sp (29) is the stack pointer, which points to the last location on the stack.

Register $fp (30) is the frame pointer. The jal instruction writes

Register $ra (31), the return address from a procedure call.

Procedure call frame:


This block of memory is used for a variety of purposes:

- To hold values passed to a procedure as arguments

- To save registers that a procedure may modify, but which the procedure’s caller does not want changed
- To provide space for variables local to a procedure

In most programming languages, procedure calls and returns follow a strict last-in, first-out (LIFO) order,
so this memory can be allocated and deallocated on a stack, which is why these blocks of memory are
sometimes called stack frames.

The frame consists of the memory between the frame pointer ($fp), which points to the first word of
the frame, and the stack pointer ($sp), which points to the last word of the frame.

Pseudo-instruções são instruções que não estão implementadas em hardware mas que são
disponibilizadas pelo assembler.
FORMATOS DAS INSTRUÇÕES
Modos de endereçamento – maneira como podemos aceder à memória

As instruções do MIPS são todas de 32 bits, recorrendo a apenas três formatos:

R-type: identifica 3 registos na mesma instrução, dois deles contêm operandos e o terceiro é o destino do
resultado;

I-type: identifica 2 registos e uma constante de 16 bits, um dos registos contém um operando (a constante
é o segundo operando) e o segundo é o destino do resultado

J-type: apenas contém um código e uma constante de 26 bits, sendo tipicamente utilizada em "saltos".

HIERARQUIA DA MEMÓRIA

Na análise do desempenho dum computador foi possível identificar os factores da arquitectura que
influenciam esse desempenho e onde actuar para que se consiga obter melhores tempos de execução de
aplicações.

Um dos factores identificados - o tempo médio de execução de cada instrução, expresso em ciclos de
clock, CPI - permite mostrar claramente como uma inadequada concepção de um sistema de memória
pode impor fortes penalizações nos tempos de execução de aplicações devido aos acessos à memória.

Princípio da Localidade

É a tendência de o processador ao longo de uma execução referenciar instruções e dados da memória


principal localizados em endereços próximos. Tal tendência é justificada devido às estruturas de repetição
e as estruturas de dados, vectores e tabelas utilizarem a memória de forma subsequente (um dado após o
outro).

A cache serve de intermediária entre o processador e a memória central. É usada para evitar o acesso aos
níveis inferiores de memória que têm tempos de acesso mais elevados. Faz o armazenamento temporário
de dados que possuem uma grande probabilidade de serem utilizados novamente (localidade temporal).

- localidade temporal (resulta de ciclos): um item referenciado tem grande probabilidade de o ser
novamente num curto espaço de tempo
-localidade espacial: (resulta da organização dos programas): quando um item é referenciado, há uma
elevada probabilidade de os seus vizinhos o serem em seguida

-localidade sequencial: resulta da própria natureza dos programas

Objectivos da hierarquia de memória:


-minimizar o miss rate construindo cada nivel com a máxima dimensão possível

- minimizar o miss penalty

Memória Cache é uma pequena quantidade de memória estática de alto desempenho, tendo por
finalidade aumentar o desempenho do processador realizando uma busca antecipada na memória RAM. A
taxa de acerto típica pode variar entre 80% e 99%.

O conteúdo da cache é feito por mapeamento directo que significa que cada palavra de memória pode ir
exactamente para uma posição da cache mas também que uma mesma posição de cache é partilhada por
várias posições de memória.

Basta dividir o endereço de memória pelo número de posições da cache - o quociente (MSB) fornece o nº
de bloco (tag) e o resto o endereço da cache.

Ex: 10110 mod 8 = 110

Tag = 10
End. na cache = 110
Valid = 1
Dados = o que está contido em 10110

Quando o cliente da cache (CPU, navegador etc.) deseja aceder a um dado que acredita estar no local de
armazenamento, primeiramente ele verifica a cache. Se uma entrada for encontrada com uma etiqueta
correspondente ao dado desejado, o elemento da cache é então utilizado ao invés do dado original. Essa
situação é conhecida como cache hit (acerto do cache). Como exemplo, um navegador poderia verificar a
sua cache local no disco para ver se tem uma cópia local dos conteúdos de uma página Web numa URL
particular. Nesse exemplo, a URL é a etiqueta e o conteúdo da página é o dado desejado. A percentagem
de acessos que resultam em cache hits é conhecida como a taxa de acerto (hit rate ou hit ratio) da cache.

Quando a cache é consultada e não contém um dado com a etiqueta desejada, é conhecida como cache
miss (erro do cache). O dado então é copiado do local original de armazenamento e inserido na cache,
ficando pronto para o próximo acesso.
Se a cache possuir capacidade de armazenamento limitada (algo comum de acontecer devido ao seu
custo), e não houver mais espaço para armazenar o novo dado, algum outro elemento deve ser retirado
dela para que liberte espaço para o novo elemento. A forma (heurística) utilizada para seleccionar o
elemento a ser retirado é conhecida como política de troca (replacement policy). Uma política de troca
muito popular é a LRU (least recently used), que significa algo como “elemento recentemente menos
usado”.

Operações de escrita
write through - Quando o sistema escreve para uma zona de memória, que está sustida na cache, escreve a
informação, tanto na linha específica da cache como na zona de memória ao mesmo tempo. Este tipo de
caching providencia pior desempenho do que Write-Back Cache, mas é mais simples de implementar e
tem a vantagem da consistência interna, porque a cache nunca está dessíncrona com a memória como
acontece com a técnica Write-Back Cache.

Não explora o princípio da localidade espacial.

write-buffer - permite diminuir o impacto negativo no desempenho

Na escrita se ocorrer um miss o respectivo bloco terá de ser transferido para a cache e só depois
actualizado e escrito na memória central

write-back - Usando esta técnica a CPU escreve dados directamente no cache, cabendo ao sistema a
escrita posterior da informação na memória principal. Como resultado a CPU fica livre mais rapidamente
para executar outras operações. Em contrapartida, a latência do controlador pode induzir problemas de
consistência de dados na memória principal, em sistemas multiprocessados com memória compartilhada.
Esses problemas são tratados por protocolos de consistência de cache.

Cache L1

Cache L1 ou cache de nível 1 consiste num tipo de memória cache que está mais próximo da ULA
(unidade lógica e aritmética).

Cache L2 [level 2] ou cache de nível 2 consiste numa memória interna do processador instalada em
associação com os transistores cujo objectivo é acelerar a velocidade do sistema, já que armazena as
informações mais utilizadas pelo processador, que caso não estivessem nessa memória teriam de ser
acedidas na memória RAM.

Bloco:
- unidade mínima de informação presente ou ausente de cada nível
-denominado de linha numa cache
-denominado de página na memória virtual

hit: tentativa de acesso a informação no nivel superior com sucesso

hit rate: taxa (%) de tentativas com sucesso

hit time: tempo de acesso ao nivel superior incluindo o tempo de procura

miss: tentativa de acesso a informação no nivel superior sem sucesso (page fault no caso de memória
virtual)

miss rate: taxa (%) de tentativas sem sucesso


miss penalty: tempo necessário para substituir o bloco em falta (em períodos de clock)

Sinal de clock (estímulo eléctrico que provoca a execução de operações elementares nos circuitos
digitais); a frequência indica o número de ciclos por segundo

2GHz = 2 biliões de ciclos por segundo

HIT TIME tem de ser MUITO MENOR que o MISS PENALTY


CPUtime = Nº instr * CPI * período do clock

CPI = CPI (execução no CPU) + CPI (acesso à memória)

CPI(acesso à mem) = Nº acessos / programa * miss rate * miss penalty


Ou
CPI(acesso à mem)= Instruções/Programa * Misses/Instrução * Miss Penalty

CPI = Tempo médio de execução de cada instrução, expresso em ciclos de clock

PROGRAMAS E DADOS ESTÃO EM MEMÓRIA:

como conciliar grandes capacidades de memória com custos e um desempenho


elevado?
R: Explorando o conceito de localidade e implementando uma hierarquia de memórias

- a estrutura dos programas tem um impacto muito grande na efectiva utilização desta hierarquia
(compiladores)

- a gestão desta hierarquia é partilhada pelo hardware, pelo sistema operativo, e por vezes, pelas
aplicações (memória virtual)
MEMÓRIA VIRTUAL
A memória virtual consiste num conjunto de recursos de hardware e software que possui três funções
básicas:

(i) assegurar que cada processo (aplicação) tenha seu próprio espaço de endereçamento,
começando em zero (problema de relocação ou recolocação);
(ii) (ii) protecção de memória, para impedir que um processo utilize um endereço de memória que
não lhe pertença;
(iii) (iii) possibilitar que uma aplicação utilize mais memória do que a fisicamente existente (essa é
a função mais conhecida).

The program thinks it has a large range of contiguous addresses; but in reality the parts it is currently using are scattered
around RAM, and the inactive parts are saved in a disk file.

VANTAGENS:
- permite correr programas maiores que a memória disponível
- permite melhor eficiência na partilha do processador (multitasking)
Virtual Address Space – espaço de endereçamento virtual disponível para cada aplicação (4GB na
plataforma Wintel 32 bits)

DESVANTAGENS:

- elevado custo dos page fault (centenas de milhares de ciclos de clock)

Funcionamento
Nos sistemas modernos, a memória física é dividida em blocos de bytes contíguos, em geral com 4
KiB ou 8 KiB de tamanho, denominados molduras de páginas (page frames).

O espaço de memória de um processo é dividido em pages (contendo as instruções e dados do programa),


que são fisicamente armazenadas nas page frames e possuem o mesmo tamanho.

Um endereço virtual é gerado durante o processamento da aplicação e encaminhado para a unidade de


gerenciamento de memória (MMU -- memory management unit), um dispositivo do processador cuja
função é transformar o endereço virtual em físico e solicitar este último endereço ao controlador de
memória.

A conversão de endereços virtuais em físicos baseia-se em page tables, que são estruturas de dados
mantidas pelo sistema operativo.
As page tables descrevem cada página da aplicação (num sistema em execução, existe pelo menos uma
page table por processo).

Cada table é indexada pelo endereço virtual e contém o endereço físico da moldura correspondente ou a
indicação que a página está em um dispositivo de armazenamento secundário (normalmente um disco
rígido).

Como o acesso à tabela de páginas é muito lento, pois está em memória, a MMU possui
uma cache associativa chamada TLB (Translation Lookaside Buffer -- buffer de
tradução de endereços), que faz a tradução dos endereços virtuais para endereços
físicos.

Bloco designado por página

Miss designado por page fault

Flexibilidade no mapeamento – fully associative

Substituição de páginas através do algoritmo Least Recently Used, segundo o


princípio da Localidade Temporal, a página utilizada há mais tempo é a melhor
candidata para o substituir.

Operações de escrita – Usam write-back

CONCLUSÕES:
Hierarquia da memória procura minimizar o efeito da memória central ser constituída
por circuitos DRAM (lentos e de capacidade limitada), explorando o principio da
localidade (espacial e temporal).

- velocidade das CPUs continua a aumentar a um ritmo mais elevado do que o da


diminuição do tempo de acesso das memórias

- são implementadas 2 caches multiniveis, sendo que uma é incorporada no CPU

- devem-se construir melhores estruturas de memória DRAM

- devem-se melhor o desempenho dos compiladores, explorando melhor a hierarquia da


Memória

Etcc..

Multiprocessamento é a capacidade de um sistema operacional executar simultaneamente dois ou mais


processos. Pressupõe a existência de dois ou mais processadores. Difere da multitarefa, pois esta simula a
simultaneidade, utilizando-se de vários recursos, sendo o principal o compartilhamento de tempo de uso
do processador entre vários processos.
No modelo de execução normal:

N instruções com k etapas executam em n*k ciclos

No modelo de execução em pipelining

N instruções com k etapas executam em k + n – 1 ciclos

Você também pode gostar