Architektura Komputerów/Wykład 14: Wejście-wyjście: Różnice pomiędzy wersjami
Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Nie podano opisu zmian |
Nie podano opisu zmian |
||
Linia 3: | Linia 3: | ||
|valign="top" width="500px"|[[Grafika:ASK_M14_S01.png]] | |valign="top" width="500px"|[[Grafika:ASK_M14_S01.png]] | ||
|valign="top"| | |valign="top"| | ||
|} | |} | ||
Linia 10: | Linia 10: | ||
|valign="top" width="500px"|[[Grafika:ASK_M14_S02.png]] | |valign="top" width="500px"|[[Grafika:ASK_M14_S02.png]] | ||
|valign="top"| | |valign="top"| | ||
|} | |} | ||
<hr width="100%"> | <hr width="100%"> | ||
Linia 16: | Linia 16: | ||
|valign="top" width="500px"|[[Grafika:ASK_M14_S03.png]] | |valign="top" width="500px"|[[Grafika:ASK_M14_S03.png]] | ||
|valign="top"| | |valign="top"| | ||
... | 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. | ||
|} | |} | ||
<hr width="100%"> | <hr width="100%"> | ||
Linia 22: | Linia 22: | ||
|valign="top" width="500px"|[[Grafika:ASK_M14_S04.png]] | |valign="top" width="500px"|[[Grafika:ASK_M14_S04.png]] | ||
|valign="top"| | |valign="top"| | ||
... | 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. | |||
|} | |} | ||
<hr width="100%"> | <hr width="100%"> | ||
Linia 28: | Linia 34: | ||
|valign="top" width="500px"|[[Grafika:ASK_M14_S05.png]] | |valign="top" width="500px"|[[Grafika:ASK_M14_S05.png]] | ||
|valign="top"| | |valign="top"| | ||
... | 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. | |||
|} | |} | ||
<hr width="100%"> | <hr width="100%"> | ||
Linia 34: | Linia 42: | ||
|valign="top" width="500px"|[[Grafika:ASK_M14_S06.png]] | |valign="top" width="500px"|[[Grafika:ASK_M14_S06.png]] | ||
|valign="top"| | |valign="top"| | ||
|} | |} | ||
<hr width="100%"> | <hr width="100%"> | ||
Linia 40: | Linia 48: | ||
|valign="top" width="500px"|[[Grafika:ASK_M14_S07.png]] | |valign="top" width="500px"|[[Grafika:ASK_M14_S07.png]] | ||
|valign="top"| | |valign="top"| | ||
... | 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. | ||
|} | |} | ||
<hr width="100%"> | <hr width="100%"> | ||
Linia 46: | Linia 54: | ||
|valign="top" width="500px"|[[Grafika:ASK_M14_S08.png]] | |valign="top" width="500px"|[[Grafika:ASK_M14_S08.png]] | ||
|valign="top"| | |valign="top"| | ||
... | 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. | |||
|} | |} | ||
<hr width="100%"> | <hr width="100%"> | ||
Linia 52: | Linia 64: | ||
|valign="top" width="500px"|[[Grafika:ASK_M14_S09.png]] | |valign="top" width="500px"|[[Grafika:ASK_M14_S09.png]] | ||
|valign="top"| | |valign="top"| | ||
... | 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. | |||
|} | |} | ||
<hr width="100%"> | <hr width="100%"> | ||
Linia 58: | Linia 72: | ||
|valign="top" width="500px"|[[Grafika:ASK_M14_S10.png]] | |valign="top" width="500px"|[[Grafika:ASK_M14_S10.png]] | ||
|valign="top"| | |valign="top"| | ||
. | 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. | ||
|} | |} | ||
<hr width="100%"> | <hr width="100%"> | ||
Linia 64: | Linia 78: | ||
|valign="top" width="500px"|[[Grafika:ASK_M14_S11.png]] | |valign="top" width="500px"|[[Grafika:ASK_M14_S11.png]] | ||
|valign="top"| | |valign="top"| | ||
... | 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. | |||
|} | |} | ||
<hr width="100%"> | <hr width="100%"> | ||
Linia 70: | Linia 88: | ||
|valign="top" width="500px"|[[Grafika:ASK_M14_S12.png]] | |valign="top" width="500px"|[[Grafika:ASK_M14_S12.png]] | ||
|valign="top"| | |valign="top"| | ||
... | 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. | |||
|} | |} | ||
<hr width="100%"> | <hr width="100%"> | ||
Linia 76: | Linia 96: | ||
|valign="top" width="500px"|[[Grafika:ASK_M14_S13.png]] | |valign="top" width="500px"|[[Grafika:ASK_M14_S13.png]] | ||
|valign="top"| | |valign="top"| | ||
|} | |} | ||
<hr width="100%"> | <hr width="100%"> | ||
Linia 82: | Linia 102: | ||
|valign="top" width="500px"|[[Grafika:ASK_M14_S14.png]] | |valign="top" width="500px"|[[Grafika:ASK_M14_S14.png]] | ||
|valign="top"| | |valign="top"| | ||
. | 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. | |||
|} | |} | ||
<hr width="100%"> | <hr width="100%"> | ||
Linia 88: | Linia 110: | ||
|valign="top" width="500px"|[[Grafika:ASK_M14_S15.png]] | |valign="top" width="500px"|[[Grafika:ASK_M14_S15.png]] | ||
|valign="top"| | |valign="top"| | ||
... | 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. | |||
|} | |} | ||
<hr width="100%"> | <hr width="100%"> | ||
Linia 94: | Linia 118: | ||
|valign="top" width="500px"|[[Grafika:ASK_M14_S16.png]] | |valign="top" width="500px"|[[Grafika:ASK_M14_S16.png]] | ||
|valign="top"| | |valign="top"| | ||
. | 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. | ||
|} | |} | ||
<hr width="100%"> | <hr width="100%"> | ||
Linia 100: | Linia 124: | ||
|valign="top" width="500px"|[[Grafika:ASK_M14_S17.png]] | |valign="top" width="500px"|[[Grafika:ASK_M14_S17.png]] | ||
|valign="top"| | |valign="top"| | ||
. | 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. | ||
|} | |} | ||
<hr width="100%"> | <hr width="100%"> | ||
Linia 106: | Linia 130: | ||
|valign="top" width="500px"|[[Grafika:ASK_M14_S18.png]] | |valign="top" width="500px"|[[Grafika:ASK_M14_S18.png]] | ||
|valign="top"| | |valign="top"| | ||
. | 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. | ||
|} | |} |
Aktualna wersja na dzień 17:26, 10 paź 2006
![]() |
![]() |
![]() |
![]() |