Sunteți pe pagina 1din 52

Calculatoare Numerice (2)

- Cursul 7
Dispozitive periferice (2)
Facultatea de Automatic i Calculatoare
Universitatea Politehnica Bucureti

20.02.2013

Comic of the Day

Sisteme I/O pentru Personal


Computers (PC)
USB: Universal Serial Bus
USB 1.0 aprut n 1996
Cabluri i conectori standard/software pentru periferice

PCI/PCIe: Peripheral Component


Interconnect/PCI Express
Dezvoltat de Intel, apare n 1994
Magistral paralel pe 32-bii
Folosit pentru plci de expansiune (de ex. Plac de
sunet, video, ethernet etc.)

DDR: double-data rate memory

Sisteme I/O pentru Personal


Computers (PC)
TCP/IP: Transmission Control Protocol and Internet
Protocol
Conexiune fizic: cablu Ethernet sau Wi-Fi

SATA: interfa pentru hard-drive


Input/Output (senzori, actuatoare, microcontrollere
etc.)
Data Acquisition Systems (DAQs)
USB Links

Sisteme I/O
Processor

interrupts

Cache

Memory - I/O Bus

Main
Memory

I/O
Controller

Disk

Disk

I/O
Controller

I/O
Controller

Graphics

Network

Ce este o magistral?
O magistral este:
O legtur partajat de comunicaie
Un singur set de linii de legtur folosit pentru a conecta
diferite subsisteme
Processor
Input
Control
Memory

Datapath

Output

O magistral este o component vital n construcia unor


sisteme complexe de calcul
Metod sistematic de abstractizare

Avantajele magistralelor

Processor

I/O
Device

I/O
Device

I/O
Device

Memory

Versatilitate:
Dispozitivele noi pot fi adugate cu uurin
Perifericele pot fi mutate ntre diverse sisteme de calcul care respect
acelai standard

Cost redus:
Un singur set de fire de legtur este partajat de toate perifericele

Dezavantajele magistralelor

Processor

I/O
Device

I/O
Device

I/O
Device

Memory

Creeaz o gtuire n comunicaie (bottleneck)


Limea de band a magistralei de memorie limiteaz I/O throughput

Viteza maxim de transfer de date este limitat de:


Lungimea magistralei
Numrul de dispozitive de pe magistral
Necesitatea de-a conecta o gam larg de dispozitive, fiecare cu:
Latene diferite
Viteze de transfer diferite

Organizarea general a unei


magistrale
Control Lines
Data Lines

Linii de control:
Signal requests and acknowledgments
Indic ce fel de informaie circul pe liniile de date la acel
moment

Linii de date transfer informaia de la surs la


destinaie:
Date i adrese
Comenzi complexe

Master versus Slave


Master issues command
Bus
Master

Data can go either way

Bus
Slave

O tranzacie pe magistral se face n doi pai:


Emiterea comenzii (i a adresei)
Transferul de date

cerere
aciune

Master-ul este cel care ncepe orice tranzacie:


Emite comanda (i adresa slave-ului)

Slave-ul este cel care rspunde comenzii:


Trimite datele master-ului, dac master-ul cere datele
Recepioneaz date de la master, dac master-ul dorete s trimit datele

11

Tipuri de magistrale
Magistral Procesor-Memorie (design specific)
Scurt i de vitez mare
Trebuie doar s conecteze sistemul de memorie
Maximizeaz limea de band memory-to-processor
Conectat direct la procesor
Optimizat pentru transferuri de blocuri cache

Magistral I/O (industry standard)


De obicei, de lungime mai mare i mai lent
Trebuie s acomodeze o gam larg de dispozitive I/O
Se conecteaz la magistrala procesor-memorie sau backplane bus

Backplane Bus (standard / proprietar)


Backplane: o structur de interconectare din interiorul asiului
Permite procesoarelor, memoriei i dispozitivelor I/O s coexiste
Avantaje de cost: o magistral pentru toate componentele

Magistrale Seriale (tendin general de interconectare serial)

Sistem de calcul cu o magistral:


Backplane Bus
Backplane Bus
Processor

Memory

I/O Devices

O singur magistral (backplane bus) este folosit pentru:


Comunicaie processor-to-memory
Comunicaia dintre dispozitivele I/O i memorie

Avantaje: Simplu i cost redus


Dezavantaje: lent / magistrala poate deveni un bottleneck
Exemplu: IBM PC - AT

Sistem cu dou magistrale


Processor Memory Bus
Processor

Memory
Bus
Adaptor
I/O
Bus

Bus
Adaptor

Bus
Adaptor

I/O
Bus

I/O
Bus

Magistralele I/O se conecteaz la magistrala principal prin


adaptoare:
Processor-memory bus: n special pentru traficul procesor-memorie
I/O buses: furnizeaz conectori de expansiune pentru diferitele dispozitive I/O

Apple Macintosh-II
NuBus: Procesor, memorie i cteva dispozitive I/O
SCCI Bus: restul de dispozitive I/O

Sistem cu trei magistrale


(+ backside cache)
Processor Memory Bus
Processor
Backside
Cache bus

Memory
Bus
Adaptor

Bus
Adaptor

I/O Bus

L2 Cache
Bus
Adaptor

I/O Bus

Un numr mic de magistrale backplane conectate la magistrala


procesor-memorie
Magistrala procesor-memorie este optimizat pentru traficul procesor-memorie
Magistralele I/O sunt conectate la magistrala backplane

Avantaj: ncrcarea magistralei de procesor este cu mult redus

Trecerea de la I/O paralel la I/O


serial
CPU
I/O IF

I/O 1

I/O 2

Shared Parallel Bus Wires

Central Bus
Arbiter

Frecvena ceasului pe un bus paralel e limitat de lungimea


magistralei (~100MHz)
Consum de energie mare pentru a conecta un numr mare de
periferice
Central bus arbiter crete latena fiecrei tranzacii
Conectori scumpi, multe linii de interconectare ce cresc
costurile (orice linie n plus adaug un cost suplimentar)
Exemple: VMEbus, Sbus, ISA bus, PCI, SCSI, IDE
16

Linii seriale punct-la-punct


dedicate
Legturile punct-la-punct funcioneaz la
viteze multi-gigabit folosindcodificri avansate
I/O 1
pentru ceas/semnale de date (necesit mult
CPU
electronic la ambele capete ale comunicaiei) I/O IF
Low power avem o singur legtur de date
I/O 2
cu un singur periferic
SATA, USB, Firewire, etc.
Transferuri simultane multiple
Conectori i cabluri ieftine (mai puin cupru pentru cabluri/ mai
mult siliciu pentru logica de comunicaie)
Fiecare dispozitiv are legtura lui de date, cu parametri proprii de
vitez i comunicaie
Exemple: Ethernet, Infiniband, PCI Express,
17

Principalele componente ale unui


chipset Intel: Pentium 4
Northbridge:
Handles memory
Graphics

Southbridge: I/O

PCI bus
Disk controllers
USB controllers
Audio
Serial I/O
Interrupt controller
Timers

19

Exemplu: National Semiconductor


ns16550 UART
Universal Asynchronous
Receiver/Transmitter
Dispozitiv serial RS-232

Port serial IBM PC standard


Chip-ul este integrat acum n
Southbridge-ul oricrui PC
nc e folosit la servere PC
Nu mai e folosit pe laptopuri
si foarte rar ntlnit pe
desktop-uri n zilele noastre

Primul device driver care


este scris de obicei pentru
un SO

Registre
Detaliile de
implementare pentru
registre date n
datasheets
Informaiile de acolo
sunt cteodat mai
puin adevrate
Din datasheetul NS16550
UART

Adresarea registrelor
1. Mapate n memorie:

Registrele apar ca locaii de memorie


Accesate folosind load/store (movb/movw/movl/movq)

2. I/O instructions:

Spaiu diferit (16 bii) de adrese pentru dispozitive I/O mai


vechi
Specific (zilele noastre) arhitecturii
Instruciuni speciale: inb, outb, etc.

3. Indirecie:

Scrie un registru index cu un offset, apoi un registru data


cu valoarea efectiv a registrului
Folosit pentru a salva spaiul de adres (de obicei spaiul I/O)

Registre ns16550 (fiecare are 8 bii)


Addr.

Name

Description

Notes

RBR

Receive Buffer Register (read only)

DLAB=0

THR

Transmit Holding Register (write only)

DLAB=0

IER

Interrupt Enable Register

DLAB=0

IIR

Interrupt Identification Register (read only)

FCR

FIFO Control Register (write only)

LCR

Line Control Register

MCR

MODEM Control Register

LSR

Line Status Register

MSR

MODEM Status Register

SCR

Scratch Register

DLL

Divisor Latch (LSB)

DLAB=1

DLM

Divisor Latch (MSB)

DLAB=1
DLAB = bit 7 of the LCR register
23

ns16550 LSR:
Line Status Register
0
DR

7
OE

PE

FE

BI

THRE

TEMT

ERRF

Error in Receiver FIFO

Transmitter Empty
Transmit Holding Register Empty
Break Interrupt Framing Error
Parity Error Overrun Error Data
Ready

24

Un driver UART foarte simplu


#define
#define
#define
#define

UART_BASE
UART_THR
UART_RBR
UART_LSR

0x3f8
(UART_BASE + 0)
(UART_BASE + 0)
(UART_BASE + 5)

void serial_putc(char c)
{
// Wait until FIFO can hold more chars
while( (inb(UART_LSR) & 0x20)== 0);
// Write character to FIFO
outb(UART_THR, c);

Register addresses
from data sheet 0x3f8:
location on a PC

Send a character (wait


until we can first)

}
char serial_getc()
{
// Wait until there is a char to read
while( (inb(UART_LSR) & 0x01) == 0);
// Read from the receive FIFO return
inb(UART_RBR);

Read a character (spin


waiting until one is
there to read)

25

Un driver UART foarte simplu


Defapt, mult prea simplu!
Dar aa arat ntotdeauna prima versiune pentru orice

Fr cod de iniializare, fr error handling.


Folosete Programmed I/O (PIO)
CPU citete sau scrie explicit toate valorile din registre
Toate datele trec automat prin registrele CPU

Folosete polling
CPU face busy-waiting nainte de fiecare send/receive
Bucl strns!

Nu poate s fac nimic altceva ntre timp


Dei, putem s ne gndim la un sistem de threading i
sincronizare

Fr CPU polling, nu putem face nici un fel de operaii I/O

Registrele I/O nu sunt memorie


Registrele unui device nu se comport ca un RAM!
Coninutul registrelor se schimb fr scrieri de la
CPU
Flag-uri (bii) de status
Date recepionate

Scrierile n registre sunt folosite pentru a declana


aciuni
Trimiterea de date
Resetarea unor maini de stri din periferic

Problema cu cache-urile
Citirile din I/O nu pot veni din cache
Valoarea reg I/O se schimb cache-ul devine inconsistent

Write-back caches (i write buffers) cauzeaz probleme


Nu tii cnd linia respectiv va fi scris efectiv n periferic

Citirile i scrierile nu pot fi combinate n linii de cache


Registrele fac scrierea/citirea la nivel de octet/cuvnt
Scrierea unei linii ntregi poate s suprascrie i alte registre n
afara celor utile
Chiar i citirile n mas pot declana schimbri n starea unui
device

Accesul la registrele de I/O trebuie s nu implice memoria


cache
Handling n MMU: PTE-urile au un flag no cache
Spaiul I/O oricum nu permite caching

Alte probleme
1. Cum evitm s facem polling?

Cum tie CPU-ul cnd device-ul este gata sau a terminat ultima
comand?

2. Cum lsm CPU-ul n pace?

Putem face transfer de date fr a trece prin CPU sau cache?


CPU-ul poate s fac altceva?

1. De unde vin aceste locaii de memorie pentru registre?

Cum poate SO s gseasc dispozitivele mapate n spaiul fizic


de adres?
Cum sunt alocate adresele fizice?

Evitm cu totul polling-ul


Un CPU nu poate s fac poll pentru fiecare dispozitiv
ca s vad dac este gata
Pierdere de timp
Dureaz prea mult ca s reacioneze

Soluia: dispozitivele pot s ntrerup procesorul


Funcioneaz ca o excepie: salveaz starea curent i sare la
o adres prestabilit din memoria alocat kernelului
Informaia legat de sursa ntreruperii este codificat n
vector

ntreruperi
CPU are linii Interrupt-request declanate de dispozitivul I/O
Pot fi declanate pe nivel logic sau pe front

Interrupt handler recepioneaz cererea de ntrerupere


Mascabile, pentru a evita sau ntrzia anumit ntreruperi

Vectorul de ntrerupere face corespondena ntre ntrerupere i


handler-ul corect
Bazate pe prioriti
Unele nonmascabile

Mecanismul de ntreruperi e folosit i pentru ntreruperi

Vectori excepie la x86


0

Divide error

Debug exception

Non-maskable interrupt (NMI)

Breakpoint

Overflow

Bounds check

Invalid opcode

Coprocessor not available

Double fault

Coprocessor segment overrun (386 or earlier)

Invalid task state segment

Segment not present

Stack fault

General protection fault

Page Fault

Reserved

10

Math fault

11

Alignment check

12

Machine check

13

SIMD floating point exception

14-1F

Reserved to Intel

20-FF

Available for external interrupts

32

Programmable Interrupt Controller


(PIC)

NMI
INTR

IRQ0

Device 1

IRQ1

Device 2

INTA

x86 CPU

PIC
D0

D7
IRQ<n-1>

Device n

33

Direct Memory Access


Evit I/O programat pentru majoritatea datelor
De ex. reea rapid sau interfee de disc

Necesit un controller DMA


De obicei implementat n procesor, n zilele noastre

Ocolete CPU i transfer datele direct de la I/O la


memorie
Nu blocheaz CPU-ul
Salveaz limea de band
Doar o singur ntrerupere pe transfer

Transfer DMA old-style


4. DMA controller transfers
byte to address A,
increments A,
decrements S.
5. When S == 0,
DMA controller
interrupts CPU to
indicate transfer
complete

DMA/PCI
controller

1. Device driver requests


data transfer of S bytes
from disk controller;
specifies buffer address A
and size S to DMA
controller

CPU

Cache
Frontside (memory) bus

Main memory
Buffer

PCI bus

IDE disk
controller

2. Disk controller starts


DMA transfer of S bytes
3. Disk controller initiates
bus request for each data
byte from disk

Avantajul de baz al DMA


Decupleaz transferul de date de procesarea de date

CPU nu trebuie s copieze datele de la/la dispozitiv


Nu polueaz cache-ul CPU
Pot fi procesate cnd decide CPU (sau SO)
Performan mrit: CPU i device I/O merg n paralel

Dezavantaje posibile:
Overhead mare pentru transferuri foarte mici de date
De obicei nu e o problem (pn i UART-urile fac DMA!)

DMA i memoria Cache


DMA nseamn ca memoria devine inconsistent cu
cache-ul CPU

Opiuni:
1. CPU poate s marcheze bufferele DMA ca non-cacheable
large hit probabil vrea s proceseze datele oricum
2. Cache poate s fac snoop la tranzaciile DMA (dar nu
scaleaz foarte bine la sistemele multiprocesor)
3. SO poate s goleasc/invalideze explicit regiuni din cache
cache management este o parte important a driverelor de
dispozitive!

DMA i Memoria Virtual


Adresele DMA sunt fizice
Apar pe magistrala extern

Codul utilizatorilor i al SO lucreaz cu adrese virtuale (n


majoritatea timpului)
SO (i device drivers) trebuie s translateze manual virtual
fizic atunci cnd programeaz controllerele DMA
Acest lucru necesit mai mult de o tablel hardware de pagini!
DMA al unei singure regiuni de adrese virtuale s-ar putea s nu aib
un corespondent contiguu n spaiul de adrese fizice
Scatter-gather DMA controllers: DMA de la/la o list de regiuni

Sisteme foarte recente: implementeaz IOMMU


Funcioneaz ca MMU, dar pentru DMA scrie din dispozitive
Tot trebuie programat de SO pentru a fi n concordan cu starea
MMU

Unde sunt toate aceste registre?


De unde tie SO cte dispozitive I/O sunt
conectate?
Unde sunt mapate registrele dispozitivelor n
spaiul fizic?
i cror vectori de ntrerupere le corespund?

Soluie: include-le n designul magistralei de


I/O
Exemplu: PCI

PCI este
Peripheral Component Interconnect

Standard electric pentru conectarea dispozitivelor


Ca i PCMCIA, PCI-X, PCI-Express, etc.

Un standard pentru conectorii fizici


Un set de protocoale de bus pentru comunicaia
dintre dispozitive

O interfa vizibil software-ului pentru


operaii I/O hardware
PCIe a urmat PCI, dar extinde aceeai interfa
software

PCI ncearc s rezolve probleme multiple:


Device discovery
Detecia tuturor dispozitivelor din sistem

Alocarea de adrese
La ce adrese apar diferitele registre ale dispozitivelor
conectate?

Interrupt routing
Ce semnale de ntrerupere de la fiecare dispozitiv se mapeaz
i n ce vector de excepie?

DMA inteligent
Dispozitive ce au Bus mastering nu mai au nevoie de
controller DMA

Conexiuni fizice: PCI este un arbore


CPU

RAM
PCI root
bridge

NIC

Sound

PCI-PCI
bridge

USB

SCSI

Wireless

Graphics

PCI bridges form a hierarchy


Also:

PCI-ISA
PCI-USB
PCI-SCSI
Etc.

42

Spaiul de adres PCI este plat


Fiecare device PCI cere un set de adrese
Spaiu fizic de adrese (32-bii sau 64-bii)
Spaiu adres I/O (de obicei 16-bii)

Bridges up the tree remap addresses to the device


Rezultat:
Fiecare dispozitiv apare ca un segment contiguu de
adrese
n spaiul de memorie
n spaiul I/O (doar pe x86)

Dispozitivele PCI sunt self-describing


Fiecare dispozitiv are un header pentru configuraie
Accesat prin bridge-ul printe, iniial

Cteva cmpuri:
Bits

Description

16

Manufacturer ID (idenfies Intel, 3Com, NVidia, etc.

16

Model ID (specific to manufacturer)

24

Class code (what kind of device is this?)

Version identifier

Plusuri:

Aloc automat spaiul de adres


Intreruperi
Informaii de natur electric
Etc.

Localizarea tuturor dispozitivelor


Gsete bridge-ul PCI root
PCI bridge este n vrful arborelui
PC-urile mari pot avea mai mult de unul

Citete configuraiile pentru a gsi toate dispozitivele


ataate
Adaug la lista de dispozitive i funcii
nregisteaz cerinele pentru spaiul de adres
If a bridge, recurse!

Rezultatul:
Lista complet a tuturor dispozitivelor din sistem cu toate
cerinele de spaiu de adres aferente

Alocarea adreselor
Gsete adresele pentru fiecare dispozitiv i bridge
Cerinele includ:
Fiecare dispozitiv are dat dimensiunea spaiului de adres necesar
Toate dispozitivele de sub un bridge au adrese care sunt incluse
n spaiul de adres al bridge-ului
Fiecare bridge are un segment de memorie care include toate
segmentele de memorie ale tuturor copiilor.
Fiecare segment este limitat de adrese putere a lui 2

Apoi programeaz:
Fiecare bridge PCI cu informaii legate de translatarea adreselor
Fiecare dispozitiv cu registre base-address/range (BAR)

ntreruperi PCI

Patru linii de ntrerupere


INTA, INTB, INTC, INTD
Bridge-urile permit cablarea arbitrar a liniilor de IRQ a
dispozitivelor la cele patru linii
Translatate de root bridge n intreruperi de sistem

PCI Express introduce MSI


Message-signalled interrupts
ntreruperea codificat ca un PCI write ntr-un spaiu
anume de adrese
Translatate de root bridge n intreruperi de sistem
ntreruperile pot fi rutate individual ctre un anumit
core/APIC

DMA peste PCI


PCI permite Bus Mastering
Device-ul poate emite tranzacii de scriere/citire
oriunde n memorie
Chiar (n anumite cazuri) spre alte dispozitive PCI

Controller-ul DMA extern nu mai e relevant


Controller integrat n dispozitivul nsui
Principiul se aplic: device-ul face DMA pentru date de
la/la memorie
Mult mai flexibil / dispozitive inteligente

Dispozitive inteligente
Bus mastering, plus foarte mult spaiu de adres acum

Dispozitivele pot acum s acceseze autonom orice:


Locaie din memoria principal
Alte dispozitive

Permite protocoale complexe pentru interaciunea


CPUDevice
ncearc s in i CPU i device-ul ocupat n perioadele de
activitate mare
In RAM buffering
Descriptor rings mecanism de schimbare de cereri i
rspunsuri

Exemplu: Intel e1000 PCI- Express


Ethernet card

Multiple send queues


Multiple receive queues
Hashing of packet headers to queues
Directing interrupts to different cores
Packet checksumming in hardware
etc.

Rezumat
Dispozitivele i CPU comunic via:
Registre I/O mapate n memorie
ntreruperi i vectori de ntrerupere
Direct Memory Access (DMA)

Magistralele I/O (precum PCI):


Permit dispozitivelor s partajeze/aloce adrese
fizice
Aloc ntreruperi
Permit bus mastering direct memory access

Acknowledgements
These slides contain material developed and copyright by:

Arvind (MIT)
Krste Asanovic (MIT/UCB)
Joel Emer (Intel/MIT)
James Hoe (CMU)
John Kubiatowicz (UCB)
David Patterson (UCB)

MIT material derived from course 6.823


UCB material derived from course CS252

52

S-ar putea să vă placă și