eme stanet men'she nizhnej otmetki, poetomu "sborshchi- ku" stranic ne prihoditsya uzhe tak chasto vypolnyat' svoyu rabotu. Optimal'nyj vybor urovnej verhnej i nizhnej otmetok administratorom povyshaet proizvodi- tel'nost' sistemy. Kogda "sborshchik" stranic prinimaet reshenie vygruzit' stranicu iz pamyati, on proveryaet vozmozhnost' nahozhdeniya kopii etoj stranicy na ustrojstve vyg- ruzki. Pri etom mogut imet' mesto tri sluchaya: Sostoyanie stranicy Vremya (poslednego upominaniya) +----------------------+-----------+ | V pamyati | 0 | +----------------------+-----------+ | | 1 | +----------------------+-----------+ | | 2 | +----------------------+-----------+ Ssylka na stranicu | | 0 | +----------------------+-----------+ | | 1 | +----------------------+-----------+ Ssylka na stranicu | | 0 | +----------------------+-----------+ | | 1 | +----------------------+-----------+ | | 2 | +----------------------+-----------+ | | 3 | +----------------------+-----------+ Stranica vygruzhena | Vne pamyati | | +----------------------+-----------+ Risunok 9.19. Primer "sozrevaniya" stranicy 275 1. Esli na ustrojstve vygruzki est' kopiya stranicy, yadro "planiruet" vyg- ruzku stranicy: "sborshchik" stranic pomeshchaet ee v spisok vygruzhennyh stra- nic i perehodit dal'she; vygruzka schitaetsya logicheski zavershivshejsya. Kog- da chislo stranic v spiske prevysit ogranichenie (opredelyaemoe vozmozhnos- tyami diskovogo kontrollera), yadro perepisyvaet stranicy na ustrojstvo vygruzki. 2. Esli na ustrojstve vygruzki uzhe est' kopiya stranicy i ee soderzhimoe ni- chem ne otlichaetsya ot soderzhimogo stranicy v pamyati (bit modifikacii v zapisi tablicy stranic ne ustanovlen), yadro sbrasyvaet v nol' bit dos- tupnosti (v toj zhe zapisi tablicy), umen'shaet znachenie schetchika ssylok v tablice pfdata i pomeshchaet zapis' v spisok svobodnyh stranic dlya budushchego perenaznacheniya. 3. Esli na ustrojstve vygruzki est' kopiya stranicy, no process izmenil so- derzhimoe ee originala v pamyati, yadro planiruet vygruzku stranicy i osvo- bozhdaet zanimaemoe ee kopiej mesto na ustrojstve vygruzki. "Sborshchik" stranic kopiruet stranicu na ustrojstvo vygruzki, esli imeyut mesto sluchai 1 i 3. CHtoby proillyustrirovat' razlichiya mezhdu poslednimi dvumya sluchayami, pred- polozhim, chto stranica nahoditsya na ustrojstve vygruzki i zagruzhaetsya v os- novnuyu pamyat' posle togo, kak process stolknulsya s otsutstviem neobhodimyh dannyh. Dopustim, yadro ne stalo avtomaticheski udalyat' kopiyu stranicy na dis- ke. V konce koncov, "sborshchik" stranic vnov' primet reshenie vygruzit' strani- cu. Esli s momenta zagruzki v pamyat' v stranicu ne proizvodilas' zapis' dan- nyh, soderzhimoe stranicy v pamyati identichno soderzhimomu ee diskovoj kopii i v perepisi stranicy na ustrojstvo vygruzki neobhodimosti ne voznikaet. Odna- ko, esli process uspel chto-to zapisat' na stranicu, staryj i novyj ee vari- anty budut razlichat'sya, poetomu yadru sleduet perepisat' stranicu na ustrojs- tvo vygruzki, osvobodiv predvaritel'no mesto, zanimaemoe na ustrojstve sta- rym variantom. YAdro ne srazu ispol'zuet osvobozhdennoe prostranstvo na ust- rojstve vygruzki, poetomu ono imeet vozmozhnost' podderzhivat' nepreryvnoe razmeshchenie zanyatyh uchastkov, chto povyshaet effektivnost' ispol'zovaniya oblas- ti vygruzki. "Sborshchik" stranic zapolnyaet spisok vygruzhennyh stranic, kotorye v prin- cipe mogut prinadlezhat' raznym oblastyam, i po zapolnenii spiska otkachivaet ih na ustrojstvo vygruzki. Net neobhodimosti v tom, chtoby vse stranicy odno- go processa nepremenno vygruzhalis': k primeru, nekotorye iz stranic, vozmozh- no, nedostatochno "sozreli" dlya etogo. V etom viditsya razlichie so strategiej vygruzki processov, soglasno kotoroj iz pamyati vygruzhayutsya vse stranicy od- nogo processa, vmeste s tem metod perepisi dannyh na ustrojstvo vygruzki identichen tomu metodu, kotoryj opisan dlya sistemy s zameshcheniem processov v razdele 9.1.2. Esli na ustrojstve vygruzki nedostatochno nepreryvnogo prost- ranstva, yadro vygruzhaet stranicy po otdel'nosti (po odnoj stranice za opera- ciyu), chto v konechnom itoge obhoditsya nedeshevo. V sisteme s zameshcheniem stra- nic fragmentaciya na ustrojstve vygruzki vyshe, chem v sisteme s zameshcheniem processov, poskol'ku yadro vygruzhaet bloki stranic, no zagruzhaet v pamyat' kazhduyu stranicu v otdel'nosti. Kogda yadro perepisyvaet stranicu na ustrojstvo vygruzki, ono sbrasyvaet bit dostupnosti v sootvetstvuyushchej zapisi tablicy stranic i umen'shaet znache- nie schetchika ssylok v sootvetstvuyushchej zapisi tablicy pfdata. Esli znachenie schetchika stanovitsya ravnym 0, zapis' tablicy pfdata pomeshchaetsya v konec spis- ka svobodnyh stranic i zapominaetsya dlya posleduyushchego perenaznacheniya. Esli znachenie schetchika otlichno ot 0, eto oznachaet, chto stranica (v rezul'tate vy- polneniya funkcii fork) ispol'zuetsya sovmestno neskol'kimi processami, no yad- ro vse ravno vygruzhaet ee. Nakonec, yadro vydelyaet prostranstvo na ustrojstve vygruzki, sohranyaet ego adres v deskriptore diskovogo bloka i uvelichivaet znachenie schetchika ssylok na stranicu v tablice ispol'zovaniya oblasti podkach- ki. Esli v to vremya, poka stranica nahoditsya v spiske svobodnyh stranic, process obnaruzhil ee otsutstvie, poluchiv sootvetstvuyushchuyu oshibku, yadro mozhet 276 vosstanovit' ee v pamyati, ne obrashchayas' k ustrojstvu vygruzki. Odnako, stra- nica vse ravno budet schitat'sya vygruzhennoj, esli ona popala v spisok "sbor- shchika" stranic. Predpolozhim, k primeru, chto "sborshchik" stranic vygruzhaet 30, 40, 50 i 20 stranic iz processov A, B, C i D, sootvetstvenno, i chto za odnu operaciyu vygruzki na diskovoe ustrojstvo otkachivayutsya 64 stranicy. Na Risunke 9.20 pokazana posledovatel'nost' imeyushchih pri etom mesto operacij vygruzki pri us- lovii, chto "sborshchik" stranic osushchestvlyaet prosmotr stranic processov v oche- rednosti: A, B, C, D. "Sborshchik" vydelyaet na ustrojstve vygruzki mesto dlya 64 stranic i vygruzhaet 30 stranic processa A i 34 stranicy processa B. Zatem on vydelyaet mesto dlya sleduyushchih 64 stranic i vygruzhaet ostavshiesya 6 stranic processa B, 50 stranic processa C i 8 stranic processa D. Vydelennye dlya razmeshcheniya stranic za dve operacii uchastki oblasti vygruzki mogut byt' i nesmezhnymi. "Sborshchik" sohranyaet ostavshiesya 12 stranic processa D v spiske vygruzhaemyh stranic, no ne vygruzhaet ih do teh por, poka spisok ne budet za- polnen do konca. Kak tol'ko u processov voznikaet potrebnost' v podkachke stranic s ustrojstva vygruzki ili esli stranicy bol'she ne nuzhny ispol'zuyushchim ih processam (processy zavershilis'), v oblasti vygruzki osvobozhdaetsya mesto. CHtoby podvesti itog, vydelim v processe otkachki stranicy iz pamyati dve fazy. Na pervoj faze "sborshchik" stranic ishchet stranicy, podhodyashchie dlya vygruz- ki, i pomeshchaet ih nomera v spisok vygruzhaemyh stranic. Na vtoroj faze yadro kopiruet stranicu na ustrojstvo vygruzki (esli na nem imeetsya mesto), sbra- syvaet v nol' bit dopustimosti v sootvetstvuyushchej zapisi tablicy stranic, umen'shaet znachenie schetchika ssylok v sootvetstvuyushchej zapisi tablicy pfdata Stranicy vygruzhayutsya gruppami po 64 stranicy +--------------------+ +-------------------+ +-------------------+ |Process A 30 str-c | |Process B 6 str-c | |Process D 12 str-c | | | | | | - | |Process B 34 str-cy| |Process C 50 str-c| | - | +--------------------+ | | | - | - - |Process D 8 str-c | +-------------------+ - -+-------------------+ - - - - - - - - - - - - - - - - - - - - +-------+-------------------+-------+-----------------+----------+ | | A 30 B 34 | | B 6 C 50 D 8 | | +-------+-------------------+-------+-----------------+----------+ Ustrojstvo vygruzki Risunok 9.20. Vydelenie prostranstva na ustrojstve vygruzki v sisteme s zameshcheniem stranic i esli ono stanovitsya ravnym 0, pomeshchaet etu zapis' v konec spiska svobodnyh stranic. Soderzhimoe fizicheskoj stranicy v pamyati ne izmenyaetsya do teh por, poka stranica ne budet perenaznachena drugomu processu. 9.2.3 Otkazy pri obrashcheniyah k stranicam V sisteme vstrechayutsya dva tipa otkazov pri obrashchenii k stranice: otkazy iz-za otsutstviya (nedostupnosti) dannyh i otkazy sistemy zashchity. Poskol'ku programmy obrabotki preryvanij po otkazu mogut priostanavlivat' svoe vypol- nenie na vremya schityvaniya stranicy s diska v pamyat', eti programmy yavlyayutsya isklyucheniem iz obshchego pravila, utverzhdayushchego nevozmozhnost' priostanova obra- botchikov preryvanij. Tem ne menee, poskol'ku programma obrabotki preryvanij 277 po otkazu priostanavlivaetsya v kontekste processa, porodivshego fatal'nuyu oshibku pamyati, otkaz otnositsya k tekushchemu processu; sledovatel'no, processy priostanavlivayutsya ne proizvol'nym obrazom. 9.2.3.1 Obrabotka preryvanij po otkazu iz-za nedostupnosti dannyh Esli process pytaetsya obratit'sya k stranice, bit dostupnosti dlya kotoroj ne ustanovlen, on poluchaet otkaz iz-za otsutstviya (nedostupnosti) dannyh i yadro zapuskaet programmu obrabotki preryvanij po otkazu dannogo tipa (Risu- nok 9.21). Bit dostupnosti ne ustanavlivaetsya ni dlya teh stranic, kotorye raspolagayutsya za predelami virtual'nogo adresnogo prostranstva processa, ni dlya teh, kotorye vhodyat v sostav etogo prostranstva, no ne imeyut v nastoyashchij moment fizicheskogo analoga v pamyati. Fatal'naya oshibka pamyati proizoshla v re- zul'tate obrashcheniya yadra po virtual'nomu adresu stranicy, poetomu yadro vyho- dit na sootvetstvuyushchuyu etoj stranice zapis' v tablice stranic i deskriptor diskovogo bloka. CHtoby predotvratit' vzaimnuyu blokirovku, kotoraya mozhet pro- izojti, esli "sborshchik" popytaetsya vygruzit' stranicu iz pamyati, yadro fiksi- ruet v pamyati oblast' s sootvetstvuyushchej zapis'yu tablicy stranic. Esli v des- kriptore diskovogo bloka otsutstvuet informaciya o stranice, sdelannaya ssylka na stranicu yavlyaetsya nedopustimoj i yadro posylaet proces- su-narushitelyu signal o "narushenii segmentacii" (sm. Risunok 7.25). Takoj po- ryadok dejstvij sovpadaet s tem poryadkom, kotorogo priderzhivaetsya yadro, kogda process obratilsya po nevernomu adresu, esli ne prinimat' vo vnimanie to obs- toyatel'stvo, chto yadro uznaet ob oshibke nemedlenno, tak kak vse "dostupnye" stranicy yavlyayutsya rezidentnymi v pamyati. Esli ssylka na stranicu sdelana pravil'no, yadro vydelyaet fizicheskuyu stranicu v pamyati i schityvaet v nee so- derzhimoe virtual'noj stranicy s ustrojstva vygruzki ili iz ispolnyaemogo faj- la. Stranica, vyzvavshaya otkaz, nahoditsya v odnom iz pyati sostoyanij: 1. Na ustrojstve vygruzki vne pamyati. 2. V spiske svobodnyh stranic v pamyati. 3. V ispolnyaemom fajle. 4. S pometkoj "obnulyaemaya pri obrashchenii". 5. S pometkoj "zapolnyaemaya pri obrashchenii". Rassmotrim kazhdyj sluchaj v podrobnostyah. Esli stranica nahoditsya na ustrojstve vygruzki, vne pamyati (sluchaj 1), eto oznachaet, chto ona kogda-to raspolagalas' v pamyati, no byla vygruzhena ot- tuda "sborshchikom" stranic. Obrativshis' k deskriptoru diskovogo bloka, yadro uznaet iz nego nomera ustrojstva vygruzki i bloka, gde raspolozhena stranica, i proveryaet, ne ostalas' li stranica v keshe. YAdro korrektiruet zapis' tabli- cy stranic tak, chtoby ona ukazyvala na stranicu, kotoruyu predpolagaetsya schi- tat' v pamyat', vklyuchaet sootvetstvuyushchuyu zapis' tablicy pfdata v hesh-ochered' (oblegchaya posleduyushchuyu obrabotku otkaza) i schityvaet stranicu s ustrojstva vygruzki. Dopustivshij oshibku process priostanavlivaetsya do momenta zavershe- niya vvoda-vyvoda; vmeste s nim budut vozobnovleny vse processy, ozhidavshie zagruzki soderzhimogo stranicy. Obratimsya k Risunku 9.22 i v kachestve primera rassmotrim zapis' tablicy stranic, svyazannuyu s virtual'nym adresom 66K. Esli pri obrashchenii k stranice process poluchaet otkaz iz-za nedostupnosti dannyh, programma obrabotki otka- za obrashchaetsya k deskriptoru diskovogo bloka i obnaruzhivaet to, chto stranica nahoditsya na ustrojstve vygruzki v bloke s nomerom 847 (esli predpolozhit', chto v sisteme tol'ko odno ustrojstvo vygruzki): sledovatel'no, virtual'nyj adres ukazan verno. Zatem programma obrabotki otkaza obrashchaetsya k keshu, no ne nahodit informacii o diskovom bloke s nomerom 847. Takim obrazom, kopiya virtual'noj stranicy v pamyati otsutstvuet i programma obrabotki otkaza dolzh- na zagruzit' ee s ustrojstva vygruzki. YAdro otvodit fizicheskuyu stranicu s nomerom 1776 (Risunok 9.23), schityvaet v nee s ustrojstva vygruzki soderzhi- moe virtual'noj stranicy i perenastraivaet zapis' tablicy stranic na strani- cu s nomerom 1776. V zavershenie yadro korrektiruet deskriptor diskovogo blo- 278 +------------------------------------------------------------+ | algoritm vfault /* obrabotka otkaza iz-za otsutstviya | | (nedostupnosti) dannyh */ | | vhodnaya informaciya: adres, po kotoromu poluchen otkaz | | vyhodnaya informaciya: otsutstvuet | | { | | najti oblast', zapis' v tablice stranic, deskriptor dis-| | kovogo bloka, svyazannye s adresom, po kotoromu poluchen | | otkaz, zablokirovat' oblast'; | | esli (adres ne prinadlezhit virtual'nomu adresnomu prost-| | ranstvu processa) | | { | | poslat' signal (SIGSEGV: narushenie segmentacii) pro- | | cessu; | | perejti na out; | | } | | esli (adres ukazan neverno) /* vozmozhno, process naho-| | dilsya v sostoyanii pri- | | ostanova */ | | perejti na out; | | esli (stranica imeetsya v keshe) | | { | | ubrat' stranicu iz kesha; | | popravit' zapis' v tablice stranic; | | vypolnyat' poka (soderzhimoe stranicy ne stanet dostup-| | nym) /* drugoj process poluchil takoj zhe otkaz, | | * no ran'she */ | | priostanovit'sya; | | } | | v protivnom sluchae /* stranica otsutstvuet v keshe */| | { | | naznachit' oblasti novuyu stranicu; | | | | pomestit' novuyu stranicu v kesh, otkorrektirovat' za- | | pis' v tablice pfdata; | | esli (stranica ranee ne zagruzhalas' v pamyat' i imeet | | pometku "obnulyaemaya pri obrashchenii") | | ochistit' soderzhimoe stranicy; | | v protivnom sluchae | | { | | schitat' virtual'nuyu stranicu s ustrojstva vygruz-| | ki ili iz ispolnyaemogo fajla; | | priostanovit'sya (do zaversheniya vvoda-vyvoda); | | } | | vozobnovit' processy (ozhidayushchie zagruzki soderzhimogo | | stranicy); | | } | | ustanovit' bit dostupnosti stranicy; | | sbrosit' bit modifikacii i "vozrast" stranicy; | | pereschitat' prioritet processa; | | out: snyat' blokirovku s oblasti; | | } | +------------------------------------------------------------+ Risunok 9.21. Algoritm obrabotki otkaza iz-za otsutstviya (ne- dostupnosti) dannyh 279 ka, delaya ukazanie o tom, chto stranica zagruzhena, a takzhe zapis' tablicy pfdata, otmechaya, chto na ustrojstve vygruzki v bloke s nomerom 847 soderzhitsya dublikat virtual'noj stranicy. Pri obrabotke otkazov iz-za nedostupnosti dannyh yadro ne vsegda pribega- et k vypolneniyu operacii vvoda-vyvoda, dazhe kogda iz deskriptora diskovogo bloka vidno, chto stranica zagruzhena (v sluchae 2). Mozhet sluchit'sya tak, chto yadro posle vygruzki soderzhimogo fizicheskoj stranicy tak i ne pereprisvoilo ee ili zhe kakoj-to inoj process v rezul'tate otkaza zagruzil soderzhimoe vir- tual'noj stranicy v druguyu fizicheskuyu stranicu. V lyubom sluchae programma ob- rabotki otkaza obnaruzhivaet stranicu v keshe, v kachestve klyucha ispol'zuya no- mer bloka v deskriptore diskovogo bloka. Ona perenastraivaet sootvetstvuyushchuyu zapis' v tablice stranic na tol'ko chto najdennuyu stranicu, uvelichivaet zna- chenie schetchika ssylok na stranicu i v sluchae neobhodimosti ubiraet stranicu iz spiska svobodnyh stranic. Predpolozhim, k primeru, chto process po- Zapisi Deskriptory tablicy stranic diskovyh blokov Stranichnye bloki Fizi- cheskaya Disko- Virtual'- stra- Sosto- Sosto- Stra- vyj Schet- nyj adres nica yanie yanie Blok nica blok chik +-----+--------+++-------+---------+ +----+------+----+ 0 | | ||| | | | | | | +-----+--------+++-------+---------+ | | | | 1K | 1648| Nedo- |||V fajle| 3 | | | | | | | stupna ||| | | | | | | +-----+--------+++-------+---------+ | | | | 2K | | ||| | | | | | | +-----+--------+++-------+---------+ | | | | 3K | Net | Nedo- |||Zapolnya| 5 | | | | | | | stupna |||etsya | | | | | | | | |||pri ob-| | | | | | | | |||rashchenii| | | | | | +-----+--------+++-------+---------+ +----+------+----+ 4K | | ||| | | |1036| 387 | 0 | +-----+--------+++-------+---------+ +----+------+----+ - | | ||| | | | - | | | - | | ||| | | | - | | | - | | ||| | | +----+------+----+ - | | ||| | | |1648| 1618 | 1 | +-----+--------+++-------+---------+ +----+------+----+ 64K | 1917| Nedo- |||Na dis-| 1206 | | - | | | | | stupna |||ke | | | - | | | +-----+--------+++-------+---------+ | - | | | 65K | Net | Nedo- |||Obnulya-| | | - | | | | | stupna |||etsya | | | - | | | | | |||pri ob-| | | - | | | | | |||rashchenii| | | - | | | +-----+--------+++-------+---------+ +----+------+----+ 66K | 1036| Nedo- |||Na dis-| 847 | |1861| 1206 | 0 | | | stupna |||ke | | +----+------+----+ +-----+--------+++-------+---------+ | | | | 67K | | ||| | | | | | | +-----+--------+++-------+---------+ +----+------+----+ Risunok 9.22. Illyustraciya k otkazu iz-za nedostupnosti dannyh 280 luchil otkaz pri obrashchenii k virtual'nomu adresu 64K (Risunok 9.22). Prosmat- rivaya kesh, yadro ustanavlivaet, chto stranichnyj blok s nomerom 1861 svyazan s diskovym blokom 1206. YAdro perenastraivaet zapis' tablicy stranic s virtu- al'nym adresom 64K na stranicu s nomerom 1861, ustanavlivaet bit dostupnosti i peredaet upravlenie programme obrabotki otkaza. Takim obrazom, nomer dis- kovogo bloka svyazyvaet vmeste zapisi tablicy stranic i tablicy pfdata, chem i ob®yasnyaetsya ego zapominanie v obeih tablicah. Kak i yadru, programme obrabotki otkaza ne nuzhno schityvat' stranicu v pa- myat', esli kakoj-to inoj process uzhe poluchil otkaz po toj zhe samoj stranice, no eshche ne polnost'yu zagruzil ee. Programma nahodit oblast' s zapis'yu tablicy Zapisi Deskriptory tablicy stranic diskovyh blokov Stranichnye bloki Fizi- cheskaya Disko- Virtual'- stra- Sosto- Sosto- Stra- vyj Schet- nyj adres nica yanie yanie Blok nica blok chik +-----+--------+++-------+---------+ +----+------+----+ 66K | 1776| Dostup-|||Na dis-| 847 | |1776| 847 | 1 | | | na |||ke | | | | | | +-----+--------+++-------+---------+ +----+------+----+ Risunok 9.23. Rezul'tat zagruzki stranicy v pamyat' Process A Process B +------------------------------------------------------------ | Otkaz pri obrashchenii k stra- - - | nice - - | Virtual'nyj adres stranicy - - | veren - - | Priostanov do zaversheniya - - | schityvaniya stranicy - - | - - Otkaz pri obrashchenii k stra- | - - nice | - - Virtual'nyj adres stranicy | - - veren | - - Zagruzka stranicy v pamyat' | - - Priostanov do okonchaniya | - - zagruzki | - - - | Vyhod iz priostanova -- - - | stranica v pamyati - - | Stranica pomechaetsya kak - - | dostupnaya - - | Vyhod iz priostanova drugih - - | processov - - | - Vyhod iz priostanova | Vozobnovlenie vypolneniya - - | - - - | - - Vozobnovlenie vypolneniya | - - - | - - - | Vremya - v Risunok 9.24. Dva otkaza na odnoj stranice 281 stranic, kotoruyu ona uzhe ranee zablokirovala. Ona dozhidaetsya, poka budet za- konchen cikl obrabotki predydushchego otkaza, posle chego obnaruzhivaet, chto stra- nica stala dostupnoj, i zavershaet svoyu rabotu. |ta procedura proslezhivaetsya na Risunke 9.24. Esli kopiya stranicy nahoditsya ne na ustrojstve vygruzki, a v ispolnyaemom fajle (sluchaj 3), yadro zagruzhaet stranicu iz fajla. Programma obrabotki ot- kaza obrashchaetsya k deskriptoru diskovogo bloka, ishchet sootvetstvuyushchij nomer logicheskogo bloka vnutri fajla, soderzhashchego stranicu, i indeks, associiro- vannyj s zapis'yu tablicy oblastej. Nomer logicheskogo bloka ispol'zuetsya programmoj v kachestve smeshcheniya vnutri spiska nomerov diskovyh blokov, priso- edinennogo k indeksu vo vremya vypolneniya funkcii exec. Po nomeru bloka na diske programma schityvaet stranicu v pamyat'. Tak, naprimer, deskriptor dis- kovogo bloka, svyazannyj s virtual'nym adresom 1K, pokazyvaet, chto soderzhimoe stranicy raspolagaetsya v ispolnyaemom fajle, vnutri logicheskogo bloka s nome- rom 3 (sm. Risunok 9.22). Esli process poluchil otkaz pri obrashchenii k stranice, imeyushchej pometku "zapolnyaemaya pri obrashchenii" ili "obnulyaemaya pri obrashchenii" (sluchai 4 i 5), yadro vydelyaet svobodnuyu stranicu v pamyati i korrektiruet sootvetstvuyushchuyu za- pis' tablicy stranic. Esli stranica "obnulyaemaya pri obrashchenii", yadro takzhe ochishchaet ee soderzhimoe. V zavershenie obrabotki flagi "zapolnyaemaya pri obrashche- nii" i "obnulyaemaya pri obrashchenii" sbrasyvayutsya. Teper' stranica nahoditsya v pamyati, dostupna processam i ee soderzhimoe ne imeet analogov ni na ustrojst- ve vygruzki, ni v fajlovoj sisteme. Tak proishodit, esli process obrashchaetsya k stranicam s virtual'nymi adresami 3K i 65K (sm. Risunok 9.22): ni odin iz processov ne obrashchalsya k etim stranicam s teh por, kak fajl byl zapushchen na vypolnenie funkciej exec. V zavershenie svoej raboty programma obrabotki otkazov iz-za otsutstviya (nedostupnosti) dannyh ustanavlivaet bit dostupnosti stranicy i sbrasyvaet bit modifikacii. Prioritet processa pri etom pereschityvaetsya, ibo vo vremya vypolneniya programmy process mog priostanovit' svoe vypolnenie na urovne yad- ra, poluchaya tem samym po vozvrashchenii v rezhim zadachi nezasluzhennoe preimushches- tvo pered drugimi processami. I, nakonec, vozvrashchayas' v rezhim zadachi, prog- ramma proveryaet, ne bylo li za vremya obrabotki otkaza postupleniya kakih-libo signalov. 9.2.3.2 Obrabotka preryvanij po otkazu sistemy zashchity Vtorym tipom otkaza, vstrechayushchegosya pri obrashchenii k stranice, yavlyaetsya otkaz sistemy zashchity, kotoryj oznachaet, chto process obratilsya k sushchestvuyushchej stranice pamyati, no sudya po razryadam, opisyvayushchim prava dostupa k stranice, dostup k nej so storony tekushchego processa ne razreshen. (Vspomnim primer, opisyvayushchij popytku processa proizvesti zapis' dannyh v oblast' komand; sm. Risunok 7.22). Otkaz dannogo tipa imeet mesto takzhe togda, kogda process predprinimaet popytku zapisat' chto-to na stranicu, dlya kotoroj vo vremya vy- polneniya sistemnoj funkcii fork byl ustanovlen bit kopirovaniya pri zapisi. YAdro dolzhno razlichat' mezhdu soboj situacii, kogda otkaz proizoshel po prichine togo, chto stranica trebuet kopirovaniya pri zapisi, i kogda imelo mesto dejs- tvitel'no chto-to nedopustimoe. Programma obrabotki otkaza sistemy zashchity avtomaticheski poluchaet virtu- al'nyj adres, po kotoromu proizoshel otkaz, i vedet poisk sootvetstvuyushchej ob- lasti i zapisi tablicy stranic (Risunok 9.25). Ona blokiruet oblast', chtoby "sborshchik" stranic ne mog vygruzit' stranicu, poka svyazannyj s nej otkaz ne budet obrabotan. Esli programma obrabotki otkaza ustanavlivaet, chto prichinoj otkaza posluzhila ustanovka bita kopirovaniya pri zapisi, i esli stranicu is- pol'zuyut srazu neskol'ko processov, yadro vydelyaet v pamyati novuyu stranicu i kopiruet v nee soderzhimoe staroj stranicy; ssylki drugih processov na staruyu 282 stranicu sohranyayut svoe znachenie. Posle kopirovaniya i vneseniya v zapis' tab- licy stranic novogo nomera stranicy yadro umen'shaet znachenie schetchika ssylok v zapisi tablicy pfdata, sootvetstvuyushchej staroj stranice. Vsya procedura po- kazana na Risunke 9.26, gde tri processa sovmestno ispol'zuyut fizicheskuyu stranicu s nomerom 828. Process B schityvaet stranicu, no poskol'ku bit kopi- rovaniya pri zapisi ustanovlen, poluchaet otkaz sistemy zashchity. Programma ob- rabotki otkaza vydelyaet stranicu s nomerom 786, kopiruet v nee soderzhimoe stranicy 828, umen'shaet znachenie schetchika ssylok na skopirovannuyu stranicu i perenastraivaet sootvetstvuyushchuyu zapis' tablicy stranic na stranicu s nomerom 786. Esli bit kopirovaniya pri zapisi ustanovlen, no stranica ispol'zuetsya tol'ko odnim processom, yadro daet processu vozmozhnost' vospol'zovat'sya fizi- cheskoj stranicej povtorno. Ono otklyuchaet bit kopirovaniya pri zapisi i razry- vaet svyaz' stranicy s ee kopiej na diske (esli takovaya sushchestvuet), poskol'- ku ne isklyuchena vozmozhnost' togo, chto diskovoj kopiej pol'zuyutsya drugie pro- cessy. Zatem yadro ubiraet zapis' tablicy pfdata iz ocheredi stranic, ibo no- vaya +------------------------------------------------------------+ | algoritm pfault /* obrabotka otkaza sistemy zashchity */ | | vhodnaya informaciya: adres, po kotoromu poluchen otkaz | | vyhodnaya informaciya: otsutstvuet | | { | | najti oblast', zapis' v tablice stranic, deskriptor dis-| | kovogo bloka, svyazannye s adresom, po kotoromu poluchen | | otkaz, zablokirovat' oblast'; | | esli (stranica nedostupna v pamyati) | | perejti na out; | | esli (bit kopirovaniya pri zapisi ne ustanovlen) | | perejti na out; /* programmnaya oshibka - signal */| | esli (schetchik ssylok na stranichnyj blok > 1) | | { | | vydelit' novuyu fizicheskuyu stranicu; | | skopirovat' v nee soderzhimoe staroj stranicy; | | umen'shit' znachenie schetchika ssylok na staryj stra- | | nichnyj blok; | | perenastroit' zapis' tablicy stranic na novuyu fizi- | | cheskuyu stranicu; | | } | | v protivnom sluchae /* ubrat' stranicu, poskol'ku ona | | * nikem bol'she ne ispol'zuetsya */ | | { | | esli (kopiya stranicy imeetsya na ustrojstve vygruzki)| | osvobodit' mesto na ustrojstve, razorvat' svyaz'| | so stranicej; | | esli (stranica nahoditsya v hesh-ocheredi stranic) | | ubrat' stranicu iz hesh-ocheredi; | | } | | v zapisi tablicy stranic ustanovit' bit modifikacii, | | sbrosit' bit kopirovaniya pri zapisi; | | pereschitat' prioritet processa; | | proverit', ne postupali li signaly; | | out: snyat' blokirovku s oblasti; | | } | +------------------------------------------------------------+ Risunok 9.25. Algoritm obrabotki otkaza sistemy zashchity 283 kopiya virtual'noj stranicy raspolagaetsya ne na ustrojstve vygruzki. Krome togo, yadro umen'shaet znachenie schetchika ssylok na stranicu v tablice ispol'- zovaniya oblasti podkachki, i esli eto znachenie stanovitsya ravnym 0, osvobozh- daet mesto na ustrojstve (sm. uprazhnenie 9.11). Esli zapis' v tablice stranic ukazyvaet na to, chto stranica nedostupna, i ee bit kopirovaniya pri zapisi ustanovlen, vystupaya povodom dlya otkaza sis- temy zashchity, dopustim, chto sistema pri obrashchenii k stranice snachala obraba- tyvaet otkaz iz-za nedostupnosti dannyh (obratnaya ocherednost' rassmatrivaet- sya v uprazhnenii 9.17). Nesmotrya na eto, programma obrabotki otkaza sistemy zashchity vse ravno obyazana ubedit'sya v dostupnosti stranicy, poskol'ku pri us- tanovke blokirovki na oblast' programma mozhet priostanovit'sya, a "sborshchik" stranic tem vremenem mozhet vygruzit' stranicu iz pamyati. Esli stranica ne- dostupna (bit dostupnosti sbroshen), programma nemedlenno zavershit rabotu i process poluchit otkaz iz-za nedostupnosti dannyh. YAdro obrabotaet etot ot- kaz, no process vnov' poluchit otkaz sistemy zashchity. Bolee chem veroyatno, chto zaklyuchitel'nyj otkaz sistemy zashchity budet obrabotan bez kakih-libo prepyatst- vij i pomeh, poskol'ku projdet dovol'no znachitel'nyj period vremeni, prezhde chem stranica dostatochno "sozreet" dlya vygruzki iz pamyati. Opisannaya posledo- vatel'nost' sobytij pokazana na Risunke 9.27. Zapis' tablicy stranic - Process A +-----------------------------------------------+ | Stranica 828: dostupna, kopiruetsya pri zapisi +-+ +-----------------------------------------------+ | | Zapis' tablicy stranic - Process B | +-----------+ +-----------------------------------------------+ +->| Stranichnyj| | Stranica 828: dostupna, kopiruetsya pri zapisi +--->| blok 828 | +-----------------------------------------------+ +->| Schetchik | | | ssylok 3 | Zapis' tablicy stranic - Process C | +-----------+ +-----------------------------------------------+ | | Stranica 828: dostupna, kopiruetsya pri zapisi +-+ +-----------------------------------------------+ (a) Pered tem, kak process B poluchil otkaz sistemy zashchity Zapis' tablicy stranic - Process A +-----------------------------------------------+ +-----------+ | Stranica 828: dostupna, kopiruetsya pri zapisi +-+ | Stranichnyj| +-----------------------------------------------+ | | blok 828 | +->| Schetchik | Zapis' tablicy stranic - Process B +->| ssylok 2 | +-----------------------------------------------+ | +-----------+ | Stranica 828: dostupna ++| +-----------------------------------------------+|| +-----------+ +|->| Stranichnyj| Zapis' tablicy stranic - Process C | | blok 786 | +-----------------------------------------------+ | | Schetchik | | Stranica 828: dostupna, kopiruetsya pri zapisi +-+ | ssylok 1 | +-----------------------------------------------+ +-----------+ (b) Posle zapuska programmy obrabotki otkaza sistemy zashchity dlya processa B Risunok 9.26. Otkaz sistemy zashchity iz-za ustanovki bita kopi- rovaniya pri zapisi 284 Pered zaversheniem programma obrabotki otkaza sistemy zashchity ustanavliva- et bity modifikacii i zashchity, no sbrasyvaet bit kopirovaniya pri zapisi. Ona pereschityvaet prioritet processa i proveryaet, ne postupali li za vremya ee raboty signaly, prednaznachennye processu, v tochnosti povtoryaya to, chto dela- etsya po zavershenii obrabotki otkaza iz-za nedopustimosti dannyh. Process, poluchayushchij otkazy pri obrashchenii k stranice "Sborshchik" stranic +------------------------------------------------------------ | - - | - Blokiruet oblast' | - - | Otkaz sistemy zashchity - | Priostanov - oblast' - | zablokirovana - | - - | - Vygruzka stranicy - bit | - dopustimosti sbroshen | - - | - - | - Vyvodit iz priostanova | - processy, ozhidayushchie | - snyatiya s oblasti | - blokirovki | Vyhod iz priostanova - | - - | - - | Proverka bita dostup- - | nosti - sbroshen - | Vyhod iz programmy obra- - | botki otkaza sistemy za- - | shchity - | - - | - - | Otkaz iz-za nedostup- - | nosti dannyh - v Vremya Risunok 9.27. Vzaimodejstvie otkaza sistemy zashchity i otkaza iz-za nedostupnosti dannyh 9.2.4 Zameshchenie stranic na menee slozhnoj tehnicheskoj baze Naibol'shaya dejstvennost' algoritmov zameshcheniya stranic po zaprosu (obra- shcheniyu) dostigaetsya v tom sluchae, esli bity upominaniya i modifikacii ustanav- livayutsya apparatnym putem i tem zhe putem vyzyvaetsya otkaz sistemy zashchity pri popytke zapisi v stranicu, imeyushchuyu priznak "kopirovaniya pri zapisi". Tem ne menee, ukazannye algoritmy vpolne primenimy dazhe togda, kogda apparatura raspoznaet tol'ko bit dostupnosti i kod zashchity. Esli bit dostupnosti, usta- navlivaemyj apparatno, dubliruetsya programmno-ustanavlivaemym bitom, pokazy- vayushchim, dejstvitel'no li stranica dostupna ili net, yadro moglo by otklyuchit' apparatno-ustanavlivaemyj bit i proimitirovat' ustanovku ostal'nyh bitov programmnym putem. Tak, naprimer, v mashine VAX-11 bit upominaniya otsutstvuet (sm. [Levy 82]). YAdro mozhet otklyuchit' apparatno-ustanavlivaemyj bit dostup- nosti dlya stranicy i dal'she rabotat' po sleduyushchemu planu. Esli process ssy- laetsya na stranicu, on poluchaet otkaz, poskol'ku bit dostupnosti sbroshen, i 285 v igru vstupaet programma obrabotki otkaza, issleduyushchaya stranicu. Poskol'ku "programmnyj" bit dostupnosti ustanovlen, yadro znaet, chto stranica dejstvi- tel'no dostupna i nahoditsya v pamyati; ono ustanavlivaet "programmnyj" bit upominaniya i "apparatnyj" bit dostupnosti, no emu eshche predstoit uznat' o tom, chto na stranicu byla sdelana ssylka. Posleduyushchie ssylki na stranicu uzhe ne vstretyat otkaz, ibo "apparatnyj" bit dostupnosti ustanovlen. Kogda s nej budet rabotat' "sborshchik" stranic, on vnov' sbrosit "apparatnyj" bit dostup- nosti, vyzyvaya tem samym ot- Apparat- Programm- Programm- Apparat- Programm- Programm- nyj bit nyj bit nyj bit nyj bit nyj bit nyj bit dostup- dostup- upomina- dostup- dostup- upomina- nosti nosti niya nosti nosti niya +---------+----------+---------+ +---------+----------+---------+ | Net | Da | Net | | Da | Da | Da | +---------+----------+---------+ +---------+----------+---------+ (a) Do modificirovaniya (b) Posle modificirovaniya stranicy stranicy Risunok 9.28. Imitaciya ustanovki "apparatnogo" bita modifika- cii programmnymi sredstvami kazy na vse posleduyushchie obrashcheniya k stranice i vozvrashchaya sistemu k nachalu cikla. |tot sluchaj pokazan na Risunke 9.28. 9.3 SISTEMA SMESHANNOGO TIPA SO SVOPINGOM I PODKACHKOJ PO ZAPROSU Nesmotrya na to, chto v sistemah s zameshcheniem stranic po zaprosu obrashchenie s pamyat'yu otlichaetsya bol'shej gibkost'yu po sravneniyu s sistemami podkachki processov, vozmozhno vozniknovenie situacij, v kotoryh "sborshchik" stranic i programma obrabotki otkazov iz-za nedostupnosti dannyh nachinayut meshat' drug drugu iz-za nehvatki pamyati. Esli summa rabochih mnozhestv vseh processov pre- vyshaet ob®em fizicheskoj pamyati v mashine, programma obrabotki otkazov obychno priostanavlivaetsya, poskol'ku vydelyat' processam stranicy pamyati dal'she sta- novitsya nevozmozhnym. "Sborshchik" stranic ne smozhet dostatochno bystro osvobo- dit' mesto v pamyati, ibo vse stranicy prinadlezhat rabochemu mnozhestvu. Proiz- voditel'nost' sistemy padaet, poskol'ku yadro tratit slishkom mnogo vremeni na verhnem urovne, s bezumnoj skorost'yu perestraivaya pamyat'. YAdro v versii V manipuliruet algoritmami podkachki processov i zameshcheniya stranic tak, chto problemy sopernichestva perestayut byt' neizbezhnymi. Kogda yadro ne mozhet vydelit' processu stranicy pamyati, ono vozobnovlyaet rabotu processa podkachki i perevodit pol'zovatel'skij process v sostoyanie, ekviva- lentnoe sostoyaniyu "gotovnosti k zapusku, buduchi zarezervirovannym". V etom sostoyanii odnovremenno m