Sistemas de Computação
Mestr. Integr..  Engª Informática, 1º ano
201516
Docente responsável: A.J.Proença

Autoavaliação
Organização e funcionamento dum computador

Última Modificação: 03 Mar 2016

 


Organização e funcionamento dum computador


Resultados esperados em MIEI/SC: demonstrar que possui
 


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),
- caracterizar a melhoria de desempenho através da introdução de formas de paralelismo no hardware do CPU (SIMD, pipeline, superescalaridade) e da hierarquia de memória (níveis de cache e memória virtual)

Ö
-
Ö
-
Ö
Ö
Ö
Ö

- 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
- explicar conceptualmente os mecanismos de conversão entre níveis

Ö

-
Ö

Ö
Ö

Ö
Ö

Ö

- 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),
- Ilustrar a aplicação dessas características a CPU's diferenciados (CISC ou RISC)

Ö

-
Ö

-
Ö

Ö
Ö

Ö

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).

Proposta de resolução
 

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".

Proposta de resolução
 

Topo...

 

 

 

 

 

 


Resolução

Organização e funcionamento dum computador

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.

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
 

 

Regressar...

 


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.
 

Regressar...

Topo...

 

 

 

 


Página mantida por aproenca<at>di.uminho.pt
Última Modificação: 03 Mar 2016