Zbigniew S. Szewczak Podstawy Systemów Operacyjnych

Transkrypt

Zbigniew S. Szewczak Podstawy Systemów Operacyjnych
Zbigniew S. Szewczak
Podstawy Systemów
Operacyjnych
Wykład 11
Systemy wejścia-wyjścia.
Toruń, 2004
Odrabianie wykładów
☛czwartek, 1.04.2004, S7, g. 12.00 za 19.05 √
☛czwartek, 15.04.2004, S7, g. 12.00 za 12.05
Działanie systemu
Komputer
Peryferia
Pamięć
Procesy
System
Sterowanie
WejścieWyjście
Linie komunikacyjne
Systemy we/wy
☛Przegląd
☛Sprzęt we/wy
☛Użytkowy interfejs we/wy
☛Podsystem we/wy w jądrze
☛Planowanie we/wy
☛Przekształcanie zamówień we/wy na operacje
sprzętowe
☛Wydajność
Przegląd
☛Komputer wykonuje dwa podstawowe zadania
☛przetwarza informacje
☛obsługuje działania na wejściu i wyjściu
☛Zadaniem systemu operacyjnego w odniesieniu
do urządzeń we/wy jest
☛zarządzanie operacjami we/wy
☛sprawowanie nadzoru nad operacjami we/wy
☛dopilnowywanie działania urządzeń we/wy
☛Zadania te są realizowane w jądrze przez
podsystem we/wy (ang. I/O subsystem)
Przegląd (c.d)
☛Trzy kategorie urządzeń we/wy: pamięć
zewnętrzna, sieć , interfejs z ludźmi
☛Postawowe elementy podsystemu we/wy
☛sprzętowe
☛porty, szyny, sterowniki urządzeń (ang. device controllers)
☛programowe
☛moduły we/wy, moduły sterujące (ang. device drivers)
tworzące interfejs dostępu podsytemu we/wy do urządzeń
we/wy
☛obsługa we/wy w jądrze systemu
☛wywołania systemowe we/wy
Sprzęt we/wy
☛Niezwykła różnorodność urządzeń zewnętrznych
☛Wspólne pojęcia
☛Port - punkt przez który urządzenie kontaktuje się z
komputerem
☛Szyna - wspólna wiązka przewodów do której są
podłączone urządzenia
☛układ szeregowy (ang. daisy chain) : A podłączone do B
podłączone do C i C podłączone do portu
☛Sterownik (ang. controller) - zespół układów
elektronicznych, które mogą kierować pracą portu, szyny
lub urządzenia
☛niekiedy wykonywany w postaci oddzielnej płyty z układami
elektronicznymi zwanej adapterem głównym (ang. host
adapter) - procesor, mikrokod, pamięć (np. SCSI, IDE)
Struktura magistralowa Pentium
magistrala
L2
cache
podręczna
magistrala
CPU
lokalna
most
PCI
magistrala
pamięć
pamięci
magistrala pci
złącza
PCI
SCSI
szyna
SCSI
USB
mysz
most
ISA
IDE
adapter
grafiki
klawiatura
magistrala isa
modem
karta
dźwiękowa
drukarka
złącza
ISA
monitor
Sprzęt we/wy (c.d.)
☛W jaki sposób procesor przekazuje polecenia
sterownikowi?
☛Sterownik ma rejestry do pamiętania danych i sygnałów
sterujących do których pisze i z których czyta procesor
☛specjalne rozkazy we/wy określające przesłanie danych na
adres portu
☛operacje we/wy odwzorowywane w pamięci operacyjnej
(ang. memory-mapped I/O)- rejestry są odwzorowywane w
przestrzeni adresowej procesora
☛Niektóre komputery stosują obie metody
☛RS232C - rejestry we/wy, bufory
☛PC: kontroler grafiki - odwzorowywanie ekranu w pamięci
Adresy portów we/wy w PC
☛Sterownik DMA
☛Strownik przerwań
☛Czasomierz
☛Sterownik gier
☛Port szeregowy (COM2)
☛Sterownik dysku twardego
☛Port równoległy
☛Sterownik graficzny
☛Sterownik napędu dyskietek
☛Port szeregowy (COM1)
- 000-00F
- 020-021
- 040-043
- 200-20F
- 2F8-2FF
- 320-32F
- 378-37F
- 3D0-3DF
- 3F0-3F7
- 3F8-3FF
Porty szeregowe
☛Windows - Linux
☛COM1 (3F8) - /dev/ttyS0
☛COM2 (2F8) - /dev/ttyS1
☛COM3 (3E8) - /dev/ttyS2
☛COM4 (2E8) - /dev/ttyS3
☛..............................
4, 64
4, 65
4, 67
4, 68
; /dev/cua0
; /dev/cua1
; /dev/cua2
; /dev/cua3
5,
5,
5,
5,
64
65
66
67
☛Polecenie setserial ustawia parametry portu
☛setserial /dev/ttyS0 irq 4 speed_vhi
☛Polecenie setserial wyświetla parametry portu
☛setserial -a /dev/ttyS0
Sprzęt we/wy (c.d.)
☛Port we/wy składa się z 4 rejestrów (dł. 1B-4B)
☛stan (ang. status) - zawiera bity czytane przez procesor
☛zakończenie polecenia,dostępność danych w rejestrze dane
wyjściowe, wykrycie błędu
☛sterowanie (ang. control) - zapisywany przez procesor
☛rozpoczęcie polecenia, zmiana trybu pracy urządzenia
(komunikacja pełnodupleksowa, szybkość portu)
☛dane wejściowe (ang. data-in) - czytany przez procesor
☛pobranie informacji z urządzenia
☛dane wyjściowe (ang. data-out) - dane zapisywane przez
procesor
☛Układy FIFO - rozszerzają pojemność rejestrów
Odpytywanie
☛Uzgadnianie (ang. handshaking) między procesorem
i sterownikiem; 2 bity do koordynowania relacji
producent-konsument
☛procesor - bit gotowości polecenia (ang. command-ready) w
rejestrze poleceń (ang. command register)
☛sterownik - bit zajętości=1 (ang. busy) w rejestrze stanu
☛Ciąg uzgodnień procesor-sterownik
☛Aktywne czekanie (ang. busy-waiting), odpytywanie
(ang.polling) - procesor czyta bit zajętości do czasu aż będzie on
równy 0
☛trzy cykle rozkazowe procesora do odpytania: czytanie rejestru
urządzenia, operacja koniunkcji (wydobycie bitu zajętości), skok
przy wartości niezerowej
Odpytywanie (c.d.)
☛Procesor ustawia bit pisania (ang. write bit) w rejestrze
poleceń i wpisuje bajt do rejestru danych wyjściowych
☛Procesor ustawia bit gotowości polecenia
☛Sterownik ustawia bit zajętości
☛Sterownik czyta rejestr poleceń
☛rozpoznaje polecenie pisania, czyta bajt z rejestru danych
wejściowych i wykonuje operację we/wy na urządzeniu
☛Sterownik ustawia bit gotowości polecenia na 0 i bit błędu
(ang. error bit) w rejestrze stanu oraz ustawia bit zajętości
na 0
UNIX - odpytywanie terminala
#include <fcntl.h>
main()
{
register int i, n;
int dp;
char bufor[256];
/* otworz terminal do czytania, z opcja bez opoznienia */
if ((dp = open("/dev/tty", O_RDONLY | O_NDELAY)) == -1)
exit();
n = 1;
for (;;) /* dla kazdego */
{
for (i = 0; i < n; i++)
;
if (read(dp, bufor, sizeof(bufor)) > 0 )
{
printf("wczytano za %d-tym razem\n", n);
n--;
}
else /* brak danych, powrot - opcja bez opoznienia */
n++;
}
}
Przerwania
☛Odpytywanie staje się niewydajne w sytuacji
rzadkich przypadków gotowości urządzenia
☛Osprzęt procesora ma scieżkę zwaną linią
zgłaszania przerwań (ang. interrupt request
line), którą procesor bada w cyklu rozkazu
☛Jeśli procesor wykryje przerwanie od sterownika
to przechowa dane określające bieżący stan
(PC) i wykona skok do procedury obsługi
przerwania (ang. interrupt-handler)
☛wykrycie przyczyny przerwania
☛wykonanie niezbędnych czynności
☛rozkaz powrotu z przerwania
Cykl we/wy obsługiwany
przerwaniami
CPU
sterownik we/wy
1
moduł sterujący urządzenia
rozpoczyna operację we/wy
2
między rozkazami procesor
sprawdza występownie przerwań
7
procesor przyjmuje przerwanie
i przekazuje sterowanie
procedurze obsługi przerwania
5
procedura obsługi przerwania
przetwarza dane, wykonuje
powrót po przerwaniu
6
procesor podejmuje
wykonywanie
przerwanego zadania
rozpoczęcie
operacji we/wy
3
4
gotowość wejścia, zakończone
wyjście lub błąd
wygenerowanie przerwania we/wy
Przerwania (c.d.)
☛Sprzęt sterownika przerwań (ang. interrupt
controller) powinien zapewnić
☛1. opóźnianie obsługi przerwania podczas działań
krytycznych
☛2. brak odpytywania urządzeń w celu wykrycia sprawcy
☛3. przerwania wielopoziomowe o różnym priorytecie
☛1. Przerwania maskowalne (ang. maskable)
pozwalają wyłączyć zgłoszenia żądań
☛2. Adres obsługi przerwania znajduje się w
tablicy zwanej wektorem przerwań (ang.
interrupt vector)
Przerwania (c.d.)
☛3. System poziomów priorytetów przerwań (ang.
interrupt priority levels) umożliwia opóźnianie
przez procesor obsługi przerwań
niskopriorytetowych bez maskowania wszystkich
przerwań i pozwala wywłaszczać procesy ich
obsługi
☛Mechanizm przerwania stosuje się również do
obsługi sytuacji wyjątkowych (ang. exceptions)
☛dzielenie przez 0, rozkaz uprzywilejowany
Tablica wektora zdarzeń procesor Intel Pentium
☛0
☛1
☛2
☛3
☛4
☛5
☛6
☛7
☛8
☛9
-
błąd dzielenia
wyjątek diagnostyczny
przerwanie puste
breakpoint
nadmiar INTO
wyjątek granicy przedziału
niedozwolony kod rozkazu
urządzenie niedostępne
błąd podwojenia
przepełnienie segmentu koprocesora
Tablica wektora zdarzeń procesor Intel Pentium
☛10 - niedozwolony segment stanu zadania
☛11 - brak segmentu
☛12 - błąd stosu
☛13 - ochrona ogólna
☛14 - błąd strony
☛15, 19-31 - zarezerwowane (Intel)
☛16 - błąd floating-point
☛17 - alignment check
☛18 - machine check
☛32 - 255 - przerwania maskowalne
UNIX - punkty wejścia do
podprogramów obsługi we/wy
podsystem plików
open close
mount umount
open close read write ioctl
read
write
podręczna
pamięć buforowa
tablica rozdzielcza
urządzeń znakowych
open close read write ioctl
podprogram obsługi
urządzenia
tablica rozdzielcza
urządzeń blokowych
punkty wejścia
podprogram obsługi
przerwania
open
close
strategia
podprogram obsługi
urządzenia
podprogram obsługi
przerwania
wektor przerwań
wektor przerwań
przerwania od urządzeń
Sterownik DMA
☛Sterownik bezpośredniego dostępu do pamięci (ang.
direct-memory-access (DMA) controller)
☛Sterownnik DMA podłączony jest do magistrali
urządzeń peryferyjnych (np. PCI )
☛Używany w celu uniknięcia transmisji bajt po bajcie
t.j. programowanego we/wy (ang. programmed
I/O, PIO)
☛W przypadku urządzenia transmitującego wielkie
ilości informacji (np. dysk) PIO daje słabe
wykorzystanie CPU
Bezpośredni dostęp do pamięci
☛Przesyłanie w trybie DMA
☛procesor zapisuje w pamięci blok sterujący DMA
☛wskaźnik źródła, miejsca docelowego przesyłania i licznik
☛sterownik DMA pobiera adres tego bloku
☛DMA przejmuje nadzór nad operacją we/wy
☛przesyłanie między sterownikiem DMA i sterownikiem urządzenia
dokonuje się za pomocą pary przewodów nazywanych zamówieniem
DMA (ang. DMA request) i potwierdzeniem DMA (ang. DMA
acknowledge)
☛procesor kontynuuje prace (po pauzie na transfer)
☛DMA spowalnia CPU (ang. cycle stealing)
☛Tryb DMA umożliwia transfer danych bezpośrednio
pomiędzy pamięcią (wirtualną) i urządzeniem we/wy
☛DVMA (ang. direct virtual memory access) - adresy wirtualne
Etapy przesyłania w trybie DMA
1. moduł sterujący urządzenia otrzymuje polecenie przesłania danych dyskowych do bufora pod adresem X
5. sterownik DMA przesyła bajty do
bufora X, zwiększając adres pamięci i zmnniejszając C, dopóty,
dopóki C jest różne od 0.
6. kiedy C=0, wtedy sterownik
DMA przerywa pracę procesora w celu zasygnalizowania zakończenia przesyłania.
2. moduł sterujący urządzenia zawiadamia dysk o potrzebie przesłania C
bajtów do bufora pod adresem X
DMA/szyna/
sterownik przerwań
3. sterownik rozpoczyna
przesyłanie DMA
4. sterownik dysku wydysk
dysk dysk
dysk
pamięć
podręczna
szyna pamięci procesora
szyna PCI
sterownik
dysku IDE
procesor
syła bajt za bajtem
do sterownika DMA
pamięć X
bufor
operacyjna
DMA a cykl rozkazu
czas
cykl rozkazu
cykl
procesora
cykl
procesora
cykl
procesora
cykl
procesora
cykl
procesora
cykl
procesora
pobieranie dekodowanie pobieranie wykonanie zapamiętanie przerwanie
rozkazu
rozkazu
argumentów rozkazu
wyniku
DMA
breakpoints
interrupt
breakpoints
Użytkowy interfejs we/wy
☛Systemowe wywołania we/wy ukrywają różnice
między klasami urządzeń we/wy (dyski,
modemy)
☛Moduły sterujące (ang. device drivers) ukrywają
różnice między sterownikami urządzeń we/wy w
tej samej klasie urządzeń (karty sieciowe 3Com)
☛Musimy móc dołączać do systemu nowe wersje
modułów sterujących urządzeń dostarczanych
przez producentów sprzętu (np. moduły
sterujące w Linuxie a GNU)
Struktura we/wy w jądrze
oprogramowanie
jądro systemu
podsystem wejścia/wyjścia w jądrze
moduł
sterujący
SCSI
moduł
moduł
sterujący sterujący
klawiatury myszy
...
moduł
moduł
moduł
sterujący sterujący sterujący
szyny PCI dyskietek
ATAPI
sterownik sterownik
szyny PCI dyskietek
sterownik
ATAPI
sprzęt
sterownik sterownik sterownik
SCSI
klawiatury myszy
...
SCSI
klawiatura
mysz
...
szyna
PCI
napędy
dyskietek
ATAPI
(dyski,
taśmy)
Użytkowy interfejs we/wy (c.d.)
☛Różnice pomiędzy urządzeniami
☛Strumień znaków (ang. character-stream) - urządzenie
znakowe (ang. character-stream device) przesyła bajt po
bajcie
☛ Bloki (ang. block) - urządzenie blokowe (ang. block
device) przesyła jednorazowo blok danych
☛Synchroniczność transmisji - sterowana zegarem
☛Asynchroniczność - sterowana znakiem startu i stopu
☛Dostęp sekwencyjny lub swobodny
☛Dzielenie (ang. sharable) lub wyłączność (ang. dedicated)
☛Prędkość działania - nawet TB na sekundę
☛Czytanie i pisanie (ang.read-write), tylko czytanie (ang.
read only), tylko pisanie (ang. write only)
Właściwości urządzeń we/wy
☛tryb przesyłania danych
☛znakowy
☛terminal
☛blokowy
☛dysk
☛metoda dostępu
☛sekwencyjna
☛modem
☛swobodna
☛CD-ROM
Właściwości urządzeń we/wy
(c.d.)
☛organizacja przesyłania danych
☛synchroniczna
☛taśma
☛asynchroniczna
☛klawiatura
☛dzielenie
☛na zasadzie wyłączności
☛drukarka
☛użytkowanie wspólne
☛klawiatura
Właściwości urządzeń we/wy
(c.d.)
☛szybkość urządzenia
☛opóźnienie powodowane rotacją nośnika danych
☛czas wyszukiwania danych
☛czas przesyłania danych
☛opóźnienie między operacjami
☛kierunek przesyłania
☛tylko czytanie
☛CD-ROM, ROM
☛tylko pisanie
☛sterownik graficzny
☛czytanie i pisanie
☛dysk
Użytkowy interfejs we/wy (c.d.)
☛System obejścia (ang. escape system) lub
“bocznych drzwi” (ang. back-door) pozwala na
przekazanie w sposób transparentny dowolnego
polecenia od aplikacji do modułu sterującego
☛Funkcja uniksowa ioctl umożliwia np.
definiowanie prędkości transmisji danych na
liniach terminalowych, przewijanie taśm na
stacjach jednostek taśmowych oraz
wykonywanie różnych operacji sieciowych,
takich jak określanie adresów sieciowych czy
numerów wirtualnych obwodów
Urządzenia blokowe i znakowe
☛Interfejs urządzenia blokowego (np. dyski)
☛komendy czytaj (ang. read), pisz (ang. write), szukaj (ang. seek) np. Unix - dostęp poprzez interfejs plików
☛surowe we/wy (ang. raw I/O ) - np. dostęp do baz danych
☛pliki odwzorowywane w pamięci (ang. memory-mapped file) mechanizm podobny jak w stronicowniu na żądanie
☛Interfejs urządzeń znakowych (klawiatura, mysz, port
szeregowy)
☛komendy pobrania (ang. get) i przekazania (ang. put) jednego
znaku (ang. character-stream)
☛oprogramowanie biblioteczne może tworzyć dostęp na zasadzie
przesyłania całych wierszy tekstu: buforowanie i redagowanie (np.
kasowanie znaków (np. backspace))
Urządzenia sieciowe
☛Pod względem wydajności i właściwości adresowania
sieciowe we/wy różni się bardzo od interfejsu
urządzeń blokowych i znakowych
☛system operacyjny udostępnia sieciowy interfejs we/wy odmienny
od interfejsu czytaj/pisz/szukaj
☛Unix oraz Windows/NT mają interfejs gniazd
☛oddzielenie protokołu sieciowego od operacji sieciowych
☛funkcja systemowa select do zarządzania gniazdami
☛Wiele podejść do komunikacji sieciowej
☛Windows/NT: osobne interfejsy do kart i protokołów sieciowych
☛UNIX: półdupleksowe potoki, pełnodupleksowe kolejki FIFO,
kolejki komunikatów i gniazda
Zegary i czasomierze
☛Zegary i czasomierze spełniają trzy podstawowe
funkcje
☛podawanie bieżącego czasu
☛podawanie upływającego czasu
☛powodowanie wykonania operacji w ustalonej chwili
☛Sprzęt do pomiaru upływającego czasu i
powodowania wykonywania operacji nazywa się
czasomierzem programowalnym (ang.
programmable interval timer)
☛można go nastawić na czekanie przez pewien okres, po
upływie którego powoduje on przerwanie
☛wykorzystanie: planista przydziału procesora (kwant czasu)
We/wy z blokowaniem i bez
☛Proces wykonuje blokowane (ang. blocking)
wywołanie systemowe gdy jego działanie
zostaje wstrzymane (do zakończenie we/wy)
☛proces staje się czekającym
☛po zakończeniu (we/wy) proces staje się gotowy
☛Niektóre procesy wymagają nieblokowanego
we/wy
☛sygnały z klawiatury i myszy przeplatane z
przetwarzaniem i wyświetlaniem danych na ekranie
☛ aplikacja video czyta ramki z dysku i jednocześnie je
dekompresuje oraz wyświetla na ekranie (buforowane
we/wy)
We/wy z blokowaniem i bez (c.d.)
☛Nieblokowane (ang. nonblocking) wywołanie we/wy
zwraca sterowanie niezależnie od tego ile danych
zostało przekazanych
☛implementacja za pomocą wątków (multi-threading)
☛kończy się szybko, przekazując liczbę przekazanych B
☛przykład: wywołanie select() dla gniazd sieciowych, gdy max czas
oczekiwania = 0 mamy odpytywanie gniazda
☛Asynchroniczne odwołanie do systemu - proces się
wykonuje nie czekając na zakończenie we/wy
☛nieblokowane read może nie zdołać przekazać wszytkich danych
☛asynchroniczne read przekaże wszystkie dane (po pewnym czasie)
☛trudne w realizacji
Podsystem we/wy w jądrze
☛Jądro dostarcza wielu usług związanych z we/wy
☛Planowanie we/wy
☛Buforowanie
☛Pamięć podręczna
☛Rezerwowanie urządzeń
☛Obsługa błędów
☛Struktury danych w jądrze
Planowanie we/wy w jądrze
☛Planowanie we/wy
☛systemy operacyjne wymagają określenia porządku we/wy
☛trudne do realizacji w środowisku wieloprogramowym
☛kiedy aplikacja wywołuje blokowane wywołanie systemowe,
żądanie to jest zakolejkowywane
☛system wybiera żądania zgodnie z pewnym algorytmem
zapewniającym zwiększenie efektywności komputera
☛Planowanie we/wy (dysk) - ważne ze względu
na efektywność działania pamięci wirualnej
☛mój dysk: FUJISTU MHK-2120AT
☛www.pc-disk.de
☛
Parametery wydajności dysku
☛Czytanie lub pisanie wymaga pozycjonowania głowicy
dysku nad określoną ścieżką oraz na początku
określonego sektora
☛Czas przeszukiwania (ang. seek time)
☛czas potrzeby nan ustawienie głowicy nad scieżką
☛Opóźnienie obrotowe (ang. rotational latency, delay)
☛czas potrzebny głowicy na osiągnięcie sektora
☛Czas dostępu (ang. access time)
☛suma czasu przeszukiwania i opóźnienia obrotowego
☛czas osiągnięcia stanu umożliwiającego zapis/odczyt
☛Odczyt/Zapis jest dokonywany w miarę
przemieszczania się sektora pod głowicą
Składowe transferu na dysk
czekaj na
urządzenie we/wy
czekaj na
kanał we/wy
przeszukiwanie
opóźnienie
obrotowe
urządzenie we/wy zajęte
transfer
danych
Średni czas dostępu dla dysku
☛ T_a = T_s + 1/(2*r) + T
☛ T_a - średni czas dostępu do dysku
☛ T_s - średni czas przeszukiwania (od 5 do 10ms)
☛ r - prędkość w obrotach na min (rpm)
☛ T - czas transferu
☛ T= B/(r*N)
☛ B - ilość stransferownych bajtów; N - ilość bajtów na scieżkę
☛ Przykład. plik: 2650 sektorów = 512B*320S*8T = 1.3MB;
dysk: r = 10000 rpm, T_s= 10 ms;
☛ Pierwsza ścieżka: 10ms + 1/(2*10000) m + 512*320/(10000*512*320) m =
10ms+ 6/2ms + 6ms = 19ms
☛ Następne ścieżki sekwencyjnie (bez czasu przeszukiwania T_s):
3ms + 6ms =9ms; Cały plik: T= 19ms+7*9ms=0.082s
☛ Niesekwencyjnie: 2560*(10ms + 3ms + 6*512B/(512B*320) ms) =
2560*13.01875ms= 33.328s
☛
Planowanie we/wy (dysk)
☛Czas przeszukiwania jest powodem różnic w
wydajności we/wy na dysk
☛System operacyjny (we/wy) zarządza kojeką
żądań dostępu do dysku
☛Najgorszą wydajność ma planowanie losowe
(ang. random scheduling) obsługi dostępu do
dysku
☛Planowanie losowe ma jedynie znaczenie przy
porównaniach z innymi technikami
☛
Planowanie we/wy (dysk) (c.d.)
☛RSS (ang. random scheduling)
☛losowy wybór z kolejki, tylko do analizy algorytmów
☛FIFO (ang. First-in, first-out)
☛żądania we/wy są realizowane sekwencyjnie
☛sprawiedliwe dla wszystkich procesów
☛jeśli jest wiele procesów faktycznie mamy doczynienia z
planowaniem losowym
☛PRI (ang. priority)
☛optymalizacja utylizacji dysku nie celem samym w sobie
☛np. krótkie zadania wsadowe i interakcyjne mają wyższy
priorytet niż długie zadania obliczeniowe
☛dobry czas odpowiedzi
Planowanie we/wy (dysk) (c.d.)
☛LIFO (ang. Last-in, first-out)
☛realizuj ostatnie żądanie we/wy
☛zasada lokalności odniesień minimalizuje ruch głowicy
☛ możliwość zagłodzenia procesu na żądaniu we/wy
☛SSTF (ang. Shortest service time first)
☛realizuj to żadanie we/wy, które wymaga najmiejszego
ruchu głowicy licząc od pozycji bieżącej
☛zawsze minimalny czas przeszukiwania
☛lepszy niż FIFO
☛możliwe głodzenie
☛
Planowanie we/wy (dysk) (c.d.)
☛SCAN
☛Głowice przemieszczają się w jednym kierunku do
ostatniej ścieżki lub do ostatniego żądania w danym
kierunku
☛Kierunek zostaje następnie odwrócony
☛Neguje zasadę lokalności odniesień
☛Nie ma możliwości głodzenia
☛SCAN faworyzuje zadania o żądaniach we/wy na
skrajnych ścieżkach
☛
Planowanie we/wy (dysk) (c.d.)
☛C-SCAN
☛skanowanie w jednym kierunku
☛z chwilą osiągnięcia ostatniej ścieżki głowica wraca
☛możliwa monopolizacja we/wy
☛N-step-SCAN
☛segmentujemy kojekę żądań we/wy na podkolejki dł. N
☛podkolejki obsługiwane są przez SCAN do końca
☛nowe żądania we/wy dodawane są do innych podkolejek
☛N=1 - FIFO; N duże - SCAN
☛FSCAN - dwie kolejki, nowe żądania wchodzą do
drugiej, początkowo pustej kolejki
RAID
☛Wydajność pamięci dyskowej jest mniejsza niż
pamięci głównej i procesora
☛RAID (ang. Redundant Array of Independent Disks)
zespół fizycznie istniejących napędów dyskowych
widzianych jako pojedyńczy napęd logiczny
☛Dane rozproszone po napędach tworzą tablicę
☛Redundancyjna pojemność dysków jest
wykorzystywana do przechowywania informacji o
parzystości, co gwarantuje odzyskiwanie danych w
przypadku uszkodzenia dysku
☛Przyspieszenie we/wy ale i większa możliwość awarii
Buforowanie we/wy
☛Zwiększenie efektywności komputera dzięki
wykorzystaniu pamięci głównej
☛Buforowanie (ang. buffering) - przechowywanie
danych przesyłanych między urządzeniami lub
aplikacjami w pamięci
☛konieczność radzenia sobie z dysproporcjami między
szybkościami konsumenta i producenta
☛konieczność dopasowania urządzeń o różnych rozmiarach
przesyłanych jednostek danych
☛konieczność zapewnienia “ semantyki kopii” (ang. “copy
semantics”)
Buforowanie we/wy (c.d.)
☛Pojedyńczy bufor (ang. single buffering) - transfer
danych najpierw do systemowego bufora; po
zapełnieniu bufora do procesu użytkownika; po
opróżnieniu bufora wczytanie następnych danych
(ang. reading ahead)
☛Podwójne buforowanie (ang. double buffering) transfer danych do/z bufora A; system operacyjny
opróżnia/zapełnia bufor B
☛Cykliczne buforowanie (ang. circular buffering) więcej niż dwa bufory
Schematy buforowania - brak
buforowania
system operacyjny
urządzenie
we/wy
wpisz
proces użytkownika
Schematy buforowania - bufor
pojedyńczy
system operacyjny
urządzenie
we/wy
wpisz
proces użytkownika
przenieś
Schematy buforowania - bufor
podwójny
system operacyjny
urządzenie
we/wy
wpisz
proces użytkownika
przenieś
Schematy buforowania - bufor
cykliczny
system operacyjny
wpisz
przenieś
...
urządzenie
we/wy
proces użytkownika
Semantyka kopii
☛Przykład
☛aplikacja chce zapisać dane z bufora na dysk
☛aplikacja wywołuje funkcje systemową pisz
☛w tym czasie następuje zmiana danych w buforze
☛Sematyka kopii gwarantuje, że wersja danych
zapisana na dysk będzie z chwili odwołania się
aplikacji do systemu
☛np. można w wywołaniu systemowym pisz przekopiować
dane do bufora w jądrze
Przechowywanie podręczne
☛Przechowywanie podręczne (ang. caching) przechowywanie kopii obiektu danych w szybkiej
pamięci
☛utrzymywanie jedynie kopii obiektu
☛dostęp do kopii jest szybszy niż do oryginału
☛transfer z cache’u do procesu użytkowego
☛dzielenie pamięci podręcznej przez procesy
☛Buforowanie a caching
☛Bufor może zawierać jedyną istniejącą kopię
danych
Dyskowa pamięć podreczna
Spooling
☛Dyskowa pamięć podręczna - obszar szybkiej
pamięci odzworowujący bloki (sektory) danych
(na dysku)
☛Strategie zastępowania w cache’u
☛LRU - zastąp najdawniej użyty blok
☛LFU (ang. least frequently used) zastąp najrzadziej
używany blok
☛Spooling - użycie bufora do urządzenia
niedopuszczającego przeplatania danych
☛jeśli urządzenie może obsłużyć tylko jedno żądanie w
danej chwili (np. drukarka)
Rezerwowanie urządzeń
☛Niektóre systemy operacyjne (np. system VMS)
umożliwiają dostęp na zasadzie wyłączności
☛proces może przydzielić sobie bezczynne urządzenie i
zwolnić je po wówczas, gdy przestanie mu być potrzebne
☛W systemie Windows/NT istnieją funkcje
systemowe umożliwiające czekanie na
udostępnienie urządzenia
☛funkcja systemowa open ma parametr określający jaki
rodzaj dostępu mają współbieżne wątki
☛Unikanie impasu w sytuacji dostępu na zasadzie
wyłączności jest obowiązkiem aplikacji
Obsługa błędów
☛System operacyjny korzystający z pamięci
chronionej może strzec przed wieloma rodzajami
błędów (sprzętowe, w programach użytkowych)
☛System operacyjny musi umieć skutecznie
przeciwdziałać przejściowym awariom
☛jeśli pamięć ulegnie awarii to szanse są nikłe
☛Systemowe wywołanie we/wy powoduje zwrotne
przekazanie informacji określającej skutek działania
☛UNIX: errno (ang. error number) - ok. 100 błędów
☛Systemowa kronika (ang. log) - informacje o
błędach
Struktury danych jądra
☛Jądro przechowuje informacje o stanie
używanych składowych we/wy
☛tablice otwartych plików, połączeń sieciowych, stanów
urządzeń znakowych
☛Bardzo wiele złożonch struktur danych do
śledzenia buforów, alokacji pamięci
☛W niektórych systemach (Windows/NT) metody
obiektowe znajdują zastosowanie do realizacji
we/wy na zasadzie przekazywania komunikatów
Otwarte pliki w jądrze UNIX
tablica otwartych
plików systemu
rekord systemu plików
wskaźnik do inode
wskaźnik do funkcji read i write
wskaźnik do funkcji select
wskaźnik do funkcji ioctl
wskaźnik do funkcji close
...
deskryptor pliku
tablica otwartych
plików procesu
rekord gniazda
wskaźnik do network info
wskaźnik do funkcji read i write
wskaźnik do funkcji select
wskaźnik do funkcji ioctl
wskaźnik do funkcji close
...
przestrzeń adresowa procesu
tablica (aktywnych)
węzłów inode
przestrzeń adresowa jądra
tablica network
info
Przekształcenie zamówień
we/wy na operacje sprzętowe
☛Rozpatrzmy zamówienie procesu na czytanie
pliku z dysku
☛identyfikacja nośnika (urządzenia) pliku
☛przetłumaczenie nazwy pliku na jego reprezentacje w
urządzeniu
☛fizyczne czytanie z urządzenia do bufora
☛udostępnienie danych zamawiającemu procesowi
☛przekazanie sterowania procesowi po wykonanej operacji
we/wy
Blokowane zamówienie czytania
otwartego pliku - Unix
proces
użytkownika
żądanie we/wy
wywołanie systemowe
czy można już
spełnić żądanie?
we/wy zakończyło, dane
wejściowe/wyjściowe dostępne
powrót z wywołania systemowego
podsystem we/wy
w jądrze
tak
prześlij dane (jeśli trzeba) do procesu z kodem zakończenia lub błędu
nie
wyślij żądanie do modułu sterującego, podsystem we/wy
zablokuj proces (jeśli trzeba)
w jądrze
wykonaj żądanie, wydaj rozkazy
sterownikowi, skonfiguruj sterownik
na zablokowany do przerwania
rozkazy sterownika
monitoruj urządzenie, przerwanie
gdy we/wy zakończyło
moduł sterujący
określ jakie we/wy zakończyło, wyznacz zmianę stanu systemu we/wy
odbierz przerwanie, zapamiętaj dane
podprogram
obsługi przerwań wejściowe w buforze, wyślij sygnał
do odblokowania modułu sterującego
przerwanie
sterownik
urządzenia
czas
zakończone we/wy,
wygeneruj przerwanie
Strumienie
☛Dennis Ritchie (1984); implementacja SVR3 (1986)
☛Strumień (ang. stream) - kanał komunikacyjny
(full-duplex) między procesem użytkownika a
urządzeniem
☛Strumień składa się z
☛głowy (ang. head) - interfejs z procesem użytkownika
☛sterownik (ang. driver end) - interfejs z urządzeniem
☛moduł przetwarzający (ang. module) - zero lub więcej filtrów
na komunikatach płynących w strumieniu
☛Każdy składnik strumienia zawiera co najmniej
jedną parę kolejek: wyjściową i wejściową
Struktura strumieni
proces użytkownika
głowa strumienia
kolejka we
kolejka wy
kolejka we
kolejka wy
moduły
kolejka we
kolejka wy
kolejka we
kolejka wy
sterownik
urządzenie we/wy
Strumienie (c.d.)
☛ Głowa strumienia składa się z procedur jądra wywoływanych
gdy proces użytkownika wywołuje funkcję systemową (np.
ioctl)
☛ write(), putmsg(), read(), getmsg()
☛ kontrola przepływu (ang. flow control) za pomocą buforów
☛ We/wy na strumieniu jest asynchroniczne (lub nieblokowane)
☛wyjątek to komunikacja procesu z głową np. proces jest
zablokowany przy czytaniu do czasu pojawienia się danych
☛ Gdy bufor we/wy jest pełny mamy utratę komunikatów
☛ Zysk: te same moduły sterujące dla różnych strumieni (np.
Ethernet i Token Ring)
☛ Zastosowanie: implementacja gniazd (System V i Solaris)
Wydajność
☛We/wy ma istotny wpływ na wydajność systemu
☛Ostre wymagania na procesor
☛wykonywanie modułu sterującego
☛harmonijne i skuteczne planowanie blokowania i
odblokowywanie procesów
☛Zmiany kontekstu obciążają procesor i pamięć podręczną
☛Operacje we/wy ujawniają nieefektywność mechanizmu
przerwań
☛spowolnienie kopiowania
☛sterowniki <-> pamięć fizyczna
☛bufory w jądrze <-> aplikacja
☛Ruch sieciowy może powodować częste zmiany kontekstu
Komunikacja
międzykomputerowa
system nadawczy
napisanie
znaku
zakończenie
odwołania
do systemu
wygenerowanie
przerwania
obsłużenie
przerwania
obsłużenie
przerwania
wygenerowanie
przerwania
moduł sterujący
urządzenia
adapter
sieciowy
jądro
moduł sterujący
urządzenia
proces
użytkownika
jądro
sprzęt
sieć
sprzęt
odebranie
pakietu
adapter
sieciowy
wygenerowanie
przerwania
system odbiorczy
moduł sterujący
urządzenia
jądro
poddemon
sieciowy
przełączenie kontekstu
demon
sieciowy
jądro
Poprawianie wydajności we/wy
☛Zmniejszać liczbę przełączeń kontekstu
☛Zmniejszać liczbę kopiowań danych w pamięci
podczas przekazywanie ich od urządzenia do
aplikacji
☛Zmniejszać częstość występowania przerwań
przez stosowanie wielkich przesłań i
przemyślnych sterowników oraz odpytywania
☛Zwiększać współbieżność za pomocą
sterowników pracujących w trybie DMA lub
kanałów w celu odciążenia procesora
Poprawianie wydajności (c.d. )
☛Realizować elementarne działania za pomocą
sprzętu i pozwalać na ich współbieżne
wykonywanie w sterownikach urządzeń
☛Równoważyć wydajność procesora, podsytemów
pamięci, szyny i operacji we/wy
☛przeciążenie w jednym miejscu powoduje bezczynność w
innych miejscach
Jak implementować we/wy
☛Eksperymentalne algorytmy na poziomie
aplikacji
☛unikamy problemu błędów systemu spowodowanych
błędami we/wy
☛mało wydajna metoda - koszty przełączania kontekstu
☛aplikacja nie może korzystać ze struktur i funkcji jądra
☛Jeśli algorytm poziomu aplikacji okaże się
„ciekawy” implementujemy w jądrze
☛Największą wydajność uzyskuje się
implementując w urządzeniu lub sterowniku
☛trudności w usuwaniu błędów, mała elastyczność
Lokalizacja funkcji urządzeń
zewnętrznych
kod aplikacji
kod jądra
kod modułu sterującego
sprzęt sterownika urządzenia
sprzęt urządzenia
wzrost elastyczności
wzrost stopnia abstrakcji
wzrost kosztów opracowania
wzrost wydajności
wzrost nakładu czasu
nowy algorytm
Podsystem plików w Unixie
(SVR4)
warstwa użytkownika
warstwa jądra
pułapka
program użytkownika
interfejs funkcji systemowych
komunikacja
międzyprocesowa
podsystem plików
podsystem
zarządzania
procesami
cache (bufory)
znakowe
planista przydziału
procesora
zarządzanie
pamięcią
blokowe
moduły sterujące
interfejs sprzętu
warstwa jądra
warstwa sprzętu
biblioteki
sprzęt
We/Wy - SVR4 (c.d.)
☛Dwa rodzaje we/wy: buforowane (ang. buffered) i
niebuforowane (ang. unbuffered) = DMA
☛Buforowane we/wy wykorzystuje system buforów
☛trzy listy
☛lista wolnych buforów (ang. free list)
☛lista buforów urządzeń (ang. device list) aktualnie
stowarzyszonych z każddym dyskiem
☛kolejka we/wy (ang. driver I/O queue) buforów aktualnie
wykorzystywanych przez sterownik
☛System we/wy przeszukuje listę buforów urządzeń (hash)
☛Zastępowanie bloków alogrytmem LRU
☛Urządzenia blokowe - kolejka znakowa(ang. character queue,
producent/kosument)
Organizacja buforów - UNIX
SVR4
haszowana
tablica urządzeń
bufory pamięci podręcznej
haszowna lista
wskaźnik do listy
wolnych buforów
lista wolnych buforów
...
urządzenie,
blok
Rodzaje we/wy - UNIX
niebuforowane we/wy
dyski
taśmy
bufory
X
X
X
X
kolejka znakowa
terminale
X
linie
komunikacyjne
X
drukarki
X
X
We/wy - W2K
zarządca we/wy
zarządca cache’a
moduły sterujące plików
sieciowe moduły sterujące
moduły sterujące urządzeń
We/Wy - W2K (c.d.)
☛ Zarządca cache’a (ang. cache manager ) - zarządza całym
podsystem we/wy
☛lazy write - system rejestruje zmiany w cache’u a nie na dysku
☛lazy commit - system rejestruje dane o zakończonej transakcji
☛ Moduły sterujące plików (ang. file system drivers) - podystem
we/wy traktuje je tak samo jak device drivers
☛ sieciowe moduły sterujące (ang. network drivers) - sieć
☛ moduły sterujące urządzeń (ang. hardware device drivers) dostęp do rejestrów urządzeń we/wy
☛ We/wy asynchroniczne i synchroniczne
☛ W2K ma wbudowane mechanizmy do sygnalizowania
zakończenia asynchronicznego we/wy
Wydajność we/wy - polecenia
☛iostat
☛sar -d interwał [licznik]
☛df -k
☛du -k -s /home/zssz
☛quot system-plików
☛ndd -set /dev/tcp param wartość
☛nfstat -s
Podsumowanie (1)
☛sprzęt we/wy: szyny, sterowniki, urządzenia
☛we/wy programowane (PIO), sterowane
przerwaniami lub bezpośredni dostęp do pamięci
(DMA)
☛moduł sterujący w jądrze nadzoruje działanie
urządzenia
☛kilka kategorii urządzeń o podobnym interfejsie
odwołań do systemu: blokowe, znakowe,
gniazda sieciowe, programowalne czasowmierze
Podsumowanie (2)
☛Podsystem we/wy dostarcza m.in.
☛planowanie we/wy
☛buforowanie
☛spooling
☛obsługę błędów
☛rezerwacja urządzeń
☛Wywołania we/wy są kosztowne
☛przełączanie kontekstu
☛obsługa sygnałów i przerwań
☛kopiowanie danych : bufory jądra - przestrzeń procesu