Você está na página 1de 20

Princípios

da Computação/ LEI-ISEP

Sistema Computacional

Regente: Maria Viamonte (mjv@isep.ipp.pt)


Sistema Computacional
• Componentes:
• Hardware: UCP, memória, dispositivos de I/O

• Software
• Sistema Operativo: controla e coordena a utilização do hardware
durante a execução das várias aplicações

• Aplicações: compiladores, sistemas de bases de dados, programas


diversos, Jogos, ...

• Utilizadores: pessoas, outros computadores, máquinas


Sistema Computacional

aplicações

Interface linguagens
do bibliotecas
sistema
Sistema operativo
Arquitectura
do computador
computador Hardware
Sistema Computacional
• Aplicações
• Linguagens de programação e utensílios de apoio ao
desenvolvimento de programas
• Abstrações das linguagens e bibliotecas
• Sistema operativo
• Abstrações do sistema e suas funcionalidades
• Arquitetura do computador
• Componentes e sua interações
(suporta todos os níveis anteriores)
Sistema Computacional
• Cada um deste níveis define uma “máquina virtual” Este
conceito envolve duas ideias principais:

• A noção de interface: cada nível define uma interface, através


de uma linguagem de programação
• Determina o conjunto de instruções que cada nível é capaz de reconhecer
e interpretar, desencadeando ações que correspondem ao
comportamento definido pelas regras da linguagem

• A noção de transparência: cada nível esconde aos níveis


superiores da hierarquia os detalhes de realização da interface
que oferece
Sistema Computacional
n O conceito de interface permite que cada nível daquela
hierarquia saiba exatamente com que tipo de instruções pode
contar, oferecidos pelos níveis inferiores, para implementar as
suas instruções

n O conceito de transparência permite que o utilizador defina


programas a um certo nível (por exemplo, em C), sem se
preocupar com a sua implementação, por um dado compilador,
sobre um dado sistema operativo, num dado computador
Sistema Computacional

No seu conjunto, os dois conceitos permitem, realizar programas


a um dado nível, de forma independente dos níveis inferiores

Ao utilizador dá a possibilidade de pensar que os seus programas


são suportados por uma “máquina virtual”, independente do
modo como é suportada pelo sistema computacional
Tradução vs interpretação de programas
Dado um problema a resolver, uma vez concebida uma solução
sob a forma de um algoritmo, e estando este especificado numa
linguagem de programação, temos um programa, levantando-se
então a questão de qual a máquina para executar as instruções
do programa

Duas abordagens possíveis:


• Transformação de programas

• Interpretação de programas
Tradução vs interpretação de programas

Tradução (compilação) de programas

Interpretação de programas
Transformação de programas
n Tradução/compilação do Programa P3, escrito na linguagem L3 para um
novo Programa P2, escrito numa outra linguagem, L2
q Os dois programas P2 e P3 têm um comportamento equivalente, quando
executados por um computador

q O utilizador não precisa de conhecer a linguagem L2, o que tem a vantagem


da transparência

q No entanto, deixa em aberto que máquina executa P2, escrito em L2. Pode
implicar uma nova tradução de P2, para um novo Programa P1, escrito em L1.
Finalmente, acaba por se chegar a um nível em que a linguagem L0 para a
qual se transforma o novo Programa P0 é a linguagem diretamente suportada
pela máquina hardware
Interpretação de programas
Este mecanismo, para cada instrução do Programa P1, iterativamente,
executa diretamente as ações equivalentes, conforme definidas pela
linguagem L1

A diferença da interpretação, relativa à tradução/compilação é que não se


espera pelo fim da transformação de todo o Programa P1, para se iniciar a
sua execução

Esta técnica facilita a interação direca do utilizador com o programa em


execução, na medida em que o interpretador manipula diretamente a
forma do programa na linguagem L1, que o programador conhece
Tradução / Interpretação de programas

Ambas as técnicas, de tradução e de interpretação, são


muito utilizadas, em diversos níveis do sistema
computacional

Ao atingir o nível da máquina hardware, o mecanismo que


suporta a execução das suas instruções, está incorporado
num interpretador realizado em hardware, ao nível da
microarquitetura
Tradução / Interpretação de programas
O nível de máquina, hardware, ou seja a arquitetura do computador,
define a linguagem binária das instruções máquina

Estas instruções são utilizadas pelo assembler que, no processo de


tradução de um programa em linguagem assembly, transforma esse
programa num outro programa, linguagem máquina, sendo este
representado em binário e susceptível de ser executado diretamente
pelo computador

O assembler é um tradutor “simplificado” que facilita a escrita de


programas porque admite uma representação simbólica para as
instruções do computador, em vez de uma codificação em binário
Tradução / Interpretação de programas
Por exemplo, se num programa em C escrevermos uma função para
calcular o fatorial de um número, o compilador produz uma sequência
equivalente de instruções máquina, representadas na linguagem
assembly

Depois da compilação, o assembler transforma essa sequência na sua


representação binária, para execução pelo computador

Certas instruções da linguagem de alto nível, por exemplo, ‘printf' em


C, são transformadas pelo compilador em chamadas a funções que são
suportadas pelo Sistema Operativo (SO)
Hierarquia de máquinas virtuais
Computador como uma pilha de máquinas virtuais. Cada nível usa os serviços
disponibilizados pelo nível abaixo. Cada utilizador usa o nível mais conveniente
para a tarefa a resolver

Aplicação

Linguagens de alto-nível (HLL)

Assembly

Sistema Operativo
software
Instruction Set Architecture hardware

Microarquitectura

Lógica Digital
Níveis de abstracção
Compiladores – convertem um
programa para um nível inferior

Interpretadores – executam
instrução a instrução um
programa de um nível superior

Assemblers – convertem um
programa de assembly para o
nível máquina

Linkers – ligam vários módulos de


um mesmo programa, para gerar
um único executável
Loaders – carregam um ficheiro
executável para memória
Níveis de abstração
Ling. Alto nível

Compilador Outros
módulos
Assembly Bibliotecas
de funções
Assembler

Ficheiro objeto Linker

Executável
Desenvolvimento
Execução
Loader

Memória
Compilação
Módulo 1 Módulo 2
int total=0; extern int total;
main ()
{ int i; void soma (int p)
{
i = 10; total += p;
soma (i); }
}
Compilação
.data .text
total: .word 0 soma:
.text lw $t0, total
main: add $t0, $t0, $a0
addi $s0, $0, 10 sw $t0, total
add $a0, $s0, $0 jr $ra
jal soma
jr $ra

Após a compilação o código assembly mantém informação simbólica


Montagem (Assembler)
Ficheiro Objeto 2 O ficheiro objeto de cada um dos módulos
não contém informação simbólica
<soma>
lw $8, 0x0
As instruções são representadas pelo seu código
add $8, $8, $4
binário e não pelas suas mnemónicas
sw $8, 0x0
jr $31
Os endereços que não podem ser determinados não
TABELA DE SÍMBOLOS
são preenchidos
total
Os símbolos cujo endereço será determinado pelo
linker são guardados na tabela de símbolos
Linker
Ficheiro Executável
O linker resolve todas as referências a símbolos,
<main> trocando-as pelos seus endereços
addi $16, $0, 10
add $4, $16, $0 As instruções são representadas pelo seu código
jal 1 binário e não pelas suas mnemónicas
jr $31
<soma> Além do código correspondente à funcionalidade do
lw $8, 0x080456ff($0) programa de alto nível, o linker insere código
add $8, $8, $4 necessário para lidar com o Sistema Operativo
sw $8, 0x080456ff($0)
jr $31

Você também pode gostar