Você está na página 1de 18

SISTEMAS

SEMANA 1
COMPUTACIONAIS
Entender os conceitos de Arquitetura e Organização de Computadores;
Conhecer aspectos da história das máquinas computacionais e os modelos
criados para elas.

Arquitetura de computadores
refere-se aos atributos de um sistema visíveis a um programador. Em outras palavras, são aqueles
atributos que possuem um impacto direto sobre a execução lógica de um programa.

Funções dos Computadores


1. Processamento de Dados
2. Armazenamento de Dados
3. Entrada e Saída de Dados
4. Controle
Estrutura dos Computadores
1. Central Processing Unit - CPU
2. Memória Principal
3. E/S
4. Interconexão do Sistema

Modelo de Computadores
1. Turing: pode realizar qualquer cálculo se o programa apropriado for fornecido; essa foi a
primeira descrição de um computador moderno.
2. von Neumann: determina que o programa deve ser armazenado na memória. É o modelo
aplicado nos computadores atuais mas impede grande velocidade de processamento.

Resumo sobre a classificação das funções:


Podem ser classificadas quanto ao tipo de:
Operação: analógicos ou digitais
Utilização: científicos ou comerciais
Construção: mecânicos, de 1°,2°,3° ou 4° geração.

Organização de computadores
são as unidades operacionais e suas interconexões que realizam as especificações arquiteturais.

Unidade de controle comanda o funcionamento de cada subsistema e é responsável por buscar instruções na memória
principal e determinar seu tipo.

ULA: efetua operações matemáticas para executar as instruções.

Registradores: são locais de armazenamento rápido. Eles guardam dados temporariamente e podem ser lidos e escritos
em alta velocidade. São do tipo contador de programa, registrador de instrução e registrador de dados.

Memória: consiste em um conjunto de localizações de armazenamento, cada uma


com um identificador único, chamado endereço. Unidade básica: bite. Podem ser
SRAM (estática, rápida e volátil), DRAM (dinâmica, lenta mas armazenável) e ROM
(que possui dados não apagáveis).

Barramento: componente de conexao composto por conjunto de fios paralelos


que transmitem endereços, dados e sinais de controle.
Memória de alta velocidade somente quando a velocidade é um
fator fundamental.
Hierarquia de Memórias: Quantidade moderada de memória de média velocidade para
Solução utilizada para armazenar uma armazenar dados que são acessados com frequência.
grande quantidade de dados. Muita memória de baixa velocidade para dados que são
acessados com pouca frequência.

Memória Cache: A ideia básica de uma cache é simples: as palavras de memória utilizadas com mais
frequência são mantidas nesse dispositivo. Quando a CPU precisa de uma palavra, ela examina
primeiro a cache. Somente se a palavra não estiver ali é que ela recorre à memória principal. Se uma
fração substancial das palavras estiver na cache, o tempo médio de acesso pode ser muito reduzido.
1. Busca: o sistema copia a próxima instrução no registrador de instruções da CPU. O endereço da instrução a ser copiada permanece no
registrador contador de programa.
2. Decodificação: a unidade de controle decodifica a instrução quando ela está no
registrador de instrução. Dessa etapa resulta o código binário para uma operação que o
sistema vai realizar.

3. Execução: a ordem da tarefa é enviada pela unidade de controle para um componente da CPU. Por exemplo, a CPU
pode dizer à ULA para somar o conteúdo de dois registradores de entrada e, depois, colocar o resultado em um
registrador de saída.

OUTRAS ARQUITETURAS

RISC: Reduced Instruction Set Computer – computador com conjunto de instruções reduzido
caracterizam-se por contar com um pequeno conjunto de instruções, as quais fazem o mínimo possível de
operações simples. Um subconjunto de instruções simples simula as instruções mais complexas, o que
torna a programação em Risc mais difícil e demorada que aquela realizada por outros projetos.

CISC: Complex Instruction Set Computer – computador com conjunto de instruções complexo
apresenta um grande conjunto de instruções, que incluem tanto as simples quanto as complexas. Isso faz
que a programação de computadores, com base nessa arquitetura, seja mais fácil que em computadores
com base em outros projetos. A complexidade do conjunto de instruções torna os circuitos da CPU e da
unidade de controle bastante complicados, para resolver, uma instrução na linguagem de máquina não é
executada diretamente pela CPU – a CPU realiza somente operações simples, chamadas micro-operações.
Uma instrução complexa é transformada em um conjunto dessas operações simples que, então, são
executadas pela CPU. Isso precisa da adição de uma memória especial, chamada micromemória, que
mantém o conjunto de operações para cada instrução complexa do conjunto de instruções. O tipo de
programação que utiliza micro-operações é chamado microprogramação.

Paralelismo: um meio de conseguir um desempenho ainda melhor para dada velocidade de clock, é feito a
nível de instrução ou de processador .

A nível de instrução - Pipeline: é uma técnica de implementação de processadores que permite a


sobreposição temporal das diversas fases de execução das instruções.
No paralelismo em nível de processador, abordamos os computadores paralelos, os multiprocessadores e
os multicomputadores.

Uma arquitetura superescalar é aquela na qual várias instruções podem ser iniciadas simultaneamente e
executadas independentemente umas das outras.
Entenda as principais características, funções e interações da
CPU, dos barramentos, das memórias em seus diferentes tipos
e dos periféricos de E/S.
SEMANA 2

São dividas em três partes:


MEMÓRIA 1. Segmento de texto – mantém as instruções do programa e situa-se próximo do
início do espaço de endereçamento.
2. Segmento de dados – está acima do segmento de texto e se divide em duas
partes:
a. Dados estáticos – os objetos dessa parte têm o mesmo tempo de vida
que a execução do programa e um tamanho conhecido pelo compilador.

b. Dados dinâmicos – são alocados pelo programa durante sua execução.


Situam-se, fisicamente, logo acima dos dados estáticos.

3. Segmento de pilha – está localizado no espaço mais alto do endereçamento


virtual. Não se conhece de antemão o tamanho máximo da pilha de um programa. O
que acontece é que o sistema operacional expande para baixo o segmento de pilha
à medida que o programa vai pondo valores na pilha.
MEMÓRIA CACHE: O uso da memória cache tem, basicamente, dois objetivos:
1. Obter velocidade de memória próxima das memórias mais rápidas.
2. Disponibilizar uma memória de grande capacidade ao preço de memórias semicondutoras mais baratas.
•L1, L2 e L3 dizem respeito à proximidade da memória cache das unidades de execução do processador
•Quanto mais próxima ela estiver da unidade de execução do processador, menor será o seu número •
Cache L1 é o mais próximo possível da unidade de execução do processador. L2 é um pouco mais distante
e oL3 é ainda mais distante.
Sempre que a unidade de busca do processador precisa de um novo dado ou instrução, ela procura
inicialmente no cache L1. Se não encontrar, parte para o L2 e depois para o L3. Se a informação não
estiver em nenhum dos níveis de memória cache, ela terá de ir até a memória RAM
MEMÓRIA ROM: Não pode ser alterada nem apagada, pois os dados são inseridos durante sua
fabricação. É utilizada em produtos cujos programa e dados básicos devem permanecer armazenados,
mesmo quando o fornecimento de energia for interrompido.
RAID (Redundant Array of Independent Disks – arranjo redundante de discos independentes): A ideia é
instalar uma caixa cheia de discos próxima ao computador (em geral, um grande servidor), substituir a
placa do controlador de disco por um controlador RAID, copiar os dados para o RAID e, então, continuar a
execução normal.
0 – consiste em ver o disco virtual simulado pelo RAID como se fosse dividido em tiras de k setores
cada: os setores 0 a k – 1 são a tira 0; os setores k a 2k – 1, a tira 1; e assim por diante
1 – é um RAID verdadeiro, que duplica todos os discos; assim, há quatro discos primários e quatro
de backup
2 – ao contrário dos níveis 0 e 1, que trabalham com tiras de setores, o RAID nível 2 atua por
palavra, possivelmente até por byte
3 – é uma versão simplificada do nível 2, pois um único bit de paridade é computado para cada
palavra de dados e escrito em um drive de paridade
4 – trabalha com tiras, e não com palavras individuais com paridade, e não requer drives
sincronizados. O RAID nível 4 é como o nível 0, com paridade tira por tira e escrita em um drive
extra
5 – como no nível anterior, também opera com tiras. Oferece melhor vazão de transações do que
no RAID nível 4, pois faz um balanceamento de carga, gravando vários discos em paralelo
ASSEMBLY

add a, b, c, d, e
Na primeira linha, é feita a soma de b + c, e o resultado é armazenado em a. Na
add a, b, c
segunda linha, adiciona-se d ao resultado da primeira operação, o que gera outro valor
add a, a, d
para a. Esse a é somado na terceira linha ao valor de e.
add a, a, e
MIPS, acrônimo para Microprocessor without interlocked pipeline stages (microprocessador sem estágios
intertravados de pipeline). É uma arquitetura baseada em registrador, ou seja, a CPU usa apenas
registradores para realizar as suas operações aritméticas e lógicas.
Os operandos das instruções aritméticas localizam-se nos registradores. Na arquitetura MIPS, um
registrador tem 32 bits e recebe o nome de word (palavra). E cada MIPS tem 32 registradores porque um
tamanho menor proporciona maior rapidez. No MIPS, as instruções aparecem compostas em seis
campos:
op – também chamada de opcode, é a operação básica da instrução.
rs – registrador do primeiro número de uma operação de soma.
rt – registrador do segundo número de uma operação de soma.
rd – registrador que recebe o resultado da operação.
shamt – indica a quantidade de deslocamento. Esse nome é uma abreviação do termo inglês
shift amount (quantidade de deslocamento).
funct – abreviação de function (função, em português). Também chamado de código de função,
seleciona a variável situada no primeiro campo (op).

PROCEDIMENTOS: Um procedimento é uma ferramenta utilizada pelos programadores C e Java


para estruturar programas. Essa ferramenta gera alguns benefícios, tais como torna os programas
mais fáceis de serem entendidos e possibilita que o código seja reutilizado. Além disso, permite que
o programador faça uma parte da tarefa por vez. Durante a execução de um procedimento, o
programa deve:
Colocar parâmetros em um lugar que possa ser acessado pelo procedimento.
Transferir o controle para o procedimento.
Obter os recursos de armazenamento de que o procedimento necessita.
Realizar a tarefa que deve ser feita.
Pôr o valor de retorno em um local que permita o acesso do programa que o chamou.
Retornar o controle para o ponto de origem

ENDEREÇAMENTO NO MIPS:
Endereçamento em registrador – o operando é um registrador.
Endereçamento de base ou deslocamento – o operando se situa no local da memória que tem
como endereço a soma de um registrador e uma constante na instrução.
Endereçamento imediato – o operando é uma constante dentro da instrução.
Endereçamento relativo ao PC – é a soma de uma constante na instrução com o PC.
Endereçamento pseudodireto – tem como endereço de jump os 26 bits da instrução que se
conectam com os bits mais altos do PC.

INTERRUPÇÃO NO MIPS:
Exceções e interrupções fazem com que um processador MIPS desvie para uma parte do código,
no endereço 80000180hexa (no espaço de endereçamento do kernel, não do usuário), chamada
handler de exceção. Esse código examina a causa da exceção e desvia para um ponto apropriado
no sistema operacional. O sistema operacional responde a uma exceção terminando o processo
que causou a exceção ou realizando alguma ação. Um processo que causa um erro, como a
execução de uma instrução não implementada, é terminado pelo sistema operacional
SEMANA 3
Reconhecer o gerenciamento de recursos realizado pelo sistema operacional
incluindo processos, tipos e estados de processos e escalonamento de processos
operados pelo processador e pela memória.
Entender o particionamento e o gerenciamento de memória, incluindo a memória
virtual com o manuseio da hierarquia de memórias entre memória principal e disco.
Aprender endereçamento e técnicas de memória virtual como: paginação e
segmentação, incluindo conceitos relacionados, como fragmentação, MMU (Memory
Managment Unit) e TLB (Translation Lookaside Buffer).

SISTEMA OPERACIONAL:
Programa que controla a execução de programas e aplicativos e atua como interface entre o
usuário e o hardware do computador. Possui dois objetivos principais: conveniência e
eficiência.
É o software que gerencia os recursos do Computador e controla a execução de processos na
CPU com auxílio de hardware como registros e circuitos.
O SO direciona o processador e a memória no uso dos recursos do sistema através do
escalonamento e do gerenciamento de memória.

INTERATIVO interação direta com o computador por meio de um terminal.


LOTE O programa do usuário é mantido com outros programas e submetido por um operador.
UNIPROGRAMAÇÃO time sharing system: vários usuários
acessam o sistema simultaneamente por
meio de terminais, com o SO intercalando
a execução de cada programa do usuário
em um curto intervalo de tempo.
FUNDAMENTA-SE
MULTIPROGRAMAÇÃO ESCALONAMENTO
É um processo que ocorre quando o scheduler da
CPU seleciona, via algoritmo e com auxílio de
hardware, os processos mais viáveis para execução
e seu tempo, quando necessária a troca, SO
determina quais processos devem ser executados a
cada instante para compartilhar o tempo do
processador.
GERENCIAMENTO DE MEMÓRIA Usa técnicas para tornar a memória mais eficiente

Em uniprogramação, a memória principal é divida em dois: para o monitor residente (SO) e uma parte
para o programa executado naquele momento.
Em multiprogramação, a parte da memória do usuário é subdividida para acomodar vários processos.
Conceitos envolvidos: SWAPPING (troca de processo na memória), PARTICIONAMENTO, e PAGINAÇÃO
(pedações de programas - páginas no lado do disco, podem ser atribuídos aos pedaços disponíveis da
memória - frames no lado da memória RAM), SEGMENTAÇÃO.
Paginação por demanda
Memória Virtual: técnica que resulta em Localidade (espacial e temporal)
Função de mapeamento (tradução endereços
tempo de acesso a memória de disco (disco
pelo MMU - unidade de gerenciamento de
rígido - HD) estatisticamente não muito pior memória)
que a memória principal. Funcionamento automático
Não é necessário carregar um processo inteiro na memória principal, o que
possibilita que o processo seja maior que toda a memória principal.

VIRTUALIZAÇÃO DE HARDWARE: combinação de


suporte de hardware e software que permite a
execução simultânea de múltiplos sistemas
operacionais em um único computador físico. O
hipervisor executa o compartilhamento da
memória e dispositivos de E/S do hospedeiro e é
semelhante ao núcleo do sistema operacional.
Thrashing: quando o MMU: faz a tradução do
processador gasta mais tempo endereço lógico (virtual ou lógico
trocando páginas em vez de usado pelo programa) em físico
executar instruções. (da memória de fato

Translation Lookaside Buffer:


dicionário que recebe um conjunto de bits O conjunto de bits de entrada é formado por:
TLB de entrada e, caso esse conjunto esteja ✔ Número de página virtual
memorizado lá, fornece um cconjunto de ✔ Identificador do processo
bits de saída

RESUMO
Quando um processo é criado, o SO cria as Páginas virtuais que ele necessita em um
espaço próprio, designado swap file
Quando uma destas páginas é referenciada pelo respectivo processo, é carregada em
memória principal e, se tiver de sair da memória principal, volta para este espaço
Isso é troca de contexto (swap) da página, entre a memória principal e disco

INTEGRAÇÃO DA MEMÓRIA: a partir dos caches e da memória virtual cooperam para a


abstração da memória que ocorre de forma integrada e automática.
OTIMIZADO se o mapeamento estiver na TLB, a página na memória principal e o bloco acessado
estiver na cache.
A monoprogramação é a estratégia de um único processo ser executado no processador por vez e era
usada em antigos mainframes, antigos computadores e nos dispositivos handhelds, como tablets e
smartphones.  O cenário mais atual realiza manipulação de diversos processos pelo processador e esse
cenário explora a multiprogramação, isto é, vários processos compartilhando um único processador. A
multiprogramação demanda o particionamento de memória.
Entender as arquiteturas paralelas e suas classes ou
tipos;
Entender multiprocessadores e multicomputadores
com suas características, diferenças e exemplos; SEMANA 4
Aprender o funcionamento de pipeline de instrução,
sua estratégia de implementação, problemas e
soluções.

O processador executa instruções (em linguagem de máquina) da sua memória num período de tempo
(clock). O ciclo de instrução é a sequência de ações que a CPU realiza para executar cada instrução em
código de máquina num programa. O ciclo de instrução se repete indefinidamente até que o sistema: seja
desligado, ou ocorra algum tipo de erro, ou seja encontrada uma instrução de parada.

A CPU é projetada e fabricada para executar sucessivamente pequenas operações


matemáticas (ou manipulações simples com dados) na ordem e na sequência definidas
pela organização do programa.
Função de Processamento: execução de um programa.
Função de Controle: atividades de busca, interpretação e controle da execução das
instruções controle da ação dos demais componentes (memória, E/S) do sistema de
computação

Multiprocessador: Um computador paralelo cujas CPUs compartilham uma memória comum


Todos os processos que funcionam juntos em um multiprocessador podem compartilhar um único espaço
de endereço virtual mapeado para a memória comum
UMA: mais simples são baseados em um único barramento.
NUMA: Há um único espaço de endereço visível a todas as CPUs. O acesso à memória remota é
feito usando instruções LOAD e STORE. O acesso à memória remota é mais lento do que o acesso
à memória local.
Multicomputador: cada CPU tem sua própria memória privada, acessível somente à própria CPU.
interligados por redes de interconexão, é o aspecto em comum com multiprocessadores.
Processadores maciçamente paralelos (MPPs): são imensos supercomputadores. São usados para
cálculos muito grandes, tratar quantidades enormes de transações por segundo e data warehousing
(armazenamento e gerenciamento de imensos bancos de dados). Possuem enorme capacidade de E\S e
tolerância a falhas.
TOPOLOGIAS: descreve como os enlaces e os
computadores são organizados.

PARALELISMO: Significa fazer duas ou mais coisas


em paralelo, ou seja, ao mesmo tempo. A execução
das tarefas em menor tempo, por meio da execução
em paralelo de diversas tarefas, pode ser realizado
pelo hardware ou software.

PROGRAMAÇÃO SEQUENCIAL:

PROGRAMAÇÃO CONCORRENTE: Um servidor atendendo vários clientes por meio da política de


escalonamento no tempo.

PROGRAMAÇÃO PARALELA: Vários servidores atendendo vários clientes simultaneamente no


tempo.
ARQUITETURA DE COMPUTADORES

são processadores matriciais, paralelos e associativos


São os computadores convencionais (seriais de von Neumann), com uma única unidade de controle que envia um
com instruções executadas serialmente, porém os estágios fluxo de instruções para vários processadores. Os
(busca da instrução, decodificação, busca do operando e processadores recebem a mesma instrução
execução) podem ser sobrepostos (pipeline). simultâneamente e atuam sobre diferentes fuxos de
dados.

vários processadores que recebe nstruções distintas mas operam vários processadores, cada um controlado por uma
sobre o mesmo conjunto de dados. Ex: múltiplos Algoritmos de unidade de controle. Os processadores recebem
criptografia para decodificar uma mensagem instruções diferentes e operam sob fluxos de dados
diferentes. Que podem ser síncronos ou assíncronos. Ex:
multiprocessadores (memória compartilhada) e
PIPELINE multicomputadores (memória distribuída).
Visa obter melhoras de desempenho tanto em
tecnologia (ex. circuitos mais rápidos) ou
organizacionais no processador com múltiplos
registradores e memória cache (L1 e em níveis).
De Instrução: várias instruções são realizadas de
forma simultânea, embora em estágios diferentes, pois.
múltiplas instruções são emitidas por ciclo de clock
A CPU se divide em várias partes funcionais
distintas (estágios), cada uma correspondendo a
uma determinada ação.
A ideia é de que novas entradas são aceitas,
antes que as entradas aceitas previamente
tenham terminado, o que assume uma instrução
de vários estágios.
Hazard de pipeline ou bolha são situações que
podem resultar em um desempenho menor que a
ótima. Ocorrem quando o pipeline, ou parte dele,
precisa parar porque as condições não permitem a
execução contínua.
A busca de instruções na memória é um grande gargalo na
velocidade de execução do paralelismo da instrução. Para
amenizar esse problema, os computadores têm a capacidade de
buscar instruções na memória antecipadamente, de maneira que
elas estivessem presentes quando necessárias. • Prefetch (busca
avançada): A leitura aproveita o ciclo de memória de execução
atual para obter a próxima instrução, requer mais registradores.
Aprender comandos básicos, ponteiros e estruturas em
Linguagem C;
Entender duas importantes estratégias de arquitetura e
organização de sistemas computacionais a partir da SEMANA 5
simulação de paginação e particionamento fixo.

Compilada, imperativa e de uso geral, com


LINGUAGEM C++
suporte a orientação a objetos.
Ponteiros: Variável que contém um endereço de memória, que é a posição de outra variável na
memória
- alocam memória dinamicamente
- podem aumentar a eficiência de certas rotinas
- fornecem meios para funçoes modificarem seus argumentos
declaração de ponteiro
tipo * identificador qualquer identificador válido em C
qualquer tipo válido em C
&: operador unário. Devolve o endereço de memória do seu operando. Seu uso mais
comum é durante inicializações de ponteiro.
*: operador unário. Devolve o valor da variável apontada (o conteúdo do apontador)

EXPRESSÕES COM PONTEIROS


Atribuição Igual a qualquer outra variável

Aritmética somente duas operações: adição e subtração

Comparação compara-se endereços de memória

typedef
Permite compor novos tipos de dados typedef tipo novo_nome;
É comporto a partir de tipos pré-existentes tipo: qualquer tipo válido em C
Não cria um novo tipo de dado novo_nome: um identificador válido em C
Estrutura
É uma coleção de variáveis, As variáveis que compõem
possivelmente de diferentes uma estrutura são
tipos, organizadas em um comumente chamadas de
único conjunto elementos

Paginação
Técnica de memória virtual e de quebra de processos em páginas que são mapeadas em frames na memória principal
Cada processo tem a sua tabela de páginas com seu endereçamento virtual correspondente a um endereço físico onde a
informação está armazenada
No DISCO, cada página tem: Na RAM, cada frame tem:
Bit de validade (bv=1 pv na RAM) Número da página física (pf)
Ponteiro para página virtual (pv) Deslocamento (df)
Deslocamento (dv) Conteúdo
Compreender as diferenças, as características, os propósitos de uso da
linguagem de montagem e da linguagem de máquina;
Entender a importância das diferentes linguagens (alto nível, de montagem,
SEMANA 6 de máquina) no processo de modelagem de software;
Conhecer os conceitos de chamada de sistema e tratamentos de
interrupção.

Como fazer o computador entender as Linguagem de Montagem


instruções dadas para realizar as
operações? Linguagem de Máquina

Linguagem de Montagem (ou Assembly)

Uma linguagem de montagem pura é uma linguagem na qual cada declaração produz exatamente uma
instrução de máquina. É implantado por tradução em vez de interpretação. Na tradução, o programa
original na linguagem-fonte não é executado diretamente. Em vez disso, ele é convertido para um
programa equivalente denominado programa-objeto ou programa binário executável, cuja
execução é realizada somente após a conclusão da tradução.
Etapas:
Geração de um programa Execução do programa recém-
equivalente na linguagem-alvo. gerado.

Linguagem que usa muitos nomes simbólicos (mnemónicos), incluindo a atribuição de nomes em posições
específicas da memória principal e das instruções para operar o computador e instruções que não são
executadas diretamente, mas que são úteis para o montador produzir o código de máquina.
Só pode ser executado em uma família de máquinas. É usado em razão de desempenho e acesso
à máquina.
A linguagem de montagem possui 4 campos (nenhum obrigatório): campo de etiqueta, um de operação
(opcode), um de operandos e um de comentários.
Campo de Etiqueta: são usadas para dar nomes simbólicos para endereços de memória, são necessárias
em declarações executáveis de modo a possibilitar desvios para essas declarações. Também são
necessárias para palavras de dados, permitindo que os dados ali armazenados sejam acessíveis por nomes
simbólicos.
Opcode: contém ou uma abreviatura simbólica para ele – se a declaração for uma representação
simbólica para uma instrução de máquina – ou um comando para o próprio assembler.
Operandos: usado para especificar os endereços e registradores usados como operando pela instrução
de máquina. O campo de operando de uma instrução de adição de inteiros informa o que será somado a
quê. O de uma instrução de desvio informa para onde desviar. Operandos podem ser registradores,
constantes, localizações de memória e assim por diante.
Comentários: oferece um lugar onde os programadores podem colocar explicações úteis sobre o
funcionamento do programa para benefício de outros programadores que queiram usar ou modificar o
programa mais tarde.
PSEUDOINSTRUÇÕES: um programa em linguagem de montagem também pode conter comandos para o
próprio assembler, por exemplo, pedir que ele reserve algum armazenamento ou ejete uma nova página
na listagem.
O programador de linguagem de montagem precisa se lembrar apenas dos nomes simbólicos porque o
assembler os traduz para instruções de máquina
A linguagem assembly é utilizada em situações especiais Para construir uma rotina que
necessite estar muito otimizada e que seja necessário manipular recursos físicos de tal forma
que não consiga ser expressa na linguagem de alto nível
TIPOS DE SENTENÇÃ:
A Sentença-comentário consiste inteiramente de um comentário
Instrução é o tipo de sentença de representações simbólicas de instruções de linguagem de máquina
As sentenças diretivas (pseudoinstruções) fazem parte da linguagem de montagem que não são
diretamente traduzidas para instruções da linguagem de máquina e, portanto, não são executáveis. •
São instruções para o montador executar ações específicas durante o processo de montagem.

proporcionam uma solução fácil e eficiente para o problema de precisar repetidas vezes das
mesmas (ou de quase as mesmas) sequências de instruções. é um modo de dar um nome a
MACROS um pedaço de texto. Após uma macro ser definida, o programador pode escrever o nome dela
em vez do pedaço de programa. Uma macro é, na verdade, uma abreviatura para um pedaço
de texto.
Um cabeçalho de macro que dê o nome da macro que está sendo
Partes básicas da definição de definida.
uma MACRO O texto que abrange o corpo da macro.
Uma pseudoinstrução que marca o final da definição (por exemplo,
ENDM).

Chamadas de macro não devem ser confundidas com chamadas de procedimento. A diferença básica é
que a primeira é uma instrução para o assembler substituir o nome da macro pelo corpo dela. Uma
chamada de procedimento é uma instrução de máquina que é inserida no programa-objeto e que mais
tarde será executada para chamar o procedimento

Um processador de macros é uma técnica para manipular cadeias de caracteres sem considerar seu
significado. Pode ser usado para encurtar programas nos quais exatamente a mesma sequência de
instruções ocorre repetidas vezes.
1. Depuração e verificação
2. Desenvolvimento de compiladores
PODE SER USADO ESPECIALMENTE PARA:
3. Sistemas embarcados
4. Drivers para hardware e códigos de sistemas

Linguagem de Máquina

Consiste em instruções executadas diretamente pelo processador. Cada instrução é uma cadeia binária (de
zeros e uns) contendo um opcode (operação básica da instrução), referências a operandos e
possivelmente bits relacionados à execução. Portanto, as instruções do nosso computador, bem como os
endereços de memória, devem ser todos escritos na linguagem que o computador é capaz de entender e
operar.
O tratador de interrupção é NA MAIORIA das vezes assíncrono (SEM
TRATAMENTO DE INTERRUPÇÃO comunicação entre o programa interrompido e o tratador)
trap é um caso de tratador síncrono
Chamado também de rotina de serviço de interrupção, ISR ou tratador de interrupção, feito por um bloco
especial de código associado a uma condição de interrupção específica. É parte do sistema operacional.
Saber qual dispositivo lançou a interrupção
Em que ponto do sistema operacional está o endereço inicial da rotina
que trata esta interrupção para que o processador possa executar esta
rotina no endereço especificado pelo tratador e
Deixar o processador voltar ao seu curso de execução após a interrupção
ter sido resolvida
Aprender a fazer algoritmos simples em Assembly;
Entender como fazer programas Assembly dentro do ambiente de
linguagem C; SEMANA 7
Conhecer programa Assembly com chamada de sistema e tratamento de
interrupção.

A quantidade de memória disponível para armazenar um número é fixada no momento em que o


equipamento é projetado. A natureza finita do computador nos força a lidar somente com valores que
podem ser representados em um número fixo de dígitos. Estes são chamados números de precisão finita
.
Todo computador tem uma ISA (Instruction Set architecture – arquitetura do
conjunto de instrução), que é um conjunto de registradores, instruções e outras
características visíveis para seus programadores de baixo nível. Essa iSA costuma
ser denominada linguagem de máquina.
Todas as máquinas têm uma linguagem de montagem (ou assembly), uma representação simbólica da
arquitetura do conjunto de instruções com nomes simbólicos como ADD, SUB e MUL, em vez de números
binários.
Linguagem de Montagem
Todo assembler usa mnemônicos, isto é, palavras curtas como ADD, SUB e MUL para instruções de
máquina como somar, subtrair e multiplicar para que fiquem mais fáceis de lembrar. Além disso,
assemblers permitem a utilização de nomes simbólicos para constantes e rótulos para indicar endereços
de instrução e memória. Ademais, grande parte dos assemblers suporta certo número de
pseudoinstruções, que não são traduzidas para instruções iSA, mas que são comandos para o assembler
que direcionam o processo de montagem.
Quando um programa em linguagem de montagem é alimentado em um programa
denominado assembler, este o converte em um programa binário adequado para a execução
propriamente dita.
O programa que converte um programa em linguagem de montagem para números binários é um
assembler. A saída do assembler é denominada arquivo-objeto. Para executá-los, o arquivo-objeto recém-
montado e as sub-rotinas de biblioteca que ele usa (também arquivos-objeto) devem ser combinados em
um único arquivo binário executável, por meio de outro programa denominado ligador (linker ).
primeira tarefa do assembler é montar uma tabela de símbolos , que é usada para mapear os nomes de
constantes simbólicas e rótulos para os números binários que eles representam. Constantes que são
definidas diretamente no programa podem ser colocadas na tabela de símbolos sem nenhum
processamento. Esse trabalho é feito em uma passagem.
o processador tem um conjunto de registradores nos quais essas informações podem ser armazenadas e
processadas. Provavelmente o mais importante deles é o PC (Program Counter – contador de programa)
que contém a localização de memória, isto é, o endereço, da próxima instrução a ser executada. Esse
registrador também é denominado IP (Instruction Pointer – ponteiro de instrução). Essa instrução está
localizada em uma parte da memória principal denominada segmento de código.
A operação de todos os outros computadores) consiste em executar instruções, uma após a
outra. A execução de uma única instrução pode ser subdividida nas seguintes etapas:
1.Buscar a instrução na memória no segmento de código usando o PC.
2.Incrementar o contador de programa.
3.Decodificar a instrução buscada.
4.Buscar os dados necessários na memória e/ou nos registradores do processador.
5.Executar a instrução.
6.Armazenar os resultados da instrução na memória e/ou registradores.
7.Voltar à etapa 1 para iniciar a instrução seguinte.
REGISTRADORES
Os registradores do primeiro grupo, AX, BX, CX e DX, são os registradores gerais. Todos esses
registradores gerais podem ser entendidos como um registrador de 16 bits ou como um par de
registradores de 8 bits.
é denominado registrador acumulador. Ele é usado para coletar resultados de computações e é o
AX alvo de muitas das instruções. Embora cada registrador possa executar grande quantidade de
tarefas, em algumas instruções, esse AX é o destino implícito, por exemplo, na multiplicação.
o registrador de base . Para muitas finalidades, o BX pode ser usado da mesma maneira que o AX,
BX mas ele tem um poder que o AX não possui. É possível colocar um endereço de memória em BX e
então executar uma instrução cujo operando vem do endereço de memória contido em BX. Em
outras palavras, BX pode conter um ponteiro para a memória, mas AX não.
o registrador contador. Além de realizar muitas outras tarefas, é usado em especial para conter
CX contadores para laços. Ele é automaticamente decrementado na instrução LOOP, e os laços
costumam ser encerrados quando CX chega a zero.
o registrador de dados. Ele é usado junto com AX em instruções de comprimento de palavra dupla
(isto é, 32 bits). Nesse caso, DX contém os 16 bits de ordem alta e AX possui os 16 bits de ordem
DX baixa. Os inteiros de 32 bits costumam ser indicados pelo termo longo. O termo duplo é
normalmente reservado para valores de ponto flutuante de 64 bits, embora há quem use “duplo”
para inteiros de 32 bits.

REGISTRADORES DE PONTEIROS E ÍNDICES

Registrador mais importante desse grupo é o ponteiro de pilha, que é indicado por SP. Pilhas são
importantes na maioria das linguagens de programação. A pilha é um segmento de memória que contém
certas informações de contexto sobre o programa em execução. Em geral, quando um procedimento é
chamado, parte da pilha é reservada para conter as variáveis locais do procedimento, o endereço para
onde retornar quando o procedimento estiver concluído e outras informações de controle. A porção da
pilha relativa a um procedimento é denominada seu quadro de pilha. SP APONTA PARA ALTO.
BP, o registrador de base. Em geral, ele contém um endereço na pilha. Enquanto SP sempre aponta para o
topo, BP pode apontar para qualquer local dentro da pilha. BP APONTA PARA BAIXO.
O registrador de flag ou registrador de código de condição é, na verdade, um conjunto de registradores de
um único bit.

Os registradores de segmentos comandam essas partes diferentes da memória, que são denominadas
segmentos . Esses registradores são denominados CS para o de segmentos de código, DS para o de
segmentos de dados, SS para o de segmentos de pilha e ES para o de segmentos extras.
Os operandos das instruções aritméticas localizam-se nos registradores E cada MIPS tem 32 registradores
porque um tamanho menor proporciona maior rapidez. .

Instruções:
1. Load – copia dados da memória para um registrador. O MIPS nomeia essa instrução como lw, que são as
iniciais de load word (carregar palavra).
2. Store – copia dados do registrador para a memória. No MIPS, é nomeada como sw, iniciais de store word
(armazenar palavra)
ATIVIDADE AVALIATIVA
Diferentes modelos de computador foram criados, como o modelo de Turing, desenvolvido em 1937 por
Alan Turing. Também podemos citar o modelo de Von Neumann, que iniciou em 1944 e foi o criador da
arquitetura de programa armazenado, considerado um avanço em relação ao modelo de Turing. O modelo
de Von Neumann consiste na adoção de uma arquitetura baseada na possibilidade de dispositivo
eletrônico e digital armazenar seus programas aplicativos no mesmo espaço de memória que os dados,
utilizando uma unidade de processamento. Sendo assim, a questão correta é “armazena dados e programa
durante o processamento”.

A quarta geração de computadores, também conhecida como computadores VLSI (Very Large Scale
Integration), possibilitou a colocação de milhões de transistores em um único chip de processamento, que
foi um grande salto na computação. Na quarta geração de computadores, que foi iniciada nos anos 1980,
houve um grande salto de tecnologia, com maior poder de processamento e a utilização de pequenos
chips, o que possibilitou menores gastos de produção e computadores menores, que por sua vez ficaram
cada vez mais baratos.

Quando pensamos em um projeto de arquitetura de computadores, sabemos que devem existir


elementos, como o conjunto de instruções, a quantidade de bits necessários para sua utilização, além de
quais são seus mecanismos de entrada e saída e quais as formas utilizadas para realizar o endereçamento
de memória. São atributos que têm impacto direto sobre a execução de um programa e, por isso, são
programáveis e visíveis a um programador, sendo ele o desenvolver ou aquele que irá criar alguma
atualização nesse sistema.

A terceira geração de computadores, também conhecida como geração dos circuitos integrados, surgiu na
década de 1960 e durou até a década de 1980. Nessa época, a IBM era a empresa líder do segmento de
computadores, porém tinha grandes problemas com os modelos 7094 e 1401. A incompatibilidade entre
os modelos 7094 e 1401 era muito grande: um utilizava aritmética decimal em série e o outro aritmética
binária. Muitos clientes tinham ambos modelos, mas não gostavam da ideia de ter que fazer programações
diferentes para cada modelo.

Os registradores são compostos por uma pequena memória que tem grande velocidade para realizar o
armazenamento de resultados temporários e alguns controles de informações necessárias. Existem
somente três tipos de registradores: o contador de programa, que serve para indicar a próxima instrução,
o registrador de instrução, que mantém a instrução que está sendo executada, e o registrador de dados,
que mantém os dados de entrada e os resultados.

A CPU (Unidade Central de Processamento) é considerada o cérebro do computador, pois tem a função de
executar os programas armazenados na memória principal, realizando suas instruções e controlando os
componentes e seus subsistemas. As partes da CPU são compostas pela unidade de controle, que
comanda o funcionamento de cada subsistema, pela unidade lógica e aritmética, que efetua operações
matemáticas, e pelo registrador, que é uma pequena memória de alta velocidade para armazenar
resultados temporários.

De maneira histórica, a unidade central de processamento sempre foi mais rápida que as memórias. À
medida que o tempo foi passando, as memórias evoluíram, assim como a unidade central de
processamento, mantendo a diferença de velocidade entre as duas. A unidade central de processamento
depende que a memória encaminhe uma requisição para o processamento. Se essa memória estiver com
tamanho limitado ou velocidade reduzida, quando comparada com a unidade central de processamento,
fará com que a unidade central de processamento fique com pouco ou muitos ciclos de espera.
Em meados da década de 1970, começaram a ser utilizados os discos IDE (Integrated Drive Electronics),
que, com o passar do tempo, evoluíram para os discos EIDE (Extended Integrated Drive Eletronics). Os
discos dos computadores da IBM PC eram fabricados pela Seagate, de 10 MB, controlado por um
controlador de disco Xebec que tinha um cartão de encaixe. Porém a tecnologia evoluiu e passou do
controlador em placa separada para o controlador integrado com os drives.

O arranjo redundante de discos independentes foi criado para garantir maior segurança no
armazenamento de dados e diminuir as chances de perda de informação e indisponibilidade de sistemas.
Esse arranjo é conhecido como RAID (Redundant Array of Independent Disks). O RAID 5 oferece melhor
vazão de transações quando comparado ao RAID 4, mas com a vantagem de fazer balanceamento de
carga e gravar vários discos em paralelo. O RAID 5 não é conhecido como verdadeiro por duplicar todo o
disco, não atuando por palavras ou sem paridade.

Para cada processo, o sistema operacional deve manter informações, indicando seu estado, além das
informações necessárias para a execução do processo, sendo representado pelo sistema operacional por
um bloco de controle. Um bloco de controle de processo é dividido em vários segmentos, sendo o
contador de programa o responsável pelo endereço da próxima instrução no programa a ser executado. A
alternativa correta é “em um contador de programa de um bloco de controle é definido o endereço da
próxima instrução no programa a ser executado”.

A virtualização de um hardware é uma combinação de suporte de hardware e software que nos permite
executar, de forma simultânea, múltiplos sistemas operacionais em um único computador. Elementos
como host e hipervisor fazem parte do conjunto de virtualização por hardware. Um hipervisor gerencia
instâncias de máquinas virtuais, sendo um componente de software, semelhante ao núcleo do sistema
operacional.

É necessário considerar o conceito de estado de processo para entender a operação de um escalonador


de curto prazo, sendo que, durante o tempo de vida de um processo, sua condição mudará muitas vezes.
Um processo em estado de pronto está aguardando para ser executado pelo processador e, após sua
execução, será descartado pelo sistema operacional. A alternativa correta é “o processo pronto é definido
como um processo pronto para ser executado, aguardando acesso ao processador”.

O escalonamento de processos ocorre quando a unidade central de processamento, ao utilizar um


algoritmo de escalonamento e com o auxílio do hardware, escolhe os processos mais viáveis para a
execução ou os que são prioritários. Existem vários tipos de escalonamento, como os de longo prazo, os
de curto prazo, o de médio prazo e o de entrada e saída (E/S). Um escalonamento de curto prazo é
determinado pela decisão sobre qual processo disponível será executado pelo processador.

Um hipervisor gerencia instâncias de máquinas virtuais, sendo um componente de software semelhante


ao núcleo do sistema operacional, que fica na camada superior.

Um sistema operacional oferece diversas facilidades e serviços em várias áreas, atuando como um
mediador e facilitador. Quanto às áreas que podemos citar, temos a criação de programa, a execução de
programa, o acesso ao sistema, a contabilização, dentre outras. A área de criação de programa oferece
diversas facilidades, como editores e depuradores para auxiliar na programação ou na criação de
programas.

Um sistema operacional é também um programa de computador, que controla a execução de outros programas ou
aplicativos, sendo assim uma interface entre o usuário e o hardware do computador. Os objetivos são a
conveniência, já que o sistema operacional torna o computador mais conveniente para o usuário, e a eficiência, pois
o sistema operacional permite que os recursos computacionais sejam melhor apoveitados.
Em qualquer sistema de computação paralelo, as unidades centrais de processamento que trabalham em
partes diferentes do mesmo serviço devem se comunicar umas com as outras para realizar a troca de
informações. Um modo de fazer isso foi proposto com o multiprocessamento. A principal diferença entre
multiprocessadores e multicomputadores é que nos multiprocessadores a memória pode ser
compartilhada.

Podemos dizer que o computador em cluster, normalmente, consiste em inúmeros computadores


conectados pela rede. Existem muitos tipos de clusters, mas dois predominam: o cluster centralizado e o
descentralizado. Os clusters descentralizados são compostos, geralmente, por sistemas computacionais
heterogêneos e que podem ter um conjunto completo de periféricos.

Os MPPs (Massively Parallel Processors), também conhecidos como processadores maciçamente paralelos,
são imensos supercomputadores usados, em geral, para: Cálculos muito grandes; Tratar quantidades
enormes de transações por segundo; Data warehousing.

Um pipeline de instruções é semelhante a uma linha de montagem, pois tira vantagem do fato de que um
produto passa por várias estágios de produção. O pipeline apresenta dois estágios independentes: o
estágio de busca e o estágio de execução de uma instrução. O DI tem a função de determinar o opcode e
os especificadores dos operandos. A alternativa correta é “o DI (Decodificar a Instrução) determina o
opcode e os especificadores dos operandos”.

As interconexões têm propriedades, sendo que as principais são conhecidas como grau de nó, diâmetro,
capacidade de transmissão e dimensionalidade. Quanto menor o diâmetro, melhor será o desempenho no
pior caso; o diâmetro é a distância entre dois nós mais distantes. A alternativa correta é “a propriedade
diâmetro consiste na distância entre dois nós mais distantes”.

As técnicas de memória virtual e de quebra de processos em páginas são mapeadas em frames na


memória principal. Cada processo tem sua tabela de páginas com seu endereçamento virtual
correspondente a um endereço físico, onde a informação está armazenada e o processador se comunica
diretamente com a memória física e o disco de armazenamento. A paginação viabilizou a implementação
da memória virtual.

Os ponteiros apontam para uma variável, mas eles também são uma variável que contém um endereço de
memória. Afinal, quais benefícios podem ser encontrados quando utilizamos ponteiros? Usar ponteiros é
um facilitador, uma vez que traz benefícios, como fornecer meios para as funções modificarem seus
argumentos, além de poder aumentar a eficiência de certas rotinas, e até mesmo alocar a memória de
forma dinâmica. A alternativa correta é “os ponteiros fornecem meios para as funções modificarem seus
argumentos e podem aumentar a eficiência de certas rotinas”.

A linguagem C é uma das mais utilizadas para estudos em todo o mundo, devido à sua complexidade e
vasta documentação. Existem alguns elementos que são conhecidos na linguagem C, como vetores, laços e
ponteiros. Os ponteiros apontam para uma variável, mas eles também são uma variável que contém um
endereço de memória. A alternativa correta é “ponteiro é uma variável que contém um endereço de
memória”.
Uma estrutura em linguagem de programação C é uma declaração que define uma lista de variáveis
agrupadas, permitindo que sejam acessadas por um ponteiro. O comando typedef faz parte dos nossos
estudos sobre estruturas em linguagem de programação C. Ele apresenta as seguintes características: I.
Permite compor novos tipos de dados. II. É composto a partir de tipos pré-existentes. O comando typedef
possui as seguintes características: permite compor novos tipos de dados, é composto a partir de tipos
pré-existentes e não cria um novo tipo de dado.
Já sabemos que uma estrutura é uma coleção de variáveis, possivelmente de diferentes tipos, organizadas
em um único conjunto, e que as variáveis que compõem uma estrutura são comumente chamadas de
elementos. A estrutura é uma coleção de variáveis, possivelmente de diferentes tipos, organizadas em um
único conjunto, e as variáveis que compõem uma estrutura também são chamadas de elementos.

Usar ponteiros é um facilitador, uma vez que traz benefícios, como fornecer meios para as funções
modificarem seus argumentos. Eles podem aumentar a eficiência de certas rotinas e até mesmo alocar a
memória de forma dinâmica, mas somente três operações de ponteiros são possíveis: II. Aritmética de
ponteiros. III. Atribuição de ponteiros. Somente três operações de ponteiros são possíveis: a aritmética de
ponteiros, a atribuição de ponteiros e a comparação de ponteiros.

Somente três operações de ponteiros são possíveis: aritmética de ponteiros, atribuição de ponteiros e
comparação de ponteiros. Na aritmética de ponteiros, somente a operações de adição e subtração
existem.
JA linha 5 sinaliza o máximo de bytes por código de insturção.

Já conhecemos as pseudoinstruções, que também são comandos. IF indica a montagem condicional e


EXTERN importa um nome definido de outro módulo.

Quando falamos sobre uma macro, podemos dizer que, por definição, uma macro é uma forma de dar um
nome a um pedaço de texto. Após a definição de uma macro, o programador pode escrever o nome dela
em vez de um pedaço de programa.

O texto do corpo da macro é o aspecto comum em diferentes assemblers.

Um processador de macros pode ser utilizado para encurtar comandos. Contudo um programa contém
diversas sequências de instruções.

A linguagem de montagem tem pseudoinstruções, ou seja, comandos que existem para fazer instruções
para o próprio assembler. A pseudoinstrução ENDS aloca armazenamento para um byte.

Podemos definir que linguagem de montagem pura é quando cada declaração produz exatamente uma
instrução que pode ser determinada como linguagem de máquina, existindo, assim, correlações entre as
instruções de máquina e as declarações no programa de montagem As linguagens de montagem são
utilizadas por que são muito mais fácil de programar com a utilização de nomes simbólicos.

Existe um segundo grupo de registradores, que consiste nos registradores de ponteiros e índice. O
registrador considerado o mais importante do grupo é chamado de pilha.

Os registradores AX, BX, CX e DX são os registradores gerais. O primeiro desse grupo é o registrador AX ,
que é denominado registrador acumulador.
JTodo computador tem uma ISA (Instruction Set Architecture), que é um conjunto de registradores, mas
também pode ser um conjunto de instruções ou outras características visíveis para seus programadores.
A ISA é uma linguagem de máquina.

Todo assembler usa mnemônicos, como ADD e SUB, por exemplo, e grande parte dos assemblers suporta
um número limitado de pseudoinstruções, já que é uma característica comum entre eles. O significado
dos mnemônicos são palavras curtas.

A execução de uma instrução pode ser comparada com a execução de um programa muito pequeno. Na
verdade, algumas máquinas tem um programa muito pequeno para executar suas instruções, também
chamado de microprograma.

A operação dos computadores consiste em executar instruções, uma após a outra, sendo que uma única
execução de instruções pode ser dividida em várias etapas. Dentre elas estão: buscar a instrução na
memória, decodificar a instrução e executar a instrução.

Você também pode gostar