Arquitectura de Computadores
e
Sistemas de Operação

Arquitectura de computadores
– CPU+Memória+Dispositivos de Entrada/Saída

Sistema de Operação
Pedro D. Medeiros ([email protected])
Grupo de Disciplinas de Arquitectura e Sistemas
de Computadores
Cadeiras obrigatórias
3º Sem
4º Sem
ASC 1
Engenharia dos
Sistemas de
Objectos
Distribuídos
Complementos
de Redes de
Computadores
ASC2
5º Sem
Redes de
Computadores
6º Sem
Sistemas de
Operação
8º Sem
Teoria da
Informação
Sistemas de
Processmento
Paralelo e
Distribuído
Sistemas
Distribuídos
Desempenho de
Sistemas de
Computadores
Cadeiras opcionais: a partir
do 7º semestre
Grupo de Arquitectura de
Computadores, Sistemas de
Operação e Redes de
Computadores
Objectivos principais
– Ensinar os alunos a serem programadores eficientes
e sofisticados, através da compreensão do que
realmente se passa quando um programa está a ser
executado
Passos até termos
um programa em execução
Ficheiro
com o código fonte
Compilador
Ficheiro
com o código
objecto
Biblioteca
com o código
Das bibliotecas da
linguagem
Compilador
Ficheiro
com o código
“assembly”
“Assembler”
Ligador
Ficheiro
carregado em
memória
Carregador
Ficheiro
executável
O código fonte do programa
hello.c
#include <stdio.h>
int main()
{
printf(“hello,world\n”);
}
O programa foi criado por um editor de texto e salvo num ficheiro
hello.c. O ficheiro com código fonte é uma sequência de bits,
organizados em bytes e que usam a codificação ASCII.
# i n c l u d e
< s t d i o . h >
35 105 110 99 108 117 100 101 32 60 115 116 100 105 111 46 104 62 104
...
Notar a existência de códigos para o espaço e a mudança de linha
Toda a informação no sistema
é um conjunto de bits

O que distingue cada conjunto é o contexto que
define a forma como os bits são interpretados. O
mesmo conjunto de bits pode ser
–
–
–
–
Um inteiro
Um real representado em vírgula flutuante
Uma sequência de caracteres
Um conjunto de instruções máquina
Os programas são transformados por outros
programas
prompt> gcc –o hello hello.c
printf.o
hello.c
Source
program
(text)
Prehello.i
processor
(cpp)
Modified
source
program
(text)
Compiler
(cc1)
hello.s Assembler hello.o
(as)
Assembly
program
(text)
Relocatable
object
programs
(binary)
Linker
(ld)
hello
Executable
object
program
(binary)
-Fase de pré-processamento: o programa original é modificado de
acordo com as directivas (#): exemplos: macros, inclusão de stdio.h
-Fase de compilação: o compilador traduz o ficheiro hello.i para um
ficheiro com mnemónicas em “assembly”
-Fase de “assembly”: o “assembler” traduz o ficheiro hello.s para
um ficheiro hello.o em que os seus bytes respresentam as instruções
máquina correspondentes a cada mnemónica
-Fase de ligação: o ligador inclui no ficheiro executável o código da
função printf() e resolve as referências
printf.o
hello.c
Source
program
(text)
Prehello.i
processor
(cpp)
Modified
source
program
(text)
Compiler
(cc1)
hello.s Assembler hello.o
(as)
Assembly
program
(text)
Relocatable
object
programs
(binary)
Linker
(ld)
hello
Executable
object
program
(binary)
O processador lê e interpreta
instruções armazenadas na memória
Para executar o programa hello é preciso
interagir com o interpretador de comandos (shell)
prompt> ./hello
hello,world
prompt>
 O interpretador de comandos executa o ciclo:

– Lê uma linha
– Interpreta essa linha, pondo um programa a executar
– Espera que esse programa acabe
A execução do programa hello

Os slides seguintes apresentam as várias fases da
vida do programa hello quando é executada num
computador semelhante a um PC. O hardware
inclui:
–
–
–
–
“bus” de interligação
Dispositivos de entrada/saída
Memória central (RAM)
Processador (CPU)
Obtem instruções da memória e executa-as
 Unidade aritmética e lógica (ALU)
 Registos

CPU
Register file
PC
ALU
System bus
Memory bus
Main
memory
I/O
bridge
Bus interface
I/O bus
USB
controller
Mouse Keyboard
Graphics
adapter
Disk
controller
Display
Disk
Expansion slots for
other devices such
as network adapters
hello executable
stored on disk
O interpretador de comandos lê os caracteres ASCII
“./hello” cr do teclado
Register file
CPU
PC
ALU
System bus
Memory bus
Main "hello"
memory
I/O
bridge
Bus interface
I/O bus
USB
controller
Mouse Keyboard
User
types
"hello"
Graphics
adapter
Disk
controller
Display
Disk
Expansion slots for
other devices such
as network adapters
O ficheiro executável “hello” é carregado em
memória central
Register file
CPU
PC
ALU
System bus
Memory bus
"hello,world\n"
Main
memory
hello code
I/O
bridge
Bus interface
I/O bus
USB
controller
Mouse Keyboard
Graphics
adapter
Disk
controller
Display
Disk
Expansion slots for
other devices such
as network adapters
hello executable
stored on disk
Execução do programa hello
CPU
Register file
"hello,world\n"
PC
ALU
hello code
System bus
Memory bus
Main
memory
I/O
bridge
Bus interface
I/O bus
USB
controller
Mouse Keyboard
Graphics
adapter
Disk
controller
Display
"hello,world\n"
Disk
Expansion slots for
other devices such
as network adapters
hello executable
stored on disk
Arquitectura de computadores

Definição de arquitectura de computadores
– A visão do programador do hardware

Arquitectura de Von Neumann
– Usada em quase todos os computadores existentes
– Computador constituído por 3 partes



Processador ou Unidade central de Processamento (CPU) –
elemento activo; executa instruções
Memória central – armazenamento de dados e instruções
Dispositivos de entrada e saída
– Realizar entrada de dados
– Realizar a saída de dados
Arquitectura de Von Neumann
Dispositvos
de entrada
CPU
Dispositivos
de saída
Memória
central
(programa +
dados)
Memória central
Ordem de leitura
Ordem de escrita
CPU
Endereço
Dados
Funcionamento do CPU

Extremamente Primitivo
– Não percebe instruções em língua natural nem numa linguagem de
programação
– Não há nenhum comando para executar a construção while
– A complexidade é sacrificada em favor da velocidade

Usa-se um tradutor para transformar um programa escrito
numa linguagem de alto nível para a linguagem nativa da
máquina
– Esse tradutir chama-se compilador
– Um programa escrito numa linguagem de alto nível como Java,
C++, C chama-se programa fonte
– A linguagem para a qual se traduz chama-se linguagem máquina
– A linguagem máquina é aquela que compreendida pelo hardware
Linguagem máquina

A linguagem máquina é a mais primitiva
–
–
–
–
–


Tudo é representado por números
A nível hardware, os números são representados em binário
Os números representam instruções (código)
Os números representam dados
O Contexto decide se um número representa um dado ou uma
instrução
Na prática, quase nunca se programa nessa linguage
Usa-se uma linguagem, muito próxima da linguagem
máquina chamada Assembler
–
–
–
–
É simbólica por natureza (em oposição a numérica)
A cada número de instrução corresponde uma mnemónica
Ex., 12 é ADD
Às posições de memória também se podem associar nomes (às
vezes chamadas variáveis)
Características de uma arquitectura

Memória
0 1 2
3 4
5
6 7
8
9
00
10
20
30

O processador (CPU Central Processing Unit)
contém um conjunto de Registos (cada registo N
flip-flops)
IP: Instruction pointer
IR: Instruction Register
AX: Arithmetic Register/Acumulador
CF: Condition Flag
Programa muito simples

Mostrado em “assembler” e não em linguagem máquina
copy ax, x
add ax, y
copy z, ax
– Implementa
z = x + y;

Não esquecer, que na realidade TUDO SÃO NÚMEROS
– Poderia ser:
20 101
12 102
21 103
– Se copy-into = 20, add = 12, e copy-out = 21 e
x armazenado em 101, y em 102, e z em 103
Ciclo “Obter-Executar” Fetch Execute


O relógio conduz sistematicamente o CPU através dos dois
seguintes ciclos:
FETCH (OBTENÇÃO)
– Obter instrução da memória

O registo IP (também chamado program counter ou PC) diz de onde se
obtém
– Incrementa o IP (para apontar para a próxima instrução)

EXECUTE (EXECUTAR)
– Descodificar a instrução



Descobrir o que é pretendido (add?, copy? …)
Extrair um endereço de memória da instrução
Se necessário, obter informação da memória
– Executar a instrução

Por exemplo, somar a informação obtida ao Acumulador (AX)
O simulador P88
Software de apoio ao livro “Great Ideas in Computer
Science with Java”, de A.W. Biermann e D. Ramm,
MIT Press 2001, ISBN 0-262-02497-7
 Programa escrito em Java que simula um CPU que é
uma versão simplificadíssima do Pentium
 Código fonte do simulador e programas exemplo
acessíveis na página da cadeira e também em

http://www.cs.duke.edu/~dept/Great_Ideas_with_Java/software.html

Para usar:
– Colocar todos os ficheiros numa directoria de trabalho
– Compilar os ficheiros com extensão java
– Usando um “browser” abrir o ficheiro P88.html
Algumas instruções

copy e add
– Movimento da direita para a esquerda
– Muitas instruções envolvem o acumulador (AX)

in e out
– Como write/cout/printf and read/cin/scanf em Pascal/C++/C
– in transfere do teclado para AX
– out transfere de AX para o ecrã

{
Exemplo -- programa para executar:
readln(x);
readln(y);
z = (x + y);
writeln(z);
}
sum.as
0
1
2
3
4
5
6
7
8
x
y
z
in
copy
in
copy
copy
add
copy
copy
out
0
0
0
ax
x, ax
ax
y, ax
ax, x
ax, y
z, ax
ax, z
ax
;
readln(x);
;
readln(y)
;
z = x + y
;
writeln( z );
Exemplo de uma entrada e saída de dados:
<23
<16
>39
Mais instruções


Necessárias para suportar as construções if e while
Usa a instrução cmp
– Compara valores em AX e numa posição de memória
– Posiciona a “carry flag”



CF = B (below) : AX menor que o conteúdo da posição) ou
CF = NB (not below): (AX maior ou igual ao conteúdo da posição de
memória)
Usa a instrução jump para tirar partido da informação na
“carry flag”
– Instrução jnb endereço: salta para o endereço se CF contém
NB
– Instrução jb endereço salta para o endereço se CF contém B
– jmp salta sempre, independentemente do valor de CF

Pode-se agora apresentar o código “assembler” equivalente
ao if
largest.as
Programa para escrever o maior de dois números lidos:
in ax
; readln( r )
copy r, ax
in ax
; readln( s )
copy s, ax
copy ax, s
cmp ax, r
; if( s < r )
jnb there
; sim, saltar para there
copy ax, r
out ax
; writeln( r );
jmp quit
there copy ax, s
out ax
; writeln( s );
quit halt
r
0
s
0
Exemplo de entradas/saídas:
<33
<44
>44
Programar em “Assembler”

Escrever programas em “assembler”
– Não é demasiado difícil e adquire-se prática rapidamente
– Em tempos fez-se por razões de eficiência


O programador conseguia fazer melhor do que o compilador …
Mas os compiladores cada vez são melhores
– Contudo, a experiência mostra que um programador produz
em média poucas dezenas de linhas de código por dia


Este número é independente da linguagem!
É melhor produzir poucas linhas de uma linguagem de alto nível
Computador moderno
comparado com o P88

Tamanho da memória
– PC’s agora chegam a ter 1 Gbyte de memória central
– As instruções máquina disponíveis são em muito maior número

Muitos registos
– É habitual ter-se 32 acumuladores
– Registos e hardware dedicados a operações em vírgula flutuante

Hierarquia de memória
1.
2.
3.
4.
5.
Registos
Memória Cache
Memória central (RAM)
Disco (memória virtual)
Armazenamento “Offline” (bandas, CDROMs, DVDs, etc.)
Papel do sistema de operação (SO)
Ficheiro Executável
Carregado em Memória
Instruções
máquina
executadas
directamente
pelo CPU
Instruções interpretadas
pelo Sistema de Operação
(por exemplo, escrita no écrã,
leitura do disco ...)
Sistema de Operação
(sempre carregado em
Memória)
Hardware (Processador, Memória, Discos, ...)
O sistema de operação faz a gestão do hardware
• quando o programa hello correu ele não fez acesso
directo aos dispositivos de entrada/saída
• O sistema de operação (SO) interpõe-se entre os
programas e o hardware
•Funções do SO
•Proteger o hardware de “maus usos”
•Criar uma forma mais fácil e unificada de
manipular o hardware que pode ser de diferentes
tipos
Programas de aplicação
Software
Sistema de Operação
Processador
Memória central Dispositivos de I/O
Hardware
Funções do SO
Gestão do CPU
 Gestão da memória central
 Suporte do sistema de ficheiros
 Suporte das operações de E/S
 Suporte dos protocolos de rede
 Protecção e segurança

Gestão do CPU – noção de
processo
Um processo é um programa em execução. Um
processo necessita de recursos para efectuar a
computação que lhe está associada
- tempo de CPU
- memória central
- ficheiros, periféricos e dispositivos de
comunicação com outros processos
 Em termos de gestão de processos, o SO tem de:

– Criar e destruir processos.
– Suspender e reactivar processos.
Gestão de memória
A memória central é partihada pelos processos,
pelo SO e pelos periféricos
 O SO é responsável por:

– Manter informação sobre que partes da memória
estão livres e quais estão ocupadas e por quem.
– Atribuir e desafectar memória de acordo com as
necessidades dos processos.
Gestão de ficheiros
Um ficheiro é um conjunto de informação
armazenado no disco. Pode conter dados ou
programas
 O SO é responsável por:

– Criar e destruir ficheiros.
– Criar e destruir directorias.
– Suportar primitivas para manipular ficheiros e
directorias.
– Fazer a correspondência (Mapping) dos ficheiros e
directorias em blocos de disco.
Suporte das operações de E/S
Os programas do utilizador não podem executar
directamente acções sobre os periféricos
 O suporte das operações de E/S é feito por uma
parte do SO que é composto por:

– Parte independente dos periféricos - conjunto de
serviços comuns
Relacionamento com outros componentes do sistema
 Optimização do desempenho (por exemplo caches)

– Parte dependente de cada periférico - manipulação
do controlador hardware, interrupções … “device
driver” – gestor de periféricos
Suporte de rede
O hardware inclui dispositivos de
comunicação com outros computadores (ex:
Controladores de Rede Ethernet).
 A troca de informação entre máquinas exige
um protocolo.
 Se o SO suportar esses protocolos podem
ser usados recursos residentes noutras
máquinas

Protecção


Protecção tem a ver com mecanismos para
controlar o acesso aos recursos do sistema por
processos ou utilizadores
O mecanismo de protecção deve:
– Distinguir entre uso autorizado e não autorizado.
– Especificar as operações permitidas.
– Fornecer meios para garantir o cumprimento das regras.
O que é o sistema de operação ?
Conjunto de código permanentemente carregado na
memória central (RAM) – também chamado núcleo
ou “kernel”
 A sua acção é complementada por

– Programas de sistema: interpretador de comandos,
carregadores, ligadores, ...
– Processos de sistema

O SO é carregado na RAM quando há:
– Um “power up” ou um “reset” hardware
Arranque do SO
Memory
Boot
O “bootstrap
loader em ROM”
lê o programa de
“boot” para
memória
Boot
Operating system
Memory
O programa de
“boot” lê o resto do
sistema para
memória
Boot
Operating system
Operating system
Inicialização
Inicialização do hardware
 Inicialização das estruturas de dados que
representam os vários recursos de sistema e que
suportam os algoritmos de gestão desses recursos.
 Criação dos primeiros processos:
- processos auxiliares de sistema (rede,
sistema de ficheiros, …)
- interpretador de comandos
 Aguardar

Download

Sistemas de Operação 2002