Dispozitive de intrare/ieșire -...
Transcript of Dispozitive de intrare/ieșire -...
![Page 1: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/1.jpg)
Cursul 9
9Dispozitive de intrare/ieșire9 aprilie 2012 - 15 aprilie 2012
![Page 2: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/2.jpg)
Suport curs 9
● OSC○ Capitolul 13 – I/O Systems○ Capitolul 12 – Mass Storage Structure
■ Secțiunile 12.2, 12.4, 12.7● MOS
○ Capitolul 5 – Input/Output■ Secțiunile 5.1, 5.2, 5.3■ Subsecțiunile 5.4.1, 5.4.3
![Page 3: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/3.jpg)
Cuprins
● Accesul la dispozitivele de I/E● Polling, întreruperi, DMA● Caracteristici ale dispozitivelor de I/E● Device drivere● Operații de I/E pe discuri● Operații de I/E în Linux● Operații de I/E în Windows
![Page 4: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/4.jpg)
Hardware de I/E
● Varietate mare de dispozitive● Concepte
○ port (adresă de I/E)○ magistrală○ controller
● Instrucțiuni de I/E comandă controller-ul[1]● Controller-ul gestionează dispozitivul
![Page 5: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/5.jpg)
Infrastructura hardware de I/E
![Page 6: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/6.jpg)
Comunicația cu dispozitivele de I/E
● Programmed I/O (PIO)○ port-mapped I/O○ memory-mapped I/O
● Interrupt-driven I/O (alternativ polling)● Direct Memory Access (DMA)● Channel I/O (I/O processor)
![Page 7: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/7.jpg)
Port-mapped I/O
● Spațiu de adresă rezervat pentru dispozitivele de I/E● O adresă I/O se numește port● Instrucțiuni specializate pentru acces la port:
○ IN REG, 0x2F8● Un port adresează un registru al controller-ului
○ registre de stare, de control, de intrare, de ieșire
![Page 8: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/8.jpg)
Porturi de I/E
![Page 9: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/9.jpg)
Memory-mapped I/O
● Se folosește o parte din spațiul de adresare a memoriei○ registrele dispozitivelor de I/E sunt mapate în spațiul de memorie
● Avantaje○ nu necesită instrucțiuni specializate (assembly)○ protejarea se realizează cu ajutorul memoriei virtuale○ instrucțiunile pot referi memorie sau registre
● Dezavantaje○ trebuie inhibat cache-ul la nivel de pagină
■ volatile○ bridge-uri între magistrale -> mai lent decât port-mapped I/O
![Page 10: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/10.jpg)
Port IO/MMIO
$ cat /proc/ioports
0000-001f : dma10020-0021 : pic10040-0043 : timer00050-0053 : timer10060-006f : keyboard0070-0077 : rtc0080-008f : dma page reg00a0-00a1 : pic200c0-00df : dma200f0-00ff : fpu0170-0177 : ide101f0-01f7 : ide002f8-02ff : serial0376-0376 : ide1[...]
$ cat /proc/iomem
00000000-0009fbff : System RAM
00000000-00000000 : Crash kernel
0009fc00-0009ffff : reserved
000a0000-000bffff : Video RAM area
000c0000-000c7fff : Video ROM
000cc000-000d97ff : Adapter ROM
000f0000-000fffff : System ROM
00100000-0ffeffff : System RAM
00100000-00281514 : Kernel code
00281515-003117b3 : Kernel data
20000000-200fffff : PCI Bus #01
[...]
![Page 11: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/11.jpg)
Polling
copy_from_user(buffer, p, count); /* p is the kernel buffer */for (i = 0; i < count; i++) { /* loop on every character */ while (*printer_status_reg != READY) /* loop until ready */ ; printer_data_register = p[i]; /* output one character */}return_to_user();
![Page 12: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/12.jpg)
Întreruperi
● Linii de întrerupere (IRQ line)● IRQ (Interrupt Request) de la dispozitiv● Tabelă de întreruperi● Procesorul rulează rutina de tratare a întreruperii (IRQ
handler/ISR)● Întreruperi mascabile/non-mascabile● Mecanism folosit și pentru excepții
int 0x80 ; apel de sistem în Linuxint 2eh ; apel de sistem în Windows
![Page 13: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/13.jpg)
Întreruperi (2)
![Page 14: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/14.jpg)
IRQ lines
$ cat /proc/interrupts
CPU0
0: 111151372 IO-APIC-edge timer
1: 8 IO-APIC-edge i8042
6: 2 IO-APIC-edge floppy
7: 2 IO-APIC-edge parport0
8: 4 IO-APIC-edge rtc
9: 1 IO-APIC-level acpi
12: 114 IO-APIC-edge i8042
14: 3277682 IO-APIC-edge ide0
15: 65 IO-APIC-edge ide1
169: 14445090 IO-APIC-level eth0
NMI: 0
LOC: 111150116
ERR: 0
MIS: 0
![Page 15: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/15.jpg)
Bottom-half handlers
● Rutinele de tratare a întreruperilor trebuie să fie rapide● Un driver trebuie să efectueze prelucrări intense● Pentru a rula operații ce necesită un timp mare de execuție sau
operații interzise într-o rutină de tratare a întreruperii, se planifică un bottom-half handler
● BH este executat ulterior de SO● Rutina de tratare a întreruperii se mai numește top-half handler
![Page 16: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/16.jpg)
DMA
● CPU dispune o comandă în memorie (sursă, destinație, octeți de transferat)
● CPU comandă DMA să efectueze transferul● CPU nu poate accesa magistrala dacă este utilizată de
DMA○ cycle stealing○ burst mode
● Bus-master○ dispozitivul poate accesa singur memoria și poate fi programat să
scrie singur datele
![Page 17: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/17.jpg)
DMA (2)
![Page 18: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/18.jpg)
Ierarhia de interfețe de I/E
![Page 19: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/19.jpg)
Caracteristici ale dispozitivelor de I/E
![Page 20: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/20.jpg)
Dispozitive de tip caracter și bloc
Char Devices
● Transfer la nivel de caracter● Viteză redusă● Acces secvențial● Operații put/get● Tastatură, mouse, port serial
Block Devices
● Transfer la nivel de bloc● Viteză ridicată● Acces aleator (seek)● read/write/seek● Discuri● Sisteme de fișiere
![Page 21: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/21.jpg)
Dispozitive de rețea
● Diferite de dispozitivele de tip caracter/bloc○ interfață proprie
● Interfața socket○ separare între protocol și operațiile de I/E
![Page 22: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/22.jpg)
Operații blocante/non-blocante
● Operații blocante○ procesul este suspendat până la încheierea operației○ simplu de folosit○ insuficiente
● Operații non-blocante○ operația se întoarce imediat○ procesul primește datele disponibile
● Operații asincrone○ procesul rulează pe măsura execuției operației○ la încheierea operației procesul este notificat○ folosite în event-driven programming
![Page 23: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/23.jpg)
Modele de operații de I/E
read/writeReadFile/WriteFile
read/write(O_NONBLOCK)
selectAIO
(aio_*, overlapped I/O)
blocante non-blocante
sincrone
asincrone
![Page 24: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/24.jpg)
User-space API
● Dispozitive caracter/bloc○ open(“/dev/ttyS0”), open(“/dev/hda”);○ read, write○ close
● Dispozitive de rețea○ socket, send, recv, shutdown
● Controlul dispozitivelor○ ioctl, DeviceIoControl○ setsockopt, getsockopt
![Page 25: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/25.jpg)
User-space API (2)
● Operații asincrone○ Unix: aio_read, aio_write, aio_suspend○ Windows (overlapped I/O): ReadFile, WriteFile, OVERLAPPED
● Event driven I/O○ non-scalabile: select, poll○ epoll, CompletionPorts, kqueue (FreeBSD)
![Page 26: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/26.jpg)
Zero-copy
● Nu se copiază date dintr-un buffer într-un alt buffer● Creșterea performanței● Exemple
○ mmap/MapViewOfFile○ sendfile/TransmitFile, TransmitPackets○ splice
● Concept important în rețele de mare viteză
![Page 27: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/27.jpg)
Vectored I/O
● scather/gather I/O● Citirea/scrierea se face din/în mai multe buffere simultan
○ vector de buffere○ citire = scatter, scriere = gather
● Concatenarea ieșirii, împărțirea intrării● Eficiență● readv, writev● ReadFileScatter/WriteFileGather
![Page 28: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/28.jpg)
Subsistemul de I/E
● Planificare (I/O scheduler, I/O manager)○ sorting & merging
■ cererile sunt sortate/comasate pentru eficiență○ unele SO încearcă să fie echitabile
● Buffering○ compensarea vitezei de transfer diferite între dispozitive○ reasamblarea datelor (networking)○ copy semantics
■ alterarea datelor în primul buffer nu afectează celălalt buffer
![Page 29: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/29.jpg)
Subsistemul de I/E (2)
● Caching○ memoria conține copii ale datelor○ performanță (diferență viteză acces memorie/acces dispozitiv)
● Spooling○ se menține un buffer pentru datele de transmis unui dispozitiv○ imprimanta – se poate submite un singur job
● Rezervarea dispozitivului
![Page 30: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/30.jpg)
Device drivere
![Page 31: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/31.jpg)
Device drivere (2)
● Software care controlează un dispozitiv sau o clasă de dispozitive
● Rulează în kernel● SO oferă o interfață comună pentru device drivere
○ modularitate○ device drivere 3rd party○ Windows DDK
![Page 32: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/32.jpg)
Fluxul unei operații de I/E
![Page 33: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/33.jpg)
Performanța I/E
● Este important ca operațiile cu dispozitivele de I/E să fie rapide● Dar, lucrul cu dispozitive de I/E impune:
○ existența unui device driver (cod kernel)○ schimbări de context datorate întreruperilor○ copierea datelor
![Page 34: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/34.jpg)
Îmbunătățirea performanței I/E
● Reducerea numărului de schimbări de context● Reducerea copierilor● Reducerea întreruperilor
○ transferuri în blocuri mari○ polling
● Folosire DMA sau procesoare I/O● Echilibrarea perfomanței CPU, memorie, magistrale, I/E
![Page 35: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/35.jpg)
Discuri
● SO este responsabil cu folosirea eficientă a discurilor● Timp de acces – ms (la memorie ns)
○ minimizarea timpului de căutare (seek time)● Disk scheduling
○ sorting & merging● Caching● RAID – Redundant Array of Inexpensive/Independent Disks
![Page 36: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/36.jpg)
RAID
![Page 37: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/37.jpg)
RAID (2)
![Page 38: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/38.jpg)
Planificarea operațiilor de I/E pe discuri
● First Come First Serve● Shortest Seek Time First● SCAN● C-SCAN● LOOK● C-LOOK
![Page 39: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/39.jpg)
FCFS
![Page 40: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/40.jpg)
SSTF
![Page 41: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/41.jpg)
SCAN
![Page 42: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/42.jpg)
C-SCAN
![Page 43: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/43.jpg)
C-LOOK
![Page 44: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/44.jpg)
Operații de I/E în Linux
● Fișiere speciale asociate dispozitivelor de I/E○ major, minor
crw-rw---- 1 root dialout 4, 64 Apr 24 18:40 /dev/ttyS0brw-rw---- 1 root disk 3, 0 Apr 24 18:40 /dev/hda
● Apelurile de sistem clasice○ read, write, seek
● Apelurile sunt redirectate de nucleu subsistemului de I/O sau direct device driverelor
![Page 45: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/45.jpg)
Device drivere
● Drivere pentru dispozitive de tip caracter○ open, read, write, close, seek, mmap, ioctl, poll○ SO transmite cererea utilizatorului unei metode implementate de
device driver● Drivere pentru dispozitive de tip bloc
○ open, close, ioctl, mmap, poll, mai putin read, write și seek○ SO translatează apelurile de read, write și seek în cereri de I/E
![Page 46: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/46.jpg)
Subsistemul de I/E în Linux
● Doar pentru dispozitive de tip bloc● I/O schedulers (elevators)
○ Noop Scheduler○ Anticipatory IO Scheduler○ Deadline Scheduler○ Complete Fair Queueing Scheduler
● Planificatorul creează cereri de I/E prin operații de sorting & merging
○ prelucrare în cozile de cereri ale device driverelor
![Page 47: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/47.jpg)
Subsistemul de I/E în Linux (2)
read/write mmap open(”/dev/hda”)
![Page 48: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/48.jpg)
Operații de I/E în Windows
![Page 49: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/49.jpg)
Windows - Device drivere
![Page 50: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/50.jpg)
Windows - Structura unui device driver
![Page 51: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/51.jpg)
Windows - Managerul de I/E
● Translatează cererile utilizatorilor în cereri către device drivere○ I/O request packet (IRP)
● Oferă diverse funcții device driverelor○ timere○ alocarea / dezalocarea bufferelor○ buffered I/O (copie a datelor din user-space)○ direct I/O (mapare în kernel-space)○ neither I/O
![Page 52: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/52.jpg)
Problema C10K
● Problema○ Serverele web trebuie să permită conectarea a mii de clienți
simultan○ Conexiuni de 1000Mbit/sec
● Soluții○ Servește mai mulți clienți cu același thread
■ operații non-blocante pentru network I/O■ operații asincrone pentru network si disk I/O
○ Servește un client cu un thread■ pe moment nu scalează la 10.000 de clienți■ avansuri în OS și în procesoare/hardware de paralelizare
○ Servicii OS standard sau adăugare cod kernel (khttpd)
![Page 53: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/53.jpg)
Cuvinte cheie
● port● magistrală● controller● port-mapped I/O● memory-mapped I/O● registre● polling● întreruperi● bottom-half● DMA● dispozitive de tip bloc
● dispozitive de tip caracter● operații blocante/non-blocante● operații asincrone● zero-copy● scather/gather● planificatorul de I/E● buffering, caching, spooling● device driver● RAID● FCFS, SSTF, SCAN, LOOK● IRP● C10K
![Page 54: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/54.jpg)
Exercițiu 1
● De ce este mmap un mecanism zero-copy?● Care este avantajul folosirii operațiilor readv/writev în fața
read/write în ciuda API-ului complex?
![Page 55: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/55.jpg)
Exercițiu 2
● Într-un sistem Linux avem un disk SATA (/dev/sda) pe care avem două partiții (/dev/sda1, /dev/sda2) cu aceeași dimensiune. Scrieți un program C care copiază partiția 1 pe partiția 2 în cel mai eficient mod posibil.
![Page 56: Dispozitive de intrare/ieșire - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/f/f-sym/3so/cursuri/12_SO_Curs_09.pdf · copy_from_user(buffer, p, ... int 0x80 ; apel de sistem în](https://reader031.fdocuments.net/reader031/viewer/2022022118/5ccb7fdb88c993b6028d46d0/html5/thumbnails/56.jpg)
Întrebări
?