ro raspredelyaet bufery vo vre- mya obrabotki obrashchenij k operacionnoj sisteme i osvobozhdaet ih pered vozvra- tom upravleniya processam (***). V rezhime zadachi processy neposreds- ---------------------------------------- (***) Isklyucheniem yavlyaetsya sistemnaya operaciya mount, kotoraya zah- 50 vatyvaet bufer do teh por, poka ne budet ispolnena operaciya umount. |to isklyuchenie ne yavlyaetsya sushchestvennym, poskol'ku obshchee kolichestvo buferov namnogo prevyshaet chislo aktivnyh montirovannyh fajlovyh sistem. zagolovki hesh-ocheredej +-----------------+ +-----------------+ | | |+----+ +----+| +----+ | blok 0 modul' 4 |---- ++ 28 ++ ++ 4 ++ | 64 | | | +----+| |+----+ +----+ +-----------------+ | +------+ | | +----+| +----+| +----+ | blok 1 modul' 4 |---- | 17 || ++ 5 ++ ++ 97 ++ | | +----+| |+----+ +-++----+| +-----------------+ +---|--------+ +------+ | | +----+ |+----+ |+----+ | blok 2 modul' 4 |---- | 98 |+---+| 50 | ++ 10 ++ | | +----+| +----+ +----+| +-----------------+ | | | | +----+| +----+ +----+| | blok 3 modul' 4 |----+>| 3 ++ | 35 | | 99 || | | | +----+ +----+ +----+| +-----------------+ | zanyat| +-----------------+ | | |zagolovok spiska +----+ | | | | |svobodnyh buferov|<---------------------------------+ +-----------------+ Poisk bloka 99, blok zanyat Risunok 3.11. Pyatyj sluchaj vydeleniya bufera tvenno ne kontroliruyut vydelenie buferov yadrom sistemy, poetomu oni ne mogut namerenno "zahvatyvat'" bufery. YAdro teryaet kontrol' nad buferom tol'ko tog- da, kogda zhdet zaversheniya operacii vvoda-vyvoda mezhdu buferom i diskom. Bylo zadumano tak, chto esli diskovod isporchen, on ne mozhet preryvat' rabotu cent- ral'nogo processora, i togda yadro nikogda ne osvobodit bufer. Diskovod dol- zhen sledit' za rabotoj apparatnyh sredstv v takih sluchayah i vozvrashchat' yadru kod oshibki, soobshchaya o plohoj rabote diska. Koroche govorya, yadro mozhet garan- tirovat', chto processy, priostanovlennye v ozhidanii bufera, v konce koncov vozobnovyat svoe vypolnenie. Mozhno takzhe predstavit' sebe situaciyu, kogda process "zavisaet" v ozhida- nii polucheniya dostupa k buferu. V chetvertom sluchae, naprimer, esli neskol'ko processov priostanavlivayutsya, ozhidaya osvobozhdeniya bufera, yadro ne garantiru- et, chto oni poluchat dostup k buferu v toj ocherednosti, v kotoroj oni zapro- sili dostup. Process mozhet priostanovit' i vozobnovit' svoe vypolnenie, kog- da bufer stanet svobodnym, tol'ko dlya togo, chtoby priostanovit'sya vnov' iz -za togo, chto drugoj process poluchil upravlenie nad buferom pervym. Teoreti- cheski, tak mozhet prodolzhat'sya vechno, no prakticheski takoj problemy ne vozni- kaet v svyazi s tem, chto v sisteme obychno zalozheno bol'shoe kolichestvo bufe- rov. 3.4 CHTENIE I ZAPISX DISKOVYH BLOKOV Teper', kogda algoritm vydeleniya buferov nami uzhe rassmotren, budet leg- che ponyat' proceduru chteniya i zapisi diskovyh blokov. CHtoby schitat' diskovyj 51 Process A Process B Process C +------------------------------------------------------------- | Bufer vydelen bloku b - - | - - | Bufer zablokirovan - - | - - | Nachat vvod-vyvod - - | - - | Priostanovlen do - - | zaversheniya vvoda-vyvoda - - | - - - | - Poisk bloka b - | - v hesh-ocheredi - | - - | - Bufer zablokirovan, - | - priostanovka - | - - - | - - Priostanovlen | - - v ozhidanii osvobozhdeniya | - - lyubogo bufera | - - (sluchaj 4) | +---------------------------+ - - | | Vvod-vyvod zakonchen, | - - | | vypolnenie vozobnovlyaetsya | - - | +---------------------------+ - - | brelse(): vozobnovlyayutsya - - | drugie processy - - | - - Poluchaet bufer, | - - pervonachal'no | - - naznachennyj | - - bloku b | - - | - - Perenaznachenie | - - bufera bloku b' | - Bufer ne soderzhit - | - blok b - | - - | - Poisk nachinaetsya - | - snova - | Vremya v Risunok 3.12. Sostyazanie za svobodnyj bufer blok (Risunok 3.13), process ispol'zuet algoritm getblk dlya poiska bloka v bufernom keshe. Esli on tam, yadro mozhet vozvratit' ego nemedlenno bez fizi- cheskogo schityvaniya bloka s diska. Esli blok v keshe otsutstvuet, yadro prika- zyvaet diskovodu "zaplanirovat'" zapros na chtenie i priostanavlivaet rabotu, ozhidaya zaversheniya vvoda-vyvoda. Diskovod izveshchaet kontroller diska o tom, chto on sobiraetsya schitat' informaciyu, i kontroller togda peredaet informaciyu v bufer. Nakonec, diskovyj kontroller preryvaet rabotu processora, soobshchaya o zavershenii operacii vo- da-vyvoda, i programma obrabotki preryvanij ot diska vozobnovlyaet vypolnenie priostanovlennogo processa; teper' soderzhimoe diskovogo bloka nahoditsya v bufere. Moduli, zaprosivshie informaciyu dannogo bloka, poluchayut ee; kogda bu- fer im uzhe ne potrebuetsya, oni osvobodyat ego dlya togo, chtoby drugie processy 52 +------------------------------------------------------------+ | algoritm bread /* chtenie bloka */ | | vhodnaya informaciya: nomer bloka v fajlovoj sisteme | | vyhodnaya informaciya: bufer, soderzhashchij dannye | | { | | poluchit' bufer dlya bloka (algoritm getblk); | | esli (dannye v bufere pravil'nye) | | vozvratit' bufer; | | pristupit' k chteniyu s diska; | | priostanovit'sya (do zaversheniya operacii chteniya); | | vozvratit' (bufer); | | } | +------------------------------------------------------------+ Risunok 3.13. Algoritm chteniya diskovogo bloka poluchili k nemu dostup. V glave 5 budet pokazano, kak moduli bolee vysokogo urovnya (takie kak podsistema upravleniya fajlami) mogut predchuvstvovat' potrebnost' vo vtorom diskovom bloke, kogda process chitaet informaciyu iz fajla posledovatel'no. |ti moduli formiruyut zapros na asinhronnoe vypolnenie vtoroj operacii vvo- da-vyvoda, nadeyas' na to, chto informaciya uzhe budet v pamyati, kogda vdrug vozniknet neobhodimost' v nej, i tem samym povyshaya bystrodejstvie sistemy. Dlya etogo yadro vypolnyaet algoritm chteniya bloka s prodvizheniem breada (Risu- nok 3.14). YAdro proveryaet, nahoditsya li v keshe pervyj blok, i esli ego tam net, prikazyvaet diskovodu schitat' etot blok. Esli v bufernom keshe otsutst- vuet i vtoroj blok, yadro daet komandu diskovodu schitat' asinhronno i ego. Zatem process priostanavlivaetsya, ozhidaya zaversheniya operacii vvoda-vyvoda nad pervym blokom. Kogda vypolnenie processa vozobnovlyaetsya, on vozvrashchaet bufer pervomu bloku i ne obrashchaet vnimanie na to, kogda zavershitsya operaciya vvoda-vyvoda dlya vtorogo bloka. Posle zaversheniya etoj operacii kontroller diska preryvaet rabotu sistemy; programma obrabotki preryvanij uznaet o tom, chto vvod-vyvod vypolnyalsya asinhronno, i osvobozhdaet bufer (algoritm brelse). Esli by ona ne osvobodila bufer, bufer ostalsya by zablokirovannym i po etoj prichine nedostupnym dlya vseh processov. Nevozmozhno zaranee razblokirovat' bufer, tak kak operaciya vvoda-vyvoda, svyazannaya s buferom, aktivna i, sledo- vatel'no, soderzhimoe bufera eshche ne adekvatno. Pozzhe, esli process pozhelaet schitat' vtoroj blok, on obnaruzhit ego v bufernom keshe, poskol'ku k tomu vre- meni operaciya vvoda-vyvoda zakonchitsya. Esli zhe, v nachale vypolneniya algorit- ma breada, pervyj blok obnaruzhilsya v bufernom keshe, yadro tut zhe proveryaet, nahoditsya tam zhe i vtoroj blok, i prodolzhaet rabotu po tol'ko chto opisannoj sheme. Algoritm zapisi soderzhimogo bufera v diskovyj blok (Risunok 3.15) pohozh na algoritm chteniya. YAdro informiruet diskovod o tom, chto est' bufer, soder- zhimoe kotorogo dolzhno byt' vyvedeno, i diskovod planiruet operaciyu vvoda-vy- voda bloka. Esli zapis' proizvoditsya sinhronno, vyzyvayushchij process priosta- navlivaetsya, ozhidaya ee zaversheniya i osvobozhdaya bufer v moment vozobnovleniya svoego vypolneniya. Esli zapis' proizvoditsya asinhronno, yadro zapuskaet operaciyu zapisi na disk, no ne zhdet ee zaversheniya. YAdro osvobodit bufer, kogda zavershitsya vvod-vyvod. Mogut vozniknut' situacii, i eto budet pokazano v sleduyushchih dvuh glavah, kogda yadro ne zapisyvaet dannye nemedlenno na disk. Esli zapis' "otkladyva- etsya", yadro sootvetstvuyushchim obrazom pomechaet bufer, osvobozhdaya ego po algo- ritmu brelse, i prodolzhaet rabotu bez planirovaniya vvoda-vyvoda. YAdro zapi- syvaet blok na disk pered tem, kak drugoj process smozhet perenaznachit' bufer drugomu bloku, kak pokazano v algoritme getblk (sluchaj 3). Mezhdu tem, yadro nadeetsya na to, chto process poluchaet dostup do togo, kak bufer budet perepi- 53 +------------------------------------------------------------+ | algoritm breada /* chtenie bloka s prodvizheniem */ | | vhodnaya informaciya: (1) v fajlovoj sisteme nomer bloka dlya | | nemedlennogo schityvaniya | | (2) v fajlovoj sisteme nomer bloka dlya | | asinhronnogo schityvaniya | | vyhodnaya informaciya: bufer s dannymi, schitannymi nemedlenno| | { | | esli (pervyj blok otsutstvuet v keshe) | | { | | poluchit' bufer dlya pervogo bloka (algoritm getblk);| | esli (dannye v bufere nevernye) | | pristupit' k chteniyu s diska; | | } | | esli (vtoroj blok otsutstvuet v keshe) | | { | | poluchit' bufer dlya vtorogo bloka (algoritm getblk);| | esli (dannye v bufere vernye) | | osvobodit' bufer (algoritm brelse); | | v protivnom sluchae | | pristupit' k chteniyu s diska; | | } | | esli (pervyj blok pervonachal'no nahodilsya v keshe) | | { | | schitat' pervyj blok (algoritm bread); | | vozvratit' bufer; | | } | | priostanovit'sya (do togo momenta, kogda pervyj bufer | | budet soderzhat' vernye dannye); | | vozvratit' bufer; | | } | +------------------------------------------------------------+ Risunok 3.14. Algoritm chteniya bloka s prodvizheniem san na disk; esli etot process vposledstvii izmenit soderzhimoe bufera, yadro proizvedet dopolnitel'nuyu operaciyu po sohraneniyu izmenenij na diske. Otlozhennaya zapis' otlichaetsya ot asinhronnoj zapisi. Vypolnyaya asinhronnuyu +------------------------------------------------------------+ | algoritm bwrite /* zapis' bloka */ | | vhodnaya informaciya: bufer | | vyhodnaya informaciya: otsutstvuet | | { | | pristupit' k zapisi na disk; | | esli (vvod-vyvod sinhronnyj) | | { | | priostanovit'sya (do zaversheniya vvoda-vyvoda); | | osvobodit' bufer (algoritm brelse); | | } | | v protivnom sluchae esli (bufer pomechen dlya otlozhennoj | | zapisi) | | pometit' bufer dlya posleduyushchego razmeshcheniya v | | "golove" spiska svobodnyh buferov; | | } | +------------------------------------------------------------+ Risunok 3.15. Algoritm zapisi diskovogo bloka 54 zapis', yadro zapuskaet diskovuyu operaciyu nemedlenno, no ne dozhidaetsya ee za- versheniya. CHto kasaetsya otlozhennoj zapisi, yadro otdalyaet moment fizicheskoj perepisi na disk naskol'ko vozmozhno; zatem po algoritmu getblk (sluchaj 3) ono pomechaet bufer kak "staryj" i zapisyvaet blok na disk asinhronno. Posle etogo kontroller diska preryvaet rabotu sistemy i osvobozhdaet bufer, ispol'zuya algoritm brelse; bufer pomeshchaetsya v "golovu" spiska svobodnyh buferov, poskol'ku on imeet pometku "staryj". Blagodarya nalichiyu dvuh vypolnyayushchihsya asinhronno ope- racij vvoda-vyvoda - chteniya bloka s prodvizheniem i otlozhennoj zapisi - yadro mozhet zapuskat' programmu brelse iz programmy obrabotki preryvanij. Sledova- tel'no, yadro vynuzhdeno prepyatstvovat' vozniknoveniyu preryvanij pri vypolne- nii lyuboj procedury, rabotayushchej so spiskom svobodnyh buferov, poskol'ku brelse pomeshchaet bufery v etot spisok. 3.5 PREIMUSHCHESTVA I NEUDOBSTVA BUFERNOGO KESHA Ispol'zovanie bufernogo kesha imeet, s odnoj storony, neskol'ko preimu- shchestv i, s drugoj storony, nekotorye neudobstva. * Ispol'zovanie buferov pozvolyaet vnesti edinoobrazie v proceduru obrashche- niya k disku, poskol'ku yadru net neobhodimosti znat' prichinu vvoda-vyvo- da. Vmesto etogo, yadro kopiruet dannye v bufer i iz bufera, nevziraya na to, yavlyayutsya li dannye chast'yu fajla, indeksa ili superbloka. Buferizaciya vvoda-vyvoda s diska povyshaet modul'nost' razrabotki programm, poskol'ku te sostavnye chasti yadra, kotorye zanimayutsya vvodom-vyvodom na disk, ime- yut odin interfejs na vse sluchai. Koroche govorya, uproshchaetsya proektirova- nie sistemy. * Sistema ne nakladyvaet nikakih ogranichenij na vyravnivanie informacii pol'zovatel'skimi processami, vypolnyayushchimi vvod-vyvod, poskol'ku yadro proizvodit vnutrennee vyravnivanie informacii. V razlichnyh apparatnyh realizaciyah chasto trebuetsya vyravnivat' informaciyu dlya vvoda-vyvoda s diska opredelennym obrazom, t.e. proizvodit' k primeru dvuhbajtnoe ili chetyrehbajtnoe vyravnivanie dannyh v pamyati. Bez mehanizma buferizacii programmistam prishlos' by zabotit'sya samim o pravil'nom vyravnivanii dannyh. Po etoj prichine na mashinah s ogranichennymi vozmozhnostyami v vy- ravnivanii adresov voznikaet bol'shoe kolichestvo oshibok programmirovaniya i, krome togo, stanovitsya problemoj perenos programm v operacionnuyu sre- du UNIX. Kopiruya informaciyu iz pol'zovatel'skih buferov v sistemnye bu- fery (i obratno), yadro sistemy ustranyaet neobhodimost' v special'nom vy- ravnivanii pol'zovatel'skih buferov, delaya pol'zovatel'skie programmy bolee prostymi i mobil'nymi. * Blagodarya ispol'zovaniyu bufernogo kesha, sokrashchaetsya ob®em diskovogo tra- fika i vremya reakcii i povyshaetsya obshchaya proizvoditel'nost' sistemy. Pro- cessy, schityvayushchie dannye iz fajlovoj sistemy, mogut obnaruzhit' informa- cionnye bloki v keshe i im ne pridetsya pribegat' ko vvodu-vyvodu s diska. YAdro chasto primenyaet "otlozhennuyu zapis'", chtoby izbezhat' lishnih obrashche- nij k disku, ostavlyaya blok v bufernom keshe i nadeyas' na popadanie bloka v kesh. Ochevidno, chto shansy na takoe popadanie vyshe v sistemah s bol'shim kolichestvom buferov. Tem ne menee, chislo buferov, kotorye mozhno zalozhit' v sisteme, ogranichivaetsya ob®emom pamyati, dostupnoj vypolnyayushchimsya pro- cessam: esli pod bufery zadejstvovat' slishkom mnogo pamyati, to sistema budet rabotat' medlennee v svyazi s tem, chto ej pridetsya zanimat'sya pod- kachkoj i zameshcheniem vypolnyayushchihsya processov. * Algoritmy buferizacii pomogayut podderzhivat' celostnost' fajlovoj siste- my, tak kak oni sohranyayut obshchij, pervonachal'nyj i edinstvennyj obraz diskovyh blokov, soderzhashchihsya v keshe. Esli dva processa odnovremenno po- pytayutsya obratit'sya k odnomu i tomu zhe diskovomu bloku, algoritmy bufe- 55 rizacii (naprimer, getblk) parallel'nyj dostup preobrazuyut v posledova- tel'nyj, predotvrashchaya razrushenie dannyh. * Sokrashchenie diskovogo trafika yavlyaetsya vazhnym preimushchestvom s tochki zre- niya obespecheniya horoshej proizvoditel'nosti ili bystroj reakcii sistemy, odnako strategiya keshirovaniya takzhe imeet nekotorye neudobstva. Tak kak yadro v sluchae otlozhennoj zapisi ne perepisyvaet dannye na disk nemedlen- no, takaya sistema uyazvima dlya sboev, kotorye ostavlyayut diskovye dannye v nekorrektnom vide. Hotya v poslednih versiyah sistemy i sokrashchen ushcherb, nanosimyj katastroficheskimi sboyami, osnovnaya problema ostaetsya: pol'zo- vatel', zaprashivayushchij vypolnenie operacii zapisi, nikogda ne znaet, v kakoj moment dannye zavershat svoj put' na disk (****). * Ispol'zovanie bufernogo kesha trebuet dopolnitel'nogo kopirovaniya infor- macii pri ee schityvanii i zapisi pol'zovatel'skimi processami. Process, zapisyvayushchij dannye, peredaet ih yadru i yadro kopiruet dannye na disk; process, schityvayushchij dannye, poluchaet ih ot yadra, kotoroe chitaet dannye s diska. Pri peredache bol'shogo kolichestva dannyh dopolnitel'noe kopiro- vanie otricatel'nym obrazom otrazhaetsya na proizvoditel'nosti sistemy, odnako pri peredache nebol'shih ob®emov dannyh proizvoditel'nost' povysha- etsya, poskol'ku yadro buferizuet dannye (ispol'zuya algoritm getblk i ot- lozhennuyu zapis') do teh por, poka eto predstavlyaetsya effektivnym s tochki zreniya ekonomii vremeni raboty s diskom. 3.6 VYVODY V dannoj glave byla rassmotrena struktura bufernogo kesha i razlichnye sposoby, kotorymi yadro razmeshchaet bloki v keshe. V algoritmah buferizacii so- chetayutsya neskol'ko prostyh idej, kotorye v summe obespechivayut rabotu meha- nizma keshirovaniya. Pri rabote s blokami v bufernom keshe yadro ispol'zuet al- goritm zameny buferov, k kotorym naibolee dolgo ne bylo obrashchenij, predpola- gaya, chto k blokam, k kotorym nedavno bylo obrashchenie, veroyatno, vskore obratyatsya snova. Ocherednost', v kotoroj bufery poyavlyayutsya v spiske svobodnyh buferov, soot- vetstvuet ocherednosti ih predydushchego ispol'zovaniya. Ostal'nye algoritmy obs- luzhivaniya buferov, tipa "pervym prishel - pervym vyshel" i zameshcheniya redko is- pol'zuemyh, libo yavlyayutsya bolee slozhnymi v realizacii, libo snizhayut procent popadaniya v kesh. Ispol'zovanie funkcii heshirovaniya i hesh-ocheredej daet yadru vozmozhnost' uskorit' poisk zadannyh blokov, a ispol'zovanie dvunapravlennyh ukazatelej v spiskah oblegchaet isklyuchenie buferov. YAdro identificiruet nuzhnyj emu blok po nomeru logicheskogo ustrojstva i nomeru bloka. Algoritm getblk prosmatrivaet bufernyj kesh v poiskah bloka i, esli bufer prisutstvuet i svoboden, blokiruet bufer i vozvrashchaet ego. Esli bufer zablokirovan, obrativshijsya k nemu process priostanavlivaetsya do teh por, poka bufer ne osvoboditsya. Mehanizm blokirovaniya garantiruet, chto tol'- ko odin process v kazhdyj moment vremeni rabotaet s buferom. Esli v keshe blok otsutstvuet, yadro naznachaet bloku svobodnyj bufer, blokiruet i vozvrashchaet ego. Algoritm bread vydelyaet bloku bufer i pri neobhodimosti chitaet tuda in- formaciyu. Algoritm bwrite kopiruet informaciyu v predvaritel'no vydelennyj bufer. Esli pri vypolnenii ukazannyh algoritmov yadro ne uvidit neobhodimosti v nemedlennom kopirovanii dannyh na disk, ono pometit bufer dlya "otlozhennoj zapisi", chtoby izbezhat' izlishnego vvoda-vyvoda. K sozhaleniyu, procedura otk- --------------------------------------- (****) Standartnyj nabor operacij vvoda-vyvoda v programmah na yazyke Si vklyuchaet operaciyu fflush. |ta funkciya zanimaetsya podkachivaniem dannyh iz buferov v pol'zovatel'skom adresnom prostranstve v rabochuyu oblast' yadra. Tem ne menee pol'zovatelyu ne izvestno, kogda yadro zapishet dan- nye na disk. 56 ladyvaniya zapisi soprovozhdaetsya tem, chto process nikogda ne uveren, v kakoj moment dannye fizicheski popadayut na disk. Esli yadro zapisyvaet dannye na disk sinhronno, ono poruchaet drajveru diska peredat' blok fajlovoj sisteme i zhdet preryvaniya, soobshchayushchego ob okonchanii vvoda-vyvoda. Sushchestvuet mnozhestvo sposobov ispol'zovaniya yadrom bufernogo kesha. Pos- redstvom bufernogo kesha yadro obespechivaet obmen dannymi mezhdu prikladnymi programmami i fajlovoj sistemoj, peredachu dopolnitel'noj sistemnoj informa- cii, naprimer, indeksov, mezhdu algoritmami yadra i fajlovoj sistemoj. YAdro takzhe ispol'zuet bufernyj kesh, kogda chitaet programmy v pamyat' dlya vypolne- niya. V sleduyushchih glavah budet rassmotreno mnozhestvo algoritmov, ispol'zuyushchih procedury, opisannye v dannoj glave. Drugie algoritmy, kotorye keshiruyut in- deksy i stranicy pamyati, takzhe ispol'zuyut priemy, pohozhie na te, chto opisany dlya bufernogo kesha. 3.7 UPRAZHNENIYA 1. Rassmotrim funkciyu heshirovaniya primenitel'no k Risunku 3.3. Nailuchshej funkciej heshirovaniya yavlyaetsya ta, kotoraya edinym obrazom raspredelyaet bloki mezhdu hesh-ocheredyami. CHto Vy mogli by predlozhit' v kachestve opti- mal'noj funkcii heshirovaniya ? Dolzhna li eta funkciya v svoih raschetah is- pol'zovat' logicheskij nomer ustrojstva ? 2. V algoritme getblk, esli yadro udalyaet bufer iz spiska svobodnyh buferov, ono dolzhno povysit' prioritet preryvaniya raboty processora tak, chtoby blokirovat' preryvaniya do proverki spiska. Pochemu ? *3. V algoritme getblk yadro dolzhno povysit' prioritet preryvaniya raboty pro- cessora tak, chtoby blokirovat' preryvaniya do proverki zanyatosti bloka. (|to ne pokazano v tekste.) Pochemu ? 4. V algoritme brelse yadro pomeshchaet bufer v "golovu" spiska svobodnyh bufe- rov, esli soderzhimoe bufera neverno. Esli soderzhimoe bufera neverno, dol- zhen li bufer poyavit'sya v hesh-ocheredi ? 5. Predpolozhim, chto yadro vypolnyaet otlozhennuyu zapis' bloka. CHto proizojdet, kogda drugoj process vyberet etot blok iz ego heshocheredi ? Iz spiska svo- bodnyh buferov ? *6. Esli neskol'ko processov osparivayut bufer, yadro garantiruet, chto ni odin iz nih ne priostanovitsya navsegda, no ne garantiruet, chto process ne "za- visnet" i dozhdetsya polucheniya bufera. Peredelajte algoritm getblk tak, chtoby processu bylo v konechnom itoge garantirovano poluchenie bufera. 7. Peredelajte algoritmy getblk i brelse tak, chtoby yadro sledovalo ne sheme zameshcheniya buferov, k kotorym naibolee dolgo ne bylo obrashchenij, a sheme "pervym prishel - pervym vyshel". Povtorite to zhe samoe so shemoj zameshcheniya redko ispol'zuemyh buferov. 8. Opishite situaciyu v algoritme bread, kogda informaciya v bufere uzhe verna. *9. Opishite razlichnye situacii, vstrechayushchiesya v algoritme breada. CHto proi- zojdet v sluchae sleduyushchego vypolneniya algoritma bread ili breada, kogda tekushchij blok prochitan s prodvizheniem ? V algoritme breada, esli pervyj ili vtoroj blok otsutstvuet v keshe, v dal'nejshem pri proverke pravil'nos- ti soderzhimogo bufera predpolagaetsya, chto blok mog byt' v bufernom pule. Kak eto mozhet byt' ? 10. Opishite algoritm, zaprashivayushchij i poluchayushchij lyuboj svobodnyj bufer iz bufernogo pula. Sravnite etot algoritm s getblk. 11. V razlichnyh sistemnyh operaciyah, takih kak umount i sync (glava 5), tre- buetsya, chtoby yadro perekachivalo na disk soderzhimoe vseh buferov, kotorye pomecheny dlya "otlozhennoj zapisi" v dannoj fajlovoj sisteme. Opishite al- goritm, realizuyushchij perekachku buferov. CHto proizojdet s ocherednost'yu raspolozheniya buferov v spiske svobodnyh buferov v rezul'tate etoj opera- cii ? Kak yadro mozhet garantirovat', chto ni odin drugoj process ne podbe- retsya k buferu s pometkoj "otlozhennaya zapis'" i ne smozhet perepisat' ego soderzhimoe v fajlovuyu sistemu, poka process perekachki priostanovlen v 57 ozhidanii zaversheniya operacii vvoda-vyvoda ? 12. Opredelim vremya reakcii sistemy kak srednee vremya vypolneniya sistemnogo vyzova. Opredelim propusknuyu sposobnost' sistemy kak kolichestvo proces- sov, kotorye sistema mozhet vypolnyat' v dannyj period vremeni. Ob®yasnite, kak bufernyj kesh mozhet sposobstvovat' povysheniyu reakcii sistemy. Sposob- stvuet li on s neizbezhnost'yu uvelicheniyu propusknoj sposobnosti sistemy ? 58