GLAVA 13. RASPREDELENNYE SISTEMY V predydushchej glave nami byli rassmotreny sil'nosvyazannye mnogoprocessor- nye sistemy s obshchej pamyat'yu, obshchimi strukturami dannyh yadra i obshchim pulom, iz kotorogo processy vyzyvayutsya na vypolnenie. CHasto, odnako, byvaet zhela- tel'no v celyah obespecheniya sovmestnogo ispol'zovaniya resursov raspredelyat' processory takim obrazom, chtoby oni byli avtonomny ot operacionnoj sredy i uslovij ekspluatacii. Pust', naprimer, pol'zovatelyu personal'noj |VM nuzhno obratit'sya k fajlam, nahodyashchimsya na bolee krupnoj mashine, no sohranit' pri etom kontrol' nad personal'noj |VM. Nesmotrya na to, chto otdel'nye programmy, takie kak uucp, podderzhivayut peredachu fajlov po seti i drugie setevye funk- cii, ih ispol'zovanie ne budet skryto ot pol'zovatelya, poskol'ku pol'zova- tel' znaet o tom, chto on rabotaet v seti. Krome togo, nado zametit', chto programmy, podobnye tekstovym redaktoram, s udalennymi fajlami, kak s obych- nymi, ne rabotayut. Pol'zovateli dolzhny raspolagat' standartnym naborom funk- cij sistemy UNIX i, za isklyucheniem vozmozhnoj poteri v bystrodejstvii, ne dolzhny oshchushchat' peresecheniya mashinnyh granic. Tak, naprimer, rabota sistemnyh funkcij open i read s fajlami na udalennyh mashinah ne dolzhna otlichat'sya ot ih raboty s fajlami, prinadlezhashchimi lokal'nym sistemam. Arhitektura raspredelennoj sistemy predstavlena na Risunke 13.1. Kazhdyj komp'yuter, pokazannyj na risunke, yavlyaetsya avtonomnym modulem, sostoyashchim iz CP, pamyati i periferijnyh ustrojstv. Sootvetstvie modeli ne narushaetsya dazhe nesmotrya na to, chto komp'yuter ne raspolagaet lokal'noj fajlovoj sistemoj: on dolzhen imet' periferijnye ustrojstva dlya svyazi s drugimi mashinami, a vse prinadlezhashchie emu fajly mogut raspolagat'sya i na inom komp'yutere. Fizicheskaya pamyat', dostupnaya kazhdoj mashine, ne zavisit ot processov, vypolnyaemyh na drugih mashinah. |toj osobennost'yu raspredelennye sistemy otlichayutsya ot sil'- nosvyazannyh mnogoprocessornyh sistem, rassmotrennyh v predydushchej glave. So- otvetstvenno, i yadro +-----------------------------+ +-----------------------------+ | +------------+ | | +------------+ | | | Processory | | | | Processory | | | +-----+------+ | | +-----+------+ | | ----+-------+------+------- | | ----+-------+------+------- | | +---+----+ +-------+------+ | | +---+----+ +-------+------+ | | | Pamyat' | | Periferijnye | | | | Pamyat' | | Periferijnye | | | | | | ustrojstva | | | | | | ustrojstva | | | +--------+ +--------------+ +-++-+ +--------+ +--------------+ | +-----------------------------+ ++ +-----------------------------+ | +-------------+---------------+ | +------------+ | | | Processory | | | +-----+------+ | | ----+-------+------+------- | | +---+----+ +-------+------+ | | | Pamyat' | | Periferijnye | | | | | | ustrojstva | | | +--------+ +--------------+ | +-----------------------------+ Risunok 13.1. Model' sistemy s raspredelennoj arhitekturoj 381 sistemy na kazhdoj mashine funkcioniruet nezavisimo ot vneshnih uslovij eksplu- atacii raspredelennoj sredy. Raspredelennye sistemy, horosho opisannye v literature, tradicionno de- lyatsya na sleduyushchie kategorii: * periferijnye sistemy, predstavlyayushchie soboj gruppy mashin, otlichayushchihsya yarkovyrazhennoj obshchnost'yu i svyazannyh s odnoj (obychno bolee krupnoj) ma- shinoj. Periferijnye processory delyat svoyu nagruzku s central'nym proces- sorom i pereadresovyvayut emu vse obrashcheniya k operacionnoj sisteme. Cel' periferijnoj sistemy sostoit v uvelichenii obshchej proizvoditel'nosti seti i v predostavlenii vozmozhnosti vydeleniya processora odnomu processu v operacionnoj srede UNIX. Sistema zapuskaetsya kak otdel'nyj modul'; v ot- lichie ot drugih modelej raspredelennyh sistem, periferijnye sistemy ne obladayut real'noj avtonomiej, za isklyucheniem sluchaev, svyazannyh s dis- petcherizaciej processov i raspredeleniem lokal'noj pamyati. * raspredelennye sistemy tipa "Newcastle", pozvolyayushchie osushchestvlyat' dis- tancionnuyu svyaz' po imenam udalennyh fajlov v biblioteke (nazvanie vzyato iz stat'i "The Newcastle Connection" - sm. [Brownbridge 82]). Udalennye fajly imeyut specifikaciyu (sostavnoe imya), kotoraya v ukazanii puti poiska soderzhit special'nye simvoly ili dopolnitel'nuyu komponentu imeni, pred- shestvuyushchuyu kornyu fajlovoj sistemy. Realizaciya etogo metoda ne predpola- gaet vneseniya izmenenij v yadro sistemy, vsledstvie etogo on bolee prost, chem drugie metody, rassmatrivaemye v etoj glave, no menee gibok. * absolyutno "prozrachnye" raspredelennye sistemy, v kotoryh dlya obrashcheniya k fajlam, raspolozhennym na drugih mashinah, dostatochno ukazaniya ih standar- tnyh sostavnyh imen; raspoznavanie etih fajlov kak udalennyh vhodit v obyazannosti yadra. Marshruty poiska fajlov, ukazannye v ih sostavnyh ime- nah, peresekayut mashinnye granicy v tochkah montirovaniya, skol'ko by takih tochek ni bylo sformirovano pri montirovanii fajlovyh sistem na diskah. V nastoyashchej glave my rassmotrim arhitekturu kazhdoj modeli; vse privodi- mye svedeniya baziruyutsya ne na rezul'tatah konkretnyh razrabotok, a na infor- macii, publikovavshejsya v razlichnyh tehnicheskih stat'yah. Pri etom predpolaga- etsya, chto zabota ob adresacii, marshrutizacii, upravlenii potokami, obnaruzhe- nii i ispravlenii oshibok vozlagaetsya na moduli protokolov i drajvery ustroj- stv, drugimi slovami, chto kazhdaya model' ne zavisit ot ispol'zuemoj seti. Primery ispol'zovaniya sistemnyh funkcij, privodimye v sleduyushchem razdele dlya periferijnyh sistem, rabotayut analogichnym obrazom i dlya sistem tipa Newcastle i dlya absolyutno "prozrachnyh" sistem, o kotoryh pojdet rech' pozzhe; poetomu v detalyah my ih rassmotrim odin raz, a v razdelah, posvyashchennyh dru- gim tipam sistem, ostanovimsya v osnovnom na osobennostyah, otlichayushchih eti mo- deli ot vseh ostal'nyh. 13.1 PERIFERIJNYE PROCESSORY Arhitektura periferijnoj sistemy pokazana na Risunke 13.2. Cel' takoj konfiguracii sostoit v povyshenii obshchej proizvoditel'nosti seti za schet pere- raspredeleniya vypolnyaemyh processov mezhdu central'nym i periferijnymi pro- cessorami. U kazhdogo iz periferijnyh processorov net v rasporyazhenii drugih lokal'nyh periferijnyh ustrojstv, krome teh, kotorye emu nuzhny dlya svyazi s central'nym processorom. Fajlovaya sistema i vse ustrojstva nahodyatsya v ras- poryazhenii central'nogo processora. Predpolozhim, chto vse pol'zovatel'skie processy ispolnyayutsya na periferijnom processore i mezhdu periferijnymi pro- cessorami ne peremeshchayutsya; buduchi odnazhdy peredany processoru, oni prebyvayut na nem do momenta zaversheniya. Periferijnyj processor soderzhit oblegchennyj variant operacionnoj sistemy, prednaznachennyj dlya obrabotki lokal'nyh obra- shchenij k sisteme, upravleniya preryvaniyami, raspredeleniya pamyati, raboty s se- tevymi protokolami i s drajverom ustrojstva svyazi s central'nym processorom. 382 Pri inicializacii sistemy na central'nom processore yadro po liniyam svyazi zagruzhaet na kazhdom iz periferijnyh processorov lokal'nuyu operacionnuyu sis- temu. Lyuboj vypolnyaemyj na periferii process svyazan s processom-sputnikom, prinadlezhashchim central'nomu processoru (sm. [Birrell 84]); kogda process, protekayushchij na periferijnom processore, vyzyvaet sistemnuyu funkciyu, kotoraya nuzhdaetsya v uslugah isklyuchitel'no central'nogo processora, periferijnyj pro- cess svyazyvaetsya so svoim sputnikom i zapros postupaet na obrabotku na cent- ral'nyj processor. Process-sputnik ispolnyaet sistemnuyu funkciyu i posylaet rezul'taty obratno na periferijnyj processor. Vzaimootnosheniya periferijnogo processa so svoim sputnikom pohozhi na otnosheniya klienta i servera, podrobno rassmotrennye nami v glave 11: periferijnyj process vystupaet klientom svoe- go sputnika, podderzhivayushchego funkcii raboty s fajlovoj sistemoj. Pri etom udalennyj process-server imeet tol'ko odnogo klienta. V razdele 13.4 my ras- smotrim processy-servery, imeyushchie neskol'ko klientov. Central'nyj processor Periferijnyj processor +-----------------------------+ +-----------------------------+ | +------------+ | | +------------+ | | | Processory | | | | Processory | | | +-----+------+ | | +-----+------+ | | ----+-------+------+------- | | ----+-------+-------------- | | +---+----+ +-------+------+ | | +---+----+ | | | Pamyat' | | Periferijnye | | | | Pamyat' | | | | | | ustrojstva | | | | | | | +--------+ +--------------+ +-++-+ +--------+ | +-----------------------------+ ++ +-----------------------------+ | +-------------+---------------+ | +------------+ | Periferijnyj | | Processory | | processor | +-----+------+ | | ----+-------+-------------- | | +---+----+ | | | Pamyat' | | | | | | | +--------+ | +-----------------------------+ Risunok 13.2. Konfiguraciya periferijnoj sistemy Kogda periferijnyj process vyzyvaet sistemnuyu funkciyu, kotoruyu mozhno ob- rabotat' lokal'no, yadru net nadobnosti posylat' zapros processu-sputniku. Tak, naprimer, v celyah polucheniya dopolnitel'noj pamyati process mozhet vyzvat' dlya lokal'nogo ispolneniya funkciyu sbrk. Odnako, esli trebuyutsya uslugi cent- ral'nogo processora, naprimer, chtoby otkryt' fajl, yadro kodiruet informaciyu o peredavaemyh vyzvannoj funkcii parametrah i usloviyah vypolneniya processa v nekoe soobshchenie, posylaemoe processu-sputniku (Risunok 13.3). Soobshchenie vklyuchaet v sebya priznak, iz kotorogo sleduet, chto sistemnaya funkciya vypolnya- etsya processom-sputnikom ot imeni klienta, peredavaemye funkcii parametry i dannye o srede vypolneniya processa (naprimer, pol'zovatel'skij i gruppovoj kody identifikacii), kotorye dlya raznyh funkcij razlichny. Ostavshayasya chast' soobshcheniya predstavlyaet soboj dannye peremennoj dliny (naprimer, sostavnoe imya fajla ili dannye, prednaznachennye dlya zapisi funkciej write). Process-sputnik zhdet postupleniya zaprosov ot periferijnogo processa; pri poluchenii zaprosa on dekodiruet soobshchenie, opredelyaet tip sistemnoj funkcii, ispolnyaet ee i preobrazuet rezul'taty v otvet, posylaemyj periferijnomu pro- cessu. Otvet, pomimo rezul'tatov vypolneniya sistemnoj funkcii, vklyuchaet v sebya soobshchenie ob 383 Format soobshcheniya +----------------+----------+---------------+--------------------+ | Priznak vyzova |Parametry |Dannye o srede | Sostavnoe imya | | sistemnoj funk-|sistemnoj |vypolneniya pro-|------- ili ------| | cii |funkcii |cessa | potok dannyh | +----------------+----------+---------------+--------------------+ Otvet +------------+-----------+---------+---------------------+ | Rezul'taty | Soobshchenie | Nomer | | | vypolneniya | ob oshibke | signala |---- Potok dannyh ---| | sistemnoj | | | | | funkcii | | | | +------------+-----------+---------+---------------------+ Risunok 13.3. Formaty soobshchenij oshibke (esli ona imela mesto), nomer signala i massiv dannyh peremennoj dli- ny, soderzhashchij, naprimer, informaciyu, prochitannuyu iz fajla. Periferijnyj process priostanavlivaetsya do polucheniya otveta, poluchiv ego, proizvodit ras- shifrovku i peredaet rezul'taty pol'zovatelyu. Takova obshchaya shema obrabotki obrashchenij k operacionnoj sisteme; teper' perejdem k bolee detal'nomu rass- motreniyu otdel'nyh funkcij. Dlya togo, chtoby ob®yasnit', kakim obrazom rabotaet periferijnaya sistema, rassmotrim ryad funkcij: getppid, open, write, fork, exit i signal. Funkciya getppid dovol'no prosta, poskol'ku ona svyazana s prostymi formami zaprosa i otveta, kotorymi obmenivayutsya periferijnyj i central'nyj processory. YAdro na periferijnom processore formiruet soobshchenie, imeyushchee priznak, iz kotorogo sleduet, chto zaprashivaemoj funkciej yavlyaetsya funkciya getppid, i posylaet zapros central'nomu processoru. Process-sputnik na central'nom processore chitaet soobshchenie s periferijnogo processora, rasshifrovyvaet tip sistemnoj funkcii, ispolnyaet ee i poluchaet identifikator svoego roditelya. Zatem on formiruet otvet i peredaet ego periferijnomu processu, nahodyashchemusya v sosto- yanii ozhidaniya na drugom konce linii svyazi. Kogda periferijnyj processor po- luchaet otvet, on peredaet ego processu, vyzvavshemu sistemnuyu funkciyu getppid. Esli zhe periferijnyj process hranit dannye (takie, kak identifika- tor processa-roditelya) v lokal'noj pamyati, emu voobshche ne pridetsya svyazyvat'- sya so svoim sputnikom. Esli proizvoditsya obrashchenie k sistemnoj funkcii open, periferijnyj pro- cess posylaet svoemu sputniku sootvetstvuyushchee soobshchenie, kotoroe vklyuchaet imya fajla i drugie parametry. V sluchae uspeha process-sputnik vydelyaet in- deks i tochku vhoda v tablicu fajlov, otvodit zapis' v tablice pol'zovatel'- skih deskriptorov fajla v svoem prostranstve i vozvrashchaet deskriptor fajla periferijnomu processu. Vse eto vremya na drugom konce linii svyazi periferij- nyj process zhdet otveta. U nego v rasporyazhenii net nikakih struktur, kotorye hranili by informaciyu ob otkryvaemom fajle; vozvrashchaemyj funkciej open desk- riptor predstavlyaet soboj ukazatel' na zapis' v tablice pol'zovatel'skih deskriptorov fajla, prinadlezhashchej processu-sputniku. Rezul'taty vypolneniya funkcii pokazany na Risunke 13.4. Esli proizvoditsya obrashchenie k sistemnoj funkcii write, periferijnyj pro- cessor formiruet soobshchenie, sostoyashchee iz priznaka funkcii write, deskriptora fajla i ob®ema zapisyvaemyh dannyh. Zatem iz prostranstva periferijnogo pro- cessa on po linii svyazi kopiruet dannye processu-sputniku. Process-sputnik rasshifrovyvaet poluchennoe soobshchenie, chitaet dannye iz linii svyazi i zapisy- vaet ih v sootvetstvuyushchij fajl (v kachestve ukazatelya na indeks kotorogo i zapis' o kotorom v tablice fajlov ispol'zuetsya soderzhashchijsya v soobshchenii des- kriptor); vse ukazannye dejstviya vypolnyayutsya na central'nom processore. Po 384 Central'nyj processor Periferijnyj processor +--------------------------------------+ +---------------------+ | tablica | | | | pol'zo- | | | | vatel'- | | | | skih | | | | deskrip- | | | | tablica tablica torov | | | | indeksov fajlov fajla +--------+| | +---------+ | | +-----+ +-----+ +-----+ |Process-|----------| Process | | | | | | | | | |sputnik || | +---------+ | | +-----+ +-----+ +-----+ +-+------+| | | | | -+-+ | | ++- -+---+ | | | | +-----+ | +-----+ |+-----+ deskrip- | | | | | | +-+- -+-+| | tor fajla | | | | +-----+ +-----+ +-----+ | | | | | | | | | | | | +-----+ +-----+ | | | | | | | | | | | | +-----+ +-----+ | | | +--------------------------------------+ +---------------------+ Risunok 13.4. Vyzov funkcii open iz periferijnogo processa okonchanii raboty process-sputnik peredaet periferijnomu processu posylku, podtverzhdayushchuyu priem soobshcheniya i soderzhashchuyu kolichestvo bajt dannyh, uspeshno perepisannyh v fajl. Operaciya read vypolnyaetsya analogichno; sputnik informi- ruet periferijnyj process o kolichestve real'no prochitannyh bajt (v sluchae chteniya dannyh s terminala ili iz kanala eto kolichestvo ne vsegda sovpadaet s kolichestvom, ukazannym v zaprose). Dlya vypolneniya kak toj, tak i drugoj fun- kcii mozhet potrebovat'sya mnogokratnaya peresylka informacionnyh soobshchenij po seti, chto opredelyaetsya ob®emom peresylaemyh dannyh i razmerami setevyh pake- tov. Edinstvennoj funkciej, trebuyushchej vneseniya izmenenij pri rabote na cent- ral'nom processore, yavlyaetsya sistemnaya funkciya fork. Kogda process ispolnyaet etu funkciyu na CP, yadro vybiraet dlya nego periferijnyj processor i posylaet soobshchenie special'nomu processu -serveru, informiruya poslednij o tom, chto sobiraetsya pristupit' k vygruzke tekushchego processa. Predpolagaya, chto server prinyal zapros, yadro s pomoshch'yu funkcii fork sozdaet novyj periferijnyj pro- cess, vydelyaya zapis' v tablice processov i adresnoe prostranstvo. Central'- nyj processor vygruzhaet kopiyu processa, vyzvavshego funkciyu fork, na perife- rijnyj processor, zatiraya tol'ko chto vydelennoe adresnoe prostranstvo, po- rozhdaet lokal'nyj sputnik dlya svyazi s novym periferijnym processom i posyla- et na periferiyu soobshchenie o neobhodimosti inicializacii schetchika komand dlya novogo processa. Process-sputnik (na CP) yavlyaetsya potomkom processa, vyzvav- shego funkciyu fork; periferijnyj process s tehnicheskoj tochki zreniya vystupaet potomkom processa-servera, no po logike on yavlyaetsya potomkom processa, vyz- vavshego funkciyu fork. Process-server ne imeet logicheskoj svyazi s potomkom po zavershenii funkcii fork; edinstvennaya zadacha servera sostoit v okazanii po- moshchi pri vygruzke potomka. Iz-za sil'noj svyazi mezhdu komponentami sistemy (periferijnye processory ne raspolagayut avtonomiej) periferijnyj process i process-sputnik imeyut odin i tot zhe kod identifikacii. Vzaimosvyaz' mezhdu processami pokazana na Risunke 13.5: nepreryvnoj liniej pokazana svyaz' tipa "roditel'-potomok", punktirom - svyaz' mezhdu ravnopravnymi partnerami. Kogda process ispolnyaet funkciyu fork na periferijnom processore, on po- sylaet soobshchenie svoemu sputniku na CP, kotoryj i ispolnyaet posle etogo vsyu vysheopisannuyu posledovatel'nost' dejstvij. Sputnik vybiraet novyj periferij- 385 Central'nyj processor Periferijnyj processor +----------------------+ +----------------------+ | +------------------+ | | +------------------+ | | | Process-roditel' |-------------| Process-server | | | +---------+--------+ | | +------------------+ | | | | | | | | | | | | +---------+--------+ | | +------------------+ | | | Porozhdennyj sput-|-------------| Porozhdennyj pro- | | | | nik | | | | cess | | | +------------------+ | | +------------------+ | +----------------------+ +----------------------+ Risunok 13.5. Vypolnenie funkcii fork na central'nom processore nyj processor i delaet neobhodimye prigotovleniya k vygruzke obraza starogo processa: posylaet periferijnomu processu-roditelyu zapros na chtenie ego ob- raza, v otvet na kotoryj na drugom konce kanala svyazi nachinaetsya peredacha zaprashivaemyh dannyh. Sputnik schityvaet peredavaemyj obraz i perepisyvaet ego periferijnomu potomku. Kogda vygruzka obraza zakanchivaetsya, pro- cess-sputnik ispolnyaet funkciyu fork, sozdavaya svoego potomka na CP, i pere- daet znachenie schetchika komand periferijnomu potomku, chtoby poslednij znal, s kakogo adresa nachinat' vypolnenie. Ochevidno, bylo by luchshe, esli by potomok processa-sputnika naznachalsya periferijnomu potomku v kachestve roditelya, od- nako v nashem sluchae porozhdennye processy poluchayut vozmozhnost' vypolnyat'sya i na drugih periferijnyh processorah, a ne tol'ko na tom, na kotorom oni soz- dany. Vzaimosvyaz' mezhdu processami po zavershenii funkcii fork pokazana na Risunke 13.6. Kogda periferijnyj process zavershaet svoyu rabotu, on posylaet sootvetstvuyushchee soobshchenie processu-sputniku i tot tozhe zavershaetsya. Ot pro- cessa-sputnika iniciativa zaversheniya raboty ishodit' ne mozhet. Central'nyj processor +-------------------------------------------------------+ | +------------------+ +-----------------+ | | | Sputnik-roditel' +----------+ Sputnik-potomok | | | +------------------+ +-----------------+ | | - - | +-------------------------------------------------------+ - - +---------------------------+ +---------------------------+ | - | | - | | +-----------------------+ | | +----------------------+ | | | Periferijnyj roditel' | | | | Periferijnyj potomok | | | +-----------------------+ | | +----------------------+ | +---------------------------+ +---------------------------+ Periferijnyj processor Periferijnyj processor Risunok 13.6. Vypolnenie funkcii fork na periferijnom processore I v mnogoprocessornoj, i v odnoprocessornoj sistemah process dolzhen rea- girovat' na signaly odinakovo: process libo zavershaet vypolnenie sistemnoj funkcii do proverki signalov, libo, naprotiv, poluchiv signal, nezamedlitel'- no vyhodit iz sostoyaniya priostanova i rezko preryvaet rabotu sistemnoj funk- cii, esli eto soglasuetsya s prioritetom, s kotorym on byl priostanovlen. Poskol'ku process-sputnik vypolnyaet sistemnye funkcii ot imeni periferijnogo processa, on dolzhen reagirovat' na signaly, soglasuya svoi dejstviya s posled- nim. Esli v odnoprocessornoj sisteme signal zastavlyaet process zavershit' vy- 386 polnenie funkcii avarijno, processu-sputniku v mnogoprocessornoj sisteme sleduet vesti sebya tem zhe obrazom. To zhe samoe mozhno skazat' i o tom sluchae, kogda signal pobuzhdaet process k zaversheniyu svoej raboty s pomoshch'yu funkcii exit: periferijnyj process zavershaetsya i posylaet sootvetstvuyushchee soobshchenie processu-sputniku, kotoryj, razumeetsya, tozhe zavershaetsya. Kogda periferijnyj process vyzyvaet sistemnuyu funkciyu signal, on sohra- nyaet tekushchuyu informaciyu v lokal'nyh tablicah i posylaet soobshchenie svoemu sputniku, informiruya ego o tom, sleduet li ukazannyj signal prinimat' ili zhe ignorirovat'. Processu-sputniku bezrazlichno, vypolnyat' li perehvat signala ili dejstvie po umolchaniyu. Reakciya processa na signal zavisit ot treh fakto- rov (Risunok 13.7): postupaet li signal vo vremya vypolneniya processom sis- temnoj funkcii, sdelano li s pomoshch'yu funkcii signal ukazanie ob ignorirova- nii signala, voznikaet li signal na etom zhe periferijnom processore ili na +------------------------------------------------------------+ | algoritm sighandle /* algoritm obrabotki signalov */ | | vhodnaya informaciya: otsutstvuet | | vyhodnaya informaciya: otsutstvuet | | { | | esli (tekushchij process yavlyaetsya ch'im-to sputnikom ili | | imeet prototipa) | | { | | esli (signal ignoriruetsya) | | vernut' upravlenie; | | esli (signal postupil vo vremya vypolneniya sistemnoj | | funkcii) | | postavit' signal pered processom-sputnikom; | | v protivnom sluchae | | poslat' soobshchenie o signale periferijnomu proces-| | su; | | } | | v protivnom sluchae /* periferijnyj process */ | | { | | /* postupil li signal vo vremya vypolneniya sistemnoj | | * funkcii ili net | | */ | | poslat' signal processu-sputniku; | | } | | } | | | | algoritm satellite_end_of_syscall /* zavershenie sistem- | | * noj funkcii, vyz- | | * vannoj periferijnym| | * processom */ | | vhodnaya informaciya: otsutstvuet | | vyhodnaya informaciya: otsutstvuet | | { | | esli (vo vremya vypolneniya sistemnoj funkcii postupilo | | preryvanie) | | poslat' periferijnomu processu soobshchenie o preryva- | | nii, signal; | | v protivnom sluchae /* vypolnenie sistemnoj funkcii ne| | * preryvalos' */ | | poslat' otvet: vklyuchit' flag, pokazyvayushchij postuple- | | nie signala; | | } | +------------------------------------------------------------+ Risunok 13.7. Obrabotka signalov v periferijnoj sisteme 387 kakom-to drugom. Perejdem k rassmotreniyu razlichnyh vozmozhnostej. Dopustim, chto periferijnyj process priostanovil svoyu rabotu na to vremya, poka process-sputnik ispolnyaet sistemnuyu funkciyu ot ego imeni. Esli signal voznikaet v drugom meste, process-sputnik obnaruzhivaet ego ran'she, chem peri- ferijnyj process. Vozmozhny tri sluchaya. 1. Esli v ozhidanii nekotorogo sobytiya process-sputnik ne perehodil v sosto- yanie priostanova, iz kotorogo on vyshel by po poluchenii signala, on vy- polnyaet sistemnuyu funkciyu do konca, posylaet rezul'taty vypolneniya peri- ferijnomu processu i pokazyvaet, kakoj iz signalov im byl poluchen. 2. Esli process sdelal ukazanie ob ignorirovanii signala dannogo tipa, sputnik prodolzhaet sledovat' algoritmu vypolneniya sistemnoj funkcii, ne vyhodya iz sostoyaniya priostanova po longjmp. V otvete, posylaemom perife- rijnomu processu, soobshchenie o poluchenii signala budet otsutstvovat'. 3. Esli po poluchenii signala process-sputnik preryvaet vypolnenie sistemnoj funkcii (po longjmp), on informiruet ob etom periferijnyj process i so- obshchaet emu nomer signala. Periferijnyj process ishchet v postupivshem otvete svedeniya o poluchenii sig- nalov i v sluchae obnaruzheniya takovyh proizvodit obrabotku signalov pered vy- hodom iz sistemnoj funkcii. Takim obrazom, povedenie processa v mnogoproces- sornoj sisteme v tochnosti sootvetstvuet ego povedeniyu v odnoprocessornoj sisteme: on ili zavershaet svoyu rabotu, ne vyhodya iz rezhima yadra, ili obrashcha- etsya k pol'zovatel'skoj funkcii obrabotki signala, ili ignoriruet signal i uspeshno zavershaet vypolnenie sistemnoj funkcii. Periferijnyj process Process-sputnik +------------------------------------------------------------ | Vyzyvaet sistemnuyu funkciyu read - | Posylaet soobshchenie o vyzove funkcii - | processu-sputniku - | Priostanavlivaetsya do polucheniya - | otveta ot processa-sputnika Poluchaet soobshchenie o | - vyzove sistemnoj funk- | - cii read | - CHitaet dannye s ter- | - minala | - Priostanavlivaetsya v | - ozhidanii polucheniya | - porcii dannyh | - - | - - | - Signal (pol'zovatel' | - nazhal klavishu "break") | - Vyhodit iz sostoyaniya | - priostanova | - Prekrashchaet vypolnenie | - sistemnoj funkcii | - Posylaet otvet peri- | - ferijnomu processu: | - vypolnenie funkcii | - prervano | Vyhodit iz sostoyaniya priostanova | Analiziruet otvet v Obrabatyvaet signal Risunok 13.8. Preryvanie vo vremya vypolneniya sistemnoj funkcii 388 Predpolozhim, naprimer, chto periferijnyj process vyzyvaet funkciyu chteniya s terminala, svyazannogo s central'nym processorom, i priostanavlivaet svoyu rabotu na vremya vypolneniya funkcii processom-sputnikom (Risunok 13.8). Esli pol'zovatel' nazhimaet klavishu preryvaniya (break), yadro CP posylaet proces- su-sputniku sootvetstvuyushchij signal. Esli sputnik nahodilsya v sostoyanii pri- ostanova v ozhidanii vvoda s terminala porcii dannyh, on nemedlenno vyhodit iz etogo sostoyaniya i prekrashchaet vypolnenie funkcii read. V svoem otvete na zapros periferijnogo processa sputnik soobshchaet kod oshibki i nomer signala, sootvetstvuyushchij preryvaniyu. Periferijnyj process analiziruet otvet i, pos- kol'ku v soobshchenii govoritsya o postuplenii signala preryvaniya, otpravlyaet signal samomu sebe. Pered vyhodom iz funkcii read periferijnoe yadro osushchest- vlyaet proverku postupleniya signalov, obnaruzhivaet signal preryvaniya, postu- pivshij ot processa-sputnika, i obrabatyvaet ego obychnym poryadkom. Esli v re- zul'tate polucheniya signala preryvaniya periferijnyj process zavershaet svoyu rabotu s pomoshch'yu funkcii exit, dannaya funkciya beret na sebya zabotu ob unich- tozhenii processa-sputnika. Esli periferijnyj process perehvatyvaet signaly o preryvanii, on vyzyvaet pol'zovatel'skuyu funkciyu obrabotki signalov i po vy- hode iz funkcii read vozvrashchaet pol'zovatelyu kod oshibki. S drugoj storony, esli sputnik ispolnyaet ot imeni periferijnogo processa sistemnuyu funkciyu stat, on ne budet preryvat' ee vypolnenie pri poluchenii signala (funkcii stat garantirovan vyhod iz lyubogo priostanova, poskol'ku dlya nee vremya ozhi- daniya resursa ogranicheno). Sputnik dovodit vypolnenie funkcii do konca i vozvrashchaet periferijnomu processu nomer signala. Periferijnyj process posy- laet signal samomu sebe i poluchaet ego na vyhode iz sistemnoj funkcii. Esli signal voznik na periferijnom processore vo vremya vypolneniya sis- temnoj funkcii, periferijnyj process budet nahodit'sya v nevedenii otnosi- tel'no togo, vernetsya li k nemu vskore upravlenie ot processa-sputnika ili zhe poslednij perejdet v sostoyanie priostanova na neopredelennoe vremya. Peri- ferijnyj process posylaet sputniku special'noe soobshchenie, informiruya ego o vozniknovenii signala. YAdro na CP rasshifrovyvaet soobshchenie i posylaet signal sputniku, reakciya kotorogo na poluchenie signala opisana v predydushchih parag- rafah (avarijnoe zavershenie vypolneniya funkcii ili dovedenie ego do konca). Periferijnyj process ne mozhet poslat' soobshchenie sputniku neposredstvenno, poskol'ku sputnik zanyat ispolneniem sistemnoj funkcii i ne schityvaet dannye iz linii svyazi. Esli obratit'sya k primeru s funkciej read, sleduet otmetit', chto perife- rijnyj process ne imeet predstavleniya o tom, zhdet li ego sputnik vvoda dan- nyh s terminala ili zhe vypolnyaet drugie dejstviya. Periferijnyj process posy- laet sputniku soobshchenie o signale: esli sputnik nahoditsya v sostoyanii prios- tanova s prioritetom, dopuskayushchim preryvaniya, on nemedlenno vyhodit iz etogo sostoyaniya i prekrashchaet vypolnenie sistemnoj funkcii; v protivnom sluchae vy- polnenie funkcii dovoditsya do uspeshnogo zaversheniya. Rassmotrim, nakonec, sluchaj postupleniya signala vo vremya, ne svyazannoe s vypolneniem sistemnoj funkcii. Esli signal voznik na drugom processore, sputnik poluchaet ego pervym i posylaet soobshchenie o signale periferijnomu processu, nezavisimo ot togo, kasaetsya li etot signal periferijnogo processa ili net. Periferijnoe yadro rasshifrovyvaet soobshchenie i posylaet signal pro- cessu, kotoryj reagiruet na nego obychnym poryadkom. Esli signal voznik na pe- riferijnom processore, process vypolnyaet standartnye dejstviya, ne pribegaya k uslugam svoego sputnika. Kogda periferijnyj process posylaet signal drugim periferijnym proces- sam, on kodiruet soobshchenie o vyzove funkcii kill i posylaet ego proces- su-sputniku, kotoryj ispolnyaet vyzyvaemuyu funkciyu lokal'no. Esli chast' pro- cessov, dlya kotoryh prednaznachen signal, imeet mestonahozhdenie na drugih pe- riferijnyh processorah, signal poluchat (i proreagiruyut na ego poluchenie vy- sheopisannym obrazom) ih sputniki. 389 13.2 SVYAZX TIPA NEWCASTLE V predydushchem razdele my rassmotreli tip sil'nosvyazannoj sistemy, dlya ko- torogo harakterna posylka vseh voznikayushchih na periferijnom processore obra- shchenij k funkciyam podsistemy upravleniya fajlami na udalennyj (central'nyj) processor. Teper' perejdem k rassmotreniyu sistem s menee sil'noj svyaz'yu, ko- torye sostoyat iz mashin, proizvodyashchih obrashchenie k fajlam, nahodyashchimsya na dru- gih mashinah. V seti, sostoyashchej iz personal'nyh komp'yuterov i rabochih stan- cij, naprimer, pol'zovateli chasto obrashchayutsya k fajlam, raspolozhennym na bol'shoj mashine. V posleduyushchih dvuh razdelah my rassmotrim takie konfiguracii sistem, v kotoryh vse sistemnye funkcii vypolnyayutsya v lokal'nyh podsistemah, no pri etom imeetsya vozmozhnost' obrashcheniya k fajlam (cherez funkcii podsistemy upravleniya fajlami), raspolozhennym na drugih mashinah. Dlya identificirovaniya udalennyh fajlov v etih sistemah ispol'zuetsya odin iz sleduyushchih dvuh putej. V odnih sistemah v sostavnoe imya fajla dobavlyaetsya special'nyj simvol: komponenta imeni, predshestvuyushchaya etomu simvolu, identi- ficiruet mashinu, ostal'naya chast' imeni - fajl, nahodyashchijsya na etoj mashine. Tak, naprimer, sostavnoe imya "sftig!/fs1/mjb/rje" identificiruet fajl "/fs1/mjb/rje", nahodyashchijsya na mashine "sftig". Takaya shema identificirovaniya fajla sootvetstvuet soglasheniyu, ustanovlennomu prog- rammoj uucp otnositel'no peredachi fajlov mezhdu sistemami tipa UNIX. V drugoj sheme udalennye fajly identificiruyutsya dobavleniem k imeni special'nogo pre- fiksa, naprimer: /../sftig/fs1/mjb/rje gde "/../" - prefiks, svidetel'stvuyushchij o tom, chto fajl udalennyj; vtoraya komponenta imeni fajla yavlyaetsya imenem udalennoj mashiny. V dannoj sheme is- Process-klient Process-server +-----------------------------+ +----------------------------+ | Tablica | | Process- | | Si-biblioteka otkrytyh | | sputnik Zapros | | fajlov | | (pol'zo- na chtenie | | +------+ | | vatel'skij | | | | +--------------+--- | | | uroven') | | | | | +------+ | | | | | | | lokal'nyj | | | | +-------------+ | | | | +------+ | | | | | | | +----+--- | | | | | | | | | +------+ | | | | | | | | | | | | | | | | | | +------+ | | | | | | | +-----+ | | | | | +----+---------------+--------+ +----+-----------------+-----+ | | udalennyj | | +----+---------------+--------+ +----+-----------------+-----+ | | Setevoj | | | Setevoj | | YAdro interfejs | | YAdro interfejs | | | | | | | +--------------------+--------+ +----------------------+-----+ | s e t ' | +-------------------------------------+ Risunok 13.9. Formulirovanie zaprosov k fajlovomu serveru (processoru) 390 pol'zuetsya privychnyj sintaksis imen fajlov v sisteme UNIX, poetomu v otlichie ot pervoj shemy zdes' pol'zovatel'skim programmam net neobhodimosti prino- ravlivat'sya k ispol'zovaniyu imen, imeyushchih neobychnuyu konstrukciyu (sm. [Pike 85]). Vsyu ostavshuyusya chast' razdela my posvyatim rassmotreniyu modeli sistemy, ispol'zuyushchej svyaz' tipa Newcastle, v kotoroj yadro ne zanimaetsya raspoznava- niem udalennyh fajlov; eta funkciya polnost'yu vozlagaetsya na podprogrammy iz standartnoj Si-biblioteki, vypolnyayushchie v dannom sluchae rol' sistemnogo in- terfejsa. |ti podprogrammy analiziruyut pervuyu komponentu imeni fajla, v obo- ih opisannyh sposobah identificirovaniya soderzhashchuyu priznak udalennosti faj- la. V etom sostoit otstuplenie ot zavedennogo poryadka, pri kotorom biblio- technye podprogrammy ne zanimayutsya sintaksicheskim razborom imen fajlov. Na Risunke 13.9 pokazano, kakim obrazom formuliruyutsya zaprosy k fajlovomu ser- veru. Esli fajl lokal'nyj, yadro lokal'noj sistemy obrabatyvaet zapros obych- nym sposobom. Rassmotrim obratnyj sluchaj: open("/../sftig/fs1/mjb/rje/file",O_RDONLY); Podprogramma open iz Si-biblioteki analiziruet pervye dve komponenty sostav- nogo imeni fajla i uznaet, chto fajl sleduet iskat' na udalennoj mashine "sftig". CHtoby imet' informaciyu o tom, byla li ranee u processa svyaz' s dan- noj mashinoj, podprogramma zavodit special'nuyu strukturu, v kotoroj zapomina- et etot fakt, i v sluchae otricatel'nogo otveta ustanavlivaet svyaz' s fajlo- vym serverom, rabotayushchim na udalennoj mashine. Kogda process formuliruet svoj pervyj zapros na distancionnuyu obrabotku, udalennyj server podtverzhdaet zap- ros, v sluchae neobhodimosti vedet zapis' v polya pol'zovatel'skogo i gruppo- vogo kodov identifikacii i sozdaet processsputnik, kotoryj budet vystupat' ot imeni processa-klienta. CHtoby vypolnyat' zaprosy klienta, sputnik dolzhen imet' na udalennoj mashi- ne te zhe prava dostupa k fajlam, chto i klient. Drugimi slovami, pol'zovatel' "mjb" dolzhen imet' i k udalennym, i k lokal'nym fajlam odinakovye prava dos- tupa. K sozhaleniyu, ne isklyuchena vozmozhnost' togo, chto kod identifikacii kli- enta "mjb" mozhet sovpast' s kodom identifikacii drugogo klienta udalennoj mashiny. Takim obrazom, administratoram sistem na rabotayushchih v seti mashinah sleduet libo sledit' za naznacheniem kazhdomu pol'zovatelyu koda identifikacii, unikal'nogo dlya vsej seti, libo v moment formulirovaniya zaprosa na setevoe obsluzhivanie vypolnyat' preobrazovanie kodov. Esli eto ne budet sdelano, pro- cess-sputnik budet imet' na udalennoj mashine prava drugogo klienta. Bolee delikatnym voprosom yavlyaetsya poluchenie v otnoshenii raboty s uda- lennymi fajlami prav superpol'zovatelya. S odnoj storony, klient-superpol'zo- vatel' ne dolzhen imet' te zhe prava v otnoshenii udalennoj sistemy, chtoby ne vvodit' v zabluzhdenie sredstva zashchity udalennoj sistemy. S drugoj storony, nekotorye iz programm, esli im ne predostavit' prava superpol'zovatelya, prosto ne smogut rabotat'. Primerom takoj programmy yavlyaetsya programma mkdir (sm. glavu 7), sozdayushchaya novyj katalog. Udalennaya sistema ne razreshila by klientu sozdavat' novyj katalog, poskol'ku na udalenii prava superpol'zova- telya ne dejstvuyut. Problema sozdaniya udalennyh katalogov sluzhit ser'eznym osnovaniem dlya peresmotra sistemnoj funkcii mkdir v storonu rasshireniya ee vozmozhnostej v avtomaticheskom ustanovlenii vseh neobhodimyh pol'zo