Do spisu tresci tematu 7
Podprogram obslugi terminali
Spis tresci
Wprowadzenie
Urzadzenia terminalowe (dalej bedziemy je nazywac terminalami) sa szczegolnym przypadkiem urzadzen znakowych, przeznaczonymi do "kontaktu" systemu z ludzmi. Ich osobliwosc polega glownie na tym, ze jako urzadzenia przeznaczone do komunikacji z czlowiekiem maja nieco zmieniana semantyke funkcji systemowej read. Dlaczego ? Otoz jesli wywolujemy read(..) z zadaniem wczytania pewnej ilosci bajtow, to oczekujemy ze jej wykonanie zakonczy sie dopiero wtedy gdy te bajty zostana wczytane lub zostanie osiagniety koniec pliku (To jest nie do konca prawdza w przypadku laczy i temu podobnych). W przypadku terminali takie podejscie jest nieprzydatne, gdyz ludzie, gdy np.wprowadzaja polecenia, to oczekuja reakcji programu po nacisnieciu klawisza ENTER, a nie gdy wprowadza np. 10 (lub 100) znakow. Oczywiscie ktos moglby powiedziec, ze program moglby za kazdym razem zadac odczytu tylko jednego bajtu i nastepnie sobie skladac cale polecenie po kolei. To podejscie jednak ma powazne wady:
- Koszt - wczytanie 100 znakowego polecenia to 100 (co najmniej ) wywolan fukcji systemowej (A wywolanie funkcji systemowej to przejscie do trybu jadra,czesto zmiana kontekstu itd itp)
- Czesto chcielibysmy aby wiekszosc znakow byla traktowana jednakowo we wszystkich programach (np TAB lub BACKSPACE) - trudno to zachowac gdy kazdy program sam decyduje co ma robic z kazdym wczytanym znakiem.
Jeszcze jednym powodem specjalnego znaczenia terminali jest pojecie sesji.
Po prostu gdy uzytkownik zasiadzie przy klawiaturze, wejdzie do systemu i,
za pomoca polecen systemowych zacznie tworzyc procesy, to beda one (powinny
byc) w pewien sposob zwiazane z tym urzadzeniem, po to, aby w momencie
zakonczenia pracy mogly zostac powiadomione o tym fakcie(a nawet
zakonczone.)
- Pojecia
- Terminal sterujacy - terminal opisywany przez strukture tty_struct wskazywana przez pole tty w task_struct. Z tego terminala proces dostaje sygnaly SIGHUP,SIGINT,SIGSTP itp. Proces zwykle dziedziczy po swoim przodku ten terminal lub moze uzyskac go za pomoca wywolania funkcji ioctl(...).
- Grupa terminalowa - Zbior procesow majacych ten sam terminal sterujacy. W Systemie V procesy nalezace do jednej grupy terminalowej, w przypadku odlaczenia terminala(ang. hangup) dostawaly sygnal SIGHUP. W Linux'ie jest mozliwe zarzadzanie przypisaniami terminali do procesow tak jak jest to robione w sytemie BSD (a nie w Systemie V) tzn. gdy wywolujemy funkcje setpgrp(...) to wtedy stajemy sie w pewnym sensie odrebna grupa terminalowa i sygnal SIGHUP jaki odbierze przywodca grupy terminalowej, do nas nie zostanie wyslany. (W szczegolnosci oznacza to, ze jesli wywolamy jakies polecenie w tle (w tzw. interpretatorze sterujacym pracami (Wg terminologi Stevensa) - takim jest np. bash) i sie wylogujemy to proces uruchomiony w tle nie dostanie sygnalu SIGHUP.)
- Przywodca grupy terminalowej - proces ktorego identyfikator sesji (pole session w task_struct) jest rowny jego identyfikatorowi.
- Numeracja urzadzen - w Linux'ie zastosowano bardzo ciekawy sposob numeracji urzadzen.Otoz system ten zapewnia obsluge 63 konsol, 64 terminali podlaczanych do portow szeregowych, 64 pseudoterminali nadrzednych, 64 pseudoterminali podrzednych. Kazde uzadzenie terminalowe w Linux'ie ma numer glowny 4. Podzial numerow drugorzednych jest nastepujacy
- Konsole maja numery 1-63
- Terminale podlaczone do linii szeregowych maja numery 64-127
- Pseudoterminale nadrzedne maja numeru 128-191
- Pseudoterminale podrzedne maja numery 191-255,przy czym pseudoterminal podrzedny o numerze n odpowiada pseudoterminalowi nadrzednemu o numerze n-64.
Natomiast urzadzenie o numerze gl. 4 i drugorzednym 0 jest aktywna (biezaca konsola), ta na ktorej wlasnie pracujemy; dobrym okresleniem na nia byloby:"ta do ktorej kierowqæK([v0` ~O
u_)=^hɪqpk6&G@bYQgz`,9sj'uF[a忶`HNXhrO Eyn|_nwQddpAOnP%$O45B
ӕDzA mW3Oκ2 K8H ph8R2
fhE k|ڴPcgCz`=7E Mhp^!vLP-J@N'8= htY.UW.w9 ;p鲩Z
%1fbB/|OHo*9JBFqE߅ۉX\"\
ö!eؔQ#z ]|`_/sק5)=Eᵵjh'8.{q5ﯘ9
G#wsԀ7 K~>{781q4#LڗhI|5H䶽\3OByjZWF;Y
(kD`oK]Z9mClC;zc1o嗦#;#B6^f1A
zъ}+X)wĶL3ߥk~ >=kѵ-6NG1QR}L~ut}
٤3S3g Ks! |]2qo-,>.?1w*-b%\#j2]f$ʌ}..1 A{C.a8)Eب.'(H`<=Xf$_ '.brflyb9C(I捺+Е(K+0W3tjrgqE7֚fXl}
a cG^ˍBHM]Z{)T6\=o3v:0DONT`Rlc",]}A/+HCL>1jw==CBLV gD
eɃo]?Ck9/% *tGx0 T:UWVv 2bATB?iVmǛ_6k2IW1/}fNBJ˛Դ-:9Q y>VcR{q2
QfG8N\
w`Wo @@,/D,,DtOhVͬaAwd)]_Zoʐ^gU~&:>oX~BzΥdCk CeEUwߡlfb%FeKIa1gZ;eA][ZZz(B96:sb&%ϳ(pEXAyUUaGGN.lӾ<5USp{ग़^-\[ȳK)eO_$|vjIؙ:VA(V2sm)bF&4-A?RP IZ/$@~K+/~מoҌ`^:k}yj
(^p!3pjQ¬[ٕu99"+"%[VƯҊT CIe߿n@.M#]OAO<Б`H!eRy̟"MqW3!mŌ=.E(?#2rrvkJv$
ޚ/3F؝\ɞ51=lG5ױ}Nfl @ZVBVf保bJ9KI F;&AlD֑ĸ vy鈒;.8^Olqa 2hH