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