Ocenite etot tekst:





    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.




    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.




    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.




    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).




    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)





    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.




    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.




    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.



              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.




    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".




    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.



              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).




    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).




    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





    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).




    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


    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




    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




    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).




    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.




    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






    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
Ocenite etot tekst: