Académique Documents
Professionnel Documents
Culture Documents
Conjunto de instruções
Tipos de dados e organização da memória
Modos de endereçamento à memória
Registradores acessíveis ao programador
Entrada / saída e sistema de interrupção
Memória
Unidade
UC Central de
Processamento
9
8 12 7
2 6 4
1
Unidade de
3 5
Lógica e Aritm.
Memória:
A Unidade de Memória é organizada como uma seqüência de células, denominadas
palavras (em inglês, words)1, cada célula possuindo um endereço único e podendo
ser acessada individualmente. Cada palavra armazena um grupo de dígitos binários
que pode representar um dado ou uma instrução. Portanto, a memória contém os
dados a serem operados e as instruções (programa) para manipular os dados ou
acionar as unidades de entrada e saída (E/S). A operação da memória (leitura ou
escrita) é controlada pela UC, que envia o sinal informando o tipo de operação (seta
6). O endereço de memória a ser acessado é enviado pela UC, através do barramento
de endereços (seta 7). As informações podem ser escritas na memória a partir da
ULA (seta 4) ou da Unidade de Entrada (seta 8), novamente sob controle da UC. As
informações podem ser enviadas da memória para a ULA (seta 2) ou para a Unidade
de Saída (seta 9).
Unidade de Entrada:
A Unidade de Entrada é o dispositivo que permite a entrada de dados a partir do
ambiente externo. Esses dados podem ser introduzidos na memória (seta 8) ou na
ULA (seta 3). A UC determina para onde a informação de entrada será enviada (seta
10). Hoje em dia um computador admite utilizar vários tipos de periféricos como
1
Em alguns computadores atuais, a célula corresponde a um BYTE (conjunto de 8 bits), sendo uma
palavra um múltiplo de 8 bits (normalmente, 32 bits, isto é, 4 bytes).
AMBIENTES OPERACIONAIS p. 2
Revisão de arquitetura dos computadores
Prof. Simão Sirineo Toscani
unidades de entrada (teclado, mouse, digitalizadores de imagens, unidades de CD-
ROM, etc.).
Unidade de Saída:
A Unidade de Saída é o dispositivo que permite a saída de informações para o
ambiente externo. A Unidade de Saída é dirigida pela UC (seta 11) e pode receber
dados da memória (seta 9) ou da ULA (seta 5) os quais são colocados então na forma
apropriada para o uso externo. Hoje em dia um computador admite vários tipos de
periféricos como unidades de saída (terminais de vídeo, impressora, discos
magnéticos, etc.).2
Unidade de Controle:
A UC dirige a operação de todas as unidades, fornecendo os sinais de controle que
acionam os diversos componentes do hardware. Esta unidade contém circuitos lógicos
e de temporização (ou de sincronização) que geram os sinais necessários à execução
de cada instrução de um programa. A UC busca uma instrução na memória enviando
um endereço (seta 7) e um comando de leitura (seta 6) para a memória. A palavra de
instrução armazenada é então transferida para a UC (seta 12). Esta palavra de
instrução é decodificada pelos circuitos lógicos da UC para determinar a ação a ser
executada (adição, subtração, carga de registrador, etc.). A UC utiliza esta informação
para gerar os sinais necessários para a execução da instrução. Mais detalhes são
apresentados na seção a seguir.
2
O modelo de Von Newmann não inclui unidades que sirvam de entrada e saída (discos magnéticos,
por exemplo). Nas máquinas atuais, estes periféricos são essenciais, sendo referidos como
dispositivos de armazenamento secundário ou auxiliar. Eles possuem uma característica importante:
após serem acionados pela UC, são capazes de transferir grandes volumes de dados de/para a unidade
de memória (memória RAM), através de um mecanismo denominado DMA (Direct Memory Access).
AMBIENTES OPERACIONAIS p. 3
Revisão de arquitetura dos computadores
Prof. Simão Sirineo Toscani
a
Registrador Registrador
de endereço MEMÓRIA de dados ULA
(REM) (RDM)
b
Contador de Registrador
prog. (PC) de inst. (RI)
Decodificador
de instruções
Gerador de
sinais controle
Unidade de Controle
AMBIENTES OPERACIONAIS p. 4
Revisão de arquitetura dos computadores
Prof. Simão Sirineo Toscani
- Registrador de Instruções (RI)
Quando a UC busca uma instrução na memória, o código de operação da instrução
vem para o registrador denominado RI (Registrador de Instruções). Este registrador é
utilizado somente pelo microprocessador, não podendo ser acessado pelo
programador. A instrução fica armazenada no RI enquanto o decodificador de
instruções a analisa.
Se a instrução tem um operando (endereço de dado a ser operado), o mesmo é
colocado no REM (isto é, o endereço do dado a ser utilizado na execução da instrução
é copiado do RDM para o REM – isto é indicado pela seta a, na figura acima). No
caso de uma instrução de transferência, o operando é copiado para o PC (seta b, na
figura acima), pois, nesse caso, o operando é o endereço da próxima instrução a ser
executada.
- Decodificador de Instruções
O decodificador de instruções tem a função de analisar a instrução presente no RI e,
de acordo com a mesma, enviar a codificação apropriada ao gerador de sinais de
controle.
AMBIENTES OPERACIONAIS p. 5
Revisão de arquitetura dos computadores
Prof. Simão Sirineo Toscani
• O ciclo sem fim da UCP
A UCP funciona repetindo indefinidamente o processo de busca, decodificação e
execução de instrução. Isto se repete até que seja executada uma instrução especial,
normalmente denominada HALT, que faz a UCP parar. Esta instrução é protegida e
não pode ser executada diretamente por um programa de usuário (instruções
protegidas serão consideradas adiante, nos modos de execução da UCP). Desta
maneira, desde que o computador é ligado, a “vida da UCP” consiste em repetir o
ciclo:
1. busca instrução
2. analisa (decodifica) a instrução
3. executa a instrução
4. volta ao passo 1
Na verdade, nos computadores atuais, após executar o passo 3 e antes de
executar o passo 4, a UCP verifica os sinais de interrupção e, se ocorreu alguma
interrupção, o hardware coloca no PC, automaticamente, o endereço da rotina 3 que
trata da interrupção sinalizada. Deste modo, a instrução buscada no passo 1 será a
primeira instrução da rotina de interrupção.
A seguir é detalhada a transferência de dados entre os elementos da UCP, por
ocasião no primeiro passo do ciclo (busca da próxima instrução):
1. REM PC
2. Sinal de leitura para o controlador de memória (enviado pela UC)
3. RDM Mem[REM]
4. RI RDM
5. PC <- PC + tamanho da instrução
Os cinco passos acima constituem o ciclo de busca da instrução (instruction
fetch cycle). O tempo necessário para executar o ciclo de fetch é constante para cada
computador. Já o tempo para executar uma instrução é variável, pois depende do tipo
da instrução e do modo de endereçamento utilizado na mesma. A execução da
instrução (geração dos sinais que acionam os componentes eletrônicos) é realizada no
denominado ciclo de execução da instrução (execution cycle).
Conforme visto acima, desde que o computador é ligado, o que a UCP faz é
repetir o ciclo “busca, decodificação e execução de instrução”. Portanto, desde o
início, já deve haver um programa na memória para ser executado. A existência do
software de controle na memória é garantida através de um processo automático
(realizado de forma automática pelo hardware), denominado carga inicial ou
bootstrapping.
• O processo de bootstrapping
Quando o computador é ligado, automaticamente o hardware executa um pequeno
programa que está gravado em ROM (memória permanente). Esse pequeno programa
faz a carga de um programa maior (que está no disco do sistema) e transfere a
execução para ele. O programa maior, por sua vez, faz a carga do kernel e dos
processos do SO, bem como faz a inicialização das estruturas de dados do sistema, e,
3
O mecanismo de interrupção, responsável pela carga do endereço da rotina de interrupção no PC é
descrito adiante.
AMBIENTES OPERACIONAIS p. 6
Revisão de arquitetura dos computadores
Prof. Simão Sirineo Toscani
finalmente, transfere a execução para o SO. Este procedimento de carga do SO é
conhecido como bootstrapping.
Observe que durante todo o tempo, desde a execução inicial do pequeno
programa armazenado em ROM, o que a UCP faz é simplesmente repetir o seu ciclo
infinito. Considerando que a UCP é capaz de executar um conjunto relativamente
pequeno de instruções, é impressionante o resultado obtido pelo SO. De fato, há quem
diga que um elefante é um rato com um SO (isto significa que um SO conseguiria dar
a um rato o poder de um elefante).
• O mecanismo de interrupção
Hoje em dia, praticamente todos os computadores são dotados de um mecanismo de
interrupção. Neste caso, a UC, logo após terminar a execução de uma instrução (antes
de iniciar o ciclo de fetch da próxima instrução) verifica as linhas de interrupção para
ver se alguma interrupção foi sinalizada. Se foi, o hardware, automaticamente, salva
os registradores da UCP na pilha do programa que estava em execução e carrega no
PC o endereço da rotina que trata da interrupção que foi sinalizada (as rotinas de
interrupção fazem parte do kernel do Sistema Operacional).
O mecanismo de interrupção é fundamental para a organização e o
funcionamento dos sistemas operacionais modernos. Pode-se dizer que as
interrupções são as forças que movimentam e dirigem os SOs. Na verdade, um SO só
recebe o controle da UCP (só trabalha) quando ocorre alguma interrupção. Essas
“forças motrizes” podem ser geradas por hardware ou por software.
- Interrupção de hardware
Uma interrupção de hardware é um sinal originado em algum dispositivo físico, que
faz com que a UCP suspenda a execução do programa que vinha executando
(guardando informações para continuar a execução desse programa, mais tarde) e
passe a executar uma rotina específica que trata da interrupção ocorrida.
Interrupções de hardware são geradas pelos vários dispositivos periféricos
(disco, impressora, teclado, etc.) ou pelo relógio (timer). O relógio é um dispositivo
que decrementa automaticamente o conteúdo de um registrador, com uma freqüência
constante, e interrompe a UCP quando o valor do registrador atinge zero. O SO
garante que ocorra pelo menos uma interrupção (e ele volte a trabalhar) dentro de um
tempo T, colocando no relógio um valor que demore T unidades de tempo para ser
decrementado até zero (o SO faz isso antes de entregar a UCP para um programa de
usuário).
Os computadores possuem instruções especiais para desabilitar (mascarar,
inibir) o sistema de interrupção. Enquanto as interrupções estão desabilitadas elas
podem ocorrer, mas não são sentidas pelo processador. Nesse caso, elas ficam
pendentes (enfileiradas) e só voltam a ser sentidas quando a UCP executa uma
instrução especial que habilita (desmascara, desinibe) as mesmas.
AMBIENTES OPERACIONAIS p. 7
Revisão de arquitetura dos computadores
Prof. Simão Sirineo Toscani
- Interrupção de software (trap ou system call)
Uma interrupção de software é um sinal de interrupção gerado por uma instrução
especial (portanto, por software) denominada chamada do sistema (system call) ou
chamada do supervisor (supervisor call). Alguns autores também chamam as
interrupções geradas por software de traps (armadilhas). Um trap desencadeia as
mesmas ações desencadeadas por uma interrupção de hardware, isto é, o programa em
execução é suspenso, informações são salvas e uma rotina específica do SO é
executada.
A diferença fundamental entre as interrupções de software e as de hardware é
que as primeiras (traps) são eventos previsíveis. Isto é, dado um programa e seus
dados, é possível determinar os pontos em que as interrupções de software irão
ocorrer. Por outro lado, as interrupções de hardware são geradas por dispositivos
periféricos (para sinalizar erros ou finais de operações) em pontos que são
imprevisíveis.
É comum que a denominação interrupção seja subentendida como interrupção
de hardware. Esta convenção será usada daqui para a frente. As interrupções de
software serão referidas explicitamente por traps ou chamadas do sistema.
Pode-se dizer que à cada interrupção ou trap corresponde uma porta de
entrada no SO e que a execução só entra no SO através de uma dessas portas. A
seguir é explicado o mecanismo que faz a UCP transferir automaticamente a execução
para a porta de entrada correta, quando ocorre uma interrupção ou um trap.
Tabela de interrupções
Em tempo de projeto do computador, é escolhida uma área da memória para conter
uma tabela, denominada tabela de interrupções, que irá conter uma linha (entrada)
para cada interrupção ou trap que possa ocorrer no sistema. Cada entrada da tabela
contém dois valores: um para ser carregado no PC (program counter) e outro para ser
carregado no registrador de estado. O registrador de estado é normalmente referido
como PSW (Processor Status Word) e já foi citado anteriormente. Trata-se de um
registrador especial que fornece basicamente duas informações: quais as interrupções
que estão habilitadas e qual é o modo de execução4 atual da UCP.
O hardware é projetado e construído de tal maneira que, quando ocorre uma
interrupção ou um trap, a UCP salva automaticamente os conteúdos do PC e da PSW
na pilha do programa que estava em execução e carrega novos valores nesses dois
registradores, a partir da entrada correspondente da tabela de interrupções. Em tempo
de carga do SO, a tabela de interrupções é inicializada corretamente, de modo que
cada entrada passa a indicar uma rotina do Kernel do SO.
4
O modo de execução pode ser normal (isto significa que um programa de usuário está em
execução) ou privilegiado (significa que o SO está em execução).
AMBIENTES OPERACIONAIS p. 8
Revisão de arquitetura dos computadores
Prof. Simão Sirineo Toscani
exclusivo do SO. Exemplos são instruções para desabilitar interrupções e instruções
para acionar periféricos.
Este controle no uso de instruções é conhecido como proteção de controle5
ou proteção de instruções. Para implementar esta proteção, o hardware teve que
passar a distinguir dois modos de processamento: modo privilegiado (também
chamado de modo supervisor, modo sistema ou modo mestre) e modo normal
(também chamado de modo usuário, modo programa ou modo escravo). Se a UCP,
no modo normal, tenta executar uma instrução protegida, a UC gera um trap do tipo
“instrução ilegal” (illegal instruction trap).
Sendo assim, sempre que um programa de usuário precisa realizar uma
operação que envolva alguma instrução privilegiada, ele tem que passar o controle
para o SO, mudando o modo de execução. Aqui chegamos a um ponto que é muito
importante para o entendimento do esquema utilizado (aqui os projetistas deram o
“pulo do gato”). Observe que a instrução de transferência para o SO não poderia ser
protegida, pois esta instrução seria executada por um programa de usuário. Também
não poderia ser uma instrução de transferência simples, pois isto permitiria transferir
a execução para qualquer ponto do SO, sem controle. Tampouco poderia ser uma
instrução de transferência para subrotina com troca (automatica) do modo para
privilegiado, pois uma instrução destas poderia ser usada por um usuário mal
intencionado para obter o controle total da máquina. Era necessário, portanto, que a
instrução de transferência para o SO tivesse alguma “armadilha” associada, para
pegar intrusos. Daí vem o nome trap (armadilha) para o esquema adotado. A solução
dos projetistas foi a de permitir a ação de transferir a execução para o SO (com troca
para modo privilegiado) apenas para pontos fixos e bem definidos do SO, através da
tabela de interrupções6. Nestas poucas portas de entrada, o SO pode fazer as
verificações que julgar necessárias e implementar as armadilhas que desejar.
Hoje em dia, praticamente todos os computadores possuem instruções
privilegiadas e dois modos de processamento. Sempre que ocorre uma interrupção ou
um trap, a UCP passa para o modo privilegiado. Posteriormente, ao devolver o
controle para um programa de usuário, o SO recoloca a UCP no modo normal.
Quando um programa de usuário precisa realizar uma operação que envolva instrução
protegida, o mesmo tem que executar um trap, passando como argumentos para o SO
a identificação da operação e os parâmetros para a sua execução.
5
Outro tipo de proteção implementado por hardware é a proteção de memória. A proteção de
arquivos (informações) é normalmente implementada por software.
6
Observe que a tabela de interrupções também precisa ficar protegida contra acessos de usuários.
AMBIENTES OPERACIONAIS p. 9
Revisão de arquitetura dos computadores
Prof. Simão Sirineo Toscani
todas as interrupções estavam habilitadas. Quando o valor era n (n<7), qualquer
dispositivo com prioridade maior que n podia interromper. As prioridades dos
dispositivos variavam de 1 a 7.
Cada programa utilizava uma pilha própria e o topo da pilha do programa em
execução era apontado pelo registrador SP. Sempre que ocorria uma interrupção (ou
era executado um trap), o hardware salvava automaticamente os valores do PC e da
PSW no topo da pilha corrente e carregava novos valores nesses dois registradores, a
partir da tabela de interrupções (localizada em uma área fixa da memória). O novo
valor do PC era o endereço da rotina correspondente à interrupção ocorrida. O novo
valor da PSW continha 7 no campo para mascarar interrupções e 1 no bit para indicar
o modo de execução. Portanto, após a mudança de contexto, a UCP passava a
trabalhar com interrupções desabilitadas e no modo privilegiado. Era função da rotina
de interrupção salvar os demais registradores da UCP (SP e registradores de uso geral
R0, R1, ..., R5).
Para voltar a executar um programa de usuário, existia uma instrução especial
denominada RTI (ReTurn from Interrupt) cuja execução consistia em carregar os
registradores PC e PSW com os valores contidos na pilha corrente (apontada pelo
SP). As últimas ações do SO, após arealização do seu serviço (isto é, após o
atendimento da interrupção), eram: (1) escolher o próximo programa a ser executado,
(2) restaurar os valores dos registradores SP, R0, R1, ..., R5, correspondentes a esse
programa, e (3) executar a instrução RTI.
A figura 4 mostra os principais componentes envolvidos no tratamento de
interrupções.
interrupção
(salva estado)
retorno de interrupção
(restaura estado)
SP PC
Tipos de interrupções:
PSW
• interrupção de periférico
• interrupção do relógio ...
• interrupção de proteção (erro de execução) ...
• chamada do sistema ou trap
PILHA
(após uma interrupção)
AMBIENTES OPERACIONAIS p. 10
Revisão de arquitetura dos computadores
Prof. Simão Sirineo Toscani