Podsystem Wejścia/Wyjścia w systemie Linux 2.4.7 | ||
Urządzenia znakowe i blokowe. Funkcja block_read(), block_write(). | ||
1. Wstęp | ||
< Poprzednia strona | Spis treści | Następna strona > |
Twórcy systemu Linux umożliwiają programom użytkowym komunikację z urządzeniami wejścia/wyjścia przez pliki specjalne w wirtualnym systemie plików. Urządzeniom odpowiadają pliki w systemie plików (standardowo znajdują się one w katalogu /dev). Komunikacja z urządzeniem odbywa się przez zapis/odczyt do takich plików. Takie podejście do problemu ma wiele zalet, najważniejszymi są: proste definiowanie ograniczeń dostępu do danego urządzenia i unifikacja interfejsu użytkownik - urządzenie.
Możliwość tworzenia i korzystania z plików specjalnych musiała oczywiście zostać zaimplementowana także na poziomie wirtualnego systemu plików Linuxa. Rzeczywiście w strukturze i-węzła znajdują się odpowiednie pola (i_rdev, i_mode, i_cdev, i_bdev), które przechowują informacje, z jakim urządzeniem związany jest plik specjalny.
W systemie Linux wyróżniamy dwa rodzaje urządzeń: urządzenia blokowe, urządzenia znakowe. Podstawową różnicą pomiędzy tymi dwoma typami urządzeń jest jednostka wielkości danych, jakimi operuje jądro przy przesyłaniu danych z/do urządzenia. W przypadku urządzeń znakowych jest to zawsze jeden bajt, w przypadku urządzeń blokowych jest to blok określonej wielkości. Ważną różnicą pomiędzy urządzeniami znakowymi i blokowymi jest także czas dostępu do nich. Urządzenie znakowe charakteryzuje się szybkim dostępem (przykładami takich urządzeń jest pamięć ram, karta dźwiękowa, karta telewizyjna), a urządzenia blokowe są to urządzenia powolne (twarde dyski, napędy dyskietek, napędy CD-ROM, streamery), w których pojawia się potrzeba buforowania, oraz szeregowania zleceń.
Z każdym urządzeniem związany jest jego typ (znakowe, blokowe) oraz numer pierwszo- i drugorzędny. Dla danego typu urządzenia ta trójka wartości jest unikalna. Listę tych urządzeń oraz odpowiadających im trójek można znaleźć w pliku Documentation/devices.txt w katalogu zawierającym źródła jądra.