7.1.2 Pliki specjalne - sposob dostepu do urzadzen
Do spisu tresci tematu 7
7.1.2 Pliki specjalne - sposob dostepu do urzadzen
Spis tresci
Sposob dostepu do urzadzen
Bibliografia
Pytania i odpowiedzi
Sposob dostepu do urzadzen
Pliki specjalne
Kazde urzadzenie w Unixie jest instalowane w systemie jako osobny plik.
Jest to tzw. plik specjalny. Taki sposob dostepu do urzadzen zapewnia miedzy
innymi:
mozliwosc rozmieszczania "urzadzen" w roznych miejscach systemu
plikow
identyczny sposob dostepu do urzadzen co do plikow (open, close, read,
write ...)
latwe zarzadzanie dostepem (identyczne mozliwosci dotyczace praw dostepu
jak dla zwyklych plikow)
Przy operacjach na zwyklych plikach po wywolaniu okreslonej funkcji
na zadanym pliku system operacyjny szuka wlasciwego odpowiednika dla danego
systemu plikow (np. open dla ext2 o ile dany system plikow jest typu ext2).
Dla pliku specjalnego odpowiadajacego pewnemu urzadzeniu system szuka funkcji
wlasciwych dla danego urzadzenia. Dostarczaniem takich funkcji zajmuja
sie sterowniki urzadzen.
Pliki specjalne tworzymy za pomoca instrukcji
mknod. Przyklady dotyczace tworzenia plikow znajdziecie
tutaj (link do tutaj). Zapis typu pliku znajduje sie w strukturze i-wezla:
struct inode
{
dev_t i_dev; //
NR URZADZENIA
unsigned long i_ino;
umode_t i_mode; //
TYP PLIKU
nlink_t i_nlink;
uid_t i_uid;
gid_t i_gid;
dev_t i_rdev;
...
}
fs.h
typedef unsigned short dev_t;
typedef unsigned short umode_t;
types.h
TYPY PLIKOW (zapis bitowy):
0010 urzadzenie znakowe
0100 urzadzenie blokowe
Jedno urzadzenie moze miec dwa pliki - jeden dla dostepu blokowego,
a drugi dla dostepu znakowego. Otrzymujemy wtedy dwa niezalezne dostepy
do jednego urzadzenia. Wada takiego rozwiazania jest to, ze nie jestesmy
w stanie uzyskac jednoznacznej kontroli dostepu do danego urzadzenia. W
szczegolnosci trudno jest uzyskac wylaczny dostep do urzadzenia (tzn. zeby
dane urzadzenie bylo naraz otwarte tylko przez jeden proces).
Numer glowny i drugorzedny
Aby dane urzadzenie mozna bylo zidentyfikowac w systemie potrzebny jest
jakis unikatowy identyfikator. Jest nim wewnetrzny numer urzadzenia,
zakodowany w polu "i_dev" i-wezla danego pliku. Czesto zdarza
sie, ze do systemu mamy podlaczone wiele urzadzen tego samego typu (np.
identyczne dyski). Nic nie stoi na przeszkodzie aby obslugiwac je identycznie.
Dlatego tez kazdemu urzadzeniu zostaje przypisany numer glowny (MAJOR)
oraz numer drugorzedny (MINOR). Numer glowny okresla nam grupe
urzadzen do ktorej nalezy dane urzadzenie, natomiast numer drugorzedny
zapewnia nam unikatowosc w danej grupie numeru glownego. Wszystkie urzadzenia
z danym numerem glownym sa obslugiwane identycznie (co okaze sie dokladniej
przy tablicach rozdzielczych).
Numery glowne i drugorzedne zaleza bezposrednio od wewnetrznego numeru
urzadzenia. Z numeru wewnetrzego mozemy wyliczyc pozostale numery:
#define MAJOR(a) (int)((unsigned short)(a) >> 8)
#define MINOR(a) (int)((unsigned short)(a) & 0xFF)
fs.h
Bibliografia
Maurice J. Bach "Budowa systemu operacyjnego UNIX", WNT, Warszawa
1995
Pytania i odpowiedzi
Mile widziane...
Aby
zadac pytanie
Autor: Stanislaw Orzel
Wyszukiwarka
Podobne podstrony:
Linux714 (3)Linux714Linux735linux721Linux736 (4)Linux736 (3)Linux722 (4)Linux713 (2)więcej podobnych podstron