- | - P(semafor) | - Znachenie semafora = -1 | - | (net) | NEVERNO !! v Vremya Risunok 12.10. Neudachnoe imitaciya funkcii wakeup pri ispol'- zovanii operacii V Operaciya povtoryaetsya v cikle do teh por, poka znachenie semafora ne prevysit 0; programma obrabotki preryvanij ne priostanavlivaetsya i cikl zavershaetsya tol'ko togda, kogda znachenie semafora stanet polozhitel'nym, posle chego eto znachenie budet umen'sheno operaciej CP. CHtoby predotvratit' situaciyu vzaimnoj blokirovki, yadru nuzhno zapretit' vse preryvaniya, vypolnyayushchie "ciklicheskuyu blokirovku". Inache vypolnenie pro- cessa, zahvativshego semafor, budet prervano eshche do togo, kak on smozhet osvo- bodit' semafor; esli programma obrabotki preryvanij popytaetsya zahvatit' etot semafor, ispol'zuya "ciklicheskuyu blokirovku", yadro zablokiruet samo se- bya. V kachestve primera obratimsya k Risunku 12.13. V moment vozniknoveniya Process A/Processor A Process B/Processor B +----------------------------------------------------------- | P(semafor SA); - | - - | - - | - - | - P(semafor SB); | - - | - - | - - | - P(semafor SA); | - priostanavlivaetsya | - | P(semafor SB); | priostanavlivaetsya | v Vzaimnaya blokirovka !! Vremya Risunok 12.11. Vozniknovenie tupikovoj situacii iz-za smeny ocherednosti blokirovaniya 373 preryvaniya znachenie semafora ne prevyshaet 0, poetomu rezul'tatom vypolneniya operacii CP vsegda budet "lozh'". Problema reshaetsya putem zapreshcheniya vseh preryvanij na to vremya, poka semafor zahvachen processom. 12.3.3 Primery algoritmov V dannom razdele my rassmotrim chetyre algoritma yadra, realizovannyh s ispol'zovaniem semaforov. Algoritm vydeleniya bufera illyustriruet slozhnuyu shemu blokirovaniya, na primere algoritma wait pokazana sinhronizaciya vypol- neniya processov, shema blokirovaniya drajverov realizuet izyashchnyj podhod k re- sheniyu dannoj problemy, i nakonec, metod resheniya problemy holostoj raboty processora pokazyvaet, chto nuzhno sdelat', chtoby izbezhat' konkurencii mezhdu processami. 12.3.3.1 Vydelenie bufera Obratimsya eshche raz k algoritmu getblk, rassmotrennomu nami v glave 3. Al- goritm rabotaet s tremya strukturami dannyh: zagolovkom bufera, hesh-ochered'yu buferov i spiskom svobodnyh buferov. YAdro svyazyvaet semafor so vsemi ekzemp- lyarami kazhdoj struktury. Drugimi slovami, esli u yadra imeyutsya v rasporyazhenii 200 buferov, zagolovok kazhdogo iz nih vklyuchaet v sebya semafor, ispol'zuemyj dlya zahvata bufera; kogda process vypolnyaet nad semaforom operaciyu P, drugie processy, tozhe pozhelavshie zahvatit' bufer, priostanavlivayutsya do teh por, poka pervyj process ne ispolnit operaciyu V. U kazhdoj hesh-ocheredi buferov takzhe imeetsya semafor, blokiruyushchij dostup k ocheredi. V odnoprocessornoj sis- teme blokirovka hesh-oche- Process A/Processor A Process B/Processor B +----------------------------------------------------------- | P(semafor SA); - | - - | - P(semafor SB); | - - | - - | - esli (! CP(semafor SA)) | - { | - V(semafor SB); | - perezapustit' algo- | - ritm | - } | P(semafor SB); | priostanavlivaetsya v Vremya Risunok 12.12. Ispol'zovanie operacii P uslovnogo tipa dlya predotvrashcheniya vzaimnoj blokirovki redi ne nuzhna, ibo process nikogda ne perehodit v sostoyanie priostanova, os- tavlyaya ochered' v nesoglasovannom (neuporyadochennom) vide. V mnogoprocessornoj sisteme, tem ne menee, vozmozhny situacii, kogda s odnoj i toj zhe hesh-oche- red'yu rabotayut dva processa; v kazhdyj moment vremeni semafor otkryvaet dos- 374 tup k ocheredi tol'ko dlya odnogo processa. Po tem zhe prichinam i spisok svo- bodnyh buferov nuzhdaetsya v semafore dlya zashchity soderzhashchejsya v nem informacii ot iskazheniya. Na Risunke 12.14 pokazana pervaya chast' algoritma getblk, realizovannaya v mnogoprocessornoj sisteme s ispol'zovaniem semaforov. Prosmatrivaya bufernyj kesh v poiskah ukazannogo bloka, yadro s pomoshch'yu operacii P zahvatyvaet sema- for, prinadlezhashchij hesh-ocheredi. Esli nad semaforom uzhe kem-to proizvedena operaciya dannogo tipa, tekushchij process priostanavlivaetsya do teh por, poka process, zahvativshij semafor, ne osvobodit ego, vypolniv operaciyu V. Kogda tekushchij process poluchaet pravo isklyuchitel'nogo kontrolya nad hesh-ochered'yu, on pristupaet k poisku podhodyashchego bufera. Predpolozhim, chto bufer nahoditsya v hesh-ocheredi. YAdro (process A) pytaetsya zahvatit' bufer, no esli ono ispol'- zuet operaciyu P i esli bufer uzhe zahvachen, yadru pridetsya priostanovit' svoyu rabotu, ostaviv hesh-ochered' zablokirovannoj i ne dopuskaya takim obrazom ob- rashchenij k nej so storony drugih processov, dazhe esli poslednie vedut poisk nezahvachennyh buferov. Pust' vmesto etogo process A zahvatyvaet bufer, is- pol'zuya operaciyu CP; esli operaciya zavershaetsya uspeshno, bufer stanovitsya ot- krytym dlya processa. Process A zahvatyvaet semafor, prinadlezhashchij spisku svobodnyh buferov, vypolnyaya operaciyu CP, poskol'ku semafor zahvatyvaetsya na neprodolzhitel'noe vremya i, sledovatel'no, priostanavlivat' svoyu rabotu, vy- polnyaya operaciyu P, process prosto ne imeet vozmozhnosti. YAdro ubiraet bufer iz spiska svobodnyh buferov, snimaet blokirovku so spiska i s hesh-ocheredi i vozvrashchaet zahvachennyj bufer. | | P(semafor); | (Znachenie semafora teper' ravno 0) | | Preryvanie | | CP(semafor) zavershaetsya neudachno --- | semafor zahvachen | | Semafor ne osvobozhdaetsya do vyhoda iz preryvaniya. | | Vyhod iz preryvaniya bez ego obrabotki nevozmozhen. | | Tupikovaya situaciya (vzaimnaya blokirovka) v Vremya Risunok 12.13. Vzaimnaya blokirovka pri vypolnenii programmy obrabotki preryvaniya Predpolozhim, chto operaciya CP nad buferom zavershilas' neudachno iz-za to- go, chto semafor, prinadlezhashchij buferu, okazalsya zahvachennym. Process A osvo- bozhdaet semafor, svyazannyj s hesh-ochered'yu, i priostanavlivaetsya, pytayas' vy- polnit' operaciyu P nad semaforom bufera. Operaciya P nad semaforom budet vy- polnyat'sya, nesmotrya na to, chto operaciya CP uzhe poterpela neudachu. Po zaver- shenii vypolneniya operacii process A poluchaet vlast' nad buferom. Tak kak v ostavshejsya chasti algoritma predpolagaetsya, chto bufer i hesh-ochered' zahvache- ny, process A teper' pytaetsya zahvatit' hesh-ochered' (*). Poskol'ku ochered- --------------------------------------- (*) Vmesto zahvata hesh-ocheredi v etom meste mozhno bylo by ustanovit' soot- vetstvuyushchij flag, proveryaemyj dalee pered vypolneniem operacii V, no chtoby proillyustrirovat' shemu zahvata semaforov v obratnoj posledova- tel'nosti, v izlozhenii my budem priderzhivat'sya ranee opisannogo varian- ta. 375 nost' zahvata zdes' (snachala semafor bufera, potom semafor ocheredi) obratna vysheukazannoj ocherednosti, nad semaforom vypolnyaetsya operaciya CP. Esli po- pytka zahvata zakanchivaetsya neudachej, imeet mesto obychnaya obrabotka, trebuyu- shchayasya po hodu zadachi. No esli zahvat udaetsya, yadro ne mozhet byt' uvereno v +------------------------------------------------------------+ | algoritm getblk /* mnogoprocessornaya versiya */ | | vhodnaya informaciya: nomer fajlovoj sistemy | | nomer bloka | | vyhodnaya informaciya: zahvachennyj bufer, prednaznachennyj dlya| | obrabotki soderzhimogo bloka | | { | | vypolnyat' (poka bufer ne budet obnaruzhen) | | { | | P(semafor hesh-ocheredi); | | esli (blok nahoditsya v hesh-ocheredi) | | { | | esli (operaciya CP(semafor bufera) zavershaetsya ne- | | udachno) /* bufer zanyat */ | | { | | V(semafor hesh-ocheredi); | | P(semafor bufera); /* priostanov do momen-| | * ta osvobozhdeniya | | */ | | esli (operaciya CP(semafor hesh-ocheredi) zaversha-| | etsya neudachno) | | { | | V(semafor bufera); | | prodolzhit'; /* vyhod v cikl "vypolnyat'" | | */ | | } | | v protivnom sluchae esli (nomer ustrojstva ili | | nomer bloka izmenilis') | | { | | V(semafor bufera); | | V(semafor hesh-ocheredi); | | } | | } | | vypolnyat' (poka operaciya CP(semafor spiska svobod-| | nyh buferov) ne zavershitsya uspeshno) | | ; /* "kol'cevoj cikl" */ | | pometit' bufer zanyatym; | | ubrat' bufer iz spiska svobodnyh buferov; | | V(semafor spiska svobodnyh buferov); | | V(semafor hesh-ocheredi); | | vernut' bufer; | | } | | v protivnom sluchae /* bufer otsutstvuet v hesh- | | * ocheredi | | */ | | /* zdes' nachinaetsya vypolnenie ostavshejsya chasti algo-| | * ritma | | */ | | } | | } | +------------------------------------------------------------+ Risunok 12.14. Vydelenie bufera s ispol'zovaniem semaforov 376 tom, chto zahvachen korrektnyj bufer, poskol'ku soderzhimoe bufera moglo byt' ranee izmeneno drugim processom, obnaruzhivshim bufer v spiske svobodnyh bufe- rov i zahvativshim na vremya ego semafor. Process A, ozhidaya osvobozhdeniya sema- fora, ne imeet ni malejshego predstavleniya o tom, yavlyaetsya li interesuyushchij ego bufer tem buferom, kotoryj emu nuzhen, i poetomu prezhde vsego on dolzhen ubedit'sya v pravil'nosti soderzhimogo bufera; esli proverka daet otricatel'- nyj rezul'tat, algoritm zapuskaetsya snachala. Esli soderzhimoe bufera korrekt- no, process A zavershaet vypolnenie algoritma. +------------------------------------------------------------+ | mnogoprocessornaya versiya algoritma wait | | { | | dlya (;;) /* cikl */ | | { | | perebor vseh processov-potomkov: | | esli (potomok nahoditsya v sostoyanii "prekrashcheniya | | sushchestvovaniya") | | vernut' upravlenie; | | P(zombie_semaphore); /* nachal'noe znachenie - 0 */| | } | | } | +------------------------------------------------------------+ Risunok 12.15. Mnogoprocessornaya versiya algoritma wait Ostavshuyusya chast' algoritma mozhno rassmotret' v kachestve uprazhneniya. 12.3.3.2 Wait Iz glavy 7 my uzhe znaem o tom, chto vo vremya vypolneniya sistemnoj funkcii wait process priostanavlivaet svoyu rabotu do momenta zaversheniya vypolneniya svoego potomka. V mnogoprocessornoj sisteme pered processom vstaet zadacha ne upustit' pri vypolnenii algoritma wait potomka, prekrativshego sushchestvovanie s pomoshch'yu funkcii exit; esli, naprimer, v to vremya, poka na odnom processore process-roditel' zapuskaet funkciyu wait, na drugom processore ego potomok zavershil svoyu rabotu, roditelyu net neobhodimosti priostanavlivat' svoe vy- polnenie v ozhidanii zaversheniya vtorogo potomka. V kazhdoj zapisi tablicy pro- cessov imeetsya semafor, imenuemyj zombie_semaphore i imeyushchij v nachale nule- voe znachenie. |tot semafor ispol'zuetsya pri organizacii vzaimodejstviya wait/exit (Risunok 12.15). Kogda potomok zavershaet rabotu, on vypolnyaet nad semaforom svoego roditelya operaciyu V, vyvodya roditelya iz sostoyaniya priosta- nova, esli tot pereshel v nego vo vremya ispolneniya funkcii wait. Esli potomok zavershilsya ran'she, chem roditel' zapustil funkciyu wait, etot fakt budet obna- ruzhen roditelem, kotoryj tut zhe vyjdet iz sostoyaniya ozhidaniya. Esli oba pro- cessa ispolnyayut funkcii exit i wait parallel'no, no potomok ispolnyaet funk- ciyu exit uzhe posle togo, kak roditel' proveril ego status, operaciya V, vy- polnennaya potomkom, vosprepyatstvuet perehodu roditelya v sostoyanie priostano- va. V hudshem sluchae process-roditel' prosto povtoryaet cikl lishnij raz. 12.3.3.3 Drajvery V mnogoprocessornoj realizacii vychislitel'noj sistemy na baze komp'yute- rov AT&T 3B20 semafory v strukturu zagruzochnogo koda drajverov ne vklyuchayut- sya, a operacii tipa P i V vypolnyayutsya v tochkah vhoda v kazhdyj drajver (sm. [Bach 84]). V glave 10 my govorili o tom, chto interfejs, realizuemyj drajve- rami ustrojstv, harakterizuetsya ochen' nebol'shim chislom tochek vhoda (na prak- 377 tike ih okolo 20). Zashchita drajverov osushchestvlyaetsya na urovne tochek vhoda v nih: P(semafor drajvera); otkryt' (drajver); V(semafor drajvera); Esli dlya vseh tochek vhoda v drajver ispol'zovat' odin i tot zhe semafor, no pri etom dlya raznyh drajverov - raznye semafory, kriticheskij uchastok programmy drajvera budet ispolnyat'sya processom monopol'no. Semafory mogut naznachat'sya kak otdel'nomu ustrojstvu, tak i klassam ustrojstv. Tak, napri- mer, otdel'nyj semafor mozhet byt' svyazan i s otdel'nym fizicheskim terminalom i so vsemi terminalami srazu. V pervom sluchae bystrodejstvie sistemy vyshe, ibo processy, obrashchayushchiesya k terminalu, ne zahvatyvayut semafor, imeyushchij ot- noshenie k drugim terminalam, kak vo vtorom sluchae. Drajvery nekotoryh ust- rojstv, odnako, podderzhivayut vnutrennyuyu svyaz' s drugimi drajverami; v takih sluchayah ispol'zovanie odnogo semafora dlya klassa ustrojstv oblegchaet ponima- nie zadachi. V kachestve al'ternativy v vychislitel'noj sisteme 3B20A predos- tavlena vozmozhnost' takogo konfigurirovaniya otdel'nyh ustrojstv, pri kotorom programmy drajvera zapuskayutsya na tochno ukazannyh processorah. Problemy voznikayut togda, kogda drajver preryvaet rabotu sistemy i ego semafor zahvachen: programma obrabotki preryvanij ne mozhet byt' vyzvana, tak kak inache voznikla by ugroza razrusheniya dannyh. S drugoj storony, yadro ne mozhet ostavit' preryvanie neobrabotannym. Sistema 3B20A vystraivaet preryva- niya v ochered' i zhdet momenta osvobozhdeniya semafora, kogda vyzov programmy obrabotki preryvanij ne budet imet' opasnye posledstviya. 12.3.3.4 Fiktivnye processy Kogda yadro vypolnyaet pereklyuchenie konteksta v odnoprocessornoj sisteme, ono funkcioniruet v kontekste processa, ustupayushchego upravlenie (sm. glavu 6). Esli v sisteme net processov, gotovyh k zapusku, yadro perehodit v sosto- yanie prostoya v kontekste processa, vypolnyavshegosya poslednim. Poluchiv prery- vanie ot tajmera ili drugih periferijnyh ustrojstv, ono obrabatyvaet ego v kontekste togo zhe processa. V mnogoprocessornoj sisteme yadro ne mozhet prostaivat' v kontekste pro- cessa, vypolnyavshegosya poslednim. Posmotrim, chto proizojdet posle togo, kak process, priostanovivshij svoyu rabotu na processore A, vyjdet iz sostoyaniya priostanova. Process v celom gotov k zapusku, no on zapuskaetsya ne srazu zhe po vyhode iz sostoyaniya priostanova, dazhe nesmotrya na to, chto ego kontekst uzhe nahoditsya v rasporyazhenii processora A. Esli etot process vybiraetsya dlya zapuska processorom B, poslednij pereklyuchaetsya na ego kontekst i vozobnovlya- et ego vypolnenie. Kogda v rezul'tate preryvaniya processor A vyjdet iz pros- toya, on budet prodolzhat' svoyu rabotu v kontekste processa A do teh por, poka ne proizvedet pereklyuchenie konteksta. Takim obrazom, v techenie korotkogo promezhutka vremeni s odnim i tem zhe adresnym prostranstvom (v chastnosti, so stekom yadra) budut vesti rabotu (i, chto ves'ma veroyatno, proizvodit' zapis') srazu dva processora. Reshenie etoj problemy sostoit v sozdanii nekotorogo fiktivnogo processa; kogda processor nahoditsya v sostoyanii prostoya, yadro pereklyuchaetsya na kon- tekst fiktivnogo processa, delaya etot kontekst tekushchim dlya bezdejstvuyushchego processora. Kontekst fiktivnogo processa sostoit tol'ko iz steka yadra; etot process ne yavlyaetsya vypolnimym i ne vybiraetsya dlya zapuska. Poskol'ku kazhdyj processor prostaivaet v kontekste svoego sobstvennogo fiktivnogo processa, navredit' drug drugu processory uzhe ne mogut. 378 12.4 SISTEMA TUNIS Pol'zovatel'skij interfejs sistemy Tunis sovmestim s analogichnym inter- fejsom sistemy UNIX, no yadro etoj sistemy, razrabotannoe na yazyke Concurrent Euclid, sostoit iz processov, upravlyayushchih kazhdoj chast'yu sistemy. Problema vzaimnogo isklyucheniya reshaetsya v sisteme Tunis dovol'no prosto, tak kak v kazhdyj moment vremeni ispolnyaetsya ne bolee odnoj kopii upravlyaemogo yadrom processa, krome togo, processy rabotayut tol'ko s temi strukturami dannyh, kotorye im prinadlezhat. Sistemnye processy aktiviziruyutsya zaprosami na vvod, zashchitu ocheredi zaprosov osushchestvlyaet procedura programmnogo monitora. |ta procedura usilivaet vzaimnoe isklyuchenie, razreshaya dostup k svoej ispolnyaemoj chasti v kazhdyj moment vremeni ne bolee, chem odnomu processu. Mehanizm moni- tora otlichaetsya ot mehanizma semaforov tem, chto, vo-pervyh, blagodarya pos- lednim usilivaetsya modul'nost' programm (operacii P i V prisutstvuyut na vho- de v proceduru monitora i na vyhode iz nee), a vo-vtoryh, sgenerirovannyj kompilyatorom kod uzhe soderzhit elementy sinhronizacii. Holt otmechaet, chto razrabotka takih sistem oblegchaetsya, esli ispol'zuetsya yazyk, podderzhivayushchij monitory i vklyuchayushchij ponyatie parallelizma (sm. [Holt 83], str.190). Pri vsem pri etom vnutrennyaya struktura sistemy Tunis otlichaetsya ot tradicionnoj realizacii sistemy UNIX radikal'nym obrazom. 12.5 UZKIE MESTA V FUNKCIONIROVANII MNOGOPROCESSORNYH SISTEM V dannoj glave nami byli rassmotreny dva metoda realizacii mnogoproces- sornyh versij sistemy UNIX: konfiguraciya, sostoyashchaya iz glavnogo i podchinen- nogo processorov, v kotoroj tol'ko odin processor (glavnyj) funkcioniruet v rezhime yadra, i metod, osnovannyj na ispol'zovanii semaforov i dopuskayushchij odnovremennoe ispolnenie v rezhime yadra vseh imeyushchihsya v sisteme processov. Oba metoda invariantny k kolichestvu processorov, odnako govorit' o tom, chto s rostom chisla processorov obshchaya proizvoditel'nost' sistemy uvelichivaetsya s linejnoj skorost'yu, nel'zya. Poteri proizvoditel'nosti voznikayut, vo-pervyh, kak sledstvie konkurencii za resursy pamyati, kotoraya vyrazhaetsya v uvelichenii prodolzhitel'nosti obrashcheniya k pamyati. Vo-vtoryh, v sheme, osnovannoj na is- pol'zovanii semaforov, k etoj konkurencii dobavlyaetsya sopernichestvo za sema- fory; processy zachastuyu obnaruzhivayut semafory zahvachennymi, bol'she processov nahoditsya v ocheredi, dolgoe vremya ozhidaya polucheniya dostupa k semaforam. Per- vaya shema, osnovannaya na ispol'zovanii glavnogo i podchinennogo processorov, tozhe ne lishena nedostatkov: po mere uvelicheniya chisla processorov glavnyj processor stanovitsya uzkim mestom v sisteme, poskol'ku tol'ko on odin mozhet funkcionirovat' v rezhime yadra. Nesmotrya na to, chto bolee vnimatel'noe tehni- cheskoe proektirovanie pozvolyaet sokratit' konkurenciyu do razumnogo minimuma i v nekotoryh sluchayah priblizit' skorost' povysheniya proizvoditel'nosti sis- temy pri uvelichenii chisla processorov k linejnoj (sm., naprimer, [Beck 85]), vse postroennye s ispol'zovaniem sovremennoj tehnologii mnogoprocessornye sistemy imeyut predel, za kotorym rasshirenie sostava processorov ne soprovozh- daetsya uvelicheniem proizvoditel'nosti sistemy. 12.6 UPRAZHNENIYA 1. Reshite problemu funkcionirovaniya mnogoprocessornyh sistem takim obra- zom, chtoby vse processory v sisteme mogli funkcionirovat' v rezhime yad- ra, no ne bolee odnogo odnovremenno. Takoe reshenie budet otlichat'sya ot pervoj iz predlozhennyh v tekste shem, gde tol'ko odin processor (glav- nyj) prednaznachen dlya realizacii funkcij yadra. Kak dobit'sya togo, chtoby v rezhime yadra v kazhdyj moment vremeni nahodilsya tol'ko odin processor ? Kakuyu strategiyu obrabotki preryvanij pri etom mozhno schitat' priemlemoj? 379 2. Ispol'zuya sistemnye funkcii raboty s razdelyaemoj oblast'yu pamyati, pro- testirujte programmu, realizuyushchuyu semafornuyu blokirovku (Risunok 12.6). Posledovatel'nosti operacij P-V nad semaforom mogut nezavisimo odin ot drugogo vypolnyat' neskol'ko processov. Kakim obrazom v programme sledu- et realizovat' indikaciyu i obrabotku oshibok ? 3. Razrabotajte algoritm vypolneniya operacii CP (uslovnyj tip operacii P), ispol'zuya tekst algoritma operacii P. 4. Ob®yasnite, zachem v algoritmah operacij P i V (Risunki 12.8 i 12.9) nuzh- na blokirovka preryvanij. V kakie momenty ee sleduet osushchestvlyat' ? 5. Pochemu pri vypolnenii "ciklicheskoj blokirovki" vmesto stroki: while (! CP(semafor)); yadro ne mozhet ispol'zovat' operaciyu P bezuslovnogo tipa ? (V kachestve navodyashchego voprosa: chto proizojdet v tom sluchae, esli process zapustit operaciyu P i priostanovitsya ?) 6. Obratimsya k algoritmu getblk, privedennomu v glave 3. Opishite realiza- ciyu algoritma v mnogoprocessornoj sisteme dlya sluchaya, kogda blok otsut- stvuet v bufernom keshe. *7. Predpolozhim, chto pri vypolnenii algoritma vydeleniya bufera voznikla chrezvychajno sil'naya konkurenciya za semafor, prinadlezhashchij spisku svo- bodnyh buferov. Razrabotajte shemu oslableniya konkurencii za schet raz- bieniya spiska svobodnyh buferov na dva podspiska. *8. Predpolozhim, chto u terminal'nogo drajvera imeetsya semafor, znachenie ko- torogo pri inicializacii sbrasyvaetsya v 0 i po kotoromu processy prios- tanavlivayut svoyu rabotu v sluchae perepolneniya bufera vyvoda na termi- nal. Kogda terminal gotov k priemu sleduyushchej porcii dannyh, on vyvodit iz sostoyaniya ozhidaniya vse processy, priostanovlennye po semaforu. Raz- rabotajte shemu vozobnovleniya processov, ispol'zuyushchuyu operacii tipa P i V. V sluchae neobhodimosti vvedite dopolnitel'nye flagi i semafory. Kak dolzhna vesti sebya shema v tom sluchae, esli processy vyvodyatsya iz sosto- yaniya ozhidaniya po preryvaniyu, no pri etom tekushchij processor ne imeet vozmozhnosti blokirovat' preryvaniya na drugih processorah ? *9. Esli tochki vhoda v drajver zashchishchayutsya semaforami, dolzhno soblyudat'sya uslovie osvobozhdeniya semafora v sluchae perehoda processa v sostoyanie priostanova. Kak eto realizuetsya na praktike ? Kakim obrazom dolzhna proizvodit'sya obrabotka preryvanij, postupayushchih v to vremya, poka sema- for drajvera zablokirovan ? 10. Obratimsya k sistemnym funkciyam ustanovki i kontrolya sistemnogo vremeni (glava 8). Raznye processory mogut imet' razlichnuyu taktovuyu chastotu. Kak v etom sluchae ukazannye funkcii dolzhny rabotat' ? 380