Você está na página 1de 26

Introdução aos Sistemas

Computacionais
Disciplina: 113468

Prof. Marcus Vinicius Lamar


Dispositivos de
Entrada e Saída
UnB/CIC 113468– Introdução aos Sistemas Computacionais

Relembrando o Computador
◼ Componentes:
- Processador(es)
- Dispositivos de memória
- Dispositivos de entrada
- Dispositivos de saída
- Dispositivos de comunicação
Saída

Comunicação Processador

Entrada

Memória

3
UnB/CIC 113468– Introdução aos Sistemas Computacionais

Reestruturando o Computador
Barramento de portas IO

Portas Interrupções
Dispositivo 1

Dispositivo 2
Processador ...

Barramento
Dispositivo N

Controlador de Memória Controlador


VGA
de Vídeo

Cache L1 Cache L1
de de Memória
Instruções Dados secundária
Cache L2 e L3
Controlador
Memória RAM Primária
de IO
4
UnB/CIC 113468– Introdução aos Sistemas Computacionais

Barramentos no Pentium IV

Pentium 4
Processor

Controladores de IO:
-dispositivos rápidos
-dispositivos lentos

5
UnB/CIC 113468– Introdução aos Sistemas Computacionais

Barramentos do Core i7 - 9ª geração

Controladores de IO para dispositivos


rápidos integrados ao chip

6
UnB/CIC 113468– Introdução aos Sistemas Computacionais

Revendo o Computador
Barramento de portas IO
B

Portas Interrupções
Dispositivo
Controlador 1

Barramento de dispositivos
CPU de IO
Dispositivo
2
Barramentos Rápidos ...
Dispositivo
MMU GPU N

Memória
Memórias Cache secundária
Memória Vídeo
L1, L2, L3, ...

Memória RAM VGA

7
UnB/CIC 113468– Introdução aos Sistemas Computacionais

Operações de Entrada e Saída


◼ Por Polling: (software)
 processador testa periodicamente se dispositivo está pronto para
realizar a transferência de dados
 Problema: toma muito tempo do processador

◼ Por Interrupção: (hardware)


 o dispositivo avisa ao processador a sua disponibilidade
 Problema: hardware mais complexo, processador deve suportar
interrupções

8
UnB/CIC 113468– Introdução aos Sistemas Computacionais

Endereçando os Dispositivos de E/S


Existem 2 formas básicas de acessar os dispositivos de E/S:

1) Instruções de E/S
 o processador possui instruções específicas para comunicação
com dispositivos de entrada e saída
 a arquitetura x86 utiliza essa abordagem, com instruções que
fazem leitura e escrita em portas de E/S
◼ IN - leitura de uma porta de entrada
 IN AL, imm8 - leitura de um byte da porta imm8 para registrador AL
 IN AX, DX - leitura de uma palavra da porta em DX para registrador AX
◼ OUT - escrita em uma porta de saída
 OUT imm8, AL - escreve byte de AL na porta imm8
 OUT DX, AX - escreve palavra de AX na porta DX
 requer um barramento de E/S separado do barramento de
memória
9
UnB/CIC 113468– Introdução aos Sistemas Computacionais

Endereçando os Dispositivos de E/S


2) E/S mapeada em memória (MMIO)
 Os dispositivos de entrada e saída estão associados a endereços
de memória
 processador utiliza instruções load e store para se comunicar
com os dispositivos
 as arquiteturas RISC geralmente utilizam essa abordagem
◼ lw, lh, lb - leitura de um dispositivo de entrada
 lbu t0,0(s0) - leitura de um byte do dispositivo que está no
endereço armazenado em s0 para o registrador t0.
 lw t0,0(s0) - leitura de uma word do dispositivo que está no
endereço armazenado em s0 para o registrador t0.
◼ sw, sh, sb - escrita em um dispositivo de saída
 sb t0,0(s1) - envia um byte em t0 para o dispositivo que está no
endereço armazenado em s1.
 sw t0,0(s1) - envia uma word em t0 para o dispositivo que está no
endereço armazenado em s1.
10
UnB/CIC 113468– Introdução aos Sistemas Computacionais

Mapeamento da Memória e dispositivos no RARS


Memory Mapped I/O (MMIO)
0xFFFF FFFF
MMIO Dispositivos de E/S
0xFF00 0000

Reservado

0x7FFF FFFC
sp Pilha

Área de dados
Segmento: .data
Dados
0x1001 0000
Locais

gp Dados
Globais
0x1000 0000
Texto Área de Programa
pc Segmento: .text
0x0040 0000
Reservado
0x0000 0000

11
UnB/CIC 113468– Introdução aos Sistemas Computacionais

Estrutura básica de um programa em Assembly

Segmento de dados

Segmento de texto

12
UnB/CIC 113468– Introdução aos Sistemas Computacionais

Instrução ecall

Realiza a chamada às rotinas de serviço fornecidas pelo sistema


operacional.

•Recebe parâmetros em registradores específicos


• a7: Serviço a ser chamado
• a0: Argumento (se houver)

•Retorna valores em registradores específicos


• a0: Valor de retorno (se houver)

13
UnB/CIC 113468– Introdução aos Sistemas Computacionais

Simulador RARS – chamadas do sistema


Simula um sistema operacional com funções mínimas de Entrada/Saída
em console próprio (teclado, monitor, áudio)

14
UnB/CIC 113468– Introdução aos Sistemas Computacionais

Chamadas de acesso ao console

15
UnB/CIC 113468– Introdução aos Sistemas Computacionais

Chamadas de acesso ao áudio e temporização

17
UnB/CIC 113468– Introdução aos Sistemas Computacionais

Chamadas de geração de números randômicos

18
UnB/CIC 113468– Introdução aos Sistemas Computacionais

Ferramentas de E/S em hardware no Rars:


◼ Keyboard and Display MMIO Simulator
 Entrada por leitura do teclado
 Saída em terminal de texto
 Simula IO por Polling ou por Interrupção

◼ Bitmap Display
 Saída gráfica em display VGA
 Resolução selecionável (mas usem sempre 320240)
 Acesso direto à Memória de Vídeo (sem GPU)

◼ Sintetizador de Áudio
 Saída de áudio por sintetizador MIDI (Musical Instrument Digital Interface)
 Definição do instrumento, nota, duração e volume

19
UnB/CIC 113468– Introdução aos Sistemas Computacionais

Keyboard and Display MMIO Simulator


◼ Endereço Função
0xFF20 0000 bit 0 → Status do teclado
bit 1 → Define Interrupção ou Polling

0xFF20 0004 bits 7-0 → Código ASCII da tecla

0xFF20 0008 bit 0 → Status do monitor


bit 1 → Define Interrupção ou Polling

0xFF20 000C bits 7-0 → Define ASCII do caractere


ASCII: 12 clear screen
ASCII: 7 posiciona cursor em (x,y)
x: bits 31-20
y: bits 19-8
20
UnB/CIC 113468– Introdução aos Sistemas Computacionais

Keyboard and Display MMIO Simulator


◼ Exemplos:
 keypoll.s
 keyint.s
Monitor

Eco do teclado

21
UnB/CIC 113468– Introdução aos Sistemas Computacionais

Relembrando Representação de Imagens


◼ Em linguagens de alto nível é uma matriz(nl,nc,3)
◼ Componentes (R,G,B)
◼ Cor: 8 bits/componente = 24 bits/pixel

BB GGG RRR

8E 4A 7A C3 AA C7
BF 9E B5 DA BA C3
22
UnB/CIC 113468– Introdução aos Sistemas Computacionais

Bitmap Display
◼ Mapeamento da memória de vídeo VGA no
Rars14_Custom4 (com duas frames de vídeo, 0 e 1)
0xFF00 0000 0xFF00 013F

320

240

0xFF01 2AC0 0xFF01 2BFF 23


UnB/CIC 113468– Introdução aos Sistemas Computacionais

Bitmap Display
◼ Endereço (linha,coluna) = Endereço Base + linha  320 + coluna
◼ Com coluna de 0 a 319 e linha de 0 a 239.
(0,0) (0,319)
Endereço Base
Frame 0= 0xFF00 0000
Frame 1= 0xFF10 0000
(239,0) (239,319)
Seleção = 0xFF200604

Paleta de cores
◼ Codificação da Cor: 8 bits/pixel

76 543 210
BB GGG RRR

Obs.: A cor 0xC7 é o transparente


◼ Ex.: bitmap.s
frame.s
24
UnB/CIC 113468– Introdução aos Sistemas Computacionais

ecalls usando o Bitmap Display


◼ Ex.: testeECALLv21.s
Serviço a7 Argumentos Resultados
a0=inteiro
a1=coluna Imprime o número inteiro complemento de 2 a0 na posição (a1,a2)
print integer 101 a2=linha com as cores a3={0...0BBGGGRRRbbgggrrr} sendo BGR fundo e
a3=cores bgr frente na frame a4
a4=frame
fa0=float
a1=coluna
Imprime o número float em fa0 na posição (a1,a2) com as cores a3
print float 102 a2=linha
na frame a4
a3=cores
a4=frame
a0=endereço string
a1=coluna
Imprime a string terminada em NULL presente no endereço a0 na
print string 104 a2=linha
posição (a1,a2) com as cores a3 na frame a4
a3=core
a4=frame
a0=char (ASCII)
a1=coluna
Imprime o caractere a0 (ASCII) na posição (a1,a2) com as cores a3
print char 111 a2=linha
na frame a4
a3=cores
a4=frame
a0=inteiro
a1=coluna
Imprime em hexadecimal o número em a0 na posição (a1,a2) com
print int hex 134 a2=linha
as cores a3 na frame a4
a3=core
a4=frame
25
UnB/CIC 113468– Introdução aos Sistemas Computacionais

Sintetizador de Áudio MIDI


◼ MIDI: Musical Instrument Digital Interface
◼ Protocolo de comunicação com instrumentos musicais
◼ Define 128 instrumentos, 128 notas, efeitos especiais, etc.

◼ Inclua no seu programa no Rars o arquivo SYSTEMv21.s


Serviço a7 Argumentos Resultados

a0=nota
Sintetiza a nota a0, de duração a1, com o instrumento a2 e volume
a1=duração
MidiOut 31 a3.
a2=instrumento
Na DE1 o instrumento é fixo.
a3=volume

a0=nota
Sintetiza a nota a0, de duração a1, com o instrumento a2 e volume
a1=duração
MidiOutSync 33 a3, e pausa o programa até o final da execução da nota
a2=instrumento
Na DE1 o instrumento é fixo.
a3=volume

Sleep 32 a0=tempo Pausa a execução do programa por a0 milissegundos

Ex.: midi.s
26
UnB/CIC 113468– Introdução aos Sistemas Computacionais

Exemplo : SORT
◼ Compile para Assembly RISC-V e excute no Rars o seguinte programa C
void show(int v[], int n) int vetor[10]={9,2,5,1,8,2,4,3,6,7};
{
int i; void main()
for(i=0;i<n;i++) {
printf("%d\t",v[i]); show(vetor,10);
printf("\n"); sort(vetor,10);
} show(vetor,10);
}
void swap(int v[], int k)
{ .data
int temp; vetor: .word 9,2,5,1,8,2,4,3,6,7
temp=v[k]; newl: .string "\n"
v[k]=v[k+1]; tab: .string "\t"
v[k+1]=temp;
} .text
main: ....
li a7,10
void sort(int v[], int n) ecall
{ show: ....
int i,j; ret
for(i=0;i<n;i++) swap: ....
for(j=i-1;j>=0 && v[j]>v[j+1];j--) ret
swap(v,j); sort: ....
} ret 27

Você também pode gostar