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

Plan wykładu





Komórka pamięci a port wejścia-wyjścia





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.


Schemat logiczny komórki pamięci



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.



Schemat logiczny portu wyjściowego i wejściowego



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.



Port wyjściowy i wejściowy



  • Port wyjściowy
    • wyjście elementu pamiętającego wyprowadzone na zewnątrz
      • w naszym przykładzie - steruje diodą świecącą 
                            - stan 0 - dioda świeci 
                            - stan 1 - dioda nie świeci
  • Port wejściowy
    • bufor trójstanowy umożliwia odczyt stanu sygnału zewnętrznego
      • w naszym przykładzie - przycisk
                            - przycisk wciśnięty - stan 0 
                            - przycisk zwolniony - stan 1


Interfejs Centronics



  • Przykład prostego interfejsu równoległego
  • Opracowany w latach 70-tych XX w. dla drukarek mozaikowych
    • używany do ok. 2000 roku dla drukarek dołączanych do komputerów PC
    • ulepszony w latach 90-tych - standard IEEE1284
    • obecnie praktycznie nieużywany
  • Sygnały:
    • dane przesyłane równolegle do drukarki - 8 linii
    • synchronizacja transmisji - 3 linie
    • informacja o stanie urządzeń, wybór i inicjowanie - 6 linii

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.


Centronics - sygnały



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.



Interfejs Centronics - transmisja danych



  • Sekwencja zdarzeń
    • komputer wystawia bajt danych na linie Data
    • komputer czeka na gotowość drukarki (Busy = 0, impuls na nAck)
    • komputer wystawia impuls strobujący transmisję na nStrobe
    • drukarka przyjmuje dane i przechodzi w stan niegotowości
  • Komputer może wystawić następny bajt danych oczekując na gotowość drukarki

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.



Sterownik interfejsu Centronics w IBM PC




  • Widoczny w przestrzeni adresowej jako trzy kolejne lokacje bajtowe
    • port danych - dane wysyłane na drukarkę
    • port stanu drukarki (wejście)
      • bit 7 - ~Busy
      • bit 6 - ~nAck
      • bit 5 - PError
      • bit 4 - Select
      • bit 3-~nFault
    • port sterowania (wyjście)
      • bit 3 - nSelectln
      • bit 2 - Init
      • bit 1 - nAutoFd
      • bit 0 - nStrobe

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.


Współpraca z urządzeniami zewnętrznymi



  • Odczyt lub zapis danych do komórki pamięci jest możliwy w każdej chwili
  • Przesłanie danych do lub z urządzenia zewnętrznego jest możliwy wtedy, gdy urządzenie jest gotowe, np.
    • wciśnięto klawisz na klawiaturze - można odczytać kod klawisza
    • drukarka przyjęła znak do wydrukowania i jest gotowa na przyjęcie następnego znaku
  • Transmisja danych wymaga synchronizacji - uwzględnienia stanu gotowości urządzenia
  • Rozwiązania
    • aktywne oczekiwanie (polling)
    • przerwania
    • bezpośredni dostęp do pamięci (DMA- Direct Memory Access)

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.



Obsługa portu drukarki z aktywnym oczekiwaniem



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.



Aktywne oczekiwanie



  • Nie wymaga dodatkowych nakładów po stronie sprzętu
  • Angażuje czas procesora
    • program spędza czas w pętli oczekiwania na gotowość urządzenia nie robiąc w tym czasie nic innego
    • w systemie wieloprocesowym procesor marnuje w ten sposób czas, który mógłby być wykorzystany na pracę innego procesu
  • Rozwiązanie odpowiednie wyłącznie dla prostych systemów jednoprocesowych
    • proste sterowniki urządzeń, np. oświetlenia, ogrzewania
    • (dawniej) jednoprocesowe systemy operacyjne dla komputerów osobistych (np MS-DOS)
 

Obsługa z wykorzystaniem przerwań



  • Przejście urządzenia w stan gotowości powoduje zgłoszenie przerwania
    • system operacyjny odnotowuje gotowość urządzenia 
  • Proces zgłasza żądanie transmisji systemowi operacyjnemu
    • jeśli urządzenie jest gotowe - dana jest przesyłana
    • jeśli urządzenie jest niegotowe - proces jest usypiany
  • Procedura obsługi przerwania powoduje wznowienie wykonania procesu

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.




  • Niewielki narzut sprzętowy
    • zgłaszanie przerwania
    • arbitraż przerwań
  • Znaczna komplikacja oprogramowania
    • skomplikowana obsługa przerwań w systemie operacyjnym, operacje na procesach
  • Możliwość wykonywania innych procesów w czasie niegotowości urządzenia
    • nie obciąża procesora sprawdzaniem gotowości
  • Dobre rozwiązanie dla niezbyt szybkich urządzeń
    • do kilku tysięcy przerwań na sekundę
  • Problem:
    • przy częstym zgłaszaniu przerwań system operacyjny spędza b. dużo czasu na ich obsłudze - nieodpowiednie dla szybkich urządzeń

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.



Bezpośredni dostęp do pamięci - realizacja



  • Transmisja danych pomiędzy urządzeniem i pamięcią operacyjną bez użycia procesora
  • Sterownik bezpośredniego dostępu do pamięci
    • rejestr adresu bufora danych w pamięci
      • ładowany adresem początku bufora przed rozpoczęciem transmisji bloku
      • inkrementowany po każdym przesłaniu
    • licznik transmitowanych danych
      • ładowany długością bloku
      • dekrementowany po każdym przesłaniu
    • na czas transmisji dostęp procesora do szyny jest blokowany
      • gdyby procesor chciał się w tym czasie odwołać do pamięci - będzie czekał
  • Implementacja
    • (dawniej) w postaci modułu obsługującego wiele urządzeń
    • wbudowany w sterownik konkretnego urządzenia - "bus mastering"

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.


Bezpośredni dostęp do pamięci - działanie



  • Procesor programuje sterownik bezpośredniego dostępu do pamięci
  • Sterownik transmituje blok danych pomiędzy pamięcią i urządzeniem
  • Po zakończeniu transmisji całego bloku sterownik generuje przerwanie
  • Procedura obsługi przerwania jest uruchamiana raz na blok danych, a nie przy każdej transmisji
  • Procesor nie jest angażowany do transmisji każdej danej

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.


Bezpośredni dostęp do pamięci - charakterystyka



  • Wymaga istotnych nakładów sprzętowych
    • przy implementacji VLSI koszty pomijalnie małe 
  • Odciążenie procesora
    • transmisja praktycznie bez udziału procesora 
  • Powszechnie używany dla szybkich urządzeń
    • w PC - dyski, sterowniki sieci lokalnej, sterowniki dźwiękowe i graficzne, sterowniki USB

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.