GLAVA 6. STRUKTURA PROCESSOV
V glave 2 byli sformulirovany harakteristiki processov. V nastoyashchej gla-
ve na bolee formal'nom urovne opredelyaetsya ponyatie "kontekst processa" i po-
kazyvaetsya, kakim obrazom yadro identificiruet process i opredelyaet ego mes-
tonahozhdenie. V razdele 6.1 opisany model' sostoyanij processov dlya sistemy
UNIX i posledovatel'nost' vozmozhnyh perehodov iz sostoyaniya v sostoyanie. V
yadre nahoditsya tablica processov, kazhdaya zapis' kotoroj opisyvaet sostoyanie
odnogo iz aktivnyh processov v sisteme. V prostranstve processa hranitsya do-
polnitel'naya informaciya, ispol'zuemaya v upravlenii protekaniem processa. Za-
pis' v tablice processov i prostranstvo processa sostavlyayut v sovokupnosti
kontekst processa. Aspektom konteksta processa, naibolee yavno otlichayushchim
dannyj kontekst ot konteksta drugogo processa, bez somneniya yavlyaetsya soder-
zhimoe adresnogo prostranstva processa. V razdele 6.2 opisyvayutsya principy
upravleniya raspredeleniem pamyati dlya processov i yadra, a takzhe vzaimodejst-
vie operacionnoj sistemy s apparatnymi sredstvami pri translyacii virtual'nyh
adresov v fizicheskie. Razdel 6.3 posvyashchen rassmotreniyu sostavnyh elementov
konteksta processa, a takzhe opisaniyu algoritmov upravleniya kontekstom pro-
cessa. Razdel 6.4 demonstriruet, kakim obrazom osushchestvlyaetsya sohranenie
konteksta processa yadrom v sluchae preryvaniya, vyzova sistemnoj funkcii ili
pereklyucheniya konteksta, a takzhe kakim obrazom vozobnovlyaetsya vypolnenie pri-
ostanovlennogo processa. V razdele 6.5 privodyatsya razlichnye algoritmy, is-
pol'zuemye v teh sistemnyh funkciyah, kotorye rabotayut s adresnym prostranst-
vom processa i kotorye budut rassmotreny v sleduyushchej glave. I, nakonec, v
razdele 6.6 rassmatrivayutsya algoritmy priostanova i vozobnovleniya vypolneniya
processov.
6.1 SOSTOYANIYA PROCESSA I PEREHODY MEZHDU NIMI
Kak uzhe otmechalos' v glave 2, vremya zhizni processa mozhno teoreticheski
razbit' na neskol'ko sostoyanij, opisyvayushchih process. Polnyj nabor sostoyanij
processa soderzhitsya v sleduyushchem perechne:
1. Process vypolnyaetsya v rezhime zadachi.
2. Process vypolnyaetsya v rezhime yadra.
3. Process ne vypolnyaetsya, no gotov k zapusku pod upravleniem yadra.
4. Process priostanovlen i nahoditsya v operativnoj pamyati.
5. Process gotov k zapusku, no programma podkachki (nulevoj process) dolzhna
eshche zagruzit' process v operativnuyu pamyat', prezhde chem on budet zapushchen
pod upravleniem yadra. |to sostoyanie budet predmetom obsuzhdeniya v glave 9
pri rassmotrenii sistemy podkachki.
6. Process priostanovlen i programma podkachki vygruzila ego vo vneshnyuyu pa-
myat', chtoby v operativnoj pamyati osvobodit' mesto dlya drugih processov.
7. Process vozvrashchen iz privilegirovannogo rezhima (rezhima yadra) v neprivi-
legirovannyj (rezhim zadachi), yadro rezerviruet ego i pereklyuchaet kontekst
na drugoj process. Ob otlichii etogo sostoyaniya ot sostoyaniya 3 (gotovnost'
k zapusku) pojdet rech' nizhe.
8. Process vnov' sozdan i nahoditsya v perehodnom sostoyanii; process sushchest-
vuet, no ne gotov k vypolneniyu, hotya i ne priostanovlen. |to sostoyanie
yavlyaetsya nachal'nym sostoyaniem vseh processov, krome nulevogo.
9. Process vyzyvaet sistemnuyu funkciyu exit i prekrashchaet sushchestvovanie. Od-
nako, posle nego ostalas' zapis', soderzhashchaya kod vyhoda, i nekotoraya
hronometricheskaya statistika, sobiraemaya roditel'skim processom. |to sos-
137
toyanie yavlyaetsya poslednim sostoyaniem processa. Risunok 6.1 predstavlyaet
soboj polnuyu diagrammu perehodov
processa iz sostoyaniya v sostoyanie. Rassmotrim s pomoshch'yu modeli perehodov ti-
pichnoe povedenie processa. Situacii, kotorye budut obsuzhdat'sya, neskol'ko
iskusstvenny i processy ne vsegda imeyut delo s nimi, no eti situacii vpolne
Vypolnyaetsya v
rezhime zadachi
+-------+
| 1 |
Vyzov funk- | |
cii, prery- ++------+
vanie | ^ ^
Prery- +-----+ +-------+ | |
vanie, | | | +-------+ +---+ Vozvrat v
vozvrat| | | | Vozvrat | rezhim zadachi
iz pre-| | | | |
ryva-| v v | Vypolnyaet- |
+-------+ niya | +------++sya v rezhi- ++------+
| | +-->| |me yadra | |
| 9 |<-----------+ 2 +------------>| 7 |
| | Vyhod | | Rezerviruet-| |
+-------+ ++------+ sya +-------+
Prekrashchenie | ^ - Zarezer-
sushchestvovaniya | | - virovan
+---------------+ +------+ --------
| Priostanov Zapusk | -
v | -
Pri-+-------+ +-+-----+ Gotov k
os- | | Vozobnovlenie | | zapusku
ta- | 4 +----------------------->| 3 | v pamyati
nov-| | | |
len +---+---+ ++------+
v pa- | | ^ ^
myati | | | | Dostatochno
| | | | pamyati
| | | +---+
| Vy- Vy- | | |
| gruzka gruzka | | | Sozdan
| | |Za- ++------+
| | |gruz-| | fork
| | |ka | 8 |<-----
| | | ++------+
| | | | Nedosta-
| | | +---+ tochno
| | | | pamyati
| | | | (tol'ko sistema
| | | | podkachki)
v v | v
+-------+ +---+---+
| | Vozobnovlenie | |
| 6 +----------------------->| 5 |
+-------+ +-------+
Priostanovlen, Gotov k zapusku,
vygruzhen vygruzhen
Risunok 6.1. Diagramma perehodov processa iz sostoyaniya v sos-
toyanie
138
primenimy dlya illyustracii razlichnyh perehodov. Nachal'nym sostoyaniem modeli
yavlyaetsya sozdanie processa roditel'skim processom s pomoshch'yu sistemnoj funk-
cii fork; iz etogo sostoyaniya process neminuemo perehodit v sostoyanie gotov-
nosti k zapusku (3 ili 5). Dlya prostoty predpolozhim, chto process pereshel v
sostoyanie "gotovnosti k zapusku v pamyati" (3). Planirovshchik processov v ko-
nechnom schete vyberet process dlya vypolneniya i process perejdet v sostoyanie
"vypolneniya v rezhime yadra", gde doigraet do konca rol', otvedennuyu emu funk-
ciej fork.
Posle vsego etogo process mozhet perejti v sostoyanie "vypolneniya v rezhime
zadachi". Po prohozhdenii opredelennogo perioda vremeni mozhet proizojti prery-
vanie raboty processora po tajmeru i process snova perejdet v sostoyanie "vy-
polneniya v rezhime yadra". Kak tol'ko programma obrabotki preryvaniya zakonchit
rabotu, yadru mozhet ponadobit'sya podgotovit' k zapusku drugoj process, poeto-
mu pervyj process perejdet v sostoyanie "rezervirovaniya", ustupiv dorogu vto-
romu processu. Sostoyanie "rezervirovaniya" v dejstvitel'nosti ne otlichaetsya
ot sostoyaniya "gotovnosti k zapusku v pamyati" (punktirnaya liniya na risunke,
soedinyayushchaya mezhdu soboj oba sostoyaniya, podcherkivaet ih ekvivalentnost'), no
oni vydelyayutsya v otdel'nye sostoyaniya, chtoby podcherknut', chto process, vypol-
nyayushchijsya v rezhime yadra, mozhet byt' zarezervirovan tol'ko v tom sluchae, esli
on sobiraetsya vernut'sya v rezhim zadachi. Sledovatel'no, yadro mozhet pri neob-
hodimosti podkachivat' process iz sostoyaniya "rezervirovaniya". Pri izvestnyh
usloviyah planirovshchik vyberet process dlya ispolneniya i tot snova vernetsya v
sostoyanie "vypolneniya v rezhime zadachi".
Kogda process vypolnyaet vyzov sistemnoj funkcii, on iz sostoyaniya "vypol-
neniya v rezhime zadachi" perehodit v sostoyanie "vypolneniya v rezhime yadra".
Predpolozhim, chto sistemnoj funkcii trebuetsya vvod-vyvod s diska i poetomu
process vynuzhden dozhidat'sya zaversheniya vvoda-vyvoda. On perehodit v sostoya-
nie "priostanova v pamyati", v kotorom budet nahodit'sya do teh por, poka ne
poluchit izveshcheniya ob okonchanii vvoda-vyvoda. Kogda vvod-vyvod zavershitsya,
proizojdet apparatnoe preryvanie raboty central'nogo processora i programma
obrabotki preryvaniya vozobnovit vypolnenie processa, v rezul'tate chego on
perejdet v sostoyanie "gotovnosti k zapusku v pamyati".
Predpolozhim, chto sistema vypolnyaet mnozhestvo processov, kotorye odnovre-
menno nikak ne mogut pomestit'sya v operativnoj pamyati, i programma podkachki
(nulevoj process) vygruzhaet odin process, chtoby osvobodit' mesto dlya drugogo
processa, nahodyashchegosya v sostoyanii "gotov k zapusku, no vygruzhen". Pervyj
process, vygruzhennyj iz operativnoj pamyati, perehodit v to zhe sostoyanie.
Kogda programma podkachki vybiraet naibolee podhodyashchij process dlya zagruzki v
operativnuyu pamyat', etot process perehodit v sostoyanie "gotovnosti k zapusku
v pamyati". Planirovshchik vybiraet process dlya ispolneniya i on perehodit v sos-
toyanie "vypolneniya v rezhime yadra". Kogda process zavershaetsya, on ispolnyaet
sistemnuyu funkciyu exit, posledovatel'no perehodya v sostoyaniya "vypolneniya v
rezhime yadra" i, nakonec, v sostoyanie "prekrashcheniya sushchestvovaniya".
Process mozhet upravlyat' nekotorymi iz perehodov na urovne zadachi.
Vo-pervyh, odin process mozhet sozdat' drugoj process. Tem ne menee, v kakoe
iz sostoyanij process perejdet posle sozdaniya (t.e. v sostoyanie "gotov k vy-
polneniyu, nahodyas' v pamyati" ili v sostoyanie "gotov k vypolneniyu, no vygru-
zhen") zavisit uzhe ot yadra. Processu eti sostoyaniya ne podkontrol'ny. Vo-vto-
ryh, process mozhet obratit'sya k razlichnym sistemnym funkciyam, chtoby perejti
iz sostoyaniya "vypolneniya v rezhime zadachi" v sostoyanie "vypolneniya v rezhime
yadra", a takzhe perejti v rezhim yadra po svoej sobstvennoj vole. Tem ne menee,
moment vozvrashcheniya iz rezhima yadra ot processa uzhe ne zavisit; v rezul'tate
kakih-to sobytij on mozhet nikogda ne vernut'sya iz etogo rezhima i iz nego pe-
rejdet v sostoyanie "prekrashcheniya sushchestvovaniya" (sm. razdel 7.2, gde govorit-
sya o signalah). Nakonec, process mozhet zavershit'sya s pomoshch'yu funkcii exit po
svoej sobstvennoj vole, no kak ukazyvalos' ranee, vneshnie sobytiya mogut pot-
rebovat' zaversheniya processa bez yavnogo obrashcheniya k funkcii exit. Vse os-
139
tal'nye perehody otnosyatsya k zhestko zakreplennoj chasti modeli, zakodirovan-
noj v yadre, i yavlyayutsya rezul'tatom opredelennyh sobytij, reagiruya na nih v
sootvetstvii s pravilami, sformulirovannymi v etoj i posleduyushchih glavah. Ne-
kotorye iz pravil uzhe upominalis': naprimer, to, chto process mozhet vygruzit'
drugoj process, vypolnyayushchijsya v yadre.
Dve prinadlezhashchie yadru struktury dannyh opisyvayut process: zapis' v tab-
lice processov i prostranstvo processa. Tablica processov soderzhit polya, ko-
torye dolzhny byt' vsegda dostupny yadru, a prostranstvo processa - polya, ne-
obhodimost' v kotoryh voznikaet tol'ko u vypolnyayushchegosya processa. Poetomu
yadro vydelyaet mesto dlya prostranstva processa tol'ko pri sozdanii processa:
v nem net neobhodimosti, esli zapisi v tablice processov ne sootvetstvuet
konkretnyj process.
Zapis' v tablice processov sostoit iz sleduyushchih polej:
* Pole sostoyaniya, kotoroe identificiruet sostoyanie processa.
* Polya, ispol'zuemye yadrom pri razmeshchenii processa i ego prostranstva v
osnovnoj ili vneshnej pamyati. YAdro ispol'zuet informaciyu etih polej dlya
pereklyucheniya konteksta na process, kogda process perehodit iz sostoyaniya
"gotov k vypolneniyu, nahodyas' v pamyati" v sostoyanie "vypolneniya v rezhime
yadra" ili iz sostoyaniya "rezervirovaniya" v sostoyanie "vypolneniya v rezhime
zadachi". Krome togo, yadro ispol'zuet etu informaciyu pri perekachki pro-
cessov iz i v operativnuyu pamyat' (mezhdu dvumya sostoyaniyami "v pamyati" i
dvumya sostoyaniyami "vygruzhen"). Zapis' v tablice processov soderzhit takzhe
pole, opisyvayushchee razmer processa i pozvolyayushchee yadru planirovat' vydele-
nie prostranstva dlya processa.
* Neskol'ko pol'zovatel'skih identifikatorov (UID), ustanavlivayushchih raz-
lichnye privilegii processa. Polya UID, naprimer, opisyvayut sovokupnost'
processov, mogushchih obmenivat'sya signalami (sm. sleduyushchuyu glavu).
* Identifikatory processa (PID), ukazyvayushchie vzaimosvyaz' mezhdu processami.
Znacheniya polej PID zadayutsya pri perehode processa v sostoyanie "sozdan"
vo vremya vypolneniya funkcii fork.
* Deskriptor sobytiya (ustanavlivaetsya togda, kogda process priostanovlen).
V dannoj glave budet rassmotreno ispol'zovanie deskriptora sobytiya v al-
goritmah funkcij sleep i wakeup.
* Parametry planirovaniya, pozvolyayushchie yadru ustanavlivat' poryadok perehoda
processov iz sostoyaniya "vypolneniya v rezhime yadra" v sostoyanie "vypolne-
niya v rezhime zadachi".
* Pole signalov, v kotorom perechislyayutsya signaly, poslannye processu, no
eshche ne obrabotannye (razdel 7.2).
* Razlichnye tajmery, opisyvayushchie vremya vypolneniya processa i ispol'zovanie
resursov yadra i pozvolyayushchie osushchestvlyat' slezhenie za vypolneniem i vy-
chislyat' prioritet planirovaniya processa. Odno iz polej yavlyaetsya tajme-
rom, kotoryj ustanavlivaet pol'zovatel' i kotoryj neobhodim dlya posylki
processu signala trevogi (razdel 8.3). Prostranstvo processa soderzhit
polya, dopolnitel'no harakterizuyushchie sostoyaniya processa. V predydushchih
glavah byli rassmotreny poslednie sem' iz privodimyh nizhe polej prost-
ranstva processa, kotorye my dlya polnoty vnov' kratko perechislim:
* Ukazatel' na tablicu processov, kotoryj identificiruet zapis', sootvets-
tvuyushchuyu processu.
* Pol'zovatel'skie identifikatory, ustanavlivayushchie razlichnye privilegii
processa, v chastnosti, prava dostupa k fajlu (sm. razdel 7.6).
* Polya tajmerov, hranyashchie vremya vypolneniya processa (i ego potomkov) v re-
zhime zadachi i v rezhime yadra.
* Vektor, opisyvayushchij reakciyu processa na signaly.
* Pole operatorskogo terminala, identificiruyushchee "registracionnyj termi-
nal", kotoryj svyazan s processom.
* Pole oshibok, v kotoroe zapisyvayutsya oshibki, imevshie mesto pri vypolnenii
sistemnoj funkcii.
* Pole vozvrashchennogo znacheniya, hranyashchee rezul'tat vypolneniya sistemnoj
funkcii.
140
* Parametry vvoda-vyvoda: ob®em peredavaemyh dannyh, adres istochnika (ili
priemnika) dannyh v prostranstve zadachi, smeshcheniya v fajle (kotorymi
pol'zuyutsya operacii vvoda-vyvoda) i t.d.
* Imena tekushchego kataloga i tekushchego kornya, opisyvayushchie fajlovuyu sistemu,
v kotoroj vypolnyaetsya process.
* Tablica pol'zovatel'skih deskriptorov fajla, kotoraya opisyvaet fajly,
otkrytye processom.
* Polya granic, nakladyvayushchie ogranicheniya na razmernye harakteristiki pro-
cessa i na razmer fajla, v kotoryj process mozhet vesti zapis'.
* Pole prav dostupa, hranyashchee dvoichnuyu masku ustanovok prav dostupa k faj-
lam, kotorye sozdayutsya processom. Prostranstvo sostoyanij processa i pe-
rehodov mezhdu nimi rassmatrivalos' v dannom razdele na logicheskom urov-
ne. Kazhdoe sostoyanie imeet takzhe fizicheskie harakteristiki, upravlyaemye
yadrom, v chastnosti, virtual'noe adresnoe prostranstvo processa. Sleduyu-
shchij razdel posvyashchen opisaniyu modeli raspredeleniya pamyati; v ostal'nyh
razdelah sostoyaniya processa i perehody mezhdu nimi rassmatrivayutsya na fi-
zicheskom urovne, osoboe vnimanie pri etom udelyaetsya sostoyaniyam "vypolne-
niya v rezhime zadachi", "vypolneniya v rezhime yadra", "rezervirovaniya" i
"priostanova (v pamyati)". V sleduyushchej glave zatragivayutsya sostoyaniya
"sozdaniya" i "prekrashcheniya sushchestvovaniya", a v glave 8 - sostoyanie "go-
tovnosti k zapusku v pamyati". V glave 9 obsuzhdayutsya dva sostoyaniya vygru-
zhennogo processa i organizaciya podkachki po obrashcheniyu.
6.2 FORMAT PAMYATI SISTEMY
Predpolozhim, chto fizicheskaya pamyat' mashiny imeet adresa, nachinaya s 0 i
konchaya adresom, ravnym ob®emu pamyati v bajtah. Kak uzhe otmechalos' v glave 2,
process v sisteme UNIX sostoit iz treh logicheskih sekcij: komand, dannyh i
steka. (Obshchuyu pamyat', kotoraya rassmatrivaetsya v glave 11, mozhno schitat' v
dannom kontekste chast'yu sekcii dannyh). V sekcii komand hranitsya nabor ma-
shinnyh instrukcij, ispolnyaemyh pod upravleniem processa; adresami v sekcii
komand vystupayut adresa komand (dlya komand perehoda i obrashchenij k podprog-
rammam), adresa dannyh (dlya obrashcheniya k global'nym peremennym) i adresa ste-
ka (dlya obrashcheniya k strukturam dannyh, kotorye lokalizovany v podprogram-
mah). Esli adresa v sgenerirovannom kode traktovat' kak adresa v fizicheskoj
pamyati, dva processa ne smogut parallel'no vypolnyat'sya, esli ih adresa pe-
rekryvayutsya. Kompilyator mog by generirovat' adresa, neperesekayushchiesya u raz-
nyh programm, no na universal'nyh |VM takoj poryadok ne praktikuetsya, pos-
kol'ku ob®em pamyati mashiny ogranichen, a kolichestvo transliruemyh programmy
neogranicheno. Dazhe esli dlya togo, chtoby izbezhat' izlishnego peresecheniya adre-
sov v processe ih generacii, mashina budet ispol'zovat' nekotoryj nabor ev-
risticheskih procedur, podobnaya realizaciya ne budet dostatochno gibkoj i ne
smozhet udovletvoryat' pred®yavlyaemym k nej trebovaniyam.
Poetomu kompilyator generiruet adresa dlya virtual'nogo adresnogo prost-
ranstva zadannogo diapazona, a ustrojstvo upravleniya pamyat'yu, nazyvaemoe
dispetcherom pamyati, transliruet virtual'nye adresa, sgenerirovannye kompilya-
torom, v adresa yacheek, raspolozhennyh v fizicheskoj pamyati. Kompilyatoru net
neobhodimosti znat', v kakoe mesto v pamyati yadro potom zagruzit vypolnyaemuyu
programmu. Na samom dele, v pamyati odnovremenno mogut sushchestvovat' neskol'ko
kopij programmy: vse oni mogut vypolnyat'sya, ispol'zuya odni i te zhe virtual'-
nye adresa, fakticheski zhe ssylayas' na raznye fizicheskie yachejki. Te podsiste-
my yadra i apparatnye sredstva, kotorye sotrudnichayut v translyacii virtual'nyh
adresov v fizicheskie, obrazuyut podsistemu upravleniya pamyat'yu.
YAdro v versii V delit virtual'noe adresnoe prostranstvo processa na so-
141
vokupnost' logicheskih oblastej. Oblast' - eto nepreryvnaya zona virtual'nogo
adresnogo prostranstva processa, rassmatrivaemaya v kachestve otdel'nogo ob®-
ekta dlya sovmestnogo ispol'zovaniya i zashchity. Takim obrazom, komandy, dannye
i stek obychno obrazuyut avtonomnye oblasti, prinadlezhashchie processu. Neskol'ko
processov mogut ispol'zovat' odnu i tu zhe oblast'. Naprimer, esli neskol'ko
processov vypolnyayut odnu i tu zhe programmu, vpolne estestvenno, chto oni is-
pol'zuyut odnu i tu zhe oblast' komand. Tochno tak zhe, neskol'ko processov mo-
gut ob®edinit'sya i ispol'zovat' obshchuyu oblast' razdelyaemoj pamyati.
YAdro podderzhivaet tablicu oblastej i vydelyaet zapis' v tablice dlya kazh-
doj aktivnoj oblasti v sisteme. V razdele 6.5 opisyvayutsya polya tablicy ob-
lastej i operacii nad oblastyami bolee podrobno, no na dannyj moment predpo-
lozhim, chto tablica oblastej soderzhit informaciyu, pozvolyayushchuyu opredelit' mes-
topolozhenie oblasti v fizicheskoj pamyati. Kazhdyj process imeet chastnuyu tabli-
cu oblastej processa. Zapisi etoj tablicy mogut raspolagat'sya, v zavisimosti
ot konkretnoj realizacii, v tablice processov, v adresnom prostranstve pro-
cessa ili v otdel'noj oblasti pamyati; dlya prostoty predpolozhim, chto oni yav-
lyayutsya chast'yu tablicy processov. Kazhdaya zapis' chastnoj tablicy oblastej so-
derzhit ukazatel' na sootvetstvuyushchuyu zapis' obshchej tablicy oblastej i pervyj
virtual'nyj adres processa v dannoj oblasti. Razdelyaemye oblasti mogut imet'
raznye virtual'nye adresa v kazhdom processe. Zapis' chastnoj tablicy oblastej
takzhe soderzhit pole prav dostupa, v kotorom ukazyvaetsya tip dostupa, razre-
shennyj processu: tol'ko chtenie, tol'ko zapis' ili tol'ko ispolnenie. CHastnaya
tablica oblastej i struktura oblasti analogichny tablice fajlov i strukture
indeksa v fajlovoj sisteme: neskol'ko processov mogut sovmestno ispol'zovat'
adresnoe prostranstvo cherez oblast', podobno tomu, kak oni razdelyayut dostup
k fajlu s pomoshch'yu indeksa; kazhdyj process imeet dostup k oblasti blagodarya
ispol'zovaniyu zapisi v chastnoj tablice oblastej, tochno tak zhe on obrashchaetsya
k indeksu, ispol'zuya sootvetstvuyushchie zapisi v tablice pol'zovatel'skih desk-
riptorov fajla i v tablice fajlov, prinadlezhashchej yadru.
Na Risunke 6.2 izobrazheny dva processa, A i B, pokazany ih oblasti, chas-
tnye tablicy oblastej i virtual'nye adresa, v kotoryh eti oblasti soedinyayut-
sya. Processy razdelyayut oblast' komand 'a' s virtual'nymi adresami 8K i 4K
sootvetstvenno. Esli process A chitaet yachejku pamyati s adresom 8K, a process
CHastnye tablicy oblastej Oblasti
processa
(Virtual'nye adresa) +--------+
Koman-+--------------+ | |
dy | 8K +-----+ +-->| b |
Process Dan-+--------------+ | | | |
A nye | 16K +-----|---+ +--------+ +--------+
+--------------+ | | |
Stek | 32K +-----|-------------------->| c |
+--------------+ | +--------+ | |
+------>| | +--------+
| a |
Koman-+--------------+ +------>| |
dy | 4K +-----+ +--------+ +--------+
Process Dan-+--------------+ | |
B nye | 8K +-------------------------->| e |
+--------------+ +--------+ | |
Stek | 32K +-----+ | | +--------+
+--------------+ +------>| d |
| |
+--------+
Risunok 6.2. Processy i oblasti
142
B chitaet yachejku s adresom 4K, to oni chitayut odnu i tu zhe yachejku v oblasti
'a'. Oblast' dannyh i oblast' steka u kazhdogo processa svoi.
Oblast' yavlyaetsya ponyatiem, ne zavisyashchim ot sposoba realizacii upravleniya
pamyat'yu v operacionnoj sisteme. Upravlenie pamyat'yu predstavlyaet soboj sovo-
kupnost' dejstvij, vypolnyaemyh yadrom s cel'yu povysheniya effektivnosti sovmes-
tnogo ispol'zovaniya operativnoj pamyati processami. Primerami sposobov uprav-
leniya pamyat'yu mogut sluzhit' rassmatrivaemye v glave 9 zameshchenie stranic pa-
myati i podkachka po obrashcheniyu. Ponyatie oblasti takzhe ne zavisit i ot sobst-
venno raspredeleniya pamyati: naprimer, ot togo, delitsya li pamyat' na stranicy
ili na segmenty. S tem, chtoby zalozhit' fundament dlya perehoda k opisaniyu al-
goritmov podkachki po obrashcheniyu (glava 9), vse privodimye zdes' rassuzhdeniya
otnosyatsya, v pervuyu ochered', k organizacii pamyati, baziruyushchejsya na strani-
cah, odnako eto ne predpolagaet, chto sistema upravleniya pamyat'yu osnovyvaetsya
na ukazannyh algoritmah.
6.2.2 Stranicy i tablicy stranic
V etom razdele opisyvaetsya model' organizacii pamyati, kotoroj my budem
pol'zovat'sya na protyazhenii vsej knigi, no kotoraya ne yavlyaetsya osobennost'yu
sistemy UNIX. V organizacii pamyati, baziruyushchejsya na stranicah, fizicheskaya
pamyat' razdelyaetsya na bloki odinakovogo razmera, nazyvaemye stranicami.
Obychnyj razmer stranic sostavlyaet ot 512 bajt do 4 Kbajt i opredelyaetsya kon-
figuraciej tehnicheskih sredstv. Kazhdaya adresuemaya yachejka pamyati soderzhitsya v
nekotoroj stranice i, sledovatel'no, kazhdaya yachejka pamyati mozhet adresovat'sya
paroj (nomer stranicy, smeshchenie vnutri stranicy v bajtah). Naprimer, esli
ob®em mashinnoj pamyati sostavlyaet 2 v 32-j stepeni bajt, a razmer stranicy 1
Kbajt, obshchee chislo stranic - 2 v 22-j stepeni; mozhno schitat', chto kazhdyj
32-razryadnyj adres sostoit iz 22-razryadnogo nomera stranicy i 10-razryadnogo
smeshcheniya vnutri stranicy (Risunok 6.3).
Kogda yadro naznachaet oblasti fizicheskie stranicy pamyati, neobhodimosti v
naznachenii smezhnyh stranic i voobshche v soblyudenii kakoj-libo ocherednosti pri
naznachenii ne voznikaet. Cel'yu stranichnoj organizacii pamyati yavlyaetsya povy-
+------------------------------------------------------------+
| SHestnadcatirichnyj adres 58432 |
| |
| Dvoichnyj 0101 1000 0100 0011 0010 |
| |
| Nomer stranicy, smeshchenie |
| vnutri stranicy 01 0110 0001 00 0011 0010 |
| |
| V shestnadcatirichnoj sisteme 161 32 |
+------------------------------------------------------------+
Risunok 6.3. Adresaciya fizicheskoj pamyati po stranicam
+------------------------------------------------------+
| Logicheskij nomer stranicy Fizicheskij nomer stranicy |
| |
| 0 177 |
| 1 54 |
| 2 209 |
| 3 17 |
+------------------------------------------------------+
Risunok 6.4. Otobrazhenie logicheskih nomerov stranic na fizicheskie
143
shenie gibkosti naznacheniya fizicheskoj pamyati, kotoroe stroitsya po analogii s
naznacheniem diskovyh blokov fajlam v fajlovoj sisteme. Kak i pri naznachenii
blokov fajlu, tak i pri naznachenii oblasti stranic pamyati, presleduetsya za-
dacha povysheniya gibkosti i sokrashcheniya neispol'zuemogo (vsledstvie fragmenta-
cii) prostranstva pamyati.
YAdro ustanavlivaet sootnoshenie mezhdu virtual'nymi adresami oblasti i ma-
shinnymi fizicheskimi adresami posredstvom otobrazheniya logicheskih nomerov
stranic v oblasti na fizicheskie nomera stranic v mashine, kak eto pokazano na
Risunke 6.4. Poskol'ku oblast' eto nepreryvnoe prostranstvo virtual'nyh ad-
resov programmy, logicheskij nomer stranicy sluzhit ukazatelem na element mas-
siva fizicheskih nomerov stranic. Zapis' tablicy oblastej soderzhit ukazatel'
na tablicu fizicheskih nomerov stranic, imenuemuyu tablicej stranic. Zapisi
tablicy stranic soderzhat mashinno-zavisimuyu informaciyu, takuyu kak prava dos-
tupa na chtenie ili zapis' stranicy. YAdro podderzhivaet tablicy stranic v pa-
myati i obrashchaetsya k nim tak zhe, kak i ko vsem ostal'nym strukturam dannyh
yadra.
Na Risunke 6.5 priveden primer otobrazheniya processa v fizicheskie adresa
pamyati. Pust' razmer stranicy sostavlyaet 1 Kbajt i pust' processu nuzhno ob-
ratit'sya k ob®ektu v pamyati, imeyushchemu virtual'nyj adres 68432. Iz tablicy
oblastej vidno, chto virtual'nyj adres nachala oblasti steka - 65536 (64K),
esli predpolozhit', chto stek rastet v napravlenii uvelicheniya adresov. Posle
vychitaniya etogo adresa iz adresa 68432 poluchaem smeshchenie v bajtah vnutri ob-
lasti, ravnoe 2896. Tak kak kazhdaya stranica imeet razmer 1 Kbajt, adres uka-
zyvaet so smeshcheniem 848 na 2-yu (nachinaya s 0) stranicu oblasti, raspolozhennoj
po fizicheskomu adresu 986K. V razdele 6.5.5 (gde idet rech' o zagruzke oblas-
ti) rassmatrivaetsya sluchaj, kogda zapis' tablicy stranic pomechaetsya "pus-
toj".
V sovremennyh mashinah ispol'zuyutsya raznoobraznye apparatnye registry i
keshi, kotorye povyshayut skorost' vypolneniya vysheopisannoj procedury translya-
cii adresov i bez kotoryh peresylki v pamyati i adresnye vychisleniya chereschur
by zamedlilis'. Vozobnovlyaya vypolnenie processa, yadro posredstvom zagruzki
sootvetstvuyushchih registrov soobshchaet tehnicheskim sredstvam upravleniya pamyat'yu
o tom, v
CHastnaya tablica oblastej Tablicy stranic
processa (Fizicheskie adresa)
+--------------+
Komandy | 8K +--------------+
+--------------+ +-------->+--------------+
Dannye | 32K +-------+ | pusto |
+--------------+ | +--------------+
Stek | 64K +---+ | | 137K |
+--------------+ | v +--------------+
Virtual'nye adresa | +--------------+ | 852K |
| | 87K | +--------------+
+------------+ +--------------+ | 764K |
v | 552K | +--------------+
+--------------+ +--------------+ | 433K |
| 541K | | 727K | +--------------+
+--------------+ +--------------+ | 333K |
| 783K | | 941K | +--------------+
+--------------+ +--------------+ | - |
| 986K | | 1096K | | - |
+--------------+ +--------------+ | - |
| 897K | | 2001K | | - |
+--------------+ +--------------+ +--------------+
| - | | - |
+--------------+ +--------------+
Risunok 6.5. Preobrazovanie virtual'nyh adresov v fizicheskie
144
kakih fizicheskih adresah vypolnyaetsya process i gde raspolagayutsya tablicy
stranic. Poskol'ku takie operacii yavlyayutsya mashinno-zavisimymi i v raznyh
versiyah realizuyutsya po-raznomu, zdes' my ih rassmatrivat' ne budem. CHast'
voprosov, svyazannyh s arhitekturoj vychislitel'nyh sistem, zatragivaetsya v
uprazhneniyah.
Organizaciyu upravleniya pamyat'yu poprobuem poyasnit' na sleduyushchem prostom
primere. Pust' pamyat' razbita na stranicy razmerom 1 Kbajt kazhdaya, obrashchenie
k kotorym osushchestvlyaetsya cherez opisannye ranee tablicy stranic. Registry up-
ravleniya pamyat'yu v sisteme gruppiruyutsya po tri; pervyj registr v trojke so-
derzhit adres tablicy stranic v fizicheskoj pamyati, vtoroj registr soderzhit
pervyj virtual'nyj adres, otobrazhaemyj s pomoshch'yu trojki registrov, tretij
registr soderzhit upravlyayushchuyu informaciyu, takuyu kak nomera stranic v tablice
stranic i prava dostupa k stranicam (tol'ko chtenie, chtenie i zapis'). Takaya
model' sootvetstvuet vysheopisannoj modeli oblasti. Kogda yadro gotovit pro-
cess k vypolneniyu, ono zagruzhaet trojki registrov sootvetstvuyushchej informaci-
ej iz zapisej chastnoj tablicy oblastej processa.
Esli process obrashchaetsya k yachejkam pamyati, raspolozhennym za predelami
prinadlezhashchego emu virtual'nogo prostranstva, sozdaetsya isklyuchitel'naya situ-
aciya. Naprimer, esli oblast' komand imeet razmer 16 Kbajt (Risunok 6.5), a
process obrashchaetsya k virtual'nomu adresu 26K, sozdaetsya isklyuchitel'naya situ-
aciya, obrabatyvaemaya operacionnoj sistemoj. To zhe samoe proishodit, esli
process pytaetsya obratit'sya k pamyati, ne imeya sootvetstvuyushchih prav dostupa,
naprimer, pytaetsya zapisat' adres v zashchishchennuyu ot zapisi oblast' komand. I v
tom, i v drugom primere process obychno zavershaetsya (bolee podrobno ob etom v
sleduyushchej glave).
6.2.3 Razmeshchenie yadra
Nesmotrya na to, chto yadro rabotaet v kontekste processa, otobrazhenie vir-
tual'nyh adresov, svyazannyh s yadrom, osushchestvlyaetsya nezavisimo ot vseh pro-
cessov. Programmy i struktury dannyh yadra rezidentny v sisteme i sovmestno
ispol'zuyutsya vsemi processami. Pri zapuske sistemy proishodit zagruzka prog-
ramm yadra v pamyat' s ustanovkoj sootvetstvuyushchih tablic i registrov dlya otob-
razheniya virtual'nyh adresov yadra v fizicheskie. Tablicy stranic dlya yadra ime-
yut strukturu, analogichnuyu strukture tablicy stranic, svyazannoj s processom,
a mehanizmy otobrazheniya virtual'nyh adresov yadra pohozhi na mehanizmy, is-
pol'zuemye dlya otobrazheniya pol'zovatel'skih adresov. Na mnogih mashinah vir-
tual'noe adresnoe prostranstvo processa razbivaetsya na neskol'ko klassov, v
tom chisle sistemnyj i pol'zovatel'skij, i kazhdyj klass imeet svoi sobstven-
nye tablicy stranic. Pri rabote v rezhime yadra sistema razreshaet dostup k ad-
resam yadra, pri rabote zhe v rezhime zadachi takogo roda dostup zapreshchen. Poe-
tomu, kogda v rezul'tate preryvaniya ili vypolneniya sistemnoj funkcii prois-
hodit perehod iz rezhima zadachi v rezhim yadra, operacionnaya sistema po dogovo-
rennosti s tehnicheskimi sredstvami razreshaet ssylki na adresa yadra, a pri
vozvrate v rezhim yadra eti ssylki uzhe zapreshcheny. V drugih mashinah mozhno me-
nyat' preobrazovanie virtual'nyh adresov, zagruzhaya special'nye registry vo
vremya raboty v rezhime yadra.
Na Risunke 6.6 priveden primer, v kotorom virtual'nye adresa ot 0 do
4M-1 prinadlezhat yadru, a nachinaya s 4M - processu. Imeyutsya dve gruppy regist-
rov upravleniya pamyat'yu, odna dlya adresov yadra i odna dlya adresov processa,
prichem kazhdoj gruppe sootvetstvuet tablica stranic, hranyashchaya nomera fiziches-
kih stranic so ssylkoj na adresa virtual'nyh stranic. Adresnye ssylki s is-
pol'zovaniem gruppy registrov yadra dopuskayutsya sistemoj tol'ko v rezhime yad-
ra; sledovatel'no, dlya perehoda mezhdu rezhimom yadra i rezhimom zadachi trebuet-
sya tol'ko, chtoby sistema razreshila ili zapretila adresnye ssylki s ispol'zo-
145
vaniem gruppy registrov yadra.
V nekotoryh sistemah yadro zagruzhaetsya v pamyat' takim obrazom, chto bol'-
shaya chast' virtual'nyh adresov yadra sovpadaet s fizicheskimi adresami i funk-
ciya preobrazovaniya virtual'nyh adresov v fizicheskie prevrashchaetsya v funkciyu
tozhdestvennosti. Rabota s prostranstvom processa, tem ne menee, trebuet,
chtoby preobrazovanie virtual'nyh adresov v fizicheskie proizvodilos' yadrom.
Adres tablicy Virtu- Nomera stra-
stranic al'nyj nic v tabli-
adres ce
+-----------+------------+-----------+
Registr yadra 1 | --------+ 0 | |
+-----------+-|----------+-----------+
Registr yadra 2 | ---+ | | 1M | |
+--------|--+-|----------+-----------+
Registr yadra 3 | --+| | | 2M | |
+-------||--+-|----------+-----------+
Registr processa 1 | +--- || | | 4M | |
+-|-----||--+-|----------+-----------+
Registr processa 2 | |+-- || | | | |
+-||----||--+-|----------+-----------+
Registr processa 3 | ||+- || | | | |
+-|||---||--+-|----------+-----------+
+------------------------+|| || |
| +--------------+| |+----|-------+
| | +----+ +-----|-------|----------+
| | | +--+ | |
v v v v v v
+------+ +------+ +------+ +------+ +------+ +------+
| 856K | | 747K | | 556K | | 0K | | 128K | | 256K |
+------+ +------+ +------+ +------+ +------+ +------+
| 917K | | 950K | | 997K | | 4K | | 97K | | 292K |
+------+ +------+ +------+ +------+ +------+ +------+
| 564K | | 333K | | 458K | | 3K | | 135K | | 304K |
+------+ +------+ +------+ +------+ +------+ +------+
| 444K | | - | | 632K | | 17K | | 139K | | 279K |
+------+ | - | +------+ +------+ +------+ +------+
| - | | - | | - | | - | | - | | - |
| - | | - | | - | | - | | - | | - |
+------+ +------+ +------+ +------+ +------+ +------+
Tablicy stranic processa Tablicy stranic yadra
(oblasti)
Risunok 6.6. Pereklyuchenie rezhima raboty s neprivilegirovannogo (rezhima
zadachi) na privilegirovannyj (rezhim yadra)
6.2.4 Prostranstvo processa
Kazhdyj process imeet svoe sobstvennoe prostranstvo, odnako yadro obrashcha-
etsya k prostranstvu vypolnyayushchegosya processa tak, kak esli by v sisteme ono
bylo edinstvennym. YAdro podbiraet dlya tekushchego processa kartu translyacii
virtual'nyh adresov, neobhodimuyu dlya raboty s prostranstvom processa. Pri
kompilyacii zagruzchik naznachaet peremennoj 'u' (imeni prostranstva processa)
fiksirovannyj virtual'nyj adres. |tot adres izvesten ostal'nym komponentam
yadra, v chastnosti modulyu, vypolnyayushchemu pereklyuchenie konteksta (razdel
6.4.3). YAdru takzhe izvestno, kakie tablicy upravleniya pamyat'yu ispol'zuyutsya
146
pri translyacii virtual'nyh adresov, prinadlezhashchih prostranstvu processa, i
blagodarya etomu yadro mozhet bystro peretranslirovat' virtual'nyj adres prost-
ranstva processa v drugoj fizicheskij adres. Po odnomu i tomu zhe virtual'nomu
adresu yadro mozhet poluchit' dostup k dvum raznym fizicheskim adresam, opisyva-
yushchim prostranstva dvuh processov.
Process imeet dostup k svoemu prostranstvu, kogda vypolnyaetsya v rezhime
yadra, no ne togda, kogda vypolnyaetsya v rezhime zadachi. Poskol'ku yadro v kazh-
dyj moment vremeni rabotaet tol'ko s odnim prostranstvom processa, ispol'zuya
dlya dostupa virtual'nyj adres, prostranstvo processa chastichno opisyvaet kon-
tekst processa, vypolnyayushchegosya v sisteme. Kogda yadro vybiraet process dlya
ispolneniya, ono ishchet v fizicheskoj pamyati sootvetstvuyushchee processu prostrans-
tvo i delaet ego dostupnym po virtual'nomu adresu.
Adres tablicy Virtu- Nomera stra-
stranic al'nyj nic v tabli-
adres ce
+-----------+------------+-----------+
Registr yadra 1 | | | |
+-----------+------------+-----------+
Registr yadra 2 | | | |
+-----------+------------+-----------+
(Prost- Registr yadra 3 | ---+ | 2M | 4 |
ranstvo +--------|--+------------+-----------+
processa) |
+---------------------+
|
Tablicy stranic dlya prostranstva processov |
v
+------+ +------+ +------+ +------+
| 114K | | 843K | |1879K | | 184K |
+------+ +------+ +------+ +------+
| 708K | | 794K | | 290K | | 176K |
+------+ +------+ +------+ +------+
| 143K | | 361K | | 450K | | 209K |
+------+ +------+ +------+ +------+
| 565K | | 847K | | 770K | | 477K |
+------+ +------+ +------+ +------+
Process A Process B Process C Process D
Risunok 6.7. Karta pamyati prostranstva processa v yadre
Predpolozhim, naprimer, chto prostranstvo processa imeet razmer 4 Kbajta i
pomeshchaetsya po virtual'nomu adresu 2M. Na Risunke 6.7 pokazana karta pamyati,
gde pervye dva registra iz gruppy otnosyatsya k programmam i dannym yadra (ad-
resa i ukazateli ne pokazany), a tretij registr adresuet k prostranstvu pro-
cessa D. Esli yadru nuzhno obratit'sya k prostranstvu processa A, ono kopiruet
svyazannuyu s etim prostranstvom informaciyu iz sootvetstvuyushchej tablicy stranic
v tretij registr. V lyuboj moment tretij registr yadra opisyvaet prostranstvo
tekushchego processa, no yadro mozhet soslat'sya na prostranstvo drugogo processa,
perepisav zapisi v tablice stranic s novym adresom. Informaciya v registrah 1
i 2 dlya yadra neizmenna, poskol'ku vse processy sovmestno ispol'zuyut program-
my i dannye yadra.
Kontekst processa vklyuchaet v sebya soderzhimoe adresnogo prostranstva za-
dachi, vydelennogo processu, a takzhe soderzhimoe otnosyashchihsya k processu appa-
147
ratnyh registrov i struktur dannyh yadra. S formal'noj tochki zreniya, kontekst
processa ob®edinyaet v sebe pol'zovatel'skij kontekst, registrovyj kontekst i
sistemnyj kontekst (*). Pol'zovatel'skij kontekst sostoit iz komand i dannyh
processa, steka zadachi i soderzhimogo sovmestno ispol'zuemogo prostranstva
pamyati v virtual'nyh adresah processa. Te chasti virtual'nogo adresnogo pros-
transtva processa, kotorye periodicheski otsutstvuyut v operativnoj pamyati
vsledstvie vygruzki ili zameshcheniya stranic, takzhe vklyuchayutsya v pol'zovatel'-
skij kontekst.
Registrovyj kontekst sostoit iz sleduyushchih komponent:
* Schetchika komand, ukazyvayushchego adres sleduyushchej komandy, kotoruyu budet vy-
polnyat' central'nyj processor; etot adres yavlyaetsya virtual'nym adresom
vnutri prostranstva yadra ili prostranstva zadachi.
* Registra sostoyaniya processora (PS), kotoryj ukazyvaet apparatnyj status
mashiny po otnosheniyu k processu. Registr PS, naprimer, obychno soderzhit
podpolya, kotorye ukazyvayut, yavlyaetsya li rezul'tat poslednih vychislenij
nulevym, polozhitel'nym ili otricatel'nym, perepolnen li registr s usta-
novkoj bita perenosa i t.d. Operacii, vliyayushchie na ustanovku registra PS,
vypolnyayutsya dlya otdel'nogo processa, potomu-to v registre PS i soderzhit-
sya apparatnyj status mashiny po otnosheniyu k processu. V drugih imeyushchih
vazhnoe znachenie podpolyah registra PS ukazyvaetsya tekushchij uroven' prery-
vaniya processora, a takzhe tekushchij i predydushchij rezhimy vypolneniya proces-
sa (rezhim yadra/zadachi). Po znacheniyu podpolya tekushchego rezhima vypolneniya
processa ustanavlivaetsya, mozhet li process vypolnyat' privilegirovannye
komandy i obrashchat'sya k adresnomu prostranstvu yadra.
* Ukazatelya vershiny steka, v kotorom soderzhitsya adres sleduyushchego elementa
steka yadra ili steka zadachi, v sootvetstvii s rezhimom vypolneniya proces-
sa. V zavisimosti ot arhitektury mashiny ukazatel' vershiny steka pokazy-
vaet na sleduyushchij svobodnyj element steka ili na poslednij ispol'zuemyj
element. Ot arhitektury mashiny takzhe zavisit napravlenie uvelicheniya ste-
ka (k starshim ili mladshim adresam), no dlya nas sejchas eti voprosy nesu-
shchestvenny.
* Registrov obshchego naznacheniya, v kotoryh soderzhitsya informaciya, sgeneriro-
vannaya processom vo vremya ego vypolneniya. CHtoby oblegchit' posleduyushchie
ob®yasneniya, vydelim sredi nih dva registra - registr 0 i registr 1 - dlya
dopolnitel'nogo ispol'zovaniya pri peredache informacii mezhdu processami i
yadrom. Sistemnyj kontekst processa imeet "staticheskuyu chast'" (pervye tri
elementa v nizhesleduyushchem spiske) i "dinamicheskuyu chast'" (poslednie dva
elementa). Na protyazhenii vsego vremeni vypolneniya process postoyanno ras-
polagaet odnoj staticheskoj chast'yu sistemnogo konteksta, no mozhet imet'
peremennoe chislo dinamicheskih chastej. Dinamicheskuyu chast' sistemnogo kon-
teksta mozhno predstavit' v vide
steka, elementami kotorogo yavlyayutsya kontekstnye urovni, kotorye pomeshcha-
yutsya v stek yadrom ili vytalkivayutsya iz steka pri nastuplenii razlichnyh
sobytij. Sistemnyj kontekst vklyuchaet v sebya sleduyushchie komponenty:
* Zapis' v tablice processov, opisyvayushchaya sostoyanie processa (razdel 6.1)
i soderzhashchaya razlichnuyu upravlyayushchuyu informaciyu, k kotoroj yadro vsegda mo-
zhet obratit'sya.
* CHast' adresnogo prostranstva zadachi, vydelennaya processu, gde hranitsya
upravlyayushchaya informaciya o processe, dostupnaya tol'ko v kontekste proces-
sa. Obshchie upravlyayushchie parametry, takie kak prioritet processa, hranyatsya
v tablice processov, poskol'ku obrashchenie k nim dolzhno proizvodit'sya za
predelami konteksta processa.
---------------------------------------
(*) Ispol'zuemye v dannom razdele terminy "pol'zovatel'skij kontekst"
(user-level context), "registrovyj kontekst" (register context), "sis-
temnyj kontekst" (system-level context) i "kontekstnye urovni" (context
layers) vvedeny avtorom.
148
* Zapisi chastnoj tablicy oblastej processa, obshchie tablicy oblastej i tab-
licy stranic, neobhodimye dlya preobrazovaniya virtual'nyh adresov v fizi-
cheskie, v svyazi s chem v nih opisyvayutsya oblasti komand, dannyh, steka i
drugie oblasti, prinadlezhashchie processu. Esli neskol'ko processov sovmes-
tno ispol'zuyut obshchie oblasti, eti oblasti vhodyat sostavnoj chast'yu v kon-
tekst kazhdogo processa, poskol'ku kazhdyj process rabotaet s etimi oblas-
tyami nezavisimo ot drugih processov. V zadachi upravleniya pamyat'yu vhodit
identifikaciya uchastkov virtual'nogo adresnogo prostranstva processa, ne
yavlyayushchihsya rezidentnymi v pamyati.
* Stek yadra, v kotorom hranyatsya zapisi procedur yadra, esli process vypol-
nyaetsya v rezhime yadra. Nesmotrya na to, chto vse processy pol'zuyutsya odnimi
i temi zhe programmami yadra, kazhdyj iz nih imeet svoyu sobstvennuyu kopiyu
steka yadra dlya hraneniya individual'nyh obrashchenij k funkciyam yadra. Pust',
naprimer, odin process vyzyvaet funkciyu creat i priostanavlivaetsya v
ozhidanii naznacheniya novogo indeksa, a drugoj process vyzyvaet funkciyu
read i priostanavlivaetsya v ozhidanii zaversheniya peredachi dannyh s diska
v pamyat'. Oba processa obrashchayutsya k funkciyam yadra i u kazhdogo iz nih
imeetsya v nalichii otdel'nyj stek, v kotorom hranitsya posledovatel'nost'
vypolnennyh obrashchenij. YAdro dolzhno imet' vozmozhnost' vosstanavlivat' so-
derzhimoe steka yadra i polozhenie ukazatelya vershiny steka dlya togo, chtoby
vozobnovlyat' vypolnenie processa v rezhime yadra. V razlichnyh sistemah
stek yadra chasto raspolagaetsya v prostranstve processa, odnako etot stek
yavlyaetsya logicheski-nezavisimym i, takim obrazom, mozhet pomeshchat'sya v sa-
mostoyatel'noj oblasti pamyati. Kogda process vypolnyaetsya v rezhime zadachi,
sootvetstvuyushchij emu stek yadra pust.
* Dinamicheskaya chast' sistemnogo konteksta processa, sostoyashchaya iz neskol'-
kih urovnej i imeyushchaya vid steka, kotoryj osvobozhdaetsya ot elementov v
poryadke, obratnom poryadku ih postupleniya. Na kazhdom urovne sistemnogo
konteksta soderzhitsya informaciya, neobhodimaya dlya vosstanovleniya predydu-
shchego urovnya i vklyuchayushchaya v sebya registrovyj kontekst predydushchego urovnya.
YAdro pomeshchaet kontekstnyj uroven' v stek pri vozniknovenii preryvaniya,
pri obrashchenii k sistemnoj funkcii ili pri pereklyuchenii konteksta processa.
Kontekstnyj uroven' vytalkivaetsya iz steka posle zaversheniya obrabotki prery-
vaniya, pri vozvrate processa v rezhim zadachi posle vypolneniya sistemnoj funk-
cii, ili pri pereklyuchenii konteksta. Takim obrazom, pereklyuchenie konteksta
vlechet za soboj kak pomeshchenie kontekstnogo urovnya v stek, tak i izvlechenie
urovnya iz steka: yadro pomeshchaet v stek kontekstnyj uroven' starogo processa,
a izvlekaet iz steka kontekstnyj uroven' novogo processa. Informaciya, neob-
hodimaya dlya vosstanovleniya tekushchego kontekstnogo urovnya, hranitsya v zapisi
tablicy processov.
Na Risunke 6.8 izobrazheny komponenty konteksta processa. Sleva na risun-
ke izobrazhena staticheskaya chast' konteksta. V nee vhodyat: pol'zovatel'skij
kontekst, sostoyashchij iz programm processa
(mashinnyh instrukcij), dannyh, steka i razdelyaemoj pamyati (esli ona imeet-
sya), a takzhe staticheskaya chast' sistemnogo konteksta, sostoyashchaya iz zapisi
tablicy processov, prostranstva processa i zapisej chastnoj tablicy oblastej
(informacii, neobhodimoj dlya translyacii virtual'nyh adresov pol'zovatel'sko-
go konteksta). Sprava na risunke izobrazhena dinamicheskaya chast' konteksta.
Ona imeet vid steka i vklyuchaet v sebya neskol'ko elementov, hranyashchih regist-
rovyj kontekst predydushchego urovnya i stek yadra dlya tekushchego urovnya. Nulevoj
kontekstnyj uroven' predstavlyaet soboj pustoj uroven', otnosyashchijsya k pol'zo-
vatel'skomu kontekstu; uvelichenie steka zdes' idet v adresnom prostranstve
zadachi, stek yadra nedejstvitelen. Strelka, soedinyayushchaya mezhdu soboj statiches-
kuyu chast' sistemnogo konteksta i verhnij uroven' dinamicheskoj chasti konteks-
ta, oznachaet to, chto v tablice processov hranitsya informaciya, pozvolyayushchaya
yadru vosstanavlivat' tekushchij kontekstnyj uroven' processa.
149
Staticheskaya chast' konteksta Dinamicheskaya chast' konteksta
+-------------------------+ logiches- | - |
|Pol'zovatel'skij kontekst| kij uka- | - |
| +---------------------+ | zatel' na| - |
| | Programmy processa | | tekushchij | - |
| | Dannye | |+-------->+----------------+
| | Stek | || kontek- | Stek yadra dlya |
| | Razdelyaemye dannye | || stnyj | urovnya 3 |
| +---------------------+ || uroven' | |
| || | Sohranennyj re-|
| Staticheskaya chast' ||Uroven' 3| gistrovyj kon- |
| sistemnogo konteksta || | tekst urovnya 2 |
| +---------------------+ || +----------------+
| | Zapis' tablicy pro- | || | Stek yadra dlya |
| | cessov +-++ | urovnya 2 |
| |Prostranstvo processa| | | |
| | CHastnaya tablica ob- | | | Sohranennyj re-|
| | lastej processa | | Uroven' 2| gistrovyj kon- |
| +---------------------+ | | tekst urovnya 1 |
+-------------------------+ +----------------+
| Stek yadra dlya |
| urovnya 1 |
| |
| Sohranennyj re-|
Uroven' 1| gistrovyj kon- |
| tekst urovnya 0 |
+----------------+
Kontekstnyj| |
uroven'| (Pol'zovatel'- |
yadra 0| skij uroven') |
+----------------+
Risunok 6.8. Komponenty konteksta processa
Process vypolnyaetsya v ramkah svoego konteksta ili, esli govorit' bolee
tochno, v ramkah svoego tekushchego kontekstnogo urovnya. Kolichestvo kontekstnyh
urovnej ogranichivaetsya chislom podderzhivaemyh v mashine urovnej preryvaniya.
Naprimer, esli v mashine podderzhivayutsya raznye urovni preryvanij dlya prog-
ramm, terminalov, diskov, vseh ostal'nyh periferijnyh ustrojstv i tajmera,
to est' 5 urovnej preryvaniya, to, sledovatel'no, u processa mozhet byt' ne
bolee 7 kontekstnyh urovnej: po odnomu na kazhdyj uroven' preryvaniya, 1 dlya
sistemnyh funkcij i 1 dlya pol'zovatel'skogo konteksta. 7 urovnej budet dos-
tatochno, dazhe esli preryvaniya budut postupat' v "naihudshem" iz vozmozhnyh po-
ryadkov, poskol'ku preryvanie dannogo urovnya blokiruetsya (to est' ego obra-
botka otkladyvaetsya central'nym processorom) do teh por, poka yadro ne obra-
botaet vse preryvaniya etogo i bolee vysokih urovnej.
Nesmotrya na to, chto yadro vsegda ispolnyaet kontekst kakogo-nibud' proces-
sa, logicheskaya funkciya, kotoruyu yadro realizuet v kazhdyj moment, ne vsegda
imeet otnoshenie k dannomu processu. Naprimer, esli vozvrashchaya dannye, disko-
voe zapominayushchee ustrojstvo posylaet preryvanie, to preryvaetsya vypolnenie
tekushchego processa i yadro obrabatyvaet preryvanie na novom kontekstnom urovne
etogo processa, dazhe esli dannye otnosyatsya k drugomu processu. Programmy ob-
rabotki preryvanij obychno ne obrashchayutsya k staticheskim sostavlyayushchim konteksta
processa i ne vidoizmenyayut ih, tak kak eti chasti ne svyazany s preryvaniyami.
6.4 SOHRANENIE KONTEKSTA PROCESSA
Kak uzhe govorilos' ranee, yadro sohranyaet kontekst processa, pomeshchaya v
150
stek novyj kontekstnyj uroven'. V chastnosti, eto imeet mesto, kogda sistema
poluchaet preryvanie, kogda process vyzyvaet sistemnuyu funkciyu ili kogda yadro
vypolnyaet pereklyuchenie konteksta. Kazhdyj iz etih sluchaev podrobno rassmatri-
vaetsya v etom razdele.
6.4.1 Preryvaniya i osobye situacii
Sistema otvechaet za obrabotku vseh preryvanij, postupili li oni ot appa-
ratury (naprimer, ot tajmera ili ot periferijnyh ustrojstv), ot programm (v
svyazi s vypolneniem instrukcij, vyzyvayushchih vozniknovenie "programmnyh prery-
vanij") ili yavilis' rezul'tatom osobyh situacij (takih kak obrashchenie k ot-
sutstvuyushchej stranice). Esli central'nyj processor vedet obrabotku na bolee
nizkom urovne po sravneniyu s urovnem postupivshego preryvaniya, to pered vy-
polneniem sleduyushchej instrukcii ego rabota preryvaetsya, a uroven' preryvaniya
processora povyshaetsya, chtoby drugie preryvaniya s tem zhe (ili bolee nizkim)
urovnem ne mogli imet' mesta do teh por, poka yadro ne obrabotaet tekushchee
preryvanie, blagodarya chemu obespechivaetsya sohranenie celostnosti struktur
dannyh yadra. V processe obrabotki preryvaniya yadro vypolnyaet sleduyushchuyu posle-
dovatel'nost' dejstvij:
1. Sohranyaet tekushchij registrovyj kontekst vypolnyayushchegosya processa i sozdaet
v steke (pomeshchaet v stek) novyj kontekstnyj uroven'.
2. Ustanavlivaet "istochnik" preryvaniya, identificiruya tip preryvaniya (nap-
rimer, preryvanie po tajmeru ili ot diska) i nomer ustrojstva, vyzvavshe-
go preryvanie (naprimer, esli preryvanie vyzvano diskovym zapominayushchim
ustrojstvom). Pri vozniknovenii preryvaniya sistema poluchaet ot mashiny
chislo, kotoroe ispol'zuet v kachestve smeshcheniya v tablice vektorov prery-
vaniya. Soderzhimoe vektorov preryvaniya v raznyh mashinah razlichno, no, kak
pravilo, v nih hranitsya adres programmy obrabotki preryvaniya, sootvetst-
vuyushchej istochniku preryvaniya, i ukazyvaetsya put' poiska parametra dlya
programmy. V kachestve primera rassmotrim tablicu vektorov preryvaniya,
privedennuyu na Risunke 6.9. Esli istochnikom preryvaniya yavilsya terminal,
yadro poluchaet ot apparatury nomer preryvaniya, ravnyj 2, i vyzyvaet prog-
+-----------------------------------------+
| Nomer preryvaniya Programma obrabotki |
| preryvaniya |
| |
| 0 clockintr |
| 1 diskintr |
| 2 ttyintr |
| 3 devintr |
| 4 softintr |
| 5 otherintr |
+-----------------------------------------+
Risunok 6.9. Primer vektorov preryvaniya
rammu obrabotki preryvanij ot terminala, imenuemuyu ttyintr.
3. Vyzov programmy obrabotki preryvaniya. Stek yadra dlya novogo kontekstnogo
urovnya, esli rassuzhdat' logicheski, dolzhen otlichat'sya ot steka yadra pre-
dydushchego kontekstnogo urovnya. V nekotoryh razrabotkah stek yadra tekushchego
processa ispol'zuetsya dlya hraneniya elementov, sootvetstvuyushchih programmam
obrabotki preryvanij, v drugih razrabotkah eti elementy hranyatsya v glo-
bal'nom steke preryvanij, blagodarya chemu obespechivaetsya vozvrat iz prog-
rammy bez pereklyucheniya konteksta.
4. Programma zavershaet svoyu rabotu i vozvrashchaet upravlenie yadru. YAdro is-
polnyaet nabor mashinnyh komand po vosstanovleniyu registrovogo konteksta i
151
steka yadra predydushchego kontekstnogo urovnya v tom vide, kotoryj oni imeli
v moment preryvaniya, posle chego vozobnovlyaet vypolnenie vosstanovlennogo
kontekstnogo urovnya. Programma obrabotki preryvanij mozhet povliyat' na
povedenie processa, poskol'ku ona mozhet vnesti izmeneniya v global'nye
struktury dannyh yadra i vozobnovit' vypolnenie priostanovlennyh proces-
sov. Odnako, obychno process prodolzhaet vypolnyat'sya tak, kak esli by pre-
ryvanie nikogda ne proishodilo.
+-----------------------------------------------------+
| algoritm inthand /* obrabotka preryvanij */ |
| vhodnaya informaciya: otsutstvuet |
| vyhodnaya informaciya: otsutstvuet |
| { |
| sohranit' (pomestit' v stek) tekushchij kontekstnyj |
| uroven'; |
| ustanovit' istochnik preryvaniya; |
| najti vektor preryvaniya; |
| vyzvat' programmu obrabotki preryvaniya; |
| vosstanovit' (izvlech' iz steka) predydushchij kon- |
| tekstnyj uroven'; |
| } |
+-----------------------------------------------------+
Risunok 6.10. Algoritm obrabotki preryvanij
Na Risunke 6.10 kratko izlozheno, kakim obrazom yadro obrabatyvaet prery-
vaniya. S pomoshch'yu ispol'zovaniya v otdel'nyh sluchayah posledovatel'nosti mashin-
nyh operacij ili mikrokomand na nekotoryh mashinah dostigaetsya bol'shij effekt
po sravneniyu s tem, kogda vse operacii vypolnyayutsya programmnym obespecheniem,
odnako imeyutsya uzkie mesta, svyazannye s chislom sohranyaemyh kontekstnyh urov-
nej i skorost'yu vypolneniya mashinnyh komand, realizuyushchih sohranenie konteks-
ta. Po etoj prichine opredelennye operacii, vypolneniya kotoryh trebuet reali-
zaciya sistemy UNIX, yavlyayutsya mashinno-zavisimymi.
Na Risunke 6.11 pokazan primer, v kotorom process zaprashivaet vypolnenie
sistemnoj funkcii (sm. sleduyushchij razdel) i poluchaet preryvanie ot diska pri
ee vypolnenii. Zapustiv programmu obrabotki preryvaniya ot diska, sistema po-
luchaet preryvanie po tajmeru i vyzyvaet uzhe programmu obrabotki preryvaniya
po tajmeru. Kazhdyj raz, kogda sistema poluchaet preryvanie (ili vyzyvaet sis-
temnuyu funkciyu), ona sozdaet v steke novyj kontekstnyj uroven' i sohranyaet
registrovyj kontekst predydushchego urovnya.
6.4.2 Vzaimodejstvie s operacionnoj sistemoj cherez vyzovy
sistemnyh funkcij
Takogo roda vzaimodejstvie s yadrom bylo predmetom rassmotreniya v predy-
dushchih glavah, gde shla rech' ob obychnom vyzove funkcij. Ochevidno, chto obychnaya
posledovatel'nost' komand obrashcheniya k funkcii ne v sostoyanii pereklyuchit' vy-
polneniya processa s rezhima zadachi na rezhim yadra. Kompilyator s yazyka Si is-
pol'zuet biblioteku funkcij, imena kotoryh sovpadayut s imenami sistemnyh
funkcij, inache ssylki na sistemnye funkcii v pol'zovatel'skih programmah by-
li by ssylkami na neopredelennye imena. V bibliotechnyh funkciyah obychno is-
polnyaetsya komanda, perevodyashchaya vypolnenie processa v rezhim yadra i pobuzhdayu-
shchaya yadro k zapusku ispolnyaemogo koda sistemnoj funkcii. V dal'nejshem eta ko-
manda imenuetsya "vnutrennim preryvaniem operacionnoj sistemy". Bibliotechnye
procedury ispolnyayutsya v rezhime zadachi, a vzaimodejstvie s operacionnoj sis-
temoj cherez vyzov sistemnoj funkcii mozhno opredelit' v neskol'kih slovah kak
152
Posledovatel'nost' preryvanij
+-------------------------------+
| Kontekstnyj uroven' yadra 3 |
| Ispolnit' programmu obra- |
| botki preryvaniya po tajmeru |
| |
| Sohranit' registrovyj kon- |
| tekst programmy obrabotki |
| preryvaniya ot diska |
Preryvanie po tajmeru --------+-------------------------------+
^ | Kontekstnyj uroven' yadra 2 |
| | Ispolnit' programmu obra- |
| | botki preryvaniya ot diska |
| | |
| | Sohranit' registrovyj kon- |
| | tekst obrashcheniya k sistemnoj |
| | funkcii |
Preryvanie ot diska ----------+-------------------------------+
^ | Kontekstnyj uroven' yadra 1 |
| | Ispolnit' obrashchenie k sis- |
| | temnoj funkcii |
| | |
| | Sohranit' registrovyj kon- |
| | tekst pol'zovatel'skogo |
| | urovnya |
Vyzov sistemnoj funkcii ------+-------------------------------+
^
|
|
Ispolnenie v rezhime zadachi
Risunok 6.11. Primery preryvanij
osobyj sluchaj programmy obrabotki preryvaniya. Bibliotechnye funkcii peredayut
yadru unikal'nyj nomer sistemnoj funkcii odnim iz mashinno-zavisimyh sposobov
- libo kak parametr vnutrennego preryvaniya operacionnoj sistemy, libo cherez
otdel'nyj registr, libo cherez stek - a yadro takim obrazom opredelyaet tip vy-
zyvaemoj funkcii.
Obrabatyvaya vnutrennee preryvanie operacionnoj sistemy, yadro po nomeru
sistemnoj funkcii vedet v tablice poisk adresa sootvetstvuyushchej procedury yad-
ra, to est' tochki vhoda sistemnoj funkcii, i kolichestva peredavaemyh funkcii
parametrov (Risunok 6.12). YAdro vychislyaet adres (pol'zovatel'skij) pervogo
parametra funkcii, pribavlyaya (ili vychitaya, v zavisimosti ot napravleniya uve-
licheniya steka) smeshchenie k ukazatelyu vershiny steka zadachi (analogichno dlya
vseh parametrov funkcii). Nakonec, yadro kopiruet parametry zadachi v prost-
ranstvo processa i vyzyvaet sootvetstvuyushchuyu proceduru, kotoraya vypolnyaet
sistemnuyu funkciyu. Posle ispolneniya procedury yadro vyyasnyaet, ne bylo li
oshibki. Esli oshibka byla, yadro delaet sootvetstvuyushchie ustanovki v sohranen-
nom registrovom kontekste zadachi, pri etom v registre PS obychno ustanavliva-
etsya bit perenosa, a v nulevoj registr zanositsya nomer oshibki. Esli pri vy-
polnenii sistemnoj funkcii ne bylo oshibok, yadro ochishchaet v registre PS bit
perenosa i zanosit vozvrashchaemye funkciej znacheniya v registry 0 i 1 v sohra-
nennom registrovom kontekste zadachi. Kogda yadro vozvrashchaetsya posle obrabotki
vnutrennego preryvaniya operacionnoj sistemy v rezhim zadachi, ono popadaet v
sleduyushchuyu bibliotechnuyu instrukciyu posle preryvaniya. Bibliotechnaya funkciya in-
terpretiruet vozvrashchennye yadrom znacheniya i peredaet ih programme pol'zovate-
lya.
153
+------------------------------------------------------------+
| algoritm syscall /* algoritm zapuska sistemnoj funkcii */|
| vhodnaya informaciya: nomer sistemnoj funkcii |
| vyhodnaya informaciya: rezul'tat sistemnoj funkcii |
| { |
| najti zapis' v tablice sistemnyh funkcij, sootvetstvuyu-|
| shchuyu ukazannomu nomeru funkcii; |
| opredelit' kolichestvo parametrov, peredavaemyh funkcii;|
| skopirovat' parametry iz adresnogo prostranstva zadachi |
| v prostranstvo processa; |
| sohranit' tekushchij kontekst dlya avarijnogo zaversheniya |
| (sm. razdel 6.44); |
| zapustit' v yadre ispolnyaemyj kod sistemnoj funkcii; |
| esli (vo vremya vypolneniya funkcii proizoshla oshibka) |
| { |
| ustanovit' nomer oshibki v nulevom registre sohra- |
| nennogo registrovogo konteksta zadachi; |
| vklyuchit' bit perenosa v registre PS sohranennogo |
| registrovogo konteksta zadachi; |
| } |
| v protivnom sluchae |
| zanesti vozvrashchaemye funkciej znacheniya v registry 0 |
| i 1 v sohranennom registrovom kontekste zadachi; |
| } |
+------------------------------------------------------------+
Risunok 6.12. Algoritm obrashcheniya k sistemnym funkciyam
V kachestve primera rassmotrim programmu, kotoraya sozdaet fajl s razreshe-
niem chteniya i zapisi v nego dlya vseh pol'zovatelej (rezhim dostupa 0666) i
kotoraya privedena v verhnej chasti Risunka 6.13. Dalee na risunke izobrazhen
otredaktirovannyj fragment sgenerirovannogo koda programmy posle kompilyacii
i disassemblirovaniya (sozdaniya po ob®ektnomu kodu ekvivalentnoj programmy na
yazyke assemblera) v sisteme Motorola 68000. Na Risunke 6.14 izobrazhena kon-
figuraciya steka dlya sistemnoj funkcii sozdaniya. Kompilyator generiruet prog-
rammu pomeshcheniya v stek zadachi dvuh parametrov, odin iz kotoryh soderzhit us-
tanovku prav dostupa (0666), a drugoj - peremennuyu "imya fajla" (**). Zatem
iz adresa 64 process vyzyvaet bibliotechnuyu funkciyu creat (adres 7a), analo-
gichnuyu sootvetstvuyushchej sistemnoj funkcii. Adres tochki vozvrata iz funkcii -
6a, etot adres pomeshchaetsya processom v stek. Bibliotechnaya funkciya creat zasy-
laet v registr 0 konstantu 8 i ispolnyaet komandu preryvaniya (trap), kotoraya
pereklyuchaet process iz rezhima zadachi v rezhim yadra i zastavlyaet ego obratit'-
sya k sistemnoj funkcii. Zametiv, chto process vyzyvaet sistemnuyu funkciyu, yad-
ro vybiraet iz registra 0 nomer funkcii (8) i opredelyaet takim obrazom, chto
vyzvana funkciya creat. Prosmatrivaya vnutrennyuyu tablicu, yadro obnaruzhivaet,
chto sistemnoj funkcii creat neobhodimy dva parametra; vosstanavlivaya regist-
rovyj kontekst predydushchego urovnya, yadro kopiruet parametry iz pol'zovatel'-
skogo prostranstva v prostranstvo processa. Procedury yadra, kotorym ponado-
byatsya eti parametry, mogut najti ih v opredelennyh mestah adresnogo prost-
ranstva processa. Po zavershenii ispolneniya koda funkcii creat upravlenie
vozvrashchaetsya programme obrabotki obrashchenij k operacionnoj sisteme, kotoraya
proveryaet, ustanovleno li pole oshibki v prostranstve processa (to est' imela
li mesto vo vremya vypolneniya funkcii oshibka); esli da, programma ustanavli-
vaet v registre PS bit perenosa, zanosit v registr 0 kod oshibki i vozvrashchaet
upravlenie yadru. Esli oshibok ne bylo, v registry 0 i 1 yadro zanosit kod za-
versheniya. Vozvrashchaya up-
---------------------------------------
(**) Ocherednost', v kotoroj kompilyator vychislyaet i pomeshchaet v
stek parametry funkcii, zavisit ot realizacii sistemy.
154
+----------------------------------------+
| char name[] = "file"; |
| main() |
| { |
| int fd; |
| fd = creat(name,0666); |
| } |
+----------------------------------------+
+---------------------------------------------------------------+
| Fragmenty assemblernoj programmy, sgenerirovannoj v |
| sisteme Motorola 68000 |
| |
| Adres Komanda |
| - |
| - |
| # tekst glavnoj programmy |
| - |
| 58: mov &Ox1b6,(%sp) # pomestit' kod 0666 v stek |
| 5e: mov &Ox204,-(%sp) # pomestit' ukazatel' vershiny |
| # steka i peremennuyu "imya fajla"|
| # v stek |
| 64: jsr Ox7a # vyzov bibliotechnoj funkcii |
| # sozdaniya fajla |
| - |
| - |
| # tekst bibliotechnoj funkcii sozdaniya fajla |
| 7a: movq &Ox8,%d0 # zanesti znachenie 8 v registr 0|
| 7c: trap &Ox0 # vnutrennee preryvanie operaci-|
| # onnoj sistemy |
| 7e: bcc &Ox6 <86> # esli bit perenosa ochishchen, |
| # perejti po adresu 86 |
| 80: jmp Ox13c # perejti po adresu 13c |
| 86: rts # vozvrat iz podprogrammy |
| - |
| - |
| # tekst obrabotki oshibok funkcii |
| 13c: mov %d0,&Ox20e # pomestit' soderzhimoe registra |
| # 0 v yachejku 20e (peremennaya |
| # errno) |
| 142: movq &-Ox1,%d0 # zanesti v registr 0 konstantu |
| # -1 |
| 144: mova %d0,%a0 |
| 146: rts # vozvrat iz podprogrammy |
+---------------------------------------------------------------+
Risunok 6.13. Sistemnaya funkciya creat i sgenerirovannaya prog-
ramma ee vypolneniya v sisteme Motorola 68000
ravlenie iz programmy obrabotki obrashchenij k operacionnoj sisteme v rezhim za-
dachi, bibliotechnaya funkciya proveryaet sostoyanie bita perenosa v registre PS
(po adresu 7): esli bit ustanovlen, upravlenie peredaetsya po adresu 13c, iz
nulevogo registra vybiraetsya kod oshibki i pomeshchaetsya v global'nuyu peremennuyu
errno po adresu 20, v registr 0 zanositsya -1, i upravlenie vozvrashchaetsya na
sleduyushchuyu posle adresa 64 (gde proizvoditsya vyzov funkcii) komandu. Kod za-
versheniya funkcii imeet znachenie -1, chto ukazyvaet na oshibku v vypolnenii
155
sistemnoj funkcii. Esli zhe bit perenosa v registre PS pri perehode iz rezhima
yadra v rezhim zadachi imeet nulevoe znachenie, process s adresa 7 perehodit po
adresu 86 i vozvrashchaet upravlenie vyzvavshej programme (adres 64); registr 0
soderzhit vozvrashchaemoe funkciej znachenie.
+---------+ | - |
| - | | - |
| - | | - |
| - | |stek yadra dlya kon-|
| - | |tekstnogo urovnya 1|
+---------+ | |
| 1b6 | kod rezhima dostupa |posledovatel'nost'|
| | (666 v vos'mirichnoj sisteme) |komand obrashcheniya k|
| 204 | adres peremennoj "imya fajla" | funkcii creat |
| 6a | adres tochki vozvrata posle +------------------+
| | vyzova bibliotechnoj funkcii |sohranennyj regis-|
+---------+<-----+ | trovyj kontekst |
| vnutren-| | | dlya urovnya 0 |
| nee pre-| | |(pol'zovatel'sko- |
| ryvanie | znachenie ukazatelya | go) |
| v | vershiny steka v mo- | |
| 7c | ment vnutrennego pre- | schetchik komand, |
+---------+ ryvaniya operacionnoj | ustanovlennyj na |
napravlenie sistemy | 7e |
uvelicheniya steka | |
| |ukazatel' vershiny |
| | steka |
v | |
| registr PS |
| |
|registr 0 (vvedeno|
| znachenie 8) |
| |
| drugie registry |
|obshchego naznacheniya |
+------------------+
Risunok 6.14. Konfiguraciya steka dlya sistemnoj funkcii creat
Neskol'ko bibliotechnyh funkcij mogut otobrazhat'sya na odnu tochku vhoda v
spisok sistemnyh funkcij. Kazhdaya tochka vhoda opredelyaet tochnye sintaksis i
semantiku obrashcheniya k sistemnoj funkcii, odnako bolee udobnyj interfejs
obespechivaetsya s pomoshch'yu bibliotek. Sushchestvuet, naprimer, neskol'ko konst-
rukcij sistemnoj funkcii exec, takih kak execl i execle, vypolnyayushchih odni i
te zhe dejstviya s nebol'shimi otlichiyami. Bibliotechnye funkcii, sootvetstvuyushchie
etim konstrukciyam, pri obrabotke parametrov realizuyut zayavlennye svojstva,
no v konechnom itoge, otobrazhayutsya na odnu i tu zhe funkciyu yadra.
6.4.3 Pereklyuchenie konteksta
Esli obratit'sya k diagramme sostoyanij processa (Risunok 6.1), mozhno uvi-
det', chto yadro razreshaet proizvodit' pereklyuchenie konteksta v chetyreh slucha-
yah: kogda process priostanavlivaet svoe vypolnenie, kogda on zavershaetsya,
kogda on vozvrashchaetsya posle vyzova sistemnoj funkcii v rezhim zadachi, no ne
yavlyaetsya naibolee podhodyashchim dlya zapuska, ili kogda on vozvrashchaetsya v rezhim
zadachi posle zaversheniya yadrom obrabotki preryvaniya, no tak zhe ne yavlyaetsya
naibolee podhodyashchim dlya zapuska. Kak uzhe bylo pokazano v glave 2, yadro pod-
156
derzhivaet celostnost' i soglasovannost' svoih vnutrennih struktur dannyh,
zapreshchaya proizvol'no pereklyuchat' kontekst. Prezhde chem pereklyuchat' kontekst,
yadro dolzhno udostoverit'sya v soglasovannosti svoih struktur dannyh: to est'
v tom, chto sdelany vse neobhodimye korrektirovki, vse ocheredi vystroeny nad-
lezhashchim obrazom, ustanovleny sootvetstvuyushchie blokirovki, pozvolyayushchie izbe-
zhat' vmeshatel'stva so storony drugih processov, chto net izlishnih blokirovok
i t.d. Naprimer, esli yadro vydelyaet bufer, schityvaet blok iz fajla i prios-
tanavlivaet vypolnenie do zaversheniya peredachi dannyh s diska, ono ostavlyaet
bufer zablokirovannym, chtoby drugie processy ne smogli obratit'sya k buferu.
No esli process ispolnyaet sistemnuyu funkciyu link, yadro snimaet blokirovku s
pervogo indeksa pered tem, kak snyat' ee so vtorogo indeksa, i tem samym pre-
dotvrashchaet vozniknovenie tupikovyh situacij (vzaimnoj blokirovki).
YAdro vypolnyaet pereklyuchenie konteksta po zavershenii sistemnoj funkcii
exit, poskol'ku v etom sluchae bol'she nichego ne ostaetsya delat'. Krome togo,
pereklyuchenie konteksta dopuskaetsya, kogda process priostanavlivaet svoyu ra-
botu, poskol'ku do momenta vozobnovleniya mozhet projti nemalo vremeni, v te-
chenie kotorogo mogli by vypolnyat'sya drugie processy. Pereklyuchenie konteksta
dopuskaetsya i togda, kogda process ne imeet preimushchestv pered drugimi pro-
cessami pri ispolnenii, s tem, chtoby obespechit' bolee spravedlivoe planiro-
vanie processov: esli po vyhode processa iz sistemnoj funkcii ili iz prery-
vaniya obnaruzhivaetsya, chto sushchestvuet eshche odin process, kotoryj imeet bolee
vysokij prioritet i zhdet vypolneniya, to bylo by nespravedlivo ostavlyat' ego
v ozhidanii.
Procedura pereklyucheniya konteksta pohozha na procedury obrabotki preryva-
nij i obrashcheniya k sistemnym funkciyam, esli ne schitat' togo, chto yadro vmesto
predydushchego kontekstnogo urovnya tekushchego processa vosstanavlivaet kontekst-
nyj uroven' drugogo processa. Prichiny, vyzvavshie pereklyuchenie konteksta, pri
etom ne imeyut znacheniya. Na mehanizm pereklyucheniya konteksta ne vliyaet i metod
vybora sleduyushchego processa dlya ispolneniya.
+--------------------------------------------------------+
| 1. Prinyat' reshenie otnositel'no neobhodimosti pereklyu- |
| cheniya konteksta i ego dopustimosti v dannyj moment. |
| 2. Sohranit' kontekst "prezhnego" processa. |
| 3. Vybrat' process, naibolee podhodyashchij dlya ispolneniya,|
| ispol'zuya algoritm dispetcherizacii processov, prive-|
| dennyj v glave 8. |
| 4. Vosstanovit' ego kontekst. |
+--------------------------------------------------------+
Risunok 6.15. Posledovatel'nost' shagov, vypolnyaemyh pri pe-
reklyuchenii konteksta
Tekst programmy, realizuyushchej pereklyuchenie konteksta v sisteme UNIX, iz
vseh programm operacionnoj sistemy samyj trudnyj dlya ponimaniya, ibo pri ras-
smotrenii obrashchenij k funkciyam sozdaetsya vpechatlenie, chto oni v odnih slucha-
yah ne vozvrashchayut upravlenie, a v drugih - voznikayut neponyatno otkuda. Prichi-
noj etogo yavlyaetsya to, chto yadro vo mnogih sistemnyh realizaciyah sohranyaet
kontekst processa v odnom meste programmy, no prodolzhaet rabotu, vypolnyaya
pereklyuchenie konteksta i algoritmy dispetcherizacii v kontekste "prezhnego"
processa. Kogda pozdnee yadro vosstanavlivaet kontekst processa, ono vozob-
novlyaet ego vypolnenie v sootvetstvii s ranee sohranennym kontekstom. CHtoby
razlichat' mezhdu soboj te sluchai, kogda yadro vosstanavlivaet kontekst novogo
processa, i kogda ono prodolzhaet ispolnyat' ranee sohranennyj kontekst, mozhno
var'irovat' znacheniya, vozvrashchaemye kriticheskimi funkciyami, ili ustanavlivat'
iskusstvennym obrazom tekushchee znachenie schetchika komand.
Na Risunke 6.16 privedena shema pereklyucheniya konteksta. Funkciya
save_context sohranyaet informaciyu o kontekste ispolnyaemogo processa i vozv-
157
rashchaet znachenie 1. Krome vsego prochego, yadro sohranyaet tekushchee znachenie
schetchika komand (v funkcii save_context) i znachenie 0 v nulevom registre pri
vyhode iz funkcii. YAdro prodolzhaet ispolnyat' kontekst "prezhnego" processa
(A), vybiraya dlya vypolneniya sleduyushchij process (B) i vyzyvaya funkciyu
resume_context
+------------------------------------------------------------+
| if (save_context()) /* sohranenie konteksta vypolnyayushchegosya|
| processa */ |
| { |
| /* vybor sleduyushchego processa dlya vypolneniya */ |
| - |
| - |
| - |
| resume_context(new_process); |
| /* syuda programma ne popadaet ! */ |
| } |
| /* vozobnovlenie vypolnenie processa nachinaetsya otsyuda */ |
+------------------------------------------------------------+
Risunok 6.16. Psevdoprogramma pereklyucheniya konteksta
dlya vosstanovleniya ego konteksta. Posle vosstanovleniya konteksta sistema vy-
polnyaet process B; prezhnij process (A) bol'she ne ispolnyaetsya, no on ostavil
posle sebya sohranennyj kontekst. Pozzhe, kogda budet vypolnyat'sya pereklyuchenie
konteksta, yadro snova izberet process A (esli tol'ko, razumeetsya, on ne byl
zavershen). V rezul'tate vosstanovleniya konteksta A yadro prisvoit schetchiku
komand to znachenie, kotoroe bylo sohraneno processom A ranee v funkcii
save_context, i vozvratit v registre 0 znachenie 0. YAdro vozobnovlyaet vypol-
nenie processa A iz funkcii save_context, pust' dazhe pri vypolnenii program-
my pereklyucheniya konteksta ono ne dobralos' eshche do funkcii resume_context. V
konechnom itoge, process A vozvrashchaetsya iz funkcii save_context so znacheniem
0 (v nulevom registre) i vozobnovlyaet vypolnenie posle stroki kommentariya
"vozobnovlenie vypolnenie processa nachinaetsya otsyuda".
6.4.4 Sohranenie konteksta na sluchaj avarijnogo zaversheniya
Sushchestvuyut situacii, kogda yadro vynuzhdeno avarijno preryvat' tekushchij po-
ryadok vypolneniya i nemedlenno perehodit' k ispolneniyu ranee sohranennogo
konteksta. V posleduyushchih razdelah, gde pojdet rech' o priostanovlenii vypol-
neniya i o signalah, budut opisany obstoyatel'stva, pri kotoryh processu pri-
hoditsya vnezapno izmenyat' svoj kontekst; v dannom zhe razdele rassmatrivaetsya
mehanizm ispolneniya predydushchego konteksta. Algoritm sohraneniya konteksta na-
zyvaetsya setjmp, a algoritm vosstanovleniya konteksta - longjmp (***). Meha-
nizm raboty algoritma setjmp pohozh na mehanizm funkcii save_context, rass-
motrennyj v predydushchem razdele, esli ne schitat' togo, chto funkciya
save_context pomeshchaet novyj kontekstnyj uroven' v stek, v to vremya kak
setjmp sohranyaet kontekst v prostranstve processa i posle vyhoda iz nego vy-
polnenie prodolzhaetsya v prezhnem kontekstnom urovne. Kogda yadru ponadobitsya
vosstanovit' kontekst,
---------------------------------------
(***) |ti algoritmy ne sleduet putat' s imeyushchimi te zhe nazvaniya bibliotechny-
mi funkciyami, kotorye mogut vyzyvat'sya neposredstvenno iz pol'zova-
tel'skih programm (sm. [SVID 85]). Odnako dejstvie etih funkcij poho-
zhe.
158
sohranennyj v rezul'tate raboty algoritma setjmp, ono ispolnit algoritm
longjmp, kotoryj vosstanavlivaet kontekst iz prostranstva processa i imeet,
kak i setjmp, kod zaversheniya, ravnyj 1.
6.4.5 Kopirovanie dannyh mezhdu adresnym prostranstvom sis-
temy i adresnym prostranstvom zadachi
Do sih por rech' shla o tom, chto process vypolnyaetsya v rezhime yadra ili v
rezhime zadachi bez kakih-libo perekrytij (peresechenij) mezhdu rezhimami. Odna-
ko, pri vypolnenii bol'shinstva sistemnyh funkcij, rassmotrennyh v poslednej
glave, mezhdu prostranstvom yadra i prostranstvom zadachi osushchestvlyaetsya pere-
sylka dannyh, naprimer, kogda idet kopirovanie parametrov vyzyvaemoj funkcii
iz prostranstva zadachi v prostranstvo yadra ili kogda proizvoditsya peredacha
dannyh iz buferov vvoda-vyvoda v processe vypolneniya funkcii read. Na mnogih
mashinah yadro sistemy mozhet neposredstvenno ssylat'sya na adresa, prinadlezha-
shchie adresnomu prostranstvu zadachi. YAdro dolzhno ubedit'sya v tom, chto adres,
po kotoromu proizvoditsya zapis' ili schityvanie, dostupen, kak budto by rabo-
ta vedetsya v rezhime zadachi; v protivnom sluchae proizoshlo by narushenie stan-
dartnyh metodov zashchity i yadro, pust' neumyshlenno, stalo by obrashchat'sya k ad-
resam, kotorye nahodyatsya za predelami adresnogo prostranstva zadachi (i, voz-
mozhno, prinadlezhat strukturam dannyh yadra). Poetomu peredacha dannyh mezhdu
prostranstvom yadra i prostranstvom zadachi yavlyaetsya "dorogim predpriyatiem",
trebuyushchim dlya svoej realizacii neskol'kih komand.
+--------------------------------------------------------+
| fubyte: # peresylka bajta iz |
| # prostranstva zadachi |
| prober $3,$1,*4(ap) # bajt dostupen ? |
| beql eret # net |
| movzbl *4(ap),r0 |
| ret |
| eret: |
| mnegl $1,r0 # vozvrat oshibki (-1) |
| ret |
+--------------------------------------------------------+
Risunok 6.17. Peresylka dannyh iz prostranstva zadachi v
prostranstvo yadra v sisteme VAX
Na Risunke 6.17 pokazan primer realizovannoj v sisteme VAX programmy pe-
resylki simvola iz adresnogo prostranstva zadachi v adresnoe prostranstvo yad-
ra. Komanda prober proveryaet, mozhet li bajt po adresu, ravnomu (registr uka-
zatelya argumenta + 4), byt' schitan v rezhime zadachi (rezhime 3), i esli net,
yadro peredaet upravlenie po adresu eret, sohranyaet v nulevom registre -1 i
vyhodit iz programmy; pri etom peresylki simvola ne proishodit. V protivnom
sluchae yadro peresylaet odin bajt, nahodyashchijsya po ukazannomu adresu, v re-
gistr 0 i vozvrashchaet ego v vyzyvayushchuyu programmu. Peresylka 1 simvola potre-
bovala pyati komand (vklyuchaya vyzov funkcii s imenem fubyte).
6.5 UPRAVLENIE ADRESNYM PROSTRANSTVOM PROCESSA
V etoj glave my poka govorili o tom, kakim obrazom osushchestvlyaetsya perek-
lyuchenie konteksta mezhdu processami i kak kontekstnye urovni zapominayutsya v
steke i vybirayutsya iz steka, predstavlyaya kontekst pol'zovatel'skogo urovnya
kak staticheskij ob®ekt, ne preterpevayushchij izmenenij pri vosstanovlenii kon-
teksta processa. Odnako, s virtual'nym adresnym prostranstvom processa rabo-
159
tayut razlichnye sistemnye funkcii i, kak budet pokazano v sleduyushchej glave,
vypolnyayut pri etom operacii nad oblastyami. V etom razdele rassmatrivaetsya
informacionnaya struktura oblasti; sistemnye funkcii, realizuyushchie operacii
nad oblastyami, budut rassmotreny v sleduyushchej glave.
Zapis' tablicy oblastej soderzhit informaciyu, neobhodimuyu dlya opisaniya
oblasti. V chastnosti, ona vklyuchaet v sebya sleduyushchie polya:
* Ukazatel' na indeks fajla, soderzhimoe kotorogo bylo pervonachal'no zagru-
zheno v oblast'
* Tip oblasti (oblast' komand, razdelyaemaya pamyat', oblast' chastnyh dannyh
ili steka)
* Razmer oblasti
* Mestopolozhenie oblasti v fizicheskoj pamyati
* Status (sostoyanie) oblasti, predstavlyayushchij soboj kombinaciyu
iz sleduyushchih priznakov:
- zablokirovana
- zaproshena
- idet process ee zagruzki v pamyat'
- gotova, zagruzhena v pamyat'
* Schetchik ssylok, v kotorom hranitsya kolichestvo processov, ssylayushchihsya na
dannuyu oblast'.
K operaciyam raboty s oblastyami otnosyatsya: blokirovka oblasti, snyatie
blokirovki s oblasti, vydelenie oblasti, prisoedinenie oblasti k prostranst-
vu pamyati processa, izmenenie razmera oblasti, zagruzka oblasti iz fajla v
prostranstvo pamyati processa, osvobozhdenie oblasti, otsoedinenie oblasti ot
prostranstva pamyati processa i kopirovanie soderzhimogo oblasti. Naprimer,
sistemnaya funkciya exec, v kotoroj soderzhimoe ispolnyaemogo fajla nakladyvaet-
sya na adresnoe prostranstvo zadachi, otsoedinyaet starye oblasti, osvobozhdaet
ih v tom sluchae, esli oni ne yavlyayutsya razdelyaemymi, vydelyaet novye oblasti,
prisoedinyaet ih i zagruzhaet soderzhimym fajla. V ostal'noj chasti razdela ope-
racii nad oblastyami opisyvayutsya bolee detal'no s orientaciej na model' up-
ravleniya pamyat'yu, rassmotrennuyu ranee (s tablicami stranic i gruppami appa-
ratnyh registrov), i s orientaciej na algoritmy naznacheniya stranic fiziches-
koj pamyati i tablic stranic (glava 9).
6.5.1 Blokirovka oblasti i snyatie blokirovki
Operacii blokirovki i snyatiya blokirovki dlya oblasti vypolnyayutsya nezavi-
simo ot operacij vydeleniya i osvobozhdeniya oblasti, podobno tomu, kak opera-
cii blokirovaniya-razblokirovaniya indeksa v fajlovoj sisteme vypolnyayutsya ne-
zavisimo ot operacij naznacheniya-osvobozhdeniya indeksa (algoritmy iget i
iput). Takim obrazom, yadro mozhet zablokirovat' i vydelit' oblast', a potom
snyat' blokirovku, ne osvobozhdaya oblasti. Tochno takzhe, kogda yadru ponadobitsya
obratit'sya k vydelennoj oblasti, ono smozhet zablokirovat' oblast', chtoby
zapretit' dostup k nej so storony drugih processov, i pozdnee snyat' bloki-
rovku.
YAdro vydelyaet novuyu oblast' (po algoritmu allocreg, Risunok 6.18) vo
vremya vypolneniya sistemnyh funkcij fork, exec i shmget (poluchit' razdelyaemuyu
pamyat'). YAdro podderzhivaet tablicu oblastej, zapisyam kotoroj sootvetstvuyut
tochki vhoda libo v spiske svobodnyh oblastej, libo v spiske aktivnyh oblas-
tej. Pri vydelenii zapisi v tablice oblastej yadro vybiraet iz spiska svobod-
nyh oblastej pervuyu dostupnuyu zapis', vklyuchaet ee v spisok aktivnyh oblas-
tej, blokiruet oblast' i delaet pometku o ee tipe (razdelyaemaya ili chastnaya).
Za nekotorym isklyucheniem kazhdyj process associiruetsya s ispolnyaemym fajlom
160
(posle togo, kak byla vypolnena komanda exec), i v algoritme allocreg pole
indeksa v zapisi tablicy oblastej ustanavlivaetsya takim obrazom, chtoby ono
ukazyvalo na indeks ispolnyaemogo fajla. Indeks identificiruet oblast' dlya
yadra, poetomu drugie processy mogut pri zhelanii razdelyat' oblast'. YAdro uve-
lichivaet znachenie schetchika ssylok na indeks, chtoby pomeshat' drugim processam
udalyat' soderzhimoe fajla pri vypolnenii funkcii unlink, ob etom eshche budet
idti rech' v razdele 7.5. Rezul'tatom algoritma allocreg yavlyaetsya naznachenie
i blokirovka oblasti.
+------------------------------------------------------------+
| algoritm allocreg /* razmestit' informacionnuyu strukturu |
| oblasti */ |
| vhodnaya informaciya: (1) ukazatel' indeksa |
| (2) tip oblasti |
| vyhodnaya informaciya: zablokirovannaya oblast' |
| { |
| vybrat' oblast' iz spiska svobodnyh oblastej; |
| naznachit' oblasti tip; |
| prisvoit' znachenie ukazatelyu indeksa; |
| esli (ukazatel' indeksa imeet nenulevoe znachenie) |
| uvelichit' znachenie schetchika ssylok na indeks; |
| vklyuchit' oblast' v spisok aktivnyh oblastej; |
| vozvratit' (zablokirovannuyu oblast'); |
| } |
+------------------------------------------------------------+
Risunok 6.18. Algoritm vydeleniya oblasti
6.5.3 Prisoedinenie oblasti k processu
YAdro prisoedinyaet oblast' k adresnomu prostranstvu processa vo vremya vy-
polneniya sistemnyh funkcij fork, exec i shmat (algoritm attachreg, Risunok
6.19). Oblast' mozhet byt' vnov' naznachaemoj ili uzhe sushchestvuyushchej, kotoruyu
process budet ispol'zovat' sovmestno s drugimi processami. YAdro vybiraet
svobodnuyu zapis' v chastnoj tablice oblastej processa, ustanavlivaet v nej
pole tipa takim obrazom, chtoby ono ukazyvalo na oblast' komand, dannyh, raz-
delyaemuyu pamyat' ili oblast' steka, i zapisyvaet virtual'nyj adres, po koto-
romu oblast' budet razmeshchat'sya v adresnom prostranstve processa. Process ne
dolzhen vyhodit' za predel ustanovlennogo sistemoj ogranicheniya na maksimal'-
nyj virtual'nyj adres, a virtual'nye adresa novoj oblasti ne dolzhny perese-
kat'sya s adresami sushchestvuyushchih uzhe oblastej. Naprimer, esli sistema ograni-
chila maksimal'no-dopustimoe znachenie virtual'nogo adresa processa 8 megabaj-
tami, to privyazat' oblast' razmerom 1 megabajt k virtual'nomu adresu 7.5M ne
udastsya. Esli zhe prisoedinenie oblasti dopustimo, yadro uvelichivaet znachenie
polya, opisyvayushchego razmer oblasti processa v zapisi tablicy processov, na
velichinu prisoedinyaemoj oblasti, a takzhe uvelichivaet znachenie schetchika ssy-
lok na oblast'.
Krome togo, v algoritme attachreg ustanavlivayutsya nachal'nye znacheniya
gruppy registrov upravleniya pamyat'yu, vydelennyh processu. Esli oblast' ranee
ne prisoedinyalas' k kakomu-libo processu, yadro s pomoshch'yu funkcii growreg
(sm. sleduyushchij razdel) zavodit dlya oblasti novye tablicy stranic; v protiv-
nom sluchae ispol'zuyutsya uzhe sushchestvuyushchie tablicy stranic. Algoritm zavershaet
rabotu, vozvrashchaya ukazatel' na tochku vhoda v chastnuyu tablicu oblastej pro-
cessa, sootvetstvuyushchuyu vnov' prisoedinennoj oblasti. Dopustim, naprimer, chto
yadru nuzhno podklyuchit' k processu po virtual'nomu adresu 0 sushchestvuyushchuyu (raz-
delyaemuyu) oblast', imeyushchuyu razmer 7 Kbajt (Risunok 6.20). Ono vydelyaet novuyu
161
+------------------------------------------------------------+
| algoritm attachreg /* prisoedinenie oblasti k processu */ |
| vhodnaya informaciya: (1) ukazatel' na prisoedinyaemuyu ob- |
| last' (zablokirovannuyu) |
| (2) process, k kotoromu prisoedinyaetsya|
| oblast' |
| (3) virtual'nyj adres vnutri processa,|
| po kotoromu budet prisoedinena ob-|
| last' |
| (4) tip oblasti |
| vyhodnaya informaciya: tochka vhoda v chastnuyu tablicu oblastej|
| processa |
| { |
| vydelit' novuyu zapis' v chastnoj tablice oblastej pro- |
| cessa; |
| proinicializirovat' znacheniya polej zapisi: |
| ustanovit' ukazatel' na prisoedinyaemuyu oblast'; |
| ustanovit' tip oblasti; |
| ustanovit' virtual'nyj adres oblasti; |
| proverit' pravil'nost' ukazaniya virtual'nogo adresa i |
| razmera oblasti; |
| uvelichit' znachenie schetchika ssylok na oblast'; |
| uvelichit' razmer processa s uchetom prisoedineniya oblas-|
| ti; |
| zapisat' nachal'nye znacheniya v novuyu gruppu apparatnyh |
| registrov; |
| vozvratit' (tochku vhoda v chastnuyu tablicu oblastej pro-|
| cessa); |
| } |
+------------------------------------------------------------+
Risunok 6.19. Algoritm prisoedineniya oblasti
gruppu registrov upravleniya pamyat'yu i zanosit v nih adres tablicy stranic
oblasti, virtual'nyj adres oblasti v prostranstve processa (0) i razmer tab-
licy stranic (9 zapisej).
6.5.4 Izmenenie razmera oblasti
Process mozhet rasshiryat' ili suzhat' svoe virtual'noe adresnoe prostranst-
vo s pomoshch'yu funkcii sbrk. Tochno tak zhe i stek processa rasshiryaetsya avtoma-
ticheski (to est' dlya etogo processu ne nuzhno yavno obrashchat'sya k opredelennoj
funkcii) v sootvetstvii s glubinoj vlozhennosti obrashchenij k podprogrammam.
Izmenenie razmera oblasti proizvoditsya vnutri yadra po algoritmu growreg (Ri-
sunok 6.21). Pri rasshirenii oblasti yadro proveryaet, ne budut li virtual'nye
adresa rasshiryaemoj oblasti peresekat'sya s adresami kakoj-nibud' drugoj ob-
lasti i ne povlechet li rasshirenie oblasti za soboj vyhod processa za predely
maksimal'no-dopustimogo virtual'nogo prostranstva pamyati. YAdro nikogda ne
ispol'zuet algoritm growreg dlya uvelicheniya razmera razdelyaemoj oblasti, uzhe
prisoedinennoj k neskol'kim processam; poetomu ono ne bespokoitsya o tom, ne
privedet li uvelichenie razmera oblasti dlya odnogo processa k prevyshe-
niyu drugim processom sistemnogo ogranicheniya, nakladyvaemogo na razmer pro-
cessa. Pri rabote s sushchestvuyushchej oblast'yu yadro ispol'zuet algoritm growreg v
dvuh sluchayah: vypolnyaya funkciyu sbrk po otnosheniyu k oblasti dannyh processa i
realizuya avtomaticheskoe uvelichenie steka zadachi. Obe eti oblasti (dannyh i
steka) chastnogo tipa. Oblasti komand i razdelyaemoj pamyati posle inicializa-
162
CHastnaya tablica oblastej processa
+---------+-------------+--------+
| Adres | Virtual'nyj | Razmer |
| tablicy | adres v pro-| i |
| stranic | stranstve | zashchita |
| | processa | |
+---------+-------------+--------+
Tochka vhoda | | 0 | 9 |
dlya oblasti +----+----+-------------+--------+
komand +----+
v
+-------------+
| pusto |
+-------------+
| pusto |
+-------------+
| 846K |
+-------------+
| 752K |
+-------------+
| 341K |
+-------------+
| 484K |
+-------------+
| 976K |
+-------------+
| 342K |
+-------------+
| 779K |
+-------------+
Risunok 6.20. Primer prisoedineniya sushchestvuyushchej oblasti komand
cii ne mogut rasshiryat'sya. |tot moment budet poyasnen v sleduyushchej glave.
CHtoby razmestit' rasshirennuyu pamyat', yadro vydelyaet novye tablicy stranic
(ili rasshiryaet sushchestvuyushchie) ili otvodit dopolnitel'nuyu fizicheskuyu pamyat' v
teh sistemah, gde ne podderzhivaetsya podkachka stranic po obrashcheniyu. Pri vyde-
lenii dopolnitel'noj fizicheskoj pamyati yadro proveryaet ee nalichie pered vy-
polneniem algoritma growreg; esli zhe pamyati bol'she net, yadro pribegaet k
drugim sredstvam uvelicheniya razmera oblasti (sm. glavu 9). Esli process sok-
rashchaet razmer oblasti, yadro prosto osvobozhdaet pamyat', otvedennuyu pod ob-
last'. Vo vseh etih sluchayah yadro pereopredelyaet razmery processa i oblasti i
pereustanavlivaet znacheniya polej zapisi chastnoj tablicy oblastej processa i
registrov upravleniya pamyat'yu (tak, chtoby oni soglasovalis' s novym otobrazhe-
niem pamyati).
Predpolozhim, naprimer, chto oblast' steka processa nachinaetsya s virtual'-
nogo adresa 128K i imeet razmer 6 Kbajt i chto yadru nuzhno rasshirit' etu ob-
last' na 1 Kbajt (1 stranicu). Esli razmer processa pozvolyaet eto delat' i
esli virtual'nye adresa v diapa-
zone ot 134K do 135K - 1 ne prinadlezhat kakoj-libo oblasti, ranee prisoedi-
nennoj k processu, yadro uvelichivaet razmer steka. Pri etom yadro rasshiryaet
tablicu stranic, vydelyaet novuyu stranicu pamyati i inicializiruet novuyu za-
pis' tablicy. |tot sluchaj proillyustrirovan s pomoshch'yu Risunka 6.22.
V sisteme, gde podderzhivaetsya podkachka stranic po obrashcheniyu, yadro mozhet
163
+------------------------------------------------------------+
| algoritm growreg /* izmenenie razmera oblasti */ |
| vhodnaya informaciya: (1) ukazatel' na tochku vhoda v chastnoj|
| tablice oblastej processa |
| (2) velichina, na kotoruyu nuzhno izme- |
| nit' razmer oblasti (mozhet byt' |
| kak polozhitel'noj, tak i otrica- |
| tel'noj) |
| vyhodnaya informaciya: otsutstvuet |
| { |
| esli (razmer oblasti uvelichivaetsya) |
| { |
| proverit' dopustimost' novogo razmera oblasti; |
| vydelit' vspomogatel'nye tablicy (stranic); |
| esli (v sisteme ne podderzhivaetsya zameshchenie stranic |
| po obrashcheniyu) |
| { |
| vydelit' dopolnitel'nuyu pamyat'; |
| proinicializirovat' pri neobhodimosti znacheniya |
| polej v dopolnitel'nyh tablicah; |
| } |
| } |
| v protivnom sluchae /* razmer oblasti umen'shaetsya */ |
| { |
| osvobodit' fizicheskuyu pamyat'; |
| osvobodit' vspomogatel'nye tablicy; |
| } |
| |
| provesti v sluchae neobhodimosti inicializaciyu drugih |
| vspomogatel'nyh tablic; |
| pereustanovit' znachenie polya razmera v tablice proces- |
| sov; |
| } |
+------------------------------------------------------------+
Risunok 6.21. Algoritm izmeneniya razmera oblasti
"otobrazhat'" fajl v adresnoe prostranstvo processa vo vremya vypolneniya funk-
cii exec, podgotavlivaya posleduyushchee chtenie po zaprosu otdel'nyh fizicheskih
stranic (sm. glavu 9). Esli zhe podkachka stranic po obrashcheniyu ne podderzhiva-
etsya, yadru prihoditsya kopirovat' ispolnyaemyj fajl v pamyat', zagruzhaya oblasti
processa po ukazannym v fajle virtual'nym adresam. YAdro mozhet prisoedinit'
oblast' k raznym virtual'nym adresam, po kotorym budet zagruzhat'sya soderzhi-
moe fajla, sozdavaya takim obrazom "razryv" v tablice stranic (vspomnim Risu-
nok 6.20). |ta vozmozhnost' mozhet prigodit'sya, naprimer, kogda trebuetsya pro-
yavlyat' oshibku pamyati (memory fault) v sluchae obrashcheniya pol'zovatel'skih
programm k nulevomu adresu (esli poslednee zapreshcheno). Peremennye ukazateli
v programmah inogda zadayutsya neverno (otsutstvuet proverka ih znachenij na
ravenstvo 0) i v rezul'tate ne mogut ispol'zovat'sya v kachestve
ukazatelej adresov. Esli stranicu s nulevym adresom sootvetstvuyushchim obrazom
zashchitit', processy, sluchajno obrativshiesya k etomu adresu, natolknutsya na
oshibku i budut avarijno zaversheny, i eto uskorit obnaruzhenie podobnyh oshibok
v programmah.
Pri zagruzke fajla v oblast' algoritm loadreg (Risunok 6.23) proveryaet
razryv mezhdu virtual'nym adresom, po kotoromu oblast' prisoedinyaetsya k pro-
cessu, i virtual'nym adresom, s kotorogo raspolagayutsya dannye oblasti, i
rasshiryaet oblast' v sootvetstvii s trebuemym ob®emom pamyati. Zatem oblast'
164
CHastnaya tablica oblastej CHastnaya tablica oblastej
processa processa
+-------+----------+------+ +-------+----------+------+
| Adres | Virtual'-| Raz- | | Adres | Virtual'-| Raz- |
| tabli-| nyj adres| mer | | tabli-| nyj adres| mer |
| cy | v prost- | i | | cy | v prost- | i |
| stra- | ranstve | zashchi-| | stra- | ranstve | zashchi-|
| nic | processa | ta | | nic | processa | ta |
+-------+----------+------+ +-------+----------+------+
| | | | | | | |
+-------+----------+------+ +-------+----------+------+
| | | | | | | |
Tochka+-------+----------+------+ Tochka+-------+----------+------+
vhoda| | 128K | 6K | vhoda| | 128K | 7K |
dlya +---+---+----------+------+ dlya +---+---+----------+------+
steka +--+ steka +--+
v v
+-------------+ +-------------+
| 342K | | 342K |
+-------------+ +-------------+
| 779K | | 779K |
+-------------+ +-------------+
| 846K | | 846K |
+-------------+ +-------------+
| 752K | | 752K |
+-------------+ +-------------+
| 341K | | 341K |
+-------------+ +-------------+
| 484K | | 484K |
+-------------+ NOVAYA +-------------+
| | STRANICA-->| 976K |
+-------------+ +-------------+
| | | |
+-------------+ +-------------+
| | | |
+-------------+ +-------------+
Do uvelicheniya steka Posle uvelicheniya steka
Risunok 6.22. Uvelichenie oblasti steka na 1 Kbajt
perevoditsya v sostoyanie "zagruzki v pamyat'", pri kotorom dannye dlya oblasti
schityvayutsya iz fajla v pamyat' s pomoshch'yu vstroennoj modifikacii algoritma
sistemnoj funkcii read.
Esli yadro zagruzhaet oblast' komand, kotoraya mozhet razdelyat'sya neskol'ki-
mi processami, vozmozhna situaciya, kogda process popytaetsya vospol'zovat'sya
oblast'yu do togo, kak ee soderzhimoe budet polnost'yu zagruzheno, tak kak pro-
cess zagruzki mozhet priostano-
vit'sya vo vremya chteniya fajla. Podrobno o tom, kak eto proishodit i pochemu
pri etom nel'zya ispol'zovat' blokirovki, my pogovorim, kogda budem vesti
rech' o funkcii exec v sleduyushchej glave i v glave 9. CHtoby ustranit' etu prob-
lemu, yadro proveryaet status oblasti i ne razreshaet k nej dostup do teh por,
poka zagruzka oblasti ne budet zakonchena. Po zavershenii realizacii algoritma
loadreg yadro vozobnovlyaet vypolnenie vseh processov, ozhidayushchih okonchaniya
zagruzki oblasti, i izmenyaet status oblasti ("gotova, zagruzhena v pamyat'").
Predpolozhim, naprimer, chto yadru nuzhno zagruzit' tekst razmerom 7K v ob-
last', prisoedinennuyu k processu po virtual'nomu adresu 0, no pri etom osta-
vit' promezhutok razmerom 1 Kbajt ot nachala oblasti (Risunok 6.24). K etomu
165
+------------------------------------------------------------+
| algoritm loadreg /* zagruzka chasti fajla v oblast' */ |
| vhodnaya informaciya: (1) ukazatel' na tochku vhoda v chastnuyu|
| tablicu oblastej processa |
| (2) virtual'nyj adres zagruzki |
| (3) ukazatel' indeksa fajla |
| (4) smeshchenie v bajtah do nachala schity-|
| vaemoj chasti fajla |
| (5) ob®em zagruzhaemyh dannyh v bajtah |
| vyhodnaya informaciya: otsutstvuet |
| { |
| uvelichit' razmer oblasti do trebuemoj velichiny (algoritm|
| growreg); |
| zapisat' status oblasti kak "zagruzhaemoj v pamyat'"; |
| snyat' blokirovku s oblasti; |
| ustanovit' v prostranstve processa znacheniya parametrov |
| chteniya iz fajla: |
| virtual'nyj adres, po kotoromu budut razmeshcheny schi-|
| tyvaemye dannye; |
| smeshchenie do nachala schityvaemoj chasti fajla; |
| ob®em dannyh, schityvaemyh iz fajla, v bajtah; |
| zagruzit' fajl v oblast' (vstroennaya modifikaciya algo- |
| ritma read); |
| zablokirovat' oblast'; |
| zapisat' status oblasti kak "polnost'yu zagruzhennoj v pa-|
| myat'"; |
| vozobnovit' vypolnenie vseh processov, ozhidayushchih okoncha-|
| niya zagruzki oblasti; |
| } |
+------------------------------------------------------------+
Risunok 6.23. Algoritm zagruzki dannyh oblasti iz fajla
vremeni yadro uzhe vydelilo zapis' v tablice oblastej i prisoedinilo oblast'
po adresu 0 s pomoshch'yu algoritmov allocreg i attachreg. Teper' zhe yadro zapus-
kaet algoritm loadreg, v kotorom dejstviya algoritma growreg vypolnyayutsya
dvazhdy - vo-pervyh, pri vydelenii v nachale oblasti promezhutka v 1 Kbajt, i
vo-vtoryh, pri vydelenii mesta dlya soderzhimogo oblasti - i algoritm growreg
naznachaet dlya oblasti tablicu stranic. Zatem yadro zanosit v sootvetstvuyushchie
polya prostranstva processa ustanovochnye znacheniya dlya chteniya dannyh iz fajla:
schityvayutsya 7 Kbajt, nachinaya s adresa, ukazannogo v vide smeshcheniya vnutri
fajla (parametr algoritma), i zapisyvayutsya v virtual'noe prostranstvo pro-
cessa po adresu 1K.
CHastnaya tablica oblastej CHastnaya tablica oblastej
processa processa
+-------+----------+------+ +-------+----------+------+
| Adres | Virtual'-| Raz- | | Adres | Virtual'-| Raz- |
| tabli-| nyj adres| mer | | tabli-| nyj adres| mer |
| cy | v prost- | i | | cy | v prost- | i |
| stra- | ranstve | zashchi-| | stra- | ranstve | zashchi-|
| nic | processa | ta | | nic | processa | ta |
+-------+----------+------+ +-------+----------+------+
Tekst| --- | | 0 | | | 0 | 8 |
+-------+----------+------+ +---+---+----------+------+
(a) Zapis' tablicy v pervo- +--+
nachal'nom vide |
v
166
+-------------+
| pusto |
CHastnaya tablica oblastej +-------------+
processa | 779K |
+-------+----------+------+ +-------------+
| Adres | Virtual'-| Raz- | | 846K |
| tabli-| nyj adres| mer | +-------------+
| cy | v prost- | i | | 752K |
| stra- | ranstve | zashchi-| +-------------+
| nic | processa | ta | | 341K |
+-------+----------+------+ +-------------+
| | 0 | 1 | | 484K |
+---+---+----------+------+ +-------------+
+--+ | 976K |
| +-------------+
v | 794K |
+-------------+ +-------------+
| pusto | | |
+-------------+ +-------------+
(b) Zapis', ukazyvayushchaya na (v) Posle vtorogo vypolne-
promezhutok v nachale ob- niya algoritma growreg
lasti (posle pervogo
vypolneniya algoritma
growreg)
Risunok 6.24. Zagruzka oblasti komand (teksta)
+------------------------------------------------------------+
| algoritm freereg /* osvobozhdenie vydelennoj oblasti */|
| vhodnaya informaciya: ukazatel' na (zablokirovannuyu) oblast'|
| vyhodnaya informaciya: otsutstvuet |
| { |
| esli (schetchik ssylok na oblast' imeet nenulevoe znache- |
| nie) |
| { |
| /* oblast' vse eshche ispol'zuetsya odnim iz processov */|
| snyat' blokirovku s oblasti; |
| esli (oblast' associirovana s indeksom) |
| snyat' blokirovku s indeksa; |
| vozvratit' upravlenie; |
| } |
| esli (oblast' associirovana s indeksom) |
| osvobodit' indeks (algoritm iput); |
| osvobodit' svyazannuyu s oblast'yu fizicheskuyu pamyat'; |
| osvobodit' svyazannye s oblast'yu vspomogatel'nye tablicy;|
| ochistit' polya oblasti; |
| vklyuchit' oblast' v spisok svobodnyh oblastej; |
| snyat' blokirovku s oblasti; |
| } |
+------------------------------------------------------------+
Risunok 6.25. Algoritm osvobozhdeniya oblasti
167
6.5.6 Osvobozhdenie oblasti
Esli oblast' ne prisoedinena uzhe ni k kakomu processu, ona mozhet byt'
osvobozhdena yadrom i vozvrashchena v spisok svobodnyh oblastej (Risunok 6.25).
Esli oblast' svyazana s indeksom, yadro osvobozhdaet i indeks s pomoshch'yu algo-
ritma iput, uchityvaya znachenie schetchika ssylok na indeks, ustanovlennoe v al-
goritme allocreg. YAdro osvobozhdaet vse svyazannye s oblast'yu fizicheskie re-
sursy, takie kak tablicy stranic i sobstvenno stranicy fizicheskoj pamyati.
Predpolozhim, naprimer, chto yadru nuzhno osvobodit' oblast' steka, opisannuyu na
Risunke 6.22. Esli schetchik ssylok na oblast' imeet nulevoe znachenie, yadro
osvobodit 7 stranic fizicheskoj pamyati vmeste s tablicej stranic.
+------------------------------------------------------------+
| algoritm detachreg /* otsoedinit' oblast' ot processa */ |
| vhodnaya informaciya: ukazatel' na tochku vhoda v chastnoj |
| tablice oblastej processa |
| vyhodnaya informaciya: otsutstvuet |
| { |
| obratit'sya k vspomogatel'nym tablicam processa, imeyushchim |
| otnoshenie k raspredeleniyu pamyati, |
| osvobodit' te iz nih, kotorye svyazany s oblast'yu; |
| umen'shit' razmer processa; |
| umen'shit' znachenie schetchika ssylok na oblast'; |
| esli (znachenie schetchika stalo nulevym i oblast' ne yavlya-|
| etsya neot®emlemoj chast'yu processa) |
| osvobodit' oblast' (algoritm freereg); |
| v protivnom sluchae /* libo znachenie schetchika otlichno |
| ot 0, libo oblast' yavlyaetsya ne- |
| ot®emlemoj chast'yu processa */ |
| { |
| snyat' blokirovku s indeksa (associirovannogo s ob- |
| last'yu); |
| snyat' blokirovku s oblasti; |
| } |
| } |
+------------------------------------------------------------+
Risunok 6.26. Algoritm otsoedineniya oblasti
6.5.7 Otsoedinenie oblasti ot processa
YAdro otsoedinyaet oblasti pri vypolnenii sistemnyh funkcij exec, exit i
shmdt (otsoedinit' razdelyaemuyu pamyat'). Pri etom yadro korrektiruet sootvets-
tvuyushchuyu zapis' i raz®edinyaet svyaz' s fizicheskoj pamyat'yu, delaya nedejstvi-
tel'nymi svyazannye s oblast'yu registry upravleniya pamyat'yu (algoritm
detachreg, Risunok 6.26). Mehanizm preobrazovaniya adresov posle etogo budet
otnosit'sya uzhe k processu, a ne k oblasti (kak v algoritme freereg). YAdro
umen'shaet znachenie schetchika ssylok na oblast' i znachenie polya, opisyvayushchego
razmer processa v zapisi tablicy processov, v sootvetstvii s razmerom oblas-
ti. Esli znachenie schetchika stanovitsya ravnym 0 i esli net prichiny ostavlyat'
oblast' bez izmenenij (oblast' ne yavlyaetsya oblast'yu razdelyaemoj pamyati ili
oblast'yu komand s priznakami neot®emlemoj chasti processa, o chem budet idti
rech' v razdele 7.5), yadro osvobozhdaet oblast' po algoritmu freereg. V pro-
tivnom sluchae yadro snimaet s indeksa i s oblasti blokirovku, ustanovlennuyu
dlya togo, chtoby predotvratit' konkurenciyu mezhdu parallel'no vypolnyayushchimisya
processami (sm. razdel 7.5), no ostavlyaet oblast' i ee resursy bez izmene-
nij.
168
CHastnye tablicy oblastej processov Oblasti
+--------------+ +-------------+
Komandy | +-------------->| Razdelyaemaya |
+--------------+ +------->+-------------+
Dannye | +----+ |
+--------------+ | | +-------------+
Stek | +--+ +-|------->| CHastnaya +-+
+--------------+ | | +-------------+ | Kopi-
Process A | | | rova-
| | +-------------+ | nie
+---|------->| CHastnaya +-|-+ dan-
+--------------+ | +-------------+ | | nyh
Komandy | +------+ | |
+--------------+ +-------------+ | |
Dannye | +-------------->| CHastnaya |<+ |
+--------------+ +-------------+ |
Stek | +------+ |
+--------------+ | +-------------+ |
Process B +------->| CHastnaya |<--+
+-------------+
Risunok 6.27. Kopirovanie soderzhimogo oblasti
+------------------------------------------------------------+
| algoritm dupreg /* kopirovanie soderzhimogo sushchestvuyushchej |
| oblasti */ |
| vhodnaya informaciya: ukazatel' na tochku vhoda v tablice ob-|
| lastej |
| vyhodnaya informaciya: ukazatel' na oblast', yavlyayushchuyusya toch- |
| noj kopiej sushchestvuyushchej oblasti |
| { |
| esli (oblast' razdelyaemaya) |
| /* v vyzyvayushchej programme schetchik ssylok na ob- |
| last' budet uvelichen, posle chego budet ispol- |
| nen algoritm attachreg */ |
| vozvratit' (ukazatel' na ishodnuyu oblast'); |
| vydelit' novuyu oblast' (algoritm allocreg); |
| ustanovit' znacheniya vspomogatel'nyh struktur upravleniya|
| pamyat'yu v tochnom sootvetstvii so znacheniyami sushchestvuyu-|
| shchih struktur ishodnoj oblasti; |
| vydelit' dlya soderzhimogo oblasti fizicheskuyu pamyat'; |
| "skopirovat'" soderzhimoe ishodnoj oblasti vo vnov' soz-|
| dannuyu oblast'; |
| vozvratit' (ukazatel' na vydelennuyu oblast'); |
| } |
+------------------------------------------------------------+
Risunok 6.28. Algoritm kopirovaniya soderzhimogo sushchestvuyushchej oblasti
6.5.8 Kopirovanie soderzhimogo oblasti
Sistemnaya funkciya fork trebuet, chtoby yadro skopirovalo soderzhimoe oblas-
tej processa. Esli zhe oblast' razdelyaemaya (razdelyaemyj tekst komand ili raz-
delyaemaya pamyat'), yadru net nadobnosti kopirovat' oblast' fizicheski; vmesto
etogo ono uvelichivaet znachenie schetchika ssylok na oblast', pozvolyaya rodi-
tel'skomu i porozhdennomu processam ispol'zovat' oblast' sovmestno. Esli ob-
last' ne yavlyaetsya razdelyaemoj i yadru nuzhno fizicheski kopirovat' ee soderzhi-
moe, ono vydelyaet novuyu zapis' v tablice oblastej, novuyu tablicu stranic i
169
otvodit pod sozdavaemuyu oblast' fizicheskuyu pamyat'. V kachestve primera rass-
motrim Risunok 6.27, gde process A porozhdaet s pomoshch'yu funkcii fork process
B i kopiruet oblasti roditel'skogo processa. Oblast' komand processa A yavlya-
etsya razdelyaemoj, poetomu process B mozhet ispol'zovat' etu oblast' sovmestno
s processom A. Odnako oblasti dannyh i steka roditel'skogo processa yavlyayutsya
ego lichnoj prinadlezhnost'yu (imeyut chastnyj tip), poetomu processu B nuzhno
skopirovat' ih soderzhimoe vo vnov' vydelennye oblasti. Pri etom dazhe dlya ob-
lastej chastnogo tipa fizicheskoe kopirovanie oblasti ne vsegda neobhodimo, v
chem my ubedimsya pozzhe (glava 9). Na Risunke 6.28 priveden algoritm kopirova-
niya soderzhimogo oblasti (dupreg).
6.6 PRIOSTANOVKA VYPOLNENIYA
K nastoyashchemu momentu my rassmotreli vse funkcii raboty s vnutrennimi
strukturami processa, vypolnyayushchiesya na nizhnem urovne vzaimodejstviya s pro-
cessom i obespechivayushchie perehod v sostoyanie "vypolneniya v rezhime yadra" i vy-
hod iz etogo sostoyaniya v drugie sostoyaniya, za isklyucheniem funkcij, perevodya-
shchih process v sostoyanie "priostanova vypolneniya". Teper' perejdem k rassmot-
reniyu algoritmov, s pomoshch'yu kotoryh process perevoditsya iz sostoyaniya "vypol-
neniya v rezhime yadra" v sostoyanie "priostanova v pamyati" i iz sostoyaniya pri-
ostanova v sostoyaniya "gotovnosti k zapusku" s vygruzkoj i bez vygruzki iz
pamyati.
+-------------------------------+
| Kontekstnyj uroven' yadra 2 |
| Ispolnit' programmu pere- |
| klyucheniya konteksta |
| |
| Sohranit' registrovyj kon- |
| tekst obrashcheniya k sistemnoj |
| funkcii |
Zapusk algoritma priostanova -+-------------------------------+
^ | Kontekstnyj uroven' yadra 1 |
| | Ispolnit' obrashchenie k sis- |
| | temnoj funkcii |
| | |
| | Sohranit' registrovyj kon- |
| | tekst pol'zovatel'skogo |
| | urovnya |
Vyzov sistemnoj funkcii ------+-------------------------------+
^
|
|
Ispolnenie v rezhime zadachi
Risunok 6.29. Standartnye kontekstnye urovni priostanovlenno-
go processa
Vypolnenie processa priostanavlivaetsya obychno vo vremya ispolneniya zapro-
shennoj im sistemnoj funkcii: process perehodit v rezhim yadra (kontekstnyj
uroven' 1), ispolnyaya vnutrennee preryvanie operacionnoj sistemy, i priosta-
navlivaetsya v ozhidanii resursov. Pri etom process pereklyuchaet kontekst, za-
pominaya v steke svoj tekushchij kontekstnyj uroven' i ispolnyayas' dalee v ramkah
sistemnogo kontekstnogo urovnya 2 (Risunok 6.29). Vypolnenie processov prios-
tanavlivaetsya takzhe i v tom sluchae, kogda ono natalkivaetsya na otsutstvie
stranicy v rezul'tate obrashcheniya k virtual'nym adresam, ne zagruzhennym fizi-
cheski; processy ne budut vypolnyat'sya, poka yadro ne schitaet soderzhimoe stra-
170
nic.
6.6.1 Sobytiya, vyzyvayushchie priostanov vypolneniya, i ih adresa
Kak uzhe govorilos' vo vtoroj glave, processy priostanavlivayutsya do nas-
tupleniya opredelennogo sobytiya, posle kotorogo oni "probuzhdayutsya" i pereho-
dyat v sostoyanie "gotovnosti k vypolneniyu" (s vygruzkoj i bez vygruzki iz pa-
myati). Takogo roda abstraktnoe rassuzhdenie nedaleko ot istiny, ibo v konk-
retnom voploshchenii sovokupnost' sobytij otobrazhaetsya na sovokupnost' virtu-
al'nyh adresov (yadra). Adresa, s kotorymi svyazany sobytiya, zakodirovany v
yadre, i ih edinstvennoe naznachenie sostoit v ih ispol'zovanii v proces-
process a ---+ +--- ozhidanie zaversheniya ---+
| | vvoda-vyvoda |
process b -++|----+ |
||| +---- adres A
process c -|++-------- ozhidanie vydeleniya |
+----++--- (osvobozhdeniya) bufera --+
process d --+ ||+--+|
| |||+--+
process e --|---|+||
|+--|-+|
process f --|+ +--|-- ozhidanie vydeleniya --------- adres B
| +----|-(osvobozhdeniya) indeksa
process g --|-+ |
+|------+
process h -++--------- ozhidanie vvoda s ter- ------ adres C
minala
Risunok 6.30. Processy, priostanovlennye do nastupleniya soby-
tij, i otobrazhenie sobytij na konkretnye adresa
se otobrazheniya ozhidaemogo sobytiya na konkretnyj adres. Kak dlya abstraktnogo
rassmotreniya, tak i dlya konkretnoj realizacii sobytiya bezrazlichno, skol'ko
processov odnovremenno ozhidayut ego nastupleniya. Kak rezul'tat, vozmozhno voz-
niknovenie nekotoryh protivorechij. Vo-pervyh, kogda sobytie nastupaet i pro-
cessy, ozhidayushchie ego, sootvetstvuyushchim obrazom opoveshchayutsya ob etom, vse oni
"probuzhdayutsya" i perehodyat v sostoyanie "gotovnosti k vypolneniyu". YAdro vyvo-
dit processy iz sostoyaniya priostanova vse srazu, a ne po odnomu, nesmotrya na
to, chto oni v principe mogut konkurirovat' za odnu i tu zhe zablokirovannuyu
strukturu dannyh i bol'shinstvo iz nih cherez nebol'shoj promezhutok vremeni
opyat' vernetsya v sostoyanie priostanova (bolee podrobno ob etom shla rech' v
glavah 2 i 3). Na Risunke 6.30 izobrazheny neskol'ko processov, priostanov-
lennyh do nastupleniya opredelennyh sobytij.
Eshche odno protivorechie svyazano s tem, chto na odin i tot zhe adres mogut
otobrazhat'sya neskol'ko sobytij. Na Risunke 6.30, naprimer, sobytiya "osvobozh-
denie bufera" i "zavershenie vvoda-vyvoda" otobrazhayutsya na adres bufera ("ad-
res A"). Kogda vvod-vyvod v bufer zavershaetsya, yadro vozobnovlyaet vypolnenie
vseh processov, priostanovlennyh v ozhidanii nastupleniya kak togo, tak i dru-
gogo sobytiya. Poskol'ku process, ozhidayushchij zaversheniya vvoda-vyvoda, uderzhi-
vaet bufer zablokirovannym, drugie processy, kotorye zhdali osvobozhdeniya bu-
fera, vnov' priostanovyatsya, ibo bufer vse eshche zanyat. Funkcionirovanie siste-
my bylo by bolee effektivnym, esli by otobrazhenie sobytij na adresa bylo od-
noznachnym. Odnako na praktike takogo roda protivorechie na proizvoditel'nosti
sistemy ne otrazhaetsya, poskol'ku otobrazhenie na odin adres bolee odnogo so-
bytiya imeet mesto dovol'no redko, a takzhe poskol'ku vypolnyayushchijsya process
obychno osvobozhdaet zablokirovannye resursy do togo, kak nachnut vypolnyat'sya
171
drugie processy. Stilisticheski, tem ne menee, mehanizm funkcionirovaniya yadra
stal by bolee ponyaten, esli by otobrazhenie bylo odnoznachnym.
+------------------------------------------------------------+
| algoritm sleep |
| vhodnaya informaciya: (1) adres priostanova |
| (2) prioritet |
| vyhodnaya informaciya: 1, esli process vozobnovlyaetsya po sig-|
| nalu, kotoryj emu udalos' ulovit'; |
| vyzov algoritma longjump, esli process|
| vozobnovlyaetsya po signalu, kotoryj emu|
| ne udalos' ulovit'; |
| 0 - vo vseh ostal'nyh sluchayah; |
| { |
| podnyat' prioritet raboty processora takim obrazom, chtoby|
| zablokirovat' vse preryvaniya; |
| perevesti process v sostoyanie priostanova; |
| vklyuchit' process v hesh-ochered' priostanovlennyh proces- |
| sov, baziruyushchuyusya na adresah priostanova; |
| sohranit' adres priostanova v tablice processov; |
| sdelat' vvod dlya processa prioritetnym; |
| esli (priostanov processa NE dopuskaet preryvanij) |
| { |
| vypolnit' pereklyuchenie konteksta; |
| /* s etogo mesta process vozobnovlyaet vypolnenie, |
| kogda "probuzhdaetsya" */ |
| snizit' prioritet raboty processora tak, chtoby vnov' |
| razreshit' preryvaniya (kak bylo do priostanova pro- |
| cessa); |
| vozvratit' (0); |
| } |
| |
| /* priostanov processa prinimaet preryvaniya, vyzvannye |
| signalami */ |
| esli (k processu ne imeet otnosheniya ni odin iz signalov)|
| { |
| vypolnit' pereklyuchenie konteksta; |
| /* s etogo mesta process vozobnovlyaet vypolnenie, |
| kogda "probuzhdaetsya" */ |
| esli (k processu ne imeet otnosheniya ni odin iz signa-|
| lov) |
| { |
| vosstanovit' prioritet raboty processora takim, |
| kakim on byl v moment priostanova processa; |
| vozvratit' (0); |
| } |
| } |
| udalit' process iz hesh-ocheredi priostanovlennyh proces- |
| sov, esli on vse eshche nahoditsya tam; |
| |
| vosstanovit' prioritet raboty processora takim, kakim on|
| byl v moment priostanova processa; |
| esli (prioritet priostanovlennogo processa pozvolyaet |
| prinimat' signaly) |
| vozvratit' (1); |
| zapustit' algoritm longjump; |
| } |
+------------------------------------------------------------+
Risunok 6.31. Algoritm priostanova processa
172
6.6.2 Algoritmy priostanova i vozobnovleniya vypolneniya
Na Risunke 6.31 priveden algoritm priostanova processa. Snachala yadro po-
vyshaet prioritet raboty processora tak, chtoby zablokirovat' vse preryvaniya,
kotorye mogli by (putem sozdaniya konkurencii) pomeshat' rabote s ocheredyami
priostanovlennyh processov, i zapominaet staryj prioritet, chtoby vosstano-
vit' ego, kogda vypolnenie processa budet vozobnovleno. Process poluchaet po-
metku "priostanovlennogo", adres priostanova i prioritet zapominayutsya v tab-
lice processov, a process pomeshchaetsya v hesh-ochered' priostanovlennyh proces-
sov. V prostejshem sluchae (kogda priostanov ne dopuskaet preryvanij) process
vypolnyaet pereklyuchenie konteksta i blagopoluchno "zasypaet". Kogda priosta-
novlennyj process "probuzhdaetsya", yadro nachinaet planirovat' ego zapusk: pro-
cess vozvrashchaet sohranennyj v algoritme sleep kontekst, vosstanavlivaet sta-
ryj prioritet raboty processora (kotoryj byl u nego do nachala vypolneniya al-
goritma) i vozvrashchaet upravlenie yadru.
+------------------------------------------------------------+
| algoritm wakeup /* vozobnovlenie priostanovlennogo pro- |
| cessa */ |
| vhodnaya informaciya: adres priostanova |
| vyhodnaya informaciya: otsutstvuet |
| { |
| povysit' prioritet raboty processora takim obrazom, chto-|
| by zablokirovat' vse preryvaniya; |
| najti hesh-ochered' priostanovlennyh processov s ukazannym|
| adresom priostanova; |
| dlya (kazhdogo processa, priostanovlennogo po ukazannomu |
| adresu) |
| { |
| udalit' process iz hesh-ocheredi; |
| sdelat' pometku o tom, chto process nahoditsya v sosto-|
| yanii "gotovnosti k zapusku"; |
| vklyuchit' process v spisok processov, gotovyh k zapus-|
| ku (dlya planirovshchika processov); |
| ochistit' pole, soderzhashchee adres priostanova, v zapisi|
| tablicy processov; |
| esli (process ne zagruzhen v pamyat') |
| vozobnovit' vypolnenie programmy podkachki (nule-|
| voj process); |
| v protivnom sluchae |
| esli (vozobnovlyaemyj process bolee podhodit dlya is- |
| polneniya, chem nyne vypolnyayushchijsya) |
| ustanovit' sootvetstvuyushchij flag dlya planirovshchi- |
| ka; |
| } |
| vosstanovit' pervonachal'nyj prioritet raboty processora;|
| } |
+------------------------------------------------------------+
Risunok 6.32. Algoritm vozobnovleniya priostanovlennogo processa
CHtoby vozobnovit' vypolnenie priostanovlennyh processov, yadro obrashchaetsya
k algoritmu wakeup (Risunok 6.32), prichem delaet eto kak vo vremya ispolneniya
algoritmov realizacii standartnyh sistemnyh funkcij, tak i v sluchae obrabot-
ki preryvanij. Algoritm iput, naprimer, osvobozhdaet zablokirovannyj indeks i
173
vozobnovlyaet vypolnenie vseh processov, ozhidayushchih snyatiya blokirovki. Tochno
tak zhe i programma obrabotki preryvanij ot diska vozobnovlyaet vypolnenie
processov, ozhidayushchih zaversheniya vvoda-vyvoda. V algoritme wakeup yadro snacha-
la povyshaet prioritet raboty processora, chtoby zablokirovat' preryvaniya. Za-
tem dlya kazhdogo processa, priostanovlennogo po ukazannomu adresu, vypolnyayut-
sya sleduyushchie dejstviya: delaetsya pometka v pole, opisyvayushchem sostoyanie pro-
cessa, o tom, chto process gotov k zapusku; process udalyaetsya iz spiska pri-
ostanovlennyh processov i pomeshchaetsya v spisok processov, gotovyh k zapusku;
pole v zapisi tablicy processov, soderzhashchee adres priostanova, ochishchaetsya.
Esli vozobnovlyaemyj process ne zagruzhen v pamyat', yadro zapuskaet process
podkachki, obespechivayushchij podkachku vozobnovlyaemogo processa v pamyat' (podra-
zumevaetsya sistema, v kotoroj podkachka stranic po obrashcheniyu ne podderzhivaet-
sya); v protivnom sluchae, esli vozobnovlyaemyj process bolee podhodit dlya is-
polneniya, chem nyne vypolnyayushchijsya, yadro ustanavlivaet dlya planirovshchika speci-
al'nyj flag, soobshchayushchij o tom, chto processu po vozvrashchenii v rezhim zadachi
sleduet projti cherez algoritm planirovaniya (glava 8). Nakonec, yadro vossta-
navlivaet pervonachal'nyj prioritet raboty processora. Pri etom na yadro ne
okazyvaetsya nikakogo davleniya: "probuzhdenie" (wakeup) processa ne vyzyvaet
ego nemedlennogo ispolneniya; blagodarya "probuzhdeniyu", process stanovitsya
tol'ko dostupnym dlya zapuska.
Vse, o chem govorilos' vyshe, kasaetsya prostejshego sluchaya vypolneniya algo-
ritmov sleep i wakeup, poskol'ku predpolagaetsya, chto process priostanavliva-
etsya do nastupleniya sootvetstvuyushchego sobytiya. Vo mnogih sluchayah processy
priostanavlivayutsya v ozhidanii sobytij, kotorye "dolzhny" nastupit', naprimer,
v ozhidanii osvobozhdeniya resursa (indeksov ili buferov) ili v ozhidanii zaver-
sheniya vvoda-vyvoda, svyazannogo s diskom. Uverennost' processa v neminuemom
vozobnovlenii osnovana na tom, chto podobnye resursy mogut byt' predostavleny
tol'ko vo vremennoe pol'zovanie. Tem ne menee, inogda process mozhet priosta-
novit'sya v ozhidanii sobytiya, ne buduchi uverennym v neizbezhnom nastuplenii
poslednego, v takom sluchae u processa dolzhna byt' vozmozhnost' v lyubom sluchae
vernut' sebe upravlenie i prodolzhit' vypolnenie. V podobnyh situaciyah yadro
nemedlenno narushaet "son" priostanovlennogo processa, posylaya emu signal.
Bolee podrobno o signalah my pogovorim v sleduyushchej glave; zdes' zhe primem
dopushchenie, chto yadro mozhet (vyborochno) vozobnovlyat' priostanovlennye processy
po signalu i chto process mozhet raspoznavat' poluchaemye signaly.
Naprimer, esli process obratilsya k sistemnoj funkcii chteniya s terminala,
yadro ne budet v sostoyanii vypolnit' zapros processa do teh por, poka pol'zo-
vatel' ne vvedet dannye s klaviatury terminala (glava 10). Tem ne menee,
pol'zovatel', zapustivshij process, mozhet ostavit' terminal na ves' den', pri
etom process ostanetsya priostanovlennym v ozhidanii vvoda, a terminal mozhet
ponadobit'sya drugomu pol'zovatelyu. Esli drugoj pol'zovatel' pribegnet k re-
shitel'nym meram (takim kak vyklyuchenie terminala), yadro dolzhno imet' vozmozh-
nost' vosstanovit' otklyuchennyj process: v kachestve pervogo shaga yadru sleduet
vozobnovit' priostanovlennyj process po signalu. V tom, chto processy mogut
priostanovit'sya na dlitel'noe vremya, net nichego plohogo. Priostanovlennyj
process zanimaet poziciyu v tablice processov i mozhet poetomu udlinyat' vremya
poiska (ozhidaniya) putem vypolneniya opredelennyh algoritmov, kotorye ne zani-
mayut vremya central'nogo processora i poetomu vypolnyayutsya prakticheski neza-
metno.
CHtoby kak-to razlichat' mezhdu soboj sostoyaniya priostanova, yadro ustanav-
livaet dlya priostanavlivaemogo processa (pri vhode v eto sostoyanie) priori-
tet planirovaniya na osnovanii sootvetstvuyushchego parametra algoritma sleep. To
est' yadro zapuskaet algoritm sleep s parametrom "prioritet", v kotorom otra-
zhaetsya nalichie uverennosti v neizbezhnom nastuplenii ozhidaemogo sobytiya. Esli
prioritet prevyshaet porogovoe znachenie, process ne budet prezhdevremenno vy-
hodit' iz priostanova po poluchenii signala, a budet prodolzhat' ozhidat' nas-
tupleniya sobytiya. Esli zhe znachenie prioriteta nizhe porogovogo, process budet
nemedlenno vozobnovlen po poluchenii signala (****).
174
---------------------------------------
(****) Slovami "vyshe" i "nizhe" my zamenyaem terminy "vysokij prioritet" i
"nizkij prioritet". Odnako na praktike prioritet mozhet izmeryat'sya
chislami, bolee nizkie znacheniya kotoryh podrazumevayut bolee vysokij
prioritet.
Proverka togo, imeet li process uzhe signal pri vhode v algoritm sleep,
pozvolyaet vyyasnit', priostanavlivalsya li process ranee. Naprimer, esli zna-
chenie prioriteta v vyzove algoritma sleep prevyshaet porogovoe znachenie, pro-
cess priostanavlivaetsya v ozhidanii vypolneniya algoritma wakeup. Esli zhe zna-
chenie prioriteta nizhe porogovogo, vypolnenie processa ne priostanavlivaetsya,
no na signal process reagiruet tochno tak zhe, kak esli by on byl priostanov-
len. Esli yadro ne proverit nalichie signalov pered priostanovom, vozmozhna
opasnost', chto signal bol'she ne postupit vnov' i v etom sluchae process ni-
kogda ne vozobnovitsya.
Kogda process "probuzhdaetsya" po signalu (ili kogda on ne perehodit v
sostoyanie priostanova iz-za nalichiya signala), yadro mozhet vypolnit' algoritm
longjump (v zavisimosti ot prichiny, po kotoroj process byl priostanovlen). S
pomoshch'yu algoritma longjump yadro vosstanavlivaet ranee sohranennyj kontekst,
esli net vozmozhnosti zavershit' vypolnyaemuyu sistemnuyu funkciyu. Naprimer, esli
izza togo, chto pol'zovatel' otklyuchil terminal, bylo prervano chtenie dannyh s
terminala, funkciya read ne budet zavershena, no vozvratit priznak oshibki. |to
kasaetsya vseh sistemnyh funkcij, kotorye mogut byt' prervany vo vremya prios-
tanova. Posle vyhoda iz priostanova process ne smozhet normal'no prodolzhat'-
sya, poskol'ku ozhidaemoe sobytie ne nastupilo. Pered vypolneniem bol'shinstva
sistemnyh funkcij yadro sohranyaet kontekst processa, ispol'zuya algoritm
setjump i vyzyvaya tem samym neobhodimost' v posleduyushchem vypolnenii algoritma
longjump.
Vstrechayutsya situacii, kogda yadro trebuet, chtoby process vozobnovilsya po
poluchenii signala, no ne vypolnyaet algoritm longjump. YAdro zapuskaet algo-
ritm sleep so special'nym znacheniem parametra "prioritet", podavlyayushchim is-
polnenie algoritma longjump i zastavlyayushchim algoritm sleep vozvrashchat' kod,
ravnyj 1. Takaya mera bolee effektivna po sravneniyu s nemedlennym vypolneniem
algoritma setjump pered vyzovom sleep i posleduyushchim vypolneniem algoritma
longjump dlya vosstanovleniya pervonachal'nogo konteksta processa. Zadacha zak-
lyuchaetsya v tom, chtoby pozvolit' yadru ochishchat' lokal'nye struktury dannyh.
Drajver ustrojstva, naprimer, mozhet vydelit' svoi chastnye struktury dannyh i
priostanovit'sya s prioritetom, dopuskayushchim preryvaniya; esli po signalu ego
rabota vozobnovlyaetsya, on osvobozhdaet vydelennye struktury, a zatem vypolnya-
et algoritm longjump, esli neobhodimo. Pol'zovatel' ne imeet vozmozhnosti
prokontrolirovat', vypolnyaet li process algoritm longjump; vypolnenie etogo
algoritma zavisit ot prichiny priostanovki processa, a takzhe ot togo, trebuyut
li struktury dannyh yadra vneseniya izmenenij pered vyhodom iz sistemnoj funk-
cii.
My zavershili rassmotrenie konteksta processa. Processy v sisteme UNIX
mogut nahodit'sya v razlichnyh logicheskih sostoyaniyah i perehodit' iz sostoyaniya
v sostoyanie v sootvetstvii s ustanovlennymi pravilami perehoda, pri etom in-
formaciya o sostoyanii sohranyaetsya v tablice processov i v adresnom prostrans-
tve processa. Kontekst processa sostoit iz pol'zovatel'skogo konteksta i
sistemnogo konteksta. Pol'zovatel'skij kontekst sostoit iz programm proces-
sa, dannyh, steka zadachi i oblastej razdelyaemoj pamyati, a sistemnyj kontekst
sostoit iz staticheskoj chasti (zapis' v tablice processov, adresnoe prostran-
stvo processa i informaciya, neobhodimaya dlya otobrazheniya adresnogo prostrans-
tva) i dinamicheskoj chasti (stek yadra i sohranennoe sostoyanie registrov pre-
dydushchego kontekstnogo urovnya sistemy), kotorye zapominayutsya v steke i vybi-
175
rayutsya iz steka pri vypolnenii processom obrashchenij k sistemnym funkciyam, pri
obrabotke preryvanij i pri pereklyucheniyah konteksta. Pol'zovatel'skij kon-
tekst processa raspadaetsya na otdel'nye oblasti, kotorye predstavlyayut soboj
nepreryvnye uchastki virtual'nogo adresnogo prostranstva i traktuyutsya kak sa-
mostoyatel'nye ob®ekty ispol'zovaniya i zashchity. V modeli upravleniya pamyat'yu,
kotoraya ispol'zovalas' pri opisanii formata virtual'nogo adresnogo prostran-
stva processa, predpolagalos' nalichie u kazhdoj oblasti processa svoej tabli-
cy stranic. YAdro raspolagaet celym naborom razlichnyh algoritmov dlya raboty s
oblastyami. V zaklyuchitel'noj chasti glavy byli rassmotreny algoritmy priosta-
nova (sleep) i vozobnovleniya (wakeup) processov. Struktury i algoritmy, opi-
sannye v dannoj glave, budut ispol'zovat'sya v posleduyushchih glavah pri rass-
motrenii sistemnyh funkcij upravleniya processami i planirovaniya ih vypolne-
niya, a takzhe pri ob®yasnenii razlichnyh metodov raspredeleniya pamyati.
1. Sostav'te algoritm preobrazovaniya virtual'nyh adresov v fizicheskie, na
vhode kotorogo zadayutsya virtual'nyj adres i adres tochki vhoda v chastnuyu
tablicu oblastej.
2. V mashinah AT&T 3B2 i NSC serii 32000 ispol'zuetsya dvuhurovnevaya shema
translyacii virtual'nyh adresov v fizicheskie (s segmentaciej). To est' v
sisteme podderzhivaetsya ukazatel' na tablicu stranic, kazhdaya zapis' ko-
toroj mozhet adresovat' fiksirovannuyu chast' adresnogo prostranstva pro-
cessa po smeshcheniyu v tablice. Sravnite algoritm translyacii virtual'nyh
adresov na etih mashinah s algoritmom, izlozhennym v tekste pri obsuzhde-
nii modeli upravleniya pamyat'yu. Podumajte nad problemami proizvoditel'-
nosti i potrebnosti v pamyati dlya razmeshcheniya vspomogatel'nyh tablic.
3. V arhitekture sistemy VAX-11 podderzhivayutsya dva nabora registrov zashchity
pamyati, ispol'zuemyh mashinoj v processe translyacii pol'zovatel'skih ad-
resov. Mehanizm translyacii ispol'zuetsya tot zhe, chto i v predydushchem pun-
kte, za odnim isklyucheniem: ukazatelej na tablicu stranic zdes' dva. Es-
li process raspolagaet tremya oblastyami - komand, dannyh i steka - to
kakim obrazom, ispol'zuya dva nabora registrov, sleduet proizvodit'
otobrazhenie oblastej na tablicy stranic ? Uvelichenie steka v arhitektu-
re sistemy VAX-11 idet v napravlenii mladshih virtual'nyh adresov. Kakoj
togda vid imela by oblast' steka ? V glave 11 budet rassmotrena oblast'
razdelyaemoj pamyati: kak ona mozhet byt' realizovana v arhitekture siste-
my VAX-11 ?
4. Sostav'te algoritm vydeleniya i osvobozhdeniya stranic pamyati i tablic
stranic. Kakie struktury dannyh sleduet ispol'zovat', chtoby dostich' na-
ivysshej proizvoditel'nosti ili naibol'shej prostoty realizacii algoritma?
5. Ustrojstvo upravleniya pamyat'yu MC68451 dlya semejstva mikroprocessorov
Motorola 68000 dopuskaet vydelenie segmentov pamyati razmerom ot 256
bajt do 16 megabajt. Kazhdoe (fizicheskoe) ustrojstvo upravleniya pamyat'yu
podderzhivaet 32 deskriptora segmentov. Opishite effektivnyj metod vyde-
leniya pamyati dlya etogo sluchaya. Kakim obrazom osushchestvlyalas' by realiza-
ciya oblastej ?
6. Rassmotrim otobrazhenie virtual'nyh adresov, predstavlennoe na Risunke
6.5. Predpolozhim, chto yadro vygruzhaet process (v sisteme s podkachkoj
processov) ili otkachivaet v oblast' steka bol'shoe kolichestvo stranic (v
sisteme s zameshcheniem stranic). Esli cherez kakoe-to vremya process obra-
titsya k virtual'nomu adresu 68432, budet li on dolzhen obratit'sya k so-
otvetstvuyushchej yachejke fizicheskoj pamyati, iz kotoroj on schityval dannye
do togo, kak byla vypolnena operaciya vygruzki (otkachki) ? Esli nizhnie
urovni sistemy upravleniya pamyat'yu realizuyutsya s ispol'zovaniem tablicy
stranic, sleduet li eti tablicy raspolagat' v teh zhe, chto i sami stra-
nicy, mestah fizicheskoj pamyati ?
*7. Mozhno realizovat' sistemu, v kotoroj stek yadra raspolagaetsya nad vershi-
176
noj steka zadachi. Podumajte o dostoinstvah i nedostatkah podobnoj sis-
temy.
8. Kakim obrazom, prisoedinyaya oblast' k processu, yadro mozhet proverit' to,
chto eta oblast' ne nakladyvaetsya na virtual'nye adresa oblastej, uzhe
prisoedinennyh k processu ?
9. Obratimsya k algoritmu pereklyucheniya konteksta. Dopustim, chto v sisteme
gotov k vypolneniyu tol'ko odin process. Drugimi slovami, yadro vybiraet
dlya vypolneniya process s tol'ko chto sohranennym kontekstom. Ob®yasnite,
chto proizojdet pri etom.
10. Predpolozhim, chto process priostanovilsya, no v sisteme net processov,
gotovyh k vypolneniyu. CHto proizojdet, kogda priostanovivshijsya process
pereklyuchit kontekst ?
11. Predpolozhim, chto process, vypolnyaemyj v rezhime zadachi, izrashodoval vy-
delennyj emu kvant vremeni i v rezul'tate preryvaniya po tajmeru yadro
vybiraet dlya vypolneniya novyj process. Ob®yasnite, pochemu pereklyuchenie
konteksta proizojdet na sistemnom kontekstnom urovne 2.
12. V sisteme s zameshcheniem stranic process, vypolnyaemyj v rezhime zadachi,
mozhet stolknut'sya s otsutstviem nuzhnoj stranicy, kotoraya ne byla zagru-
zhena v pamyat'. V hode obrabotki preryvaniya yadro schityvaet stranicu iz
oblasti podkachki i priostanavlivaetsya. Ob®yasnite, pochemu pereklyuchenie
konteksta (v moment priostanova) proizojdet na sistemnom kontekstnom
urovne 2.
13. Process ispol'zuet sistemnuyu funkciyu read s formatom vyzova
read(fd,buf,1024);
v sisteme s zameshcheniem stranic pamyati. Predpolozhim, chto yadro ispolnyaet
algoritm read dlya schityvaniya dannyh v sistemnyj bufer, odnako pri po-
pytke kopirovaniya dannyh v adresnoe prostranstvo zadachi stalkivaetsya s
otsutstviem nuzhnoj stranicy, soderzhashchej strukturu buf, vsledstvie togo,
chto ona byla ranee vygruzhena iz pamyati. YAdro obrabatyvaet voznikshee
preryvanie, schityvaya otsutstvuyushchuyu stranicu v pamyat'. CHto proishodit na
kazhdom iz sistemnyh kontekstnyh urovnej ? CHto proizojdet, esli program-
ma obrabotki preryvaniya priostanovitsya v ozhidanii zaversheniya schityvaniya
stranicy ?
14. CHto proizoshlo by, esli by vo vremya kopirovaniya dannyh iz adresnogo
prostranstva zadachi v pamyat' yadra (Risunok 6.17) obnaruzhilos', chto uka-
zannyj pol'zovatelem adres neveren ?
*15. Pri vypolnenii algoritmov sleep i wakeup yadro povyshaet prioritet raboty
processora tak, chtoby ne dopustit' preryvanij, prepyatstvuyushchih ej. Kakie
otricatel'nye posledstviya mogli by vozniknut', esli by yadro ne predpri-
nimalo etih dejstvij ? (Namek: yadro zachastuyu vozobnovlyaet priostanov-
lennye processy pryamo iz programm obrabotki preryvanij).
*16. Predpolozhim, chto process pytaetsya priostanovit'sya do nastupleniya soby-
tiya A, no, zapuskaya algoritm sleep, eshche ne zablokiroval preryvaniya; do-
pustim, chto v etot moment proishodit preryvanie i programma ego obra-
botki pytaetsya vozobnovit' vse processy, priostanovlennye do nastuple-
niya sobytiya A. CHto sluchitsya s pervym processom ? Ne predstavlyaet li eta
situaciya opasnost' ? Esli da, to mozhet li yadro izbezhat' ee vozniknove-
niya ?
17. CHto proizojdet, esli yadro zapustit algoritm wakeup dlya vseh processov,
priostanovlennyh po adresu A, v to vremya, kogda po etomu adresu ne oka-
zhetsya ni odnogo priostanovlennogo processa ?
18. Po odnomu adresu mozhet priostanovit'sya mnozhestvo processov, no yadru mo-
zhet potrebovat'sya vozobnovlenie tol'ko nekotoryh iz nih - teh, kotorym
budet poslan sootvetstvuyushchij signal. S pomoshch'yu mehanizma posylki signa-
lov mozhno identificirovat' otdel'nye processy. Podumajte, kakie izmene-
niya sleduet proizvesti v algoritme wakeup dlya togo, chtoby mozhno bylo
vozobnovlyat' vypolnenie tol'ko odnogo processa, a ne vseh processov,
priostanovlennyh po zadannomu adresu.
19. Obrashcheniya k algoritmam sleep i wakeup v sisteme Multics
177
imeyut sleduyushchij sintaksis:
sleep (sobytie);
wakeup (sobytie, prioritet);
Takim obrazom, v algoritme wakeup vozobnovlyaemomu processu prisvaivaet-
sya prioritet. Sravnite formu vyzova etih algoritmov s formoj vyzova so-
178
Last-modified: Sun, 20 Jun 2004 10:24:20 GMT