ogut nahodit'sya neskol'ko processov. Process podkach- ki vygruzhaet odin za drugim celye processy, poka ob®em dostupnoj pamyati v sisteme ne prevysit verhnyuyu otmetku. Na kazhdyj vygruzhennyj process prihodit- sya odin process, zagruzhennyj v pamyat' iz sostoyaniya "gotovnosti k vypolneniyu, buduchi zarezervirovannym". YAdro zagruzhaet eti processy ne s pomoshch'yu obychnogo algoritma podkachki, a putem obrabotki otkazov pri obrashchenii k sootvetstvuyu- shchim stranicam. Na posleduyushchih iteraciyah processa podkachki pri uslovii nali- chiya v sisteme dostatochnogo ob®ema svobodnoj pamyati budut obrabotany otkazy, poluchennye drugimi pol'zovatel'skimi processami. Primenenie takogo metoda vedet k snizheniyu chastoty vozniknoveniya sistemnyh otkazov i ustraneniyu soper- nichestva: po ideologii on blizok k metodam, ispol'zuemym v operacionnoj sis- teme VAX/VMS ([Levy 82]). 286 9.4 VYVODY Prochitannaya glava byla posvyashchena rassmotreniyu algoritmov podkachki pro- cessov i zameshcheniya stranic, ispol'zuemyh v versii V sistemy UNIX. Algoritm podkachki processov realizuet peremeshchenie processov celikom mezhdu osnovnoj pamyat'yu i ustrojstvom vygruzki. YAdro vygruzhaet processy iz pamyati, esli ih razmer pogloshchaet vsyu svobodnuyu pamyat' v sisteme (v rezul'tate vypolneniya funkcij fork, exec i sbrk ili v rezul'tate estestvennogo uvelicheniya steka), ili v tom sluchae, esli trebuetsya osvobodit' pamyat' dlya zagruzki processa. Zagruzku processov vypolnyaet special'nyj process podkachki (process 0), koto- ryj zapuskaetsya vsyakij raz, kak na ustrojstve vygruzki poyavlyayutsya processy, gotovye k vypolneniyu. Process podkachki ne prekrashchaet svoej raboty do teh por, poka na ustrojstve vygruzki ne ostanetsya ni odnogo takogo processa ili poka v osnovnoj pamyati ne ostanetsya svobodnogo mesta. V poslednem sluchae process podkachki pytaetsya vygruzit' chto-nibud' iz osnovnoj pamyati, no v ego obyazannosti vhodit takzhe slezhenie za soblyudeniem trebovaniya minimal'noj pro- dolzhitel'nosti prebyvaniya vygruzhaemyh processov v pamyati (v celyah predotvra- shcheniya holostoj perekachki); po etoj prichine process podkachki ne vsegda dosti- gaet uspeha v svoej rabote. Vozobnovlenie processa podkachki v sluchae voznik- noveniya neobhodimosti v nem proizvodit s intervalom v odnu sekundu programma obrabotki preryvanij po tajmeru. V sisteme s zameshcheniem stranic po zaprosu processy mogut ispolnyat'sya, dazhe esli ih virtual'noe adresnoe prostranstvo zagruzheno v pamyat' ne pol- nost'yu; poetomu virtual'nyj razmer processa mozhet prevyshat' ob®em dostupnoj fizicheskoj pamyati v sisteme. Kogda yadro ispytyvaet potrebnost' v svobodnyh stranicah, "sborshchik" stranic prosmatrivaet vse aktivnye stranicy v kazhdoj oblasti, pomechaya dlya vygruzki te iz nih, kotorye dostatochno "sozreli" dlya etogo, i v konechnom itoge otkachivaet ih na ustrojstvo vygruzki. Kogda pro- cess obrashchaetsya k virtual'noj stranice, kotoraya v nastoyashchij moment vygruzhena iz pamyati, on poluchaet otkaz iz-za nedostupnosti dannyh. YAdro zapuskaet programmu obrabotki otkaza, kotoraya naznachaet oblasti novuyu fizicheskuyu stra- nicu pamyati i kopiruet v nee soderzhimoe virtual'noj stranicy. Povysit' proizvoditel'nost' sistemy pri ispol'zovanii algoritma zameshche- niya stranic po zaprosu mozhno neskol'kimi sposobami. Vo-pervyh, esli process vyzyvaet funkciyu fork, yadro ispol'zuet bit kopirovaniya pri zapisi, tem samym v bol'shinstve sluchaev snimaya neobhodimost' v fizicheskom kopirovanii stranic. Vo-vtoryh, yadro mozhet zaprosit' soderzhimoe stranicy ispolnyaemogo fajla pryamo iz fajlovoj sistemy, ustranyaya potrebnost' v vyzove funkcii exec dlya nezamed- litel'nogo schityvaniya fajla v pamyat'. |to sposobstvuet povysheniyu proizvodi- tel'nosti, poskol'ku ne isklyuchena vozmozhnost' togo, chto podobnye stranicy tak nikogda i ne potrebuyutsya processu, i ustranyaet izlishnyuyu holostuyu pere- kachku, imeyushchuyu mesto v tom sluchae, esli "sborshchik" stranic vygruzhaet eti stranicy iz pamyati do togo, kak v nih voznikaet potrebnost'. 9.5 UPRAZHNENIYA 1. Nabrosajte shemu realizacii algoritma mfree, kotoryj osvobozhdaet prost- ranstvo pamyati i vozvrashchaet ego tablice svobodnogo prostranstva. 2. V razdele 9.1.2 utverzhdaetsya, chto sistema blokiruet peremeshchaemyj pro- cess, chtoby drugie processy ne mogli ego trogat' s mesta do momenta okonchaniya operacii. CHto proizoshlo by, esli by sistema ne delala etogo ? 3. Predpolozhim, chto v adresnom prostranstve processa raspolagayutsya tablicy ispol'zuemyh processom segmentov i stranic. Kakim obrazom yadro mozhet vygruzit' eto prostranstvo iz pamyati? 4. Esli stek yadra nahoditsya vnutri adresnogo prostranstva processa, pochemu process ne mozhet vygruzhat' sebya sam ? Kakoj na Vash vzglyad dolzhna byt' sistemnaya programma vygruzki processov, kak ona dolzhna zapuskat'sya ? *5. Predpolozhim, chto yadro pytaetsya vygruzit' process, chtoby osvobodit' mes- 287 to v pamyati dlya drugih processov, zagruzhaemyh s ustrojstva vygruzki. Esli ni na odnom iz ustrojstv vygruzki dlya dannogo processa net mesta, process podkachki priostanavlivaet svoyu rabotu do teh por, poka mesto ne poyavitsya. Vozmozhna li situaciya, pri kotoroj vse processy, nahodyashchiesya v pamyati, priostanovleny, a vse gotovye k vypolneniyu processy nahodyatsya na ustrojstve vygruzki ? CHto nuzhno predprinyat' yadru dlya togo, chtoby is- pravit' eto polozhenie ? 6. Rassmotrite eshche raz primer, privedennyj na Risunke 9.10, pri uslovii, chto v pamyati est' mesto tol'ko dlya 1 processa. 7. Obratimsya k primeru, privedennomu na Risunke 9.11. Sostav'te podobnyj primer, v kotorom processu postoyanno trebuetsya dlya raboty central'nyj processor. Sushchestvuet li kakoj-nibud' sposob snyatiya podobnoj napryazhen- nosti ? +----------------------------------+ | main() | | { | | f(); | | g(); | | } | | | | f() | | { | | vfork(); | | } | | | | g() | | { | | int blast[100],i; | | for (i = 0; i < 100; i++) | | blast[i] = i; | | } | +----------------------------------+ Risunok 9.29 8. CHto proizojdet v rezul'tate vypolneniya programmy, privedennoj na Risun- ke 9.29, v sisteme BSD 4.2 ? Kakim budet stek processa-roditelya ? 9. Pochemu posle vypolneniya funkcii fork processa-potomka predpochtitel'nee zapuskat' vperedi processa-roditelya, esli na razdelyaemyh stranicah bity kopirovaniya pri zapisi ustanovleny ? Kakim obrazom yadro mozhet zastavit' potomka zapustit'sya pervym ? *10. Algoritm obrabotki otkaza iz-za nedostupnosti dannyh, izlozhennyj v tek- ste, zagruzhaet stranicy poodinochke. Ego effektivnost' mozhno povysit', esli podgotovit' k zagruzke pomimo stranicy, vyzvavshej otkaz, i vse so- sednie s nej stranicy. Pererabotajte ishodnyj algoritm s uchetom ukazan- noj operacii. 11. V algoritmah raboty "sborshchika" stranic i programmy obrabotki otkazov iz-za nedostupnosti dannyh predpolagaetsya, chto razmer stranicy raven razmeru diskovogo bloka. CHto nuzhno izmenit' v etih algoritmah dlya togo, chtoby oni rabotali i v teh sluchayah, kogda ukazannoe ravenstvo ne soblyu- daetsya ? *12. Kogda process vyzyvaet funkciyu fork (vetvitsya), znachenie schetchika ssy- lok na kazhduyu razdelyaemuyu stranicu (v tablice pfdata) uvelichivaetsya. Predpolozhim, chto "sborshchik" stranic vygruzhaet razdelyaemuyu stranicu na ustrojstvo vygruzki, i odin iz processov (skazhem, roditel') vposledst- vii poluchaet otkaz pri obrashchenii k nej. Soderzhimoe virtual'noj stranicy teper' raspolagaetsya na fizicheskoj stranice. Ob®yasnite, pochemu pro- cess-potomok vsegda imeet vozmozhnost' poluchit' vernuyu kopiyu stranicy, 288 dazhe posle togo, kak process-roditel' chto-to zapishet na nee. Pochemu, kogda process-roditel' vedet zapis' na stranicu, on dolzhen nemedlenno porvat' svyaz' s ee diskovoj kopiej ? 13. CHto sleduet predprinyat' programme obrabotki otkazov v tom sluchae, esli v sisteme ischerpany stranicy pamyati ? *14. Sostav'te algoritm vygruzki redko ispol'zuemyh komponent yadra. Kakie iz komponent nel'zya vygruzhat' i kak ih v takom sluchae sleduet oboznachit' ? 15. Pridumajte algoritm, otslezhivayushchij vydelenie prostranstva na ustrojstve vygruzki, ispol'zuya vmesto kart pamyati, opisannyh v nastoyashchej glave, bitovyj massiv. Sravnite effektivnost' oboih metodov. 16. Predpolozhim, chto v mashine net apparatno-ustanavlivaemogo bita dostup- nosti, no est' kod zashchity, ustanavlivayushchij prava dostupa na chtenie, za- pis' i "ispolnenie" soderzhimogo stranicy. Smodelirujte rabotu s pomoshch'yu programmno-ustanavlivaemogo bita dostupnosti. 17. V mashine VAX-11 pered proverkoj nalichiya otkazov iz-za nedostupnosti dannyh vypolnyaetsya apparatnaya proverka nalichiya otkazov sistemy zashchity. Kak eto otrazhaetsya na algoritmah obrabotki otkazov ? 18. Sistemnaya funkciya plock daet superpol'zovatelyu vozmozhnost' ustanavli- vat' i snimat' blokirovku (v pamyati) na oblastyah komand i dannyh vyzy- vayushchego processa. Process podkachki i "sborshchik" stranic ne mogut vygru- zhat' zablokirovannye stranicy iz pamyati. Processam, ispol'zuyushchim etu sistemnuyu funkciyu, ne prihoditsya dozhidat'sya zagruzki stranic, poetomu im garantirovan bolee bystryj otvet po sravneniyu s drugimi processami. Sleduet li imet' takzhe vozmozhnost' blokirovki v pamyati i oblasti steka ? CHto proizojdet v tom sluchae, esli summarnyj ob®em zablokirovannyh ob- lastej prevysit razmer dostupnoj pamyati v mashine ? 19. CHto delaet programma, privedennaya na Risunke 9.30 ? Podumajte nad al'- ternativnoj strategiej zameshcheniya stranic, v sootvetstvii s kotoroj v rabochee mnozhestvo kazhdogo processa vklyuchaetsya maksimal'no-vozmozhnoe chislo stranic. +------------------------------------------------------------+ | struct fourmeg | | { | | int page[512]; /* pust' int zanimaet 4 bajta */ | | } fourmeg[2048]; | | | | main() | | { for (;;) | | { | | switch(fork()) | | { | | case -1: /* process-roditel' ne mozhet vypolnit' | | * fork --- slishkom mnogo potomkov */ | | case 0: /* potomok */ | | func(); | | default: | | continue; | | } } } | | | | func() | | { int i; | | | | for (;;) | | { | | printf("process %d povtoryaet cikl\n",getpid()); | | for (i = 0; i < 2048; i++) | | fourmeg[i]290ge[0] = i; | | } } | +------------------------------------------------------------+ 289