Escolar Documentos
Profissional Documentos
Cultura Documentos
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.
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.
"on the fly compilation technology " -> programas que geram código - uma forma de o código se auto-
modificar que continuou popular.
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 a correr um programa guardado na memória - Manchester SSEM ("the Baby"). 21 Junho 1948
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
Processador - é o componente ou conjunto de componentes que governa todo o sistema. CPU - Unidade
Central de Processamento
I/O - teclado, display, rato, impressoras, discos (memória secundária - não volátil),etc...
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)
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.
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.
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.
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.
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
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.
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.
- Optimização: os compiladores são óptimos a gerar código de forma automática, mas não entendem os
algoritmos.
Princípios do Assembly
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
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)
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
- 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
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 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
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.
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.
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
miss: tentativa de acesso a informação no nivel superior sem sucesso (page fault no caso de memória
virtual)
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
- 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:
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).
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.
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).
Etcc..