Arquitectura de Computadores Arquitectura de Computadores ee
Sistemas de OperaçãoSistemas 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 Grupo de Disciplinas de Arquitectura e Sistemas
de Computadoresde Computadores
ASC2
ASC 1
Redes deComputadores
Sistemas deOperação
SistemasDistribuídos
Cadeiras obrigatórias
Cadeiras opcionais: a partir do 7º semestre
Teoria daInformação
Sistemas deProcessmento
Paralelo e Distribuído
Engenharia dosSistemas de
ObjectosDistribuídos
Complementosde Redes de
Computadores
Desempenho deSistemas de
Computadores
3º Sem
4º Sem
5º Sem
6º Sem
8º Sem
Grupo de Arquitectura de Grupo de Arquitectura de Computadores, Sistemas de Computadores, Sistemas de
Operação e Redes de Operação e Redes de ComputadoresComputadores
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 Passos até termos um programa em execuçãoum programa em execução
Ficheirocom o código fonte
Ficheirocom o código
objecto
Compilador
Bibliotecacom o código
Das bibliotecas dalinguagem
Ficheirocom o código
“assembly”
Compilador
“Assembler”
Ligador Ficheiroexecutável
Carregador
Ficheirocarregado em
memória
O código fonte do programa O código fonte do programa hello.chello.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 sistemaToda a informação no sistemaé um conjunto de bitsé 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
Pre-processor
(cpp)
hello.i Compiler(cc1)
hello.s Assembler(as)
hello.o Linker(ld)
hellohello.c
Sourceprogram
(text)
Modifiedsource
program(text)
Assemblyprogram
(text)
Relocatableobject
programs(binary)
Executableobject
program(binary)
printf.o
Os programas são transformados por outrosprogramas
prompt> gcc –o hello hello.c
Pre-processor
(cpp)
hello.i Compiler(cc1)
hello.s Assembler(as)
hello.o Linker(ld)
hellohello.c
Sourceprogram
(text)
Modifiedsource
program(text)
Assemblyprogram
(text)
Relocatableobject
programs(binary)
Executableobject
program(binary)
printf.o
-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
O processador lê e interpreta O processador lê e interpreta instruções armazenadas na memóriainstruçõ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 A execução do programa hellohello 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
Mainmemory
I/O bridge
Bus interface
ALU
Register file
CPU
System bus Memory bus
Disk controller
Graphicsadapter
USBcontroller
Mouse Keyboard Display
Disk
I/O bus Expansion slots forother devices suchas network adapters
hello executable stored on disk
PC
Mainmemory
I/O bridge
Bus interface
ALU
Register fileCPU
System bus Memory bus
Disk controller
Graphicsadapter
USBcontroller
Mouse Keyboard Display
Disk
I/O bus Expansion slots forother devices suchas network adapters
PC
"hello"
Usertypes
"hello"
O interpretador de comandos lê os caracteres ASCII“./hello” cr do teclado
Mainmemory
I/O bridge
Bus interface
ALU
Register fileCPU
System bus Memory bus
Disk controller
Graphicsadapter
USBcontroller
Mouse Keyboard Display
Disk
I/O bus Expansion slots forother devices suchas network adapters
hello executable stored on disk
PC
hello code
"hello,world\n"
O ficheiro executável “hello” é carregado em memória central
Mainmemory
I/O bridge
Bus interface
ALU
Register file
CPU
System bus Memory bus
Disk controller
Graphicsadapter
USBcontroller
Mouse Keyboard Display
Disk
I/O bus Expansion slots forother devices suchas network adapters
hello executable stored on disk
PChello code
"hello,world\n"
"hello,world\n"
Execução do programa hello
Arquitectura de computadoresArquitectura 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 NeumannArquitectura de Von Neumann
CPU
Memóriacentral
(programa +dados)Dispositivos
de saída
Dispositvosde entrada
Memória centralMemória central
CPU
Ordem de leitura
Ordem de escrita
Endereço
Dados
Funcionamento do CPUFuncionamento 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áquinaLinguagem 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 arquitecturaCaracterísticas de uma arquitectura Memória
O processador (CPU Central Processing Unit) contém um conjunto de Registos (cada registo N flip-flops)
30
2010
00
8764 53210 9
IP: Instruction pointer
IR: Instruction Register
AX: Arithmetic Register/AcumuladorCF: Condition
Flag
Programa muito simplesPrograma 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 ExecuteCiclo “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 P88O 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çõesAlgumas 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.assum.as0 in ax ; readln(x);1 copy x, ax 2 in ax ; readln(y)3 copy y, ax 4 copy ax, x ; z = x + y5 add ax, y6 copy z, ax 7 copy ax, z ; writeln( z );8 out ax
x 0 y 0 z 0
Exemplo de uma entrada e saída de dados: <23 <16>39
Mais instruçõesMais 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.aslargest.asPrograma para escrever o maior de dois números lidos:
in ax ; readln( r )copy r, axin ax ; readln( s )copy s, ax copy ax, s cmp ax, r ; if( s < r )jnb there ; sim, saltar para therecopy 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”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 Computador moderno comparado com o P88comparado 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ória1. Registos
2. Memória Cache
3. Memória central (RAM)
4. Disco (memória virtual)
5. Armazenamento “Offline” (bandas, CDROMs, DVDs, etc.)
Papel do sistema de operação (SO)Papel do sistema de operação (SO)
Ficheiro ExecutávelCarregado em Memória
Hardware (Processador, Memória, Discos, ...)
Sistema de Operação(sempre carregado em
Memória)
Instruções máquina executadas directamentepelo CPU
Instruções interpretadaspelo Sistema de Operação(por exemplo, escrita no écrã,leitura do disco ...)
Programas de aplicação
Processador Memória central Dispositivos de I/O
Sistema de OperaçãoSoftware
Hardware
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
Funções do SOFunçõ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 Gestão do CPU – noção de processoprocesso
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óriaGestã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 ficheirosGestã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/SSuporte 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 redeSuporte 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çãoProtecçã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 ?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
B o o t
M em o ry
B o o t
O p era tin g sy stem
Arranque do SOArranque do SO
O p era tin g sy stem
M em o ry
B o o t
O p era tin g sy stem
O programa de “boot” lê o resto do sistema para memória
O “bootstrap loader em ROM” lê o programa de “boot” para memória
InicializaçãoInicializaçã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