Architektura Komputerów/Wykład 14: Wejście-wyjście

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania

ASK M14 S01.png

ASK M14 S02.png

ASK M14 S03.png

Port wejściowy lub wyjściowy jest w modelu programowym widziany tak samo lub podobnie, jak lokacja pamięci. W większości architektur porty są odwzorowane w przestrzeni adresowej pamięci. W niektórych architekturach, np. w x86, porty urządzeń zewnętrznych są dostępne w oddzielnej przestrzeni adresowej, na której operują specjalne instrukcje procesora – tzw. instrukcje wejścia-wyjścia.


ASK M14 S04.png

Rysunek przedstawia schemat – model logiczny pojedynczej komórki pamięci, który nie ma bezpośredniego odwzorowania w sprzętowej realizacji układów pamięci.

Adres wystawiony przez procesor służy do wygenerowania sygnału wyboru konkretnej komórki pamięci.

Zapis danej polega na wytworzeniu na podstawie sygnału wyboru komórki i sygnału zapisu sygnału zapisu do wybranej komórki, który powoduje zapamiętanie bieżącego stanu szyny danych w rejestrze typu D.

Przy odczycie danych sygnał wyboru komórki ziloczynowany z sygnałem żądania odczytu powoduje otwarcie bufora trójstanowego (wzmacniacza), a tym samym podanie stanu zapamiętanego w komórce na szynę danych. Przy nieaktywnym stanie sygnału włączającego bufor jest wyłączony i nie steruje szyny.


ASK M14 S05.png

Aby uzyskać port wejściowy i wyjściowy, wystarczy zrealizować tylko część komórki pamięci, a brakującą część zastąpić wyjściem lub wejściem sygnału zewnętrznego.

Rysunek przedstawia port wyjściowy i wejściowy, uzyskane z „przecięcia” pokazanej wcześniej komórki pamięci. Wyjście elementu pamiętającego steruje diodą świecącą jako urządzeniem wyjściowym. Wejście jest połączone z przyciskiem. Odczyt danej z portu wejściowego zwraca stan wciśnięcia przycisku.


ASK M14 S06.png

ASK M14 S07.png

W praktyce komputer steruje na ogół znacznie bardziej złożonymi urządzeniami zewnętrznymi. Przykładem średnio skomplikowanego urządzenia może być drukarka wyposażona w interfejs Centronics. Drukarka jest połączona z komputerem kablem, przesyłającym 17 sygnałów.


ASK M14 S08.png

Sygnały nStrobe, Busy i Ack służą do synchronizacji transmisji danych po liniach Data.

Sygnały Perror, Select i nFault sygnalizują komputerowi stan drukarki.

Sygnał nInit służy do inicjowania drukarki przez komputer. Sygnały nSelectIn i nAutoFd służą do sterowania trybem pracy drukarki.


ASK M14 S09.png

Diagram ilustruje sekwencję zdarzeń podczas typowej transmisji danych. Przyjęto, że drukarka jest w stanie normalnej pracy (brak błędów) i jedyna interakcja z komputerem dotyczy przesyłania danych do wydrukowania.

Protokół Centronics wymaga ważności danych tylko podczas aktywnego (niskiego) stanu sygnału nStrobe.


ASK M14 S10.png

Sterownik interfejsu Centronics zajmuje trzy jednobajtowe lokacje w przestrzeni adresowej procesora. Poszczególne sygnały z komputera do drukarki są wyprowadzone z poszczególnych bitów rejestru sterowania, a sygnały z drukarki do komputera wchodzą na kolejne bity portu stanu drukarki.


ASK M14 S11.png

W porównaniu ze współpracą procesora z pamięcią transmisja danych do i z urządzeń zewnętrznych jest o tyle bardziej skomplikowana, że nie może zachodzić w dowolnym momencie, lecz jedynie wtedy, kiedy urządzenie jest gotowe do przyjęcia danej lub do udostępnienia danej komputerowi.

Do synchronizacji z urządzeniem służą sygnały synchronizacji transmisji – w przypadku drukarki są to linie Busy, nAck i nStrobe.

Istnieją trzy metody synchronizacji, o zróżnicowanych kosztach implementacji i wydajności.


ASK M14 S12.png

Metoda aktywnego oczekiwania nie wymaga żadnych nakładów sprzętowych. Cała synchronizacja transmisji jest osiągana na drodze programowej, poprzez testowania stanu sygnałów gotowości i ustawianie sygnałów sterujących transmisją danych.

Przedstawiona procedura programowej obsługi drukarki zapewnia transmisję pojedynczych bajtów do drukarki. Porty sterownika drukarki są oznaczone nazwami symbolicznymi (wielkie litery) i traktowane prze kompilator jak zmienne w programie. Szczegółowy sposób ich deklaracji zależy od kompilatora. Należy zauważyć, że na poziomie języka C muszą to być obiekty klasy volatile.


ASK M14 S13.png

ASK M14 S14.png

Obsługa z użyciem przerwań korzysta z mechanizmu sytuacji wyjątkowych – zdarzeń obsługiwanych przez system operacyjny.

Szczegółowa realizacja tego mechanizmu w systemie operacyjnym jest dużo bardziej złożona, niż przedstawia to opisany schemat.


ASK M14 S15.png

Główną zaletą obsługi przy użyciu przerwań jest możliwość zajęcia się przez procesor wykonywaniem innych czynności podczas oczekiwania na gotowość urządzeń, co jest niezbędne w systemach wieloprocesowych.

Jeśli urządzenie transmituje dane szybko, a co za tym idzie – często zgłasza przerwania, może się okazać, że procesor traci dużo czasu na przełączanie kontekstu wynikające z obsługi przerwań oraz na czynności systemowe wynikające ze zmian stanu urządzeń, w tym m.in. zmiany stanu procesów oczekujących na te urządzenia. Obsługa z użyciem przerwań może się w tym przypadku stać bardziej czasochłonna, niż aktywne oczekiwanie.


ASK M14 S16.png

Najbardziej efektywnym i najdroższym sposobem obsługi urządzeń zewnętrznych jest bezpośredni dostęp do pamięci. Wymaga on sprzętowej realizacji specjalnego modułu – sterownika bezpośredniego dostępu do pamięci.


ASK M14 S17.png

Przy korzystaniu z bezpośredniego dostępu do pamięci przerwanie jest zgłaszane do procesora po przetransmitowaniu całego bloku danych. Narzut czasowy na obsługę programową transmisji jest więc bardzo mały.


ASK M14 S18.png

Przy współczesnych implementacjach sterowników urządzeń w postaci układów wielkoscalonych, koszty realizacji sterownika DMA są bardzo niskie. Jest to więc preferowana metoda współpracy z szybkimi urządzeniami zewnętrznymi, stosowana szeroko również w komputerach osobistych.