meyutsya dannye dlya obrabotki, i planiruet sobstvennoe obsluzhivanie. Modul' vklyuchaet ochered' v spisok ocheredej, trebuyushchih obsluzhivaniya i zapuskaet meha- nizm dispetcherizacii; planirovshchik (dispetcher) vyzyvaet procedury obsluzhiva- 322 niya dlya kazhdoj ocheredi v spiske. YAdro mozhet planirovat' obsluzhivanie modulej po programmnomu preryvaniyu, podobno tomu, kak ono vyzyvaet funkcii v tablice otvetnyh signalov (sm. glavu 8); obrabotchik programmnyh preryvanij vyzyvaet individual'nye procedury obsluzhivaniya. +----------+ | Indeks | +-----------------------+ fajla | | |ustrojstva| v +----------+ +------------+-----------+ Zagolovok | Ochered' | Ochered' | potoka | dlya vyvoda | dlya vvoda | +------+-----+-----------+ | ^ | | v | +------------+-----------+ Strokovyj | Ochered' | Ochered' | interfejs | dlya vyvoda | dlya vvoda | +------+-----+-----------+ | ^ | | v | +------------+-----+-----+ Terminal'nyj | Ochered' | Ochered' | drajver | dlya vyvoda | dlya vvoda | +------------+-----------+ Risunok 10.22. Prodvizhenie modulya k potoku Processy mogut "prodvigat'" moduli k otkrytomu potoku, ispol'zuya vyzov sistemnoj funkcii ioctl. YAdro pomeshchaet vydvinutyj modul' srazu pod zagolov- kom potoka i svyazyvaet ukazateli ocheredi takim obrazom, chtoby sohranit' dvu- napravlennuyu strukturu spiska. Moduli, raspolozhennye v potoke nizhe, ne bes- pokoyatsya o tom, svyazany li oni s zagolovkom potoka ili zhe s vydvinutym modu- lem: interfejsom vystupaet procedura "vyvoda" sleduyushchej ocheredi v potoke; a sleduyushchaya ochered' prinadlezhit tol'ko chto vydvinutomu modulyu. Naprimer, pro- cess mozhet vydvinut' modul' strokovogo interfejsa v potok terminal'nogo drajvera s cel'yu obrabotki simvolov stiraniya i udaleniya (Risunok 10.22); mo- dul' strokovogo interfejsa ne imeet teh zhe sostavlyayushchih, chto i strokovye in- terfejsy, rassmotrennye v razdele 10.3, no vypolnyaet te zhe funkcii. Bez mo- dulya strokovogo interfejsa terminal'nyj drajver ne obrabotaet vvodnye simvo- ly i oni postupyat v zagolovok potoka v neizmenennom vide. Segment programmy, otkryvayushchij terminal i vydvigayushchij strokovyj interfejs, mozhet vyglyadet' sle- duyushchim obrazom: fd = open("/dev/ttyxy",O_RDWR); ioctl(fd,PUSH,TTYLD); gde PUSH - imya komandy, a TTYLD - chislo, identificiruyushchee modul' strokovogo interfejsa. Ne sushchestvuet ogranicheniya na kolichestvo modulej, mogushchih byt' vydvinutymi v potok. Process mozhet vytalkivat' moduli iz potoka v poryadke postupleniya, "pervym prishel - pervym vyshel", ispol'zuya eshche odin vyzov sis- temnoj funkcii ioctl ioctl(fd,POP,0); Pri tom, chto modul' strokovogo interfejsa vypolnyaet obychnye funkcii po 323 upravleniyu terminalom, sootvetstvuyushchee emu ustrojstvo mozhet byt' sredstvom setevoj svyazi vmesto togo, chtoby obespechivat' svyaz' s odnim-edinstvennym terminalom. Modul' strokovogo interfejsa rabotaet odinakovo, nezavisimo ot togo, kakogo tipa modul' raspolozhen nizhe nego. |tot primer naglyadno demonst- riruet povyshenie gibkosti vsledstvie soedineniya modulej yadra. 10.4.1 Bolee detal'noe rassmotrenie potokov Pajk opisyvaet realizaciyu mul'tipleksnyh virtual'nyh terminalov, ispol'- zuyushchuyu potoki (sm. [Pike 84]). Pol'zovatel' vidit neskol'ko virtual'nyh ter- minalov, kazhdyj iz kotoryh zanimaet otdel'noe okno na ekrane fizicheskogo terminala. Hotya v stat'e Pajka rassmatrivaetsya shema dlya intellektual'nyh graficheskih terminalov, ona rabotala by i dlya terminalov vvoda-vyvoda tozhe; kazhdoe okno zanimalo by celyj ekran i pol'zovatel' dlya pereklyucheniya virtu- al'nyh okon nabiral by posledovatel'nost' upravlyayushchih klavish. +---------+ +---------+ +-----------------+ Uroven' | shell 1 | | shell 2 | | mpx | pol'zovatelya +---------+ +---------+ +-----------------+ ---------------+---------------+-----------+---+-------+---- Uroven' yadra | ^ | ^ +--+ ^ | ^ | ^ | | | | | +--+ | | | | | | | | | | | | | | v | v | so- v | v | so- | | termi- +-+++ termi- +-+++ ob-+-+++ +-+++ob- | | nal'naya | | | nal'naya | | | shche-| | | | | |shche- | | liniya +++-+ liniya +++-+ niya+++-+ +++-+niya | | | ^ +-----------+-^------+ ^ | ^ | | | | | +---------+-+--------+ | | | | | | | | | | +-----------+ | | | v | v | v | v +-----------+ v | +-+++-+++ +-+++-+++ +-+++ psevdo- | | | | | | | | | | psevdo- | | | termi- +++-+++-+ +++-+++-+ termi- +-+-+ nal'naya | ^ | ^ | ^ | ^ nal'naya termi- para 1 | +-+ | | +-+ | para 2 nal'nyj +-----+ +-----+ drajver Risunok 10.23. Otobrazhenie virtual'nyh okon na ekrane fizi- cheskogo terminala Na Risunke 10.23 pokazana shema raspolozheniya processov i modulej yadra. Pol'zovatel' vyzyvaet process mpx, kontroliruyushchij rabotu fizicheskogo termi- nala. Mpx chitaet dannye iz linii fizicheskogo terminala i zhdet ob®yavleniya ob upravlyayushchih sobytiyah, takih kak sozdanie novogo okna, pereklyuchenie upravle- niya na drugoe okno, udalenie okna i t.p. Kogda mpx poluchaet uvedomlenie o tom, chto pol'zovatelyu nuzhno sozdat' no- voe okno, on sozdaet process, upravlyayushchij novym oknom, i podderzhivaet svyaz' s nim cherez psevdoterminal. Psevdoterminal - eto programmnoe ustrojstvo, ra- botayushchee po principu pary: vyhodnye dannye, napravlyaemye k odnoj sostavlyayu- shchej pary, posylayutsya na vhod drugoj sostavlyayushchej; vhodnye dannye posylayutsya tomu modulyu potoka, kotoryj raspolozhen vyshe po techeniyu. Dlya togo, chtoby otk- ryt' okno (Risunok 10.24), mpx naznachaet psevdoterminal'nuyu paru i otkryvaet odnu iz sostavlyayushchih pary, napravlyaya potok k nej (otkrytie drajvera sluzhit garantiej togo, chto psevdoterminal'naya para ne byla vybrana ran'she). Mpx vetvitsya i novyj process otkryvaet druguyu sostavlyayushchuyu psevdoterminal'noj 324 +----------------------------------------------------------------+ | /* predpolozhim, chto deskriptory fajlov 0 i 1 uzhe otnosyatsya k | | fizicheskomu terminalu */ | | dlya(;;) /* cikl */ | | { | | vybrat'(vvod); /* zhdat' vvoda iz kakoj-libo linii */ | | prochitat' dannye, vvedennye iz linii; | | pereklyuchit'(liniyu s vvodimymi dannymi) | | { | | esli vybran fizicheskij terminal: /* dannye vvodyatsya po li- | | nii fizicheskogo termi- | | nala */ | | esli(schitana upravlyayushchaya komanda) /* naprimer, sozdanie | | novogo okna */ | | { | | otkryt' svobodnyj psevdoterminal; | | pojti po vetvi novogo processa: | | esli(process roditel'skij) | | { | | vydvinut' interfejs soobshchenij v storonu mpx; | | prodolzhit'; /* vozvrat v cikl "dlya" */ | | } | | /* process-potomok */ | | zakryt' nenuzhnye deskriptory fajlov; | | otkryt' drugoj psevdoterminal iz pary, vybrat' stdin, | | stdout, stderr; | | vydvinut' strokovyj interfejs terminala; | | zapustit' shell; /* podobno virtual'nomu terminalu */| | } | | /* "obychnye" dannye, poyavivshiesya cherez virtual'nyj terminal */ | | demul'tipleksirovat' schityvanie dannyh s fizicheskogo ter-| | minala, snyat' zagolovki i vesti zapis' na sootvetstvuyu- | | shchij psevdoterminal; | | prodolzhit'; /* vozvrat v cikl "dlya" */ | | | | esli vybran logicheskij terminal: /* virtual'nyj terminal | | svyazan s oknom */ | | zakodirovat' zagolovok, ukazyvayushchij naznachenie informacii| | okna; | | perepisat' zagolovok i informaciyu na fizicheskij terminal;| | prodolzhit'; /* vozvrat v cikl "dlya" */ | | } | | } | +----------------------------------------------------------------+ Risunok 10.24. Psevdoprogramma mul'tipleksirovaniya okon pary. Mpx vydvigaet modul' upravleniya soobshcheniyami v psevdoterminal'nyj po- tok, chtoby preobrazovyvat' upravlyayushchie soobshcheniya v informacionnye (ob etom v sleduyushchem paragrafe), a porozhdennyj process pomeshchaet v psevdoterminal'nyj potok modul' strokovogo interfejsa pered zapuskom shell'a. |tot shell teper' vypolnyaetsya na virtual'nom terminale; dlya pol'zovatelya virtual'nyj terminal neotlichim ot fizicheskogo. Process mpx yavlyaetsya mul'tipleksorom, napravlyayushchim vyvod dannyh s virtu- al'nyh terminalov na fizicheskij terminal i demul'tipleksiruyushchim vvod dannyh s fizicheskogo terminala na podhodyashchij virtual'nyj. Mpx zhdet postupleniya dan- nyh po lyuboj iz linij, ispol'zuya sistemnuyu funkciyu select. Kogda dannye pos- tupayut ot fizicheskogo terminala, mpx reshaet vopros, yavlyayutsya li postupivshie 325 dannye upravlyayushchim soobshcheniem, izveshchayushchim o neobhodimosti sozdaniya novogo okna ili udaleniya starogo, ili zhe eto informacionnoe soobshchenie, kotoroe ne- obhodimo razoslat' processam, schityvayushchim informaciyu s virtual'nogo termina- la. V poslednem sluchae dannye imeyut zagolovok, identificiruyushchij tot virtu- al'nyj terminal, k kotoromu oni otnosyatsya; mpx stiraet zagolovok s soobshcheniya i perepisyvaet dannye v sootvetstvuyushchij psevdoterminal'nyj potok. Drajver psevdoterminala otpravlyaet dannye cherez strokovyj interfejs terminala pro- cessam, osushchestvlyayushchim chtenie. Obratnaya procedura imeet mesto, kogda process vedet zapis' na virtual'nyj terminal; mpx prisoedinyaet zagolovok k dannym, informiruya fizicheskij terminal, dlya vyvoda v kakoe iz okon prednaznacheny eti dannye. Esli process vyzyvaet funkciyu ioctl s virtual'nogo terminala, strokovyj interfejs terminala zadaet neobhodimye ustanovki terminala dlya ego virtual'- noj linii; dlya kazhdogo iz virtual'nyh terminalov ustanovki mogut byt' raz- lichnymi. Odnako, na fizicheskij terminal dolzhna byt' poslana i koe-kakaya in- formaciya, zavisyashchaya ot tipa ustrojstva. Modul' upravleniya soobshcheniyami preob- razuet upravlyayushchie soobshcheniya, generiruemye funkciej ioctl, v informacionnye soobshcheniya, prednaznachennye dlya chteniya i zapisi ih processom mpx, i eti soob- shcheniya peredayutsya na fizicheskoe ustrojstvo. 10.4.2 Analiz potokov Richi upominaet o tom, chto im byla predprinyata popytka sozdaniya potokov tol'ko s procedurami "vyvoda" ili tol'ko s procedurami obsluzhivaniya. Odnako, procedura obsluzhivaniya neobhodima dlya upravleniya potokami dannyh, tak kak moduli dolzhny inogda stavit' dannye v ochered', esli sosednie moduli na vremya zakryty dlya priema dannyh. Procedura "vyvoda" tak zhe neobhodima, poskol'ku dannye dolzhny inogda dostavlyat'sya v sosednie moduli nezamedlitel'no. Napri- mer, strokovomu interfejsu terminala nuzhno vesti eho-soprovozhdenie vvoda dannyh na terminale v tempe s processom. Sistemnaya funkciya write mogla by zapuskat' proceduru "vyvoda" dlya sleduyushchej ocheredi neposredstvenno, ta, v svoyu ochered', vyzyvala by proceduru "vyvoda" dlya sleduyushchej ocheredi i tak da- lee, ne nuzhdayas' v mehanizme dispetcherizacii. Process priostanovilsya by v sluchae perepolneniya ocheredej dlya vyvoda. Odnako, so storony vvoda moduli ne mogut priostanavlivat'sya, poskol'ku ih vypolnenie vyzyvaetsya programmoj ob- rabotki preryvanij, inache byl by priostanovlen sovershenno bezobidnyj pro- cess. Svyaz' mezhdu modulyami ne dolzhna byt' simmetrichnoj v napravleniyah vvoda i vyvoda, hotya eto i delaet shemu menee izyashchnoj. Takzhe bylo by zhelatel'no realizovat' kazhdyj modul' v vide otdel'nogo processa, no ispol'zovanie bol'shogo kolichestva modulej privelo by k perepol- neniyu tablicy processov. Moduli nadelyayutsya special'nym mehanizmom dispetche- rizacii - programmnym preryvaniem, nezavisimym ot obychnogo planirovshchika pro- cessov. Po etoj prichine moduli ne mogut priostanavlivat' svoe vypolnenie, tak kak oni priostanavlivali by tem samym proizvol'nyj process (tot, kotoryj prervan). Moduli dolzhny hranit' vnutri sebya informaciyu o svoem sostoyanii, chto delaet lezhashchie v ih osnove programmy bolee gromozdkimi, chem esli by pri- ostanovka vypolneniya byla razreshena. V realizacii potokov mozhno vydelit' neskol'ko otklonenij ili nesootvets- tvij: * Uchet resursov processa v potokah zatrudnyaetsya, poskol'ku modulyam neobya- zatel'no vypolnyat'sya v kontekste processa, ispol'zuyushchego potok. Oshibochno predpolagat', chto vse processy odinakovo ispol'zuyut moduli potokov, pos- kol'ku odnim processam mozhet potrebovat'sya ispol'zovanie slozhnyh setevyh protokolov, togda kak drugie mogut ispol'zovat' prostye strokovye inter- fejsy. * Pol'zovateli imeyut vozmozhnost' perevodit' terminal'nyj drajver v rezhim bez obrabotki, v kotorom funkciya read vozvrashchaet upravlenie cherez korot- kij promezhutok vremeni v sluchae otsutstviya dannyh (naprimer, esli 326 newtty.c_cc[VMIN] = 0 na Risunke 10.17). |tu osobennost' slozhno realizo- vat' v potokovoj srede bez podklyucheniya special'noj programmy na urovne zagolovka potoka. * Potoki vystupayut sredstvami linejnoj svyazi i ne mogut pozvolit' proizvo- dit' s legkost'yu mul'tipleksirovanie na urovne yadra. V primere ispol'zo- vaniya okon, rassmotrennom v predydushchem razdele, vypolnyalos' mul'tiplek- sirovanie na urovne pol'zovatel'skogo processa. Nesmotrya na eti nesootvetstviya, s potokami svyazyvayutsya bol'shie nadezhdy v sovershenstvovanii razrabotki modulej drajvera. .te1 10.5 VYVODY Dannaya glava predstavlyaet soboj obzor drajverov ustrojstv v sisteme UNIX. Ustrojstva mogut byt' libo blochnogo, libo simvol'nogo tipa; interfejs mezhdu ustrojstvami i ostal'noj chast'yu yadra opredelyaetsya tipom ustrojstv. In- terfejsom dlya ustrojstv blochnogo tipa vystupaet tablica klyuchej ustrojstv vvoda-vyvoda blokami, sostoyashchaya iz tochek vhoda, sootvetstvuyushchih proceduram otkrytiya i zakrytiya ustrojstv i strategicheskoj procedure. Strategicheskaya procedura upravlyaet peredachej dannyh ot i k ustrojstvu blochnogo tipa. Inter- fejsom dlya ustrojstv simvol'nogo tipa vystupaet tablica klyuchej ustrojstv po- simvol'nogo vvoda-vyvoda, kotoraya sostoit iz tochek vhoda, sootvetstvuyushchih proceduram otkrytiya i zakrytiya ustrojstva, chteniya, zapisi i procedure ioctl. Sistemnaya funkciya ioctl ispol'zuet pri obrashchenii k ustrojstvam simvol'nogo tipa svoj sobstvennyj interfejs, kotoryj pozvolyaet osushchestvlyat' peredachu up- ravlyayushchej informacii mezhdu processami i ustrojstvami. Po poluchenii preryva- niya ot ustrojstva yadro vyzyvaet programmu obrabotki sootvetstvuyushchego prery- vaniya, opirayas' na informaciyu, hranyashchuyusya v tablice vektorov preryvanij, i na parametry, soobshchennye ustrojstvom, ot kotorogo postupilo preryvanie. Diskovye drajvery prevrashchayut nomera logicheskih blokov, ispol'zuemye faj- lovoj sistemoj, v fizicheskie adresa na diske. Blochnyj interfejs daet vozmozh- nost' yadru buferizovat' dannye. Vzaimodejstvie bez obrabotki uskoryaet vvod-vyvod na disk, no ignoriruet bufernyj kesh, uvelichivaya tem samym shansy razrushit' fajlovuyu sistemu. Terminal'nye drajvery osushchestvlyayut neposredstvennoe vzaimodejstvie s pol'zovatelyami. YAdro svyazyvaet s kazhdym terminalom tri simvol'nyh spiska, odin dlya nestrukturirovannogo vvoda s klaviatury, odin dlya vvoda s obrabot- koj simvolov stiraniya, udaleniya i vozvrata karetki i odin dlya vyvoda. Sis- temnaya funkciya ioctl daet processam vozmozhnost' sledit' za tem, kak yadro ob- rabatyvaet vvodimye dannye, perevodya terminal v kanonicheskij rezhim ili usta- navlivaya znacheniya razlichnyh parametrov dlya rezhima bez obrabotki simvolov. Getty-process otkryvaet terminal'nye linii i zhdet svyazi: on formiruet gruppu processov vo glave s registracionnym shell'om, inicializiruet s pomoshch'yu fun- kcii ioctl parametry terminala i obrashchaetsya k pol'zovatelyu s predlozheniem zaregistrirovat'sya. Ustanovlennyj takim obrazom operatorskij terminal posy- laet processam v gruppe signaly v otvet na vozniknovenie takih sobytij, kak "zavisanie" pol'zovatelya ili nazhatie im klavishi preryvaniya. Potoki vystupayut sredstvom povysheniya modul'nosti postroeniya drajverov ustrojstv i protokolov. Potok - eto polnodupleksnaya svyaz' mezhdu processami i drajverami ustrojstv, kotoraya mozhet vklyuchat' v sebya strokovye interfejsy i protokoly dlya promezhutochnoj obrabotki dannyh. Moduli potokov harakterizuyutsya chetko opredelennym vzaimodejstviem i gibkost'yu, pozvolyayushchej ispol'zovat' ih v sochetanii s drugimi modulyami. |ta gibkost' imeet osoboe znachenie dlya sete- vyh protokolov i drajverov. .te1 10.6 UPRAZHNENIYA *1. Predpolozhim, chto v sisteme imeyutsya dva fajla ustrojstv s odnimi i temi zhe starshim i mladshim nomerami, pri tom, chto oba ustrojstva - simvol'no- 327 go tipa. Esli dva processa zhelayut odnovremenno otkryt' fizicheskoe ust- rojstvo, ne budet nikakoj raznicy, otkryvayut li oni odin i tot zhe fajl ustrojstva ili zhe raznye fajly. CHto proizojdet, kogda oni stanut zakry- vat' ustrojstvo ? *2. Vspomnim iz glavy 5, chto sistemnoj funkcii mknod trebuetsya razreshenie superpol'zovatelya na sozdanie novogo special'nogo fajla ustrojstva. Es- li dostup k ustrojstvu upravlyaetsya pravami dostupa k fajlu, pochemu fun- kcii mknod nuzhno razreshenie superpol'zovatelya ? 3. Napishite programmu, kotoraya proveryaet, chto fajlovye sistemy na diske ne perekryvayutsya. |toj programme potrebovalis' by dva argumenta: fajl ust- rojstva, predstavlyayushchij diskovyj tom, i deskriptor fajla, otkuda berut- sya nomera sektorov i ih razmer dlya diska dannogo tipa. Dlya proverki ot- sutstviya perekrytij etoj programme ponadobilas' by informaciya iz super- blokov. Budet li takaya programma vsegda pravil'noj ? 4. Programma mkfs inicializiruet fajlovuyu sistemu na diske putem sozdaniya superbloka, vydeleniya mesta dlya spiska indeksov, vklyucheniya vseh infor- macionnyh blokov v svyazannyj spisok i sozdaniya kornevogo kataloga. Kak by vy napisali programmu mkfs ? Kak izmenitsya eta programma pri nalichii tablicy soderzhimogo toma ? Kakim obrazom sleduet inicializirovat' tab- licu soderzhimogo toma ? 5. Programmy mkfs i fsck (glava 5) yavlyayutsya programmami pol'zovatel'skogo urovnya, a ne chast'yu yadra. Prokommentirujte eto. 6. Predpolozhim, chto programmistu nuzhno razrabotat' bazu dannyh, rabotayushchuyu v srede OS UNIX. Programmy bazy dannyh vypolnyayutsya na pol'zovatel'skom urovne, a ne v sostave yadra. Kak sistema upravleniya bazoj dannyh budet vzaimodejstvovat' s diskom ? Podumajte nad sleduyushchimi voprosami: * Ispol'zovanie standartnogo interfejsa fajlovoj sistemy vmesto nepos- redstvennoj raboty s nestrukturirovannymi dannymi na diske, * Potrebnost' v bystrodejstvii, * Neobhodimost' znat', kogda fakticheski dannye raspolagayutsya na diske, * Razmer bazy dannyh: dolzhna li ona pomeshchat'sya v odnoj fajlovoj siste- me, zanimat' soboj ves' diskovyj tom ili zhe raspolagat'sya na neskol'- kih diskovyh tomah ? 7. YAdro sistemy UNIX po umolchaniyu predpolagaet, chto fajlovaya sistema ras- polagaetsya na ideal'nyh diskah. Odnako, diski mogut soderzhat' oshibki, kotorye delayut neprigodnymi i vyvodyat iz stroya opredelennye sektora, nesmotrya na to, chto ostal'naya chast' diska ostalas' "prigodnoj". Kak diskovomu drajveru (ili intellektual'nomu kontrolleru diska) sleduet uchityvat' nebol'shoe kolichestvo plohih sektorov. Kak eto otrazilos' by na proizvoditel'nosti sistemy ? 8. Pri montirovanii fajlovoj sistemy yadro zapuskaet proceduru otkrytiya dlya dannogo drajvera, no pozzhe osvobozhdaet indeks special'nogo fajla ust- rojstva po zavershenii vypolneniya vyzova sistemnoj funkcii mount. Pri demontirovanii fajlovoj sistemy yadro obrashchaetsya k indeksu special'nogo fajla ustrojstva, zapuskaet proceduru zakrytiya dlya dannogo drajvera i vnov' osvobozhdaet indeks. Sravnite etu posledovatel'nost' operacij nad indeksom, a takzhe obrashchenij k proceduram otkrytiya i zakrytiya drajvera, s posledovatel'nost'yu dejstvij, sovershaemyh pri otkryvanii i zakryvanii ustrojstva blochnogo tipa. Prokommentirujte rezul'taty sravneniya. 9. Vypolnite programmu, privedennuyu na Risunke 10.14, no naprav'te vyvod dannyh v fajl. Sravnite soderzhimoe fajla s soderzhimym vyvodnogo potoka, kogda vyvod idet na terminal. Vam pridetsya prervat' processy, chtoby os- tanovit' ih; tol'ko prezhde pust' oni poluchat dostatochno bol'shoe koli- chestvo dannyh. CHto proizojdet, esli vyzov funkcii write v programme za- menit' na printf(output); 10. CHto proizojdet, esli pol'zovatel' popytaetsya vypolnit' redaktirovanie teksta na fone programmy: ed file & Obosnujte otvet. 328 11. K fajlam terminalov obychno ustanavlivayutsya sleduyushchie prava dostupa crw--w--w- 2 mjb lus 33,11 Oct 25 20:27 tty61 pri vhode pol'zovatelya v sistemu. To est', chtenie i zapis' razreshayutsya pol'zovatelyu s imenem "mjb", a ostal'nym pol'zovatelyam razreshena tol'ko zapis'. Pochemu ? 12. Predpolozhim, chto vam izvestno imya fajla terminala vashego tovarishcha. Na- pishite programmu zapisi soobshchenij s vashego terminala na terminal vashego tovarishcha. Kakaya eshche informaciya vam nuzhna, chtoby zakodirovat' priemlemoe vosproizvedenie obychnoj komandy write ? 13. Vypolnite komandu stty: esli parametry ne ukazany, ona vybiraet znache- niya ustanovok terminala i soobshchaet ih pol'zovatelyu. V protivnom sluchae pol'zovatel' mozhet v interaktivnom rezhime sdelat' razlichnye ustanovki sam. 14. Napishite elementarnyj strokovyj interfejs, zapisyvayushchij identifikator mashiny v nachale kazhdoj stroki vyvodnogo potoka. 15. V kanonicheskom rezhime pol'zovatel' mozhet na vremya priostanovit' vyvod dannyh na terminal, nazhav posledovatel'nost' klavish , i prodol- zhit' vyvod, nazhav . Kak v standartnom strokovom interfejse rea- lizuetsya eta osobennost' ? *16. Process nachal'noj zagruzki porozhdaet getty-process dlya kazhdoj termi- nal'noj linii v sisteme. CHto proizoshlo by, esli by dlya odnogo i togo zhe terminala sushchestvovali by odnovremenno dva getty-processa, ozhidayushchie registracii pol'zovatelya ? Mozhet li yadro pomeshat' etomu ? 17. Pust' komandnyj processor shell realizovan takim obrazom, chto on "igno- riruet" konec fajla i prodolzhaet schityvat' dannye iz standartnogo vvo- da. CHto proizoshlo by, esli by pol'zovatel' (v registracionnom shell'e) ugadal konec fajla i prodolzhil vvod s klaviatury ? *18. Predpolozhim, chto process schityvaet dannye s operatorskogo terminala, no ignoriruet ili ulavlivaet signaly o "zavisanii". CHto proizojdet, kogda process prodolzhit schityvat' dannye s operatorskogo terminala posle za- visaniya ? 19. Programma getty-processa neset otvetstvennost' za otkrytie terminal'noj linii, a programma login - za proverku registracionnyh imen i parolej. Kakie preimushchestva v tom, chto eti funkcii vypolnyayutsya otdel'nymi prog- rammami ? 20. Rassmotrim dva metoda realizacii drajvera kosvennogo terminala ("/dev /tty"), opisannye v razdele 10.3.6. Kakie razlichiya mezhdu nimi chuvstvuet pol'zovatel' ? (Sovet: podumajte o sistemnyh funkciyah stat i fstat). 21. Razrabotajte metod planirovaniya vypolneniya modulej potoka, v sootvetst- vii s kotorym yadro imeet v svoem sostave special'nyj process, vypolnyayu- shchij procedury obsluzhivaniya modulej togda, kogda vypolnenie etih proce- dur zaplanirovano. *22. Razrabotajte shemu postroeniya virtual'nyh terminalov (okon) s ispol'zo- vaniem tradicionnyh (ne potokovyh) drajverov. *23. Razrabotajte metod realizacii virtual'nyh terminalov s ispol'zovaniem potokov, v kotorom mul'tipleksirovaniem vvoda-vyvoda mezhdu virtual'nym i fizicheskim terminalami zanimalsya by odin iz modulej yadra, a ne pol'- zovatel'skij process. Opishite mehanizm soedineniya potokov so svertkoj i razvertkoj. CHto luchshe: vklyuchit' modul', osushchestvlyayushchij mul'tipleksiro- vanie, v sostav yadra ili postroit' ego kak pol'zovatel'skij process ? 24. Komanda ps soobshchaet interesnuyu informaciyu ob aktivnosti processov v ra- botayushchej sisteme. V tradicionnyh realizaciyah ps schityvaet informaciyu iz tablicy processov, pryamo iz pamyati yadra. Takoj metod ne sovsem udoben v srede razrabotki, kogda razmer zapisej tablicy processov menyaetsya i ko- mande ps stanovitsya nelegko obnaruzhit' v tablice sootvetstvuyushchie polya. Razrabotajte drajver, nechuvstvitel'nyj k izmeneniyam sredy. 329