podsystem IO, Studia, Studia


Podystem wejścia/wyjścia

Streszczenie

Komputer prowadzi obliczenia i kontaktuje się z użytkownikiem, tzn. przeprowadza operacje wejścia/wyjścia, bez tego byłby on bezużyteczny, ponieważ nie miałby jak przekazać użytkownikowi wyników pracy ani odebrać od użytkownika np. danych do obliczeń.

System operacyjny zarządza operacjami wejścia/wyjścia i sprawuje nadzór nad urządzeniami zewnętrznymi, które te operacje obsługują.

--> Podstawowe[Author:T] pojęcia

Urządzenia zewnętrzne komunikują się z systemem komputerowym poprzez przesyłanie sygnałów. Łączem między urządzeniem i komputerem jest tzw. port. Porty są podłączane do szyn tzn. mediów, którymi przesyłane są sygnały (takim medium może być wiązka przewodów; przesyła się przez nią sygnały w postaci impulsów elektrycznych). Do jednej szyny może być podłączonych wiele portów urządzeń. W komputerze mogą również występować układy szeregowe, tzn. że urządzenie A jest podłączone do urządzenia B, które z kolei jest połączone z urządzeniem C, które jest już bezpośrednio połączone do portu komputera.

Sterownik jest układem elektronicznym, który nadzoruje pracę portu, szyny lub urządzenia albo większej ich grupy. Sterownik pośredniczy w przesyłaniu informacji z i do urządzeń. Ma on własną pamięć, w której może buforować dane przesyłane do i z urządzeń. Pozwala to na szybkie przesłanie informacji szyną systemową, niezależnie od prędkości urządzenia. Do szyny systemowej mogą też być podłączone sterowniki, które łączą główną szynę z szynami niższego poziomu, do których też mogą być podłączone sterowniki, itd. Często też urządzenia zewnętrzne są podłączone do sterownika za pomocą odpowiedniej szyny (np. SCSI). Tak więc w systemie zwykle mamy wiele szyn:

Procesor przekazuje sterownikom polecenia i dane niezbędne do wykonania tych poleceń. Sterownik ma specjalny rejestr, który służy do przekazywania komunikatów z i do procesora. Procesor porozumiewa się ze sterownikiem pisząc i czytając bity w tym rejestrze. Przesłanie tych bitów do rejestru urządzenia może odbywać się poprzez specjalne instrukcje wejścia/wyjścia będące zleceniami przesłania bitów na adres portu wejścia/wyjścia. Rozkazy te powodują przekazanie bitów z i do rejestrów sterujących urządzenia poprzez szynę.

Rejestry sterujące urządzenia mogą być też odwzorowane w pamięci operacyjnej. Wówczas komunikacja z urządzeniem odbywa się poprzez zapis i odczyt odpowiednich bajtów w pamięci operacyjnej.

Odpytywanie

Protokół komunikacji między procesorem i sterownikiem urządzenia musi obejmować zagadnienie koordynacji ich współpracy. Procesor musi mieć wiedzę o tym, czy urządzenie jest zajęte, żeby odebrać od niego wyniki zleconego zadania i móc mu zlecić nowe.

Do przekazywania tej informacji mogą służyć dwa bity: bit gotowości procesora i bit zajętości urządzenia. Sterownik ustawia na 1 bit zajętości, gdy właśnie obsługuje zlecenie, i zeruje go, gdy skończy. Procesor ustawia na 1 bit gotowości polecenia, gdy polecenie dla sterownika jest już gotowe. Koordynacja ma postać następującego ciągu czynności:

1. Procesor czyta w pętli bit zajętości urządzenia do chwili, gdy przyjmie on wartość 0.

2. Procesor do rejestru wpisuje dane dla sterownika.

3. Procesor ustawia na 1 bit gotowości polecenia.

4. Sterownik czyta bit gotowości i gdy zauważy, że jest on równy 1, to ustawia na 1 bit zajętości.

5. Sterownik odczytuje polecenie i wykonuje je.

6. Sterownik zeruje bit gotowości polecenia i bit zajętości sygnalizując wykonanie polecenia.

Niestety w pierwszym kroku procesor wykonuje aktywne czekanie, inaczej odpytywanie, tzn. tak naprawdę nie robi nic sensownego czekając na zwolnienie urządzenia. Taka metoda jest akceptowalna w wypadku bardzo szybkich urządzeń. Jeśli jednak miałoby to trwać dłużej (np. czekanie na naciśnięcie klawisza), to z pewnością warto, żeby procesor zajął się czymś innym. Urządzenie musi jednak jakoś zawiadamiać procesor o zakończeniu wykonania polecenia.

Przerwania

Przerwania są sprzętowym mechanizmem służącym do zawiadamiania procesora o rozmaitych zdarzeniach. Procesor ma tzw. linię zgłaszania przerwań, którą bada po wykonaniu każdej instrukcji. Gdy procesor wykryje, że zgłoszono jakieś przerwanie (mógł to zrobić na przykład sterownik urządzenia), to zachowuje stan swoich obliczeń (m.in. licznik instrukcji) i wykonuje skok do procedury obsługi przerwania. Ta procedura wykonuje odpowiednie czynności związane z obsługą przerwania i na końcu wydaje instrukcję powrotu z przerwania, która powoduje przywrócenie stanu obliczeń procesora sprzed przerwania.

Przerwania maskowalne i niemaskowalne

Wśród przerwań niektóre są ważniejsze od innych. Obsługa tych ważniejszych nie powinna być przerywana przez te mniej ważne. Nie będziemy przecież obsługiwać przerwań z klawiatury w czasie obsługi przerwania spadku zasilania w sieci, gdy system operacyjny musi szybko zamrozić i zapisać stan wszystkich obliczeń dopóki zasilacz awaryjny jeszcze utrzymuje przez pewien czas napięcie. Wyróżnia się więc zwykle dwie grupy przerwań:maskowalne i niemaskowalne. Odbieranie przerwań maskowalnych może być chwilowo wyłączone (procesor je wtedy ignoruje albo odkłada na później). Odbierania przerwań niemaskowalnych nie można wyłączyć. Sterowniki urządzeń korzystają z przerwań maskowalnych. Przerwania niemaskowalne wiążą się z poważniejszymi zdarzeniami, takimi jak nieusuwalne błędy pamięci.

--> Wektor[Author:T] przerwań

Przerwanie niesie ze sobą swój identyfikator. W większości systemów jest to niewielka liczba będąca przesunięciem w specjalnej tablicy zwanej wektorem przerwań. W tej tablicy znajdują się adresy procedur obsługi poszczególnych przerwań. I tak wystąpienie przerwania nr 5 powoduje skok do procedury obsługi, której adres znajduje się na piątej pozycji tejże tablicy.

W ten sposób obsługa przerwania nie wymaga wyszukiwania odpowiedniej procedury, a jedynie odczytania jednej pozycji wektora przerwań. W procesorze Intel wektor przerwań ma 255 pozycji. Pierwsze 32 pozycje odpowiadają przerwaniom niemaskowalnym (są to rozmaite błędy). Pozostałe pozycje są przerwaniami maskowalnymi.

--> Obsługa[Author:T] wejścia/wyjścia za pomocą przerwań

Obsługa operacji wejścia/wyjścia za pomocą przerwań przebiega następująco:

1. Procesor zleca wykonanie operacji wejścia/wyjścia i wykonuje inne prace cały czas sprawdzając, czy zaszło przerwanie.

2. Sterownik wykonuje operację wejścia/wyjścia.

3. Sterownik generuje sygnał przerwania, gdy zakończy operację wejścia/wyjścia.

4. Procesor przyjmuje przerwanie i wykonuje skok do obsługi procedury tego przerwania.

5. Procesor wykonuje procedurę obsługi przerwania, która może polegać na odebraniu danych od sterownika urządzenia.

6. Procesor wykonuje powrót z przerwania po zakończeniu działania procedury obsługi przerwania.

7. Procesor wraca do wykonywania przerwanego zadania.

Bezpośredni dostęp do pamięci (DMA)

Gdy urządzenie przekazuje dużą ilość danych, dokonywanie tego transferu bajt po bajcie poprzez procesor jest marnotrawstwem. Lepszym rozwiązaniem jest skorzystanie z pamięci operacyjnej. Idea DMA (directmemoryaccess) jest bardzo prosta: sterownik wpisuje dane bezpośrednio do pewnego bufora w pamięci, skąd można potem te dane odczytać. Do realizacji DMA potrzebne jest dodatkowe urządzenie, tzw. sterownik bezpośredniego dostępu do pamięci. Sterownik ten pośredniczy między sterownikiem urządzenia i pamięcią operacyjną, zarządzając szyną pamięci w celu przekazania poszczególnych bajtów.

Bezpośredni dostęp do pamięci odbywa się wg następującego scenariusza:

1. Moduł sterujący urządzenia dostaje zlecenie przesłania danych pod adres X.

2. Moduł sterujący urządzenia zleca sterownikowi urządzenia pobranie danych i przesłanie ich do bufora pod adresem X.

3. Sterownik urządzenia rozpoczyna przekaz DMA.

4. Sterownik urządzenia przesyła poszczególne bajty do sterownika DMA.

5. Sterownik DMA umieszcza otrzymane bajty w pamięci operacyjnej.

6. Sterownik DMA wywołuje przerwanie procesora po otrzymaniu wszystkich bajtów.

--> Klasyfikacja[Author:T] urządzeń:

Strumień znaków albo bloki

Urządzenie znakowe (np. klawiatura) przesyła znak po znaku, podczas gdy urządzenie blokowe (np. dysk) jednorazowo przesyła cały blok danych.

Dostęp sekwencyjny albo swobodny

Urządzenie o dostępie sekwencyjnym (np. modem) przesyła dane w określonej i tylko takiej kolejności. Urządzenie o dostępie swobodnym (np. dysk) może przesłać w każdej chwili dowolne dane niezależnie od ich położenia i kolejności.

Dzielenie albo wyłączność

Urządzenie dzielone (np. klawiatura) może być jednocześnie wykorzystywane przez wiele procesów. Urządzenie o dostępie wyłącznym (np. drukarka) nie może jednocześnie dwom panom służyć.

Szybkość działania

Urządzenia mogą działać z rozmaitą prędkością: od kilku bajtów na sekundę do kilku gigabajtów na sekundę.

Zapis-odczyt, tylko odczyt, tylko zapis

Urządzenie może udostępniać tylko odczyt (np. napęd dysków optycznych), tylko zapis (np. drukarka), albo oba jednocześnie (np. dysk).

Tak jak planuje się dostęp do procesora, potrzebne jest także planowanie dostępu do urządzeń. Dotyczy to na przykład dysków. Gdyby żądania obsługiwano w takiej kolejności, jak przyszły, głowica dysku mogłaby przesuwać się bez potrzeby w tę i we w tę. Można za to tak zaplanować obsługę żądań dyskowych by zminimalizować zbędne ruchy głowicy. Co więcej, pewne zlecenia (np. dotyczące pamięci wirtualnej) mogą być pilniejsze niż inne (np. żądania aplikacji). Z każdym urządzeniem może być związana kolejka zleceń obsługiwana według odmiennej strategii. Systemy operacyjne starają się być też sprawiedliwe w planowaniu dostępu do urządzeń.

Buforowanie wejścia/wyjścia

Bufor to obszar pamięci do przechowywania danych przesyłanych między dwoma urządzeniami. Buforowanie takiego transferu danych jest ważne, ponieważ:

1. Producent i konsument danych (jakieś urządzenia) mogą mieć różne szybkości.

2. Producent i konsument danych (jakieś urządzenia) mogą posługiwać się jednostkami danych różnych rozmiarów.

3. Potrzebna jest semantyka kopii, tzn. na dysku musi się znaleźć dokładnie to, co w swoich lokalnych buforach złożyła aplikacja. Aplikacja może zmienić zawartość swojego bufora już po zleceniu, ale zanim system operacyjny skopiuje ten bufor na dysk. Przypomnijmy, że operacja dyskowa jest wolniejsza. Z tego powodu systemy operacyjne najpierw kopiują dane ze zlecenia klienta do swego bufora, a potem dopiero z tego bufora na dysk. W ten sposób aplikacja nie jest w stanie zakłócić długotrwałego procesu zapisu na dysk. Buforowanie wejścia/wyjścia pozwala rozwiązać te problemy.

Przechowywanie podręczne

Pamięć podręczna (ang. cache) jest obszarem szybkiej pamięci do przechowywania kopii danych. To udogodnienie pozwala na szybszy dostęp do oryginału danych i jest kluczem do szybszego działania systemu komputerowego. Jeśli aktualne dane są akurat w pamięci podręcznej, nie ma potrzeby wykonywania kosztownych czasowo operacji dyskowych.

Spooling

Spooling (SPOOL = simultaneousperipheraloperations on-line = jednoczesna bezpośrednia praca urządzeń) to użycie bufora do przechowywania danych zlecenia dla obecnie zajętego urządzenia o dostępie wyłącznym. Przykładem takiego urządzenia jest drukarka. Zadania drukowania oczekują w kolejce na możliwość realizacji.

Rys 12.1 str 470

Rys 12.4 str 476

Rys 12.3 str 474

12.7 str 483



Wyszukiwarka