Sistemas de Computação
Lic. Engª
Informática, 1º ano
2013/14
Docente
responsável: A.J.Proença
Autoavaliação
Organização e funcionamento dum computador
Última Modificação: 28 Mar 2014
|
A |
R |
B |
E |
---|---|---|---|---|
Conhecimentos e competências específicas de Sistemas de Computação |
||||
- Descrever a estrutura
interna de um computador tipo e caracterizar funcionalmente cada um dos
seus principais módulos constituintes (CPU, memória, I/O e barramentos), |
Ö - |
Ö - |
Ö Ö |
Ö Ö |
- Identificar e caracterizar
os principais níveis de abstração presentes num computador (HLL,
assembly, e linguagem máquina), ilustrar os mecanismos de conversão
e análise entre níveis na sua utilização em laboratório (gcc, gdb, ...),
ilustrar a execução, passo a passo, de uma instrução elementar em
linguagem máquina, e |
Ö - |
Ö Ö |
Ö Ö |
Ö Ö |
- Reconhecer as principais
características de um instruction set (nomeadamente, analisar e
avaliar as técnicas de especificação de operandos, caracterizar os
registos necessários num CPU, identificar e relacionar formatos de
instruções e identificar e caracterizar tipos de instruções), |
Ö - |
Ö - |
Ö Ö |
Ö Ö |
A1.
Considere a execução da seguinte
instrução (16-bits) num processador de 16-bits (little-endian) e usando
barramentos de 16 bits:
- soma de 2 inteiros em registos (R3 e R4), sendo o resultado
guardado no topo da stack, sem destruir o que lá estava.
Antes da execução, considere os seguintes conteúdos dos registos deste
processador e de parte da sua memória:
- em registos: IP (0x8080), SP (0x8414), R3 (0x8408), R4 (0x88);
- na memória: de 0x8080 a 0x8083 (0C 62 14 FF); de 0x8410 a 0x8417 (09 10
2A 3B 4C 5D 6E 7F)
a) Identifique o conjunto de sinais que deverão estar em cada um dos barramentos que ligam o processador à memória, indicando a dimensão de cada barramento e a função de cada um desses conjuntos de sinais.
b) Apresente cronologicamente em hexadecimal (e explicitando o raciocínio seguido) o conjunto de valores que deverá circular nos barramentos durante a execução desta instrução (cujo início ocorreu quando o processador terminou a execução da instrução anterior).
c) Indique, justificando, o conteúdo dos 4 registos referidos no enunciado (em hexadecimal), após a execução desta instrução.
d) Indique, justificando, o endereço e conteúdo das células de memória que foram modificadas com a execução desta instrução (em hexadecimal).
R1.
Comente as seguintes afirmações,
referindo claramente a(s) eventual(is) incorreção(ões) que encontrar e
corrigindo-a(s):
a) "O barramento de controlo num computador serve para transportar as instruções da memória para o processador, colocando-as num registo apontado pelo IP, para o processador as executar".
b) "A análise da estrutura interna de um processador mostra que ele possui um bloco de hardware denominado de 'instruction set', que serve para converter para binário o programa com os comandos para o CPU, codificado em ASCII".
c) "Ao compilar o ficheiro hello.c, vou obter o ficheiro hello.s, que é um programa em assembly codificado em binário, de acordo com a definição dos formatos de instrução do 'instruction set' do processador onde está a ser executado o compilador".
d) "Durante a execução de um programa, compete ao sistema operativo transferir cada uma das instruções da memória para o CPU, para serem executadas".
a) Identifique o conjunto de sinais que deverão estar em cada um dos barramentos que ligam o processador à memória, indicando a dimensão de cada barramento e a função de cada um desses conjuntos de sinais.
Sugestão de resolução
O processador comunica com a memória com 2 objectivos
principais: (i) para ir buscar instruções (há quem defenda uma memória só para
instruções separada de uma outra só para dados) e (ii) para ir buscar ou para
armazenar dados, na consequência da execução da própria instrução, depois de
trazida da memória e descodificada.
Quer num caso, quer no outro, o processador necessita de especificar (i) a
localização da memória que pretende aceder e (ii) o tipo de acesso: se é para
ler o que está na memória ou se é para escrever na memória; para além disso,
(iii) a informação propriamente dita tem de ser transportada do processador para
a memória, ou da memória para o processador.
Resumindo:
- (i) para especificar a localização da memória que se pretende aceder,
usa-se o barramento de endereços que, neste caso, é de 16 bits, conforme dito no
enunciado; é assim possível especificar um endereço de memória na gama [0,
2^16-1];
- (ii) o tipo de acesso será de leitura (sinal RD) ou de escrita (sinal
WR); são estes os únicos 2 sinais do barramento de controlo claramente
especificados na documentação sobre esta matéria;
- (iii) a informação - que tanto pode ser a instrução a executar, como os
dados a ler/escrever da/na memória - são transportados pelo barramento de dados
que, neste caso, é de 16 bits, conforme dito no enunciado.
Considere a execução da seguinte
instrução (16-bits) num processador de 16-bits (little-endian) e usando
barramentos de 16 bits:
- soma de 2 inteiros em registos (R3 e R4), sendo o resultado
guardado no topo da stack, sem destruir o que lá estava.
Antes da execução, considere os seguintes conteúdos dos registos deste
processador e de parte da sua memória:
- em registos: IP (0x8080), SP (0x8414), R3 (0x8408), R4 (0x88);
- na memória: de 0x8080 a 0x8083 (0C 62 14 FF); de 0x8410 a 0x8417 (09 10
2A 3B 4C 5D 6E 7F)
a) (...)
b) Apresente cronologicamente
em hexadecimal (e explicitando o raciocínio seguido) o conjunto de valores que
deverá circular nos barramentos durante a execução desta instrução (cujo início
ocorreu quando o processador terminou a execução da instrução anterior).
Sugestão de resolução
Cronologicamente:
- para ir buscar a instrução: (i) o processador coloca o conteúdo do IP no
barramento de endereços (0x8080) e ativa o sinal de RD; (ii) a memória coloca o
conteúdo das células em 0x8080 e 0x8081 no barramento de dados (0x0C62);
- para ir guardar o resultado da operação de soma (os operandos fonte já
estavam no processador, nos registos R3 e R4): (i) o processador atualiza o
conteúdo do SP (põe-no a apontar para a posição da memória logo acima do topo da
stack, deixando espaço para colocar lá um valor de 16 bits), coloca esse
valor no barramento de endereços (0x8412) e activa o sinal de WR; (ii) o
processador coloca o resultado da soma (0x8408+0x88) no barramento de dados
(0x8490).
Considere a execução da seguinte
instrução (16-bits) num processador de 16-bits (little-endian) e usando
barramentos de 16 bits:
- soma de 2 inteiros em registos (R3 e R4), sendo o resultado
guardado no topo da stack, sem destruir o que lá estava.
Antes da execução, considere os seguintes conteúdos dos registos deste
processador e de parte da sua memória:
- em registos: IP (0x8080), SP (0x8414), R3 (0x8408), R4 (0x88);
- na memória: de 0x8080 a 0x8083 (0C 62 14 FF); de 0x8410 a 0x8417 (09 10
2A 3B 4C 5D 6E 7F)
a) (...)
b) (...)
c) Indique, justificando, o
conteúdo dos 4 registos referidos no enunciado (em hexadecimal), após a execução
desta instrução.
Sugestão de resolução
Registos que foram modificados com a execução da instrução: IP (passa a apontar para a nova instrução, que se encontra a 2 células de distância) e SP que foi atualizado para apontar para o novo valor no topo da stack); os restantes 2 não foram modificados, pois foram apenas apenas usados para leitura.
Assim, após a execução:
- IP - 0x8082
- SP - 0x8412
- R3 e R4 - mantêm o que tinham antes.
Considere a execução da seguinte
instrução (16-bits) num processador de 16-bits (little-endian) e usando
barramentos de 16 bits:
- soma de 2 inteiros em registos (R3 e R4), sendo o resultado
guardado no topo da stack, sem destruir o que lá estava.
Antes da execução, considere os seguintes conteúdos dos registos deste
processador e de parte da sua memória:
- em registos: IP (0x8080), SP (0x8414), R3 (0x8408), R4 (0x88);
- na memória: de 0x8080 a 0x8083 (0C 62 14 FF); de 0x8410 a 0x8417 (09 10
2A 3B 4C 5D 6E 7F)
a) (...)
b) (...)
c)
(...)
d) Indique, justificando, o
endereço e conteúdo das células de memória que foram modificadas com a execução
desta instrução (em hexadecimal).
Sugestão de resolução
Apenas 2 células de memória foram modificadas: aquelas que foram escritas com o valor de 16 bits do resultado da soma de R3 com R4 (e que já vimos foi 0x8490); essas células encontram-se em 0x8412 e 0x8413.
Assim:
- de 0x8412 a 0x8413 : 90 84
R1.
Comente as seguintes afirmações,
referindo claramente as incorrecções que encontrar e corrigindo-as:
a) "O barramento de controlo num computador serve para transportar as instruções da memória para o processador, colocando-as num registo apontado pelo IP, para o processador as executar".
Sugestão de resolução
O barramento de controlo contém um conjunto de sinais de apoio
ao controlo das operações de transferência de informação de uns lados para
outros no interior de um computador. Nas relações entre o processador e a
memória, os principais sinais são os que especificam o tipo de operação a ser
efectuado na memória, quando esta recebe um valor no barramento de endereços: se
é uma operação de leitura da memória, ou se é uma operação de escrita na
memória.
Neste caso concreto, de busca de uma instrução, o barramento de controlo é usado
para indicar à memória que o processador pretende ler o conteúdo de uma (ou
mais) células de memória.
Adicionalmente, as instruções quando chegam ao processador
vindas da memória, para serem executadas, são colocadas num registo (é verdade,
normalmente designado pelo registo de instrução, ou IR), mas o IP não
aponta normalmente para esse registo, mas sim para a posição de memória que tem
a próxima instrução a ser executada.
Comente as seguintes afirmações, referindo claramente as incorrecções que encontrar e corrigindo-as:
a) (...)
b) "A análise da estrutura
interna de um processador mostra que ele possui um bloco de hardware denominado
de 'instruction set', que serve para converter para binário o programa com os
comandos para o CPU, codificado em ASCII".
Sugestão de resolução
O 'instruction set' é uma especificação do conjunto de
instruções que a unidade de controlo de um processador é capaz de descodificar e
interpretar, e não um bloco de hardware!
As instruções que o processador vai buscar à memória para executar, "os
comandos para o CPU", estão já codificadas de acordo
com essa especificação, i.e., o conjunto de bits que constitui uma instrução em
"linguagem máquina" está já organizado de acordo com o formato de instrução que
foi explicitamente especificado para cada uma das instruções do instruction
set de um processador.
Estas instruções não podem estar codificadas em ASCII, pois a sua execução pelo
processador seria bastante ineficiente. Compete a um programa montador (assembler)
pegar no ficheiro de texto (programa em assembly) que contém mnemónicas
que descrevem textualmente as instruções que o processador vai executar, e
converter esse ficheiro de texto (que está codificado em binário de acordo com a
tabela ASCII) para um ficheiro em binário de acordo com o o formato de
instruções específico desse instruction set.
Comente as seguintes afirmações, referindo claramente as incorreções que encontrar e corrigindo-as:
a) (...)
b) (...)
c) "Ao compilar o ficheiro
hello.c,
vou obter o ficheiro
hello.s, que é um programa em
assembly codificado em binário, de acordo com a definição dos formatos de
instrução do 'instruction set' do processador onde está a ser executado o
compilador".
Sugestão de resolução
O ficheiro hello.s é efectivamente "um programa em assembly codificado em binário", mas... o que está codificado em binário são os caracteres desse ficheiro (de texto!), e de acordo com a tabela ASCII.
Só depois de passar por um assembler é que esse programa estará num formato "em binário, de acordo com a definição dos formatos de instrução do 'instruction set' do processador" onde irá ser executado. Teremos então um ficheiro objecto; mais concretamente, um relocatable object program, conforme descrito na secção 3.1 do texto de apoio ISC disponibilizado.
E este programa até poderá depois ser executado num
processador diferente daquele onde está a ser executado o compilador.
Num caso como este estaremos na presença de um compilador cruzado (cross-compiler),
e esta situação é muito comum quando se pretende desenvolver software
para microcontroladores (por ex.) usando a plataforma do PC como sistema de
desenvolvimento.
Comente as seguintes afirmações, referindo claramente as incorreções que encontrar e corrigindo-as:
a) (...)
b) (...)
c) (...)
d) "Durante a execução de um
programa, compete ao sistema operativo transferir cada uma das instruções da
memória para o CPU, para serem executadas".
Sugestão de resolução
O sistema operativo é constituído por um conjunto de programas que são executados no processador da mesma maneira que os programas desenvolvidos por um qualquer utilizador. Poderão conter instruções especiais extra e alguns outros privilégios (particularmente nas permissões de acesso a recursos), mas fora isto são programas como os outros.
A unidade de controlo do processador é que é o principal
responsável por controlar as operações que transferem as "instruções
da memória para o CPU".
Assim, compete a este bloco de hardware gerar os sinais que, numa
sequência cronológica apropriada, (i) colocarão o conteúdo do IP no barramento
de endereços, (ii) activarão o sinal de controlo de leitura da memória (RD) e
que depois (iii) colocarão o que estiver no barramento de dados no registo de
instrução (IR) do processador; posteriormente, a unidade de controlo irá
interpretar os bits que estiverem no IR (i.e., descodificar a instrução).
Por curiosidade: nem todos
os processadores têm um registo de instrução com dimensão fixa; quando os
processadores têm instruções com comprimento variável, os processadores têm um
"registo" organizado como uma fila de espera com possibilidade de armazenar
vários bytes. Por exemplo, uma das diferenças entre o processador i8086 e o
i8088 (do PC original) era a dimensão desta fila de espera: 6 bytes no
i8088 e 8 bytes no i8086.