GLAVA 8. DISPETCHERIZACIYA PROCESSOV I EE VREMENNYE HARAKTERISTIKI
V sisteme razdeleniya vremeni yadro predostavlyaet processu resursy cent-
ral'nogo processora (CP) na interval vremeni, nazyvaemyj kvantom, po isteche-
nii kotorogo vygruzhaet etot process i zapuskaet drugoj, periodicheski pereu-
poryadochivaya ochered' processov. Algoritm planirovaniya processov v sisteme
UNIX ispol'zuet vremya vypolneniya v kachestve parametra. Kazhdyj aktivnyj pro-
cess imeet prioritet planirovaniya; yadro pereklyuchaet kontekst na process s
naivysshim prioritetom. Pri perehode vypolnyayushchegosya processa iz rezhima yadra v
rezhim zadachi yadro pereschityvaet ego prioritet, periodicheski i v rezhime zada-
chi pereustanavlivaya prioritet kazhdogo processa, gotovogo k vypolneniyu.
Informaciya o vremeni, svyazannom s vypolneniem, nuzhna takzhe i nekotorym
iz pol'zovatel'skih processov: ispol'zuemaya imi, naprimer, komanda time poz-
volyaet uznat', skol'ko vremeni zanimaet vypolnenie drugoj komandy, komanda
date vyvodit tekushchuyu datu i vremya sutok. S pomoshch'yu razlichnyh sistemnyh funk-
cij processy mogut ustanavlivat' ili poluchat' vremennye harakteristiki vy-
polneniya v rezhime yadra, a takzhe stepen' zagruzhennosti central'nogo processo-
ra. Vremya v sisteme podderzhivaetsya s pomoshch'yu apparatnyh chasov, kotorye posy-
layut CP preryvaniya s fiksirovannoj, apparatno-zavisimoj chastotoj, obychno
50-100 raz v sekundu. Kazhdoe postuplenie preryvaniya po tajmeru (chasam) ime-
nuetsya tajmernym tikom. V nastoyashchej glave rassmatrivayutsya osobennosti reali-
zacii processov vo vremeni, vklyuchaya planirovanie processov v sisteme UNIX,
opisanie svyazannyh so vremenem sistemnyh funkcij, a takzhe funkcij, vypolnyae-
myh programmoj obrabotki preryvanij po tajmeru.
8.1 PLANIROVANIE VYPOLNENIYA PROCESSOV
Planirovshchik processov v sisteme UNIX prinadlezhit k obshchemu klassu plani-
rovshchikov, rabotayushchih po principu "karuseli s mnogourovnevoj obratnoj
svyaz'yu". V sootvetstvii s etim principom yadro predostavlyaet processu resursy
CP na kvant vremeni, po istechenii kotorogo vygruzhaet etot process i vozvra-
shchaet ego v odnu iz neskol'kih ocheredej, reguliruemyh prioritetami. Prezhde
chem process zavershitsya, emu mozhet potrebovat'sya mnozhestvo raz projti cherez
cikl s obratnoj svyaz'yu. Kogda yadro vypolnyaet pereklyuchenie konteksta i voss-
tanavlivaet kontekst processa, process vozobnovlyaet vypolnenie s tochki pri-
ostanova.
Srazu posle pereklyucheniya konteksta yadro zapuskaet algoritm planirovaniya
vypolneniya processov (Risunok 8.1), vybiraya na vypolnenie process s naivys-
shim prioritetom sredi processov, nahodyashchihsya v sostoyaniyah "rezervirovaniya" i
"gotovnosti k vypolneniyu, buduchi zagruzhennym v pamyat'". Rassmatrivat' pro-
cessy, ne zagruzhennye v pamyat', ne imeet smysla, poskol'ku ne buduchi zagru-
zhen, process ne mozhet vypolnyat'sya. Esli naivysshij prioritet imeyut srazu nes-
kol'ko processov, yadro, ispol'zuya princip kol'cevogo spiska (karuseli), vy-
biraet sredi nih tot process, kotoryj nahoditsya v sostoyanii "gotovnosti k
vypolneniyu" dol'she ostal'nyh. Esli ni odin iz processov ne mozhet byt' vybran
dlya vypolneniya, CP prostaivaet do momenta polucheniya sleduyushchego preryvaniya,
kotoroe proizojdet ne pozzhe chem cherez odin tajmernyj tik; posle obrabotki
etogo preryvaniya yadro snova zapustit algoritm planirovaniya.
232
+------------------------------------------------------------+
| algoritm schedule_process |
| vhodnaya informaciya: otsutstvuet |
| vyhodnaya informaciya: otsutstvuet |
| { |
| vypolnyat' poka (dlya zapuska ne budet vybran odin iz pro-|
| cessov) |
| { |
| dlya (kazhdogo processa v ocheredi gotovyh k vypolneniyu)|
| vybrat' process s naivysshim prioritetom iz zagru-|
| zhennyh v pamyat'; |
| esli (ni odin iz processov ne mozhet byt' izbran dlya |
| vypolneniya) |
| priostanovit' mashinu; |
| /* mashina vyhodit iz sostoyaniya prostoya po prery- |
| /* vaniyu |
| */ |
| } |
| udalit' vybrannyj process iz ocheredi gotovyh k vypolne- |
| niyu; |
| pereklyuchit'sya na kontekst vybrannogo processa, vozobno- |
| vit' ego vypolnenie; |
| } |
+------------------------------------------------------------+
Risunok 8.1. Algoritm planirovaniya vypolneniya processov
8.1.2 Parametry dispetcherizacii
V kazhdoj zapisi tablicy processov est' pole prioriteta, ispol'zuemoe
planirovshchikom processov. Prioritet processa v rezhime zadachi zavisit ot togo,
kak etot process pered etim ispol'zoval resursy CP. Mozhno vydelit' dva klas-
sa prioritetov processa (Risunok 8.2): prioritety vypolneniya v rezhime yadra i
prioritety vypolneniya v rezhime zadachi. Kazhdyj klass vklyuchaet v sebya ryad zna-
chenij, s kazhdym znacheniem logicheski associirovana nekotoraya ochered' proces-
sov. Prioritety vypolneniya v rezhime zadachi ocenivayutsya dlya processov, vygru-
zhennyh po vozvrashchenii iz rezhima yadra v rezhim zadachi, prioritety vypolneniya v
rezhime yadra imeyut smysl tol'ko v kontekste algoritma sleep. Prioritety vy-
polneniya v rezhime zadachi imeyut verhnee porogovoe znachenie, prioritety vypol-
neniya v rezhime yadra imeyut nizhnee porogovoe znachenie. Sredi prioritetov vy-
polneniya v rezhime yadra dalee mozhno vydelit' vysokie i nizkie prioritety:
processy s nizkim prioritetom vozobnovlyayutsya po poluchenii signala, a proces-
sy s vysokim prioritetom prodolzhayut ostavat'sya v sostoyanii priostanova (sm.
razdel 7.2.1).
Porogovoe znachenie mezhdu prioritetami vypolneniya v rezhimah yadra i zadachi
na Risunke 8.2 otmecheno dvojnoj liniej, prohodyashchej mezhdu prioritetom ozhida-
niya zaversheniya potomka (v rezhime yadra) i nulevym prioritetom vypolneniya v
rezhime zadachi. Prioritety processa podkachki, ozhidaniya vvoda-vyvoda, svyazan-
nogo s diskom, ozhidaniya bufera i indeksa yavlyayutsya vysokimi, ne dopuskayushchimi
preryvaniya sistemnymi prioritetami, s kazhdym iz kotoryh svyazana ochered' iz
1, 3, 2 i 1 processa, sootvetstvenno, v to vremya kak prioritety ozhidaniya
vvoda s terminala, vyvoda na terminal i zaversheniya potomka yavlyayutsya nizkimi,
dopuskayushchimi preryvaniya sistemnymi prioritetami, s kazhdym iz kotoryh svyazana
ochered' iz 4, 0 i 2 processov, sootvetstvenno. Na risunke predstavleny takzhe
urovni prioritetov vypolneniya v rezhime zadachi (*).
YAdro vychislyaet prioritet processa v sleduyushchih sluchayah:
233
---------------------------------------
(*) Naivysshim znacheniem prioriteta v sisteme yavlyaetsya nulevoe znachenie. Ta-
kim obrazom, nulevoj prioritet vypolneniya v rezhime zadachi vyshe priorite-
ta, imeyushchego znachenie, ravnoe 1, i t.d.
* Neposredstvenno pered perehodom processa v sostoyanie priostanova yadro
naznachaet emu prioritet ishodya iz prichiny priostanova. Prioritet ne za-
visit ot dinamicheskih harakteristik processa (prodolzhitel'nosti vvo-
da-vyvoda ili vremeni scheta), naprotiv, eto postoyannaya velichina, zhestko
ustanavlivaemaya v moment priostanova i zavisyashchaya tol'ko ot prichiny pere-
hoda processa v dannoe sostoyanie. Processy, priostanovlennye algoritmami
nizkogo urovnya, imeyut tendenciyu porozhdat' tem bol'she uzkih mest v siste-
me, chem dol'she oni nahodyatsya v etom sostoyanii; poetomu im naznachaetsya
bolee vysokij prioritet po sravneniyu s ostal'nymi processami. Naprimer,
process, priostanovlennyj v ozhidanii zaversheniya vvoda-vyvoda, svyazannogo
s diskom, imeet bolee vysokij prioritet po sravneniyu s processom, ozhida-
yushchim osvobozhdeniya bufera, po neskol'kim prichinam. Prezhde vsego, u pervo-
go processa uzhe est' bufer, poetomu ne isklyuchena vozmozhnost', chto kogda
on vozobnovitsya, on uspeet osvobodit' i bufer, i drugie resursy. CHem
bol'she resursov svobodno, tem men'she shansov dlya vozniknoveniya vzaimnoj
blokirovki processov. Sisteme ne pridetsya chasto pereklyuchat'
Prioritety vypolneniya Urovni prioritetov Processy
v rezhime yadra
| +----------------------+
| | Process | +--+
| | podkachki |-+ |
| Ne dopuskayushchie +----------------------+ +--+
| |Ozhidanie vvoda-vyvoda,| +--+ +--+ +--+
| preryvaniya | svyazannogo s diskom |-+ +-+ +-+ |
| +----------------------+ +--+ +--+ +--+
| | Ozhidanie | +--+ +--+
| | bufera |-+ +-+ |
| +----------------------+ +--+ +--+
| | Ozhidanie | +--+
| | indeksa |-+ |
| +----------------------+ +--+
| +----------------------+
| | Ozhidanie vvoda s ter-| +--+ +--+ +--+ +--+
| | minala |-+ +-+ +-+ +-+ |
| Dopuskayushchie +----------------------+ +--+ +--+ +--+ +--+
| | Ozhidanie vyvoda na |
| preryvaniya | terminal |
| +----------------------+
| | Ozhidanie zaversheniya | +--+ +--+
| | potomka |-+ +-+ |
v +----------------------+ +--+ +--+
Porogovyj prioritet +----------------------+
^ | Uroven' zadachi 0 |
| +----------------------+ +--+ +--+ +--+ +--+
| | Uroven' zadachi 1 |-+ +-+ +-+ +-+ |
| +----------------------+ +--+ +--+ +--+ +--+
| | - |
| | - |
| +----------------------+ +--+
Prioritety vypolneniya | Uroven' zadachi n |-+ |
v rezhime zadachi +----------------------+ +--+
Risunok 8.2. Diapazon prioritetov processa
234
kontekst, blagodarya chemu sokratitsya vremya reakcii processa i uvelichitsya
proizvoditel'nost' sistemy. Vo-vtoryh, bufer, osvobozhdeniya kotorogo ozhi-
daet process, mozhet byt' zanyat processom, ozhidayushchim v svoyu ochered' za-
versheniya vvoda-vyvoda. Po zavershenii vvoda-vyvoda budut vozobnovleny oba
processa, poskol'ku oni byli priostanovleny po odnomu i tomu zhe adresu.
Esli pervym zapustit' na vypolnenie process, ozhidayushchij osvobozhdeniya bu-
fera, on v lyubom sluchae snova priostanovitsya do teh por, poka bufer ne
budet osvobozhden; sledovatel'no, ego prioritet dolzhen byt' nizhe.
* Po vozvrashchenii processa iz rezhima yadra v rezhim zadachi yadro vnov' vychis-
lyaet prioritet processa. Process mog do etogo nahodit'sya v sostoyanii
priostanova, izmeniv svoj prioritet na prioritet vypolneniya v rezhime yad-
ra, poetomu pri perehode processa iz rezhima yadra v rezhim zadachi emu dol-
zhen byt' vozvrashchen prioritet vypolneniya v rezhime zadachi. Krome togo, yad-
ro "shtrafuet" vypolnyayushchijsya process v pol'zu ostal'nyh processov, otbi-
raya ispol'zuemye im cennye sistemnye resursy.
* Prioritety vseh processov v rezhime zadachi s intervalom v 1 sekundu (v
versii V) pereschityvaet programma obrabotki preryvanij po tajmeru, po-
buzhdaya tem samym yadro vypolnyat' algoritm planirovaniya, chtoby ne dopus-
tit' monopol'nogo ispol'zovaniya resursov CP odnim processom.
V techenie kvanta vremeni tajmer mozhet poslat' processu neskol'ko prery-
vanij; pri kazhdom preryvanii programma obrabotki preryvanij po tajmeru uve-
lichivaet znachenie, hranyashcheesya v pole tablicy processov, kotoroe opisyvaet
prodolzhitel'nost' ispol'zovaniya resursov central'nogo processora (ICP). V
versii V kazhduyu sekundu programma obrabotki preryvanij pereustanavlivaet
znachenie etogo polya, ispol'zuya funkciyu poluraspada (decay):
decay(ICP) = ICP/2;
Posle etogo programma pereschityvaet prioritet kazhdogo processa, nahodyashchegosya
v sostoyanii "zarezervirovan, no gotov k vypolneniyu", po formule
prioritet = (ICP/2) + (bazovyj uroven' prioriteta zadachi)
gde pod "bazovym urovnem prioriteta zadachi" ponimaetsya porogovoe znachenie,
raspolozhennoe mezhdu prioritetami vypolneniya v rezhimah yadra i zadachi. Vysoko-
mu prioritetu planirovaniya sootvetstvuet kolichestvenno nizkoe znachenie. Ana-
liz funkcij perescheta prodolzhitel'nosti ispol'zovaniya resursov CP i priori-
teta processa pokazyvaet: chem nizhe skorost' poluraspada znacheniya ICP, tem
medlennee prioritet processa dostigaet znachenie bazovogo urovnya; poetomu
processy v sostoyanii "gotovnosti k vypolneniyu" imeyut tendenciyu zanimat'
bol'shoe chislo urovnej prioritetov.
Rezul'tatom ezhesekundnogo perescheta prioritetov yavlyaetsya peremeshchenie
processov, nahodyashchihsya v rezhime zadachi, ot odnoj ocheredi k drugoj, kak poka-
zano na Risunke 8.3. Po sravneniyu s Risunkom 8.2 odin process pereshel iz
ocheredi, sootvetstvuyushchej urovnyu 1, v ochered', sootvetstvuyushchuyu nulevomu urov-
nyu. V real'noj sisteme vse processy, imeyushchie prioritety vypolneniya v rezhime
zadachi, pomenyali by svoe mestopolozhenie v ocheredyah. Pri etom sleduet ukazat'
na nevozmozhnost' izmeneniya prioriteta processa v rezhime yadra, a takzhe na ne-
vozmozhnost' peresecheniya porogovoj cherty processami, vypolnyayushchimisya v rezhime
zadachi, do teh por, poka oni ne obratyatsya k operacionnoj sisteme i ne perej-
dut v sostoyanie priostanova.
YAdro stremitsya proizvodit' pereschet prioritetov vseh aktivnyh processov
ezhesekundno, odnako interval mezhdu momentami perescheta mozhet slegka var'iro-
vat'sya. Esli preryvanie po tajmeru postupilo togda, kogda yadro ispolnyalo
kriticheskij otrezok programmy (drugimi slovami, v to vremya, kogda prioritet
raboty CP byl povyshen, no, ochevidno, ne nastol'ko, chtoby vosprepyatstvovat'
235
preryvaniyu dannogo tipa), yadro ne pereschityvaet prioritety, inache emu prish-
los' by nadolgo zaderzhat'sya na kriticheskom otrezke. Vmesto etogo yadro zapo-
minaet to, chto emu sleduet proizvesti pereschet prioritetov, i delaet eto pri
pervom zhe preryvanii po tajmeru, postupayushchem posle snizheniya prioriteta rabo-
ty CP. Periodicheskij pereschet prioriteta processov garantiruet provedenie
strategii planirovaniya, osnovannoj na ispol'zovanii kol'cevogo spiska pro-
cessov, vypolnyayushchihsya v rezhime zadachi. Pri etom konechno zhe yadro otklikaetsya
na interaktivnye zaprosy takih programm, kak tekstovye redaktory ili prog-
rammy formatnogo vvoda: processy, ih realizuyushchie, imeyut vysokij koefficient
prostoya (otnoshenie vremeni prostoya k prodolzhitel'nosti ispol'zovaniya CP) i
poetomu estestvenno bylo by povyshat' ih prioritet, kogda oni gotovy dlya vy-
polneniya (sm. [Thompson 78], str.1937). V drugih mehanizmah planirovaniya
kvant vremeni, vydelyaemyj processu na rabotu s resursami CP, dinamicheski iz-
menyaetsya v intervale mezhdu 0 i 1 sek. v zavisimosti ot stepeni zagruzki sis-
temy. Pri etom vremya reakcii na zaprosy processov mozhet
Prioritety vypolneniya Urovni prioritetov Processy
v rezhime yadra
| +----------------------+
| | Process | +--+
| | podkachki |-+ |
| Ne dopuskayushchie +----------------------+ +--+
| |Ozhidanie vvoda-vyvoda,| +--+ +--+ +--+
| preryvaniya | svyazannogo s diskom |-+ +-+ +-+ |
| +----------------------+ +--+ +--+ +--+
| | Ozhidanie | +--+ +--+
| | bufera |-+ +-+ |
| +----------------------+ +--+ +--+
| | Ozhidanie | +--+
| | indeksa |-+ |
| +----------------------+ +--+
| +----------------------+
| | Ozhidanie vvoda s ter-| +--+ +--+ +--+ +--+
| | minala |-+ +-+ +-+ +-+ |
| Dopuskayushchie +----------------------+ +--+ +--+ +--+ +--+
| | Ozhidanie vyvoda na |
| preryvaniya | terminal |
| +----------------------+
| | Ozhidanie zaversheniya | +--+ +--+
| | potomka |-+ +-+ |
v +----------------------+ +--+ +--+
Porogovyj prioritet +----------------------+ +--+
^ | Uroven' zadachi 0 |-+ |<- - - - - -+
| +----------------------+ +--+ -
| | | +--+ +--+ +--+ ++-+
| | Uroven' zadachi 1 |-+ +-+ +-+ + + |
| +----------------------+ +--+ +--+ +--+ +--+
| | - |
| | - |
| +----------------------+ +--+
Prioritety vypolneniya | Uroven' zadachi n |-+ |
v rezhime zadachi +----------------------+ +--+
Risunok 8.2. Perehod processa iz odnoj ocheredi v druguyu
sokratit'sya za schet togo, chto na ozhidanie momenta zapuska processam uzhe ne
nuzhno otvodit' po celoj sekunde; odnako, s drugoj storony, yadru prihoditsya
chashche pribegat' k pereklyucheniyu kontekstov.
236
8.1.3 Primery dispetcherizacii processov
Na Risunke 8.4 pokazana dinamika izmenenij prioritetov processov A, B i
C v versii V pri sleduyushchih dopushcheniyah: vse eti processy byli sozdany s per-
vonachal'nym prioritetom 60, kotoryj yavlyaetsya naivysshim prioritetom vypolne-
niya v rezhime zadachi, preryvaniya po tajmeru postupayut 60 raz v sekundu, pro-
cessy ne ispol'zuyut vyzov sistemnyh funkcij, v sisteme net drugih processov,
gotovyh k vypolneniyu. YAdro vychislyaet poluraspad pokazatelya ICP po formule:
Vremya Process A Process B Process C
| Prioritet ICP - Prioritet ICP - Prioritet ICP
0 --+-- - -
| 60 0 - 60 0 - 60 0
| 1 - -
| 2 - -
| - -
| - -
1 --+-- 60 - -
| 75 30 - 60 0 - 60 0
| - 1 -
| - 2 -
| - -
| - -
2 --+-- - 60 -
| 67 15 - 75 30 - 60 0
| - - 1
| - - 2
| - -
| - -
3 --+-- - - 60
| 63 7 - 67 15 - 75 30
| 8 - -
| 9 - -
| - -
| - -
4 --+-- 67 - -
| 76 33 - 63 7 - 67 15
| - 8 -
| - 9 -
| - -
| - -
5 --+-- - 67 -
| 68 16 - 76 33 - 63 7
| - -
| - -
Risunok 8.4. Primer dispetcherizacii processov
ICP = decay(ICP) = ICP/2;
a prioritet processa po formule:
prioritet = (ICP/2) + 60;
Esli predpolozhit', chto pervym zapuskaetsya process A i emu vydelyaetsya kvant
vremeni, on vypolnyaetsya v techenie 1 sekundy: za eto vremya tajmer posylaet
sisteme 60 preryvanij i stol'ko zhe raz programma obrabotki preryvanij uveli-
chivaet dlya processa A znachenie polya, soderzhashchego pokazatel' ICP (s 0 do 60).
237
Po proshestvii sekundy yadro pereklyuchaet kontekst i, proizvedya pereschet prio-
ritetov dlya vseh processov, vybiraet dlya vypolneniya process B. V techenie
sleduyushchej sekundy programma obrabotki preryvanij po tajmeru 60 raz povyshaet
znachenie polya ICP dlya processa B, posle chego yadro pereschityvaet parametry
dispetcherizacii dlya vseh processov i vnov' pereklyuchaet kontekst. Procedura
povtoryaetsya mnogokratno, soprovozhdayas' poocherednym zapuskom processov na vy-
polnenie.
Teper' rassmotrim processy s prioritetami, privedennymi na Risunke 8.5,
i predpolozhim, chto v sisteme imeyutsya i drugie processy. YAdro mozhet vygruzit'
process A, ostaviv ego v sostoyanii "gotovnosti k vypolneniyu", posle togo,
kak on poluchit podryad neskol'ko kvantov vremeni dlya raboty s CP i snizit ta-
kim obrazom svoj prioritet vypolneniya v rezhime zadachi (Risunok 8.5a). CHerez
nekotoroe vremya posle zapuska processa A v sostoyanie "gotovnosti k vypolne-
niyu" mozhet perejti process B, prioritet kotorogo v tot moment okazhetsya vyshe
prioriteta processa A (Risunok 8.5b). Esli yadro za eto vremya ne zaplanirova-
lo k vypolneniyu lyuboj drugoj process (iz teh, chto ne pokazany na risunke),
oba processa (A i B) pri izvestnyh obstoyatel'stvah mogut na nekotoroe vremya
okazat'sya na odnom urovne prioritetnosti, hotya process B popadet na etot
uroven' pervym iz-za togo, chto ego pervonachal'nyj prioritet byl blizhe (Risu-
nok 8.5v i 8.5g). Tem ne menee, yadro zapustit process A vperedi processa B,
poskol'ku process A nahodilsya v sostoyanii "gotovnosti k vypolneniyu" bolee
dlitel'noe vremya (Risunok 8.5d) - eto reshayushchee uslovie, esli vybor proizvo-
ditsya iz processov s odinakovymi prioritetami.
V razdele 6.4.3 uzhe govorilos' o tom, chto yadro zapuskaet process na vy-
polnenie posle pereklyucheniya konteksta: prezhde chem perejti v sostoyanie prios-
tanova ili zavershit' svoe vypolnenie process dolzhen pereklyuchit' kontekst,
krome togo on imeet vozmozhnost' pereklyuchat' kontekst v moment perehoda iz
rezhima yadra v rezhim zadachi. YAdro vygruzhaet process, kotoryj sobiraetsya pe-
rejti v rezhim zadachi, esli imeetsya gotovyj k vypolneniyu process s bolee vy-
sokim prioritetom. Takaya situaciya voznikaet, esli yadro vyvelo iz sostoyaniya
priostanova process s prioritetom, prevyshayushchim prioritet tekushchego processa,
ili esli v rezul'tate obrabotki preryvaniya po tajmeru izmenilis' prioritety
vseh gotovyh k vypolneniyu processov. V pervom sluchae tekushchij process ne mo-
zhet vypolnyat'sya v rezhime zadachi, poskol'ku imeetsya process s bolee vysokim
prioritetom vypolneniya v rezhime yadra. Vo vtorom sluchae programma obrabotki
preryvanij po tajmeru reshaet, chto process ispol'zoval vydelennyj emu kvant
vremeni, i poskol'ku mnozhestvo processov pri etom menyayut svoi prioritety,
yadro vypolnyaet pereklyuchenie konteksta.
8.1.4 Upravlenie prioritetami
Processy mogut upravlyat' svoimi prioritetami s pomoshch'yu sistemnoj funkcii
nice:
nice(value);
gde value - znachenie, v processe perescheta pribavlyaemoe k priori-
tetu processa:
prioritet = (ICP/konstanta) + (bazovyj prioritet) + (znachenie nice)
Sistemnaya funkciya nice uvelichivaet ili umen'shaet znachenie polya nice v tabli-
ce processov na velichinu parametra funkcii, pri etom tol'ko superpol'zovate-
lyu dozvoleno ukazyvat' znacheniya, uvelichivayushchie prioritet processa. Krome to-
go, tol'ko superpol'zovatel' mozhet ukazyvat' znacheniya, lezhashchie nizhe oprede-
lennogo poroga. Pol'zovateli, vyzyvayushchie sistemnuyu funkciyu nice dlya togo,
chtoby ponizit' prioritet vo vremya vypolneniya intensivnyh vychislitel'nyh ra-
bot, "udobny, priyatny" (nice) dlya ostal'nyh pol'zovatelej sis-
238
+---------+ +---------+ +---------+
^ 60 +---------+ +---------+ +----B----+
| +---------+ +---------+ +---------+
| +---------+ +----B----+ +----A----+
Bolee +---------+ +---------+ +---------+
vysokij +---------+ +----A----+ +---------+
priori- +---------+ +---------+ +---------+
tet +----A----+ +---------+ +---------+
| +---------+ +---------+ +---------+
| (a) (b) (v)
+----B----+ +-A-----B-+ +----B----+
60 +----A----+ +---------+ +---------+(process
+---------+ +---------+ +---------+
+---------+ +---------+ +---------+
+---------+ +---------+ +---------+
+---------+ +---------+ +---------+
+---------+ +---------+ +---------+
+---------+ +---------+ +---------+
+---------+ +---------+ +---------+
(g) (d) (e)
Risunok 8.5. Planirovanie na osnove kol'cevogo spiska i prio-
ritety processov
temy, otsyuda nazvanie funkcii. Processy nasleduyut znachenie nice u svoego ro-
ditelya pri vypolnenii sistemnoj funkcii fork. Funkciya nice dejstvuet tol'ko
dlya vypolnyayushchihsya processov; process ne mozhet sbrosit' znachenie nice u dru-
gogo processa. S prakticheskoj tochki zreniya eto oznachaet, chto esli administ-
ratoru sistemy ponadobilos' ponizit' prioritety razlichnyh processov, trebuyu-
shchih dlya svoego vypolneniya slishkom mnogo vremeni, u nego ne budet drugogo
sposoba sdelat' eto bystro, krome kak vyzvat' funkciyu udaleniya (kill) dlya
vseh nih srazu.
8.1.5 Planirovanie na osnove spravedlivogo razdela
Vysheopisannyj algoritm planirovaniya ne vidit nikakoj raznicy mezhdu pol'-
zovatelyami razlichnyh klassov (kategorij). Drugimi slovami, nevozmozhno vyde-
lit' opredelennoj sovokupnosti processov, naprimer, polovinu seansa raboty s
CP. Tem ne menee, takaya vozmozhnost' imeet vazhnoe znachenie dlya organizacii
raboty v usloviyah vychislitel'nogo centra, gde gruppa pol'zovatelej mozhet po-
zhelat' kupit' tol'ko polovinu mashinnogo vremeni na garantirovannoj osnove i
s garantirovannym urovnem reakcii. Zdes' my rassmotrim shemu, imenuemuyu
"Planirovaniem na osnove spravedlivogo razdela" (Fair Share Scheduler) i re-
alizovannuyu na vychislitel'nom centre Indian Hill firmy AT&T Bell
Laboratories [Henry 84].
Princip "planirovaniya na osnove spravedlivogo razdela" sostoit v delenii
sovokupnosti pol'zovatelej na gruppy, yavlyayushchiesya ob®ektami ogranichenij, nak-
ladyvaemyh obychnym planirovshchikom na obrabotku processov iz kazhdoj gruppy.
Pri etom sistema vydelyaet vremya CP proporcional'no chislu grupp, vne zavisi-
mosti ot togo, skol'ko processov vypolnyaetsya v gruppe. Pust', naprimer, v
sisteme imeyutsya chetyre planiruemye gruppy, kazhdaya iz kotoryh zagruzhaet CP na
25% i soderzhit, sootvetstvenno, 1, 2, 3 i 4 processa, realizuyushchih schetnye
zadachi, kotorye nikogda po svoej vole ne ustupyat CP. Pri uslovii, chto v sis-
teme bol'she net nikakih drugih processov, kazhdyj process pri ispol'zovanii
tradicionnogo algoritma planirovaniya poluchil by 10% vremeni CP (poskol'ku
239
vsego processov 10 i mezhdu nimi ne delaetsya nikakih razlichij). Pri ispol'zo-
vanii algoritma planirovaniya na osnove spravedlivogo razdela process iz per-
voj gruppy poluchit v dva raza bol'she vremeni CP po sravneniyu s kazhdym pro-
cessom iz vtoroj gruppy, v 3 raza bol'she po sravneniyu s kazhdym processom iz
tret'ej gruppy i v 4 raza bol'she po sravneniyu s kazhdym processom iz chetver-
toj. V etom primere vsem processam v gruppe vydelyaetsya ravnoe vremya, pos-
kol'ku prodolzhitel'nost' cikla, realizuemogo kazhdym processom, zaranee ne
ustanovlena.
Realizaciya etoj shemy dovol'no prosta, chto i delaet ee privlekatel'noj.
V formule rascheta prioriteta processa poyavlyaetsya eshche odin termin - "priori-
tet gruppy spravedlivogo razdela". V prostranstve processa takzhe poyavlyaetsya
novoe pole, opisyvayushchee prodolzhitel'nost' ICP na osnove spravedlivogo razde-
la, obshchuyu dlya vseh processov iz gruppy. Programma obrabotki preryvanij po
tajmeru uvelichivaet znachenie etogo polya dlya tekushchego processa i ezhesekundno
pereschityvaet znacheniya sootvetstvuyushchih polej dlya vseh processov v sisteme.
Novaya komponenta formuly vychisleniya prioriteta processa predstavlyaet soboj
normalizovannoe znachenie ICP dlya kazhdoj gruppy. CHem bol'she processornogo
vremeni vydelyaetsya processam gruppy, tem vyshe znachenie etogo pokazatelya i
nizhe prioritet.
V kachestve primera rassmotrim dve gruppy processov (Risunok 8.6), v od-
noj iz kotoryh odin process (A), v drugoj - dva (B i C). Predpolozhim, chto
yadro pervym zapustilo na vypolnenie process A, v techenie sekundy uvelichivaya
sootvetstvuyushchie etomu processu znacheniya polej, opisyvayushchih individual'noe i
gruppovoe ICP. V rezul'tate perescheta prioritetov po istechenii sekundy pro-
cessy B i C budut imet' naivysshie prioritety. Dopustim, chto yadro vybiraet na
vypolnenie process B. V techenie sleduyushchej sekundy znachenie polya ICP dlya pro-
cessa B podnimaetsya do 60, tochno takoe zhe znachenie prinimaet pole gruppovogo
ICP dlya processov B i C. Takim obrazom, po istechenii vtoroj sekundy process
C poluchit prioritet, ravnyj 75 (sravnite s Risunkom 8.4), i yadro zapustit na
vypolnenie process A s prioritetom 74. Dal'nejshie dejstviya mozhno prosledit'
na risunke: yadro po ocheredi zapuskaet processy A, B, A, C, A, B i t.d.
8.1.6 Rabota v rezhime real'nogo vremeni
Rezhim real'nogo vremeni podrazumevaet vozmozhnost' obespecheniya dostatoch-
noj skorosti reakcii na vneshnie preryvaniya i vypolneniya otdel'nyh processov
v tempe, soizmerimom s chastotoj vozniknoveniya vyzyvayushchih preryvaniya sobytij.
Primerom sistemy, rabotayushchej v rezhime real'nogo vremeni, mozhet sluzhit' sis-
tema upravleniya zhizneobespecheniem pacientov bol'nic, mgnovenno reagiruyushchaya
na izmenenie sostoyaniya pacienta. Processy, podobnye tekstovym redaktoram, ne
schitayutsya processami real'nogo vremeni: v nih bystraya reakciya na dejstviya
pol'zovatelya yavlyaetsya zhelatel'noj, no ne neobhodimoj (nichego strashnogo ne
proizojdet, esli pol'zovatel', vypolnyayushchij redaktirovanie teksta, podozhdet
otveta neskol'ko lishnih sekund, hotya u pol'zovatelya na etot schet mogut byt'
i svoi soobrazheniya). Vysheopisannye algoritmy planirovaniya vypolneniya proces-
sov prednaznacheny special'no dlya ispol'zovaniya v sistemah razdeleniya vremeni
i ne godyatsya dlya uslovij raboty v rezhime real'nogo vremeni, poskol'ku ne ga-
rantiruyut zapusk yadrom kazhdogo processa v techenie fiksirovannogo intervala
vremeni, pozvolyayushchego govorit' o vzaimodejstvii vychislitel'noj sistemy s
processami v tempe, soizmerimom so skorost'yu protekaniya etih processov. Dru-
goj pomehoj v podderzhke raboty v rezhime real'nogo vremeni yavlyaetsya nevygru-
zhaemost' yadra; yadro ne mozhet planirovat' vypolnenie processa real'nogo vre-
meni v rezhime zadachi, esli ono uzhe ispolnyaet drugoj process v rezhime yadra,
bez vneseniya v rabotu sushchestvennyh izmenenij. V nastoyashchee vremya sistemnym
programmistam prihoditsya perevodit' processy real'nogo vremeni v rezhim yadra,
chtoby obespechit' dostatochnuyu skorost' reakcii. Pravil'noe reshenie etoj prob-
lemy - dat' takim processam vozmozhnost' dinamicheskogo protekaniya (drugimi
slovami, oni ne dolzhny byt' vstroeny v yadro) s predostavleniem sootvetstvuyu-
240
Vremya Process A Process B Process C
| Prio- In- Grup-- Prio- In- Grup-- Prio- In- Grup-
| ritet divi- po- - ritet divi- po- - ritet divi- po-
| dual. voe - dual. voe - dual. voe
| ICP ICP - ICP ICP - ICP ICP
0 --+-- - -
| 60 0 0 - 60 0 0 - 60 0 0
| 1 1 - -
| 2 2 - -
| - -
| - -
1 --+-- 60 60 - -
| 90 30 30 - 60 0 0 - 60 0 0
| - 1 1 - 1
| - 2 2 - 2
| - -
| - -
2 --+-- - 60 60 - 60
| 74 15 15 - 90 30 30 - 75 0 30
| 16 16 - -
| 17 17 - -
| - -
| - -
3 --+-- 75 75 - -
| 96 37 37 - 74 15 15 - 67 0 15
| - 16 - 1 16
| - 17 - 2 17
| - -
| - -
4 --+-- - 75 - 60 75
| 78 18 18 - 81 7 37 - 93 30 37
| 19 19 - -
| 20 20 - -
| - -
| - -
5 --+-- 78 78 - -
| 98 39 39 - 70 3 18 - 76 15 18
| - -
| - -
Risunok 8.6. Primer planirovaniya na osnove spravedlivogo razdela, v ko-
torom ispol'zuyutsya dve gruppy s tremya processami
shchego mehanizma, s pomoshch'yu kotorogo oni mogli by soobshchat' yadru o svoih nuzh-
dah, vytekayushchih iz osobennostej raboty v rezhime real'nogo vremeni. Na segod-
nyashnij den' v standartnoj sisteme UNIX takaya vozmozhnost' otsutstvuet.
8.2 SISTEMNYE OPERACII, SVYAZANNYE SO VREMENEM
Sushchestvuet neskol'ko sistemnyh funkcij, imeyushchih otnoshenie k vremeni pro-
tekaniya processa: stime, time, times i alarm. Pervye dve imeyut delo s glo-
bal'nym sistemnym vremenem, poslednie dve - s vremenem vypolneniya otdel'nyh
processov.
Funkciya stime daet superpol'zovatelyu vozmozhnost' zanosit' v global'nuyu
nie global'noj peremennoj. Vybiraetsya vremya iz etoj peremennoj s pomoshch'yu
funkcii time:
241
time(tloc);
gde tloc - ukazatel' na peremennuyu, prinadlezhashchuyu processu, v kotoruyu zano-
sitsya vozvrashchaemoe funkciej znachenie. Funkciya vozvrashchaet eto znachenie i iz
samoj sebya, naprimer, komande date, kotoraya vyzyvaet etu funkciyu, chtoby op-
redelit' tekushchee vremya.
Funkciya times vozvrashchaet summarnoe vremya vypolneniya processa i vseh ego
potomkov, prekrativshih sushchestvovanie, v rezhimah yadra i zadachi. Sintaksis vy-
+------------------------------------------------------------+
| #include |
| #include |
| extern long times(); |
| |
| main() |
| { |
| int i; |
| /* tms - imya struktury dannyh, sostoyashchej iz 4 elemen- |
| tov */ |
| struct tms pb1,pb2; |
| long pt1,pt2; |
| |
| pt1 = times(&pb1); |
| for (i = 0; i < 10; i++) |
| if (fork() == 0) |
| child(i); |
| |
| for (i = 0; i < 10; i++) |
| wait((int*) 0); |
| pt2 = times(&pb2); |
| printf("process-roditel': real'noe vremya %u |
| v rezhime zadachi %u v rezhime yadra %u |
| potomki: v rezhime zadachi %u v rezhime yadra %u\n",|
| pt2 - pt1,pb2.tms_utime - pb1.tms_utime, |
| pb2.tms_stime - pb1.tms_stime, |
| pb2.tms_cutime - pb1.tms_cutime, |
| pb2.tms_cstime - pb1.tms_cstime); |
| } |
| |
| child(n); |
| int n; |
| { |
| int i; |
| struct tms cb1,cb2; |
| long t1,t2; |
| |
| t1 = times(&cb1); |
| for (i = 0; i < 10000; i++) |
| ; |
| t2 = times(&cb2); |
| printf("potomok %d: real'noe vremya %u v rezhime zadachi %u|
| v rezhime yadra %u\n",n,t2 - t1, |
| cb2.tms_utime - cb1.tms_utime, |
| cb2.tms_stime - cb1.tms_stime); |
| exit(); |
| } |
+------------------------------------------------------------+
Risunok 8.7. Primer programmy, ispol'zuyushchej funkciyu times
242
zova funkcii:
times(tbuffer)
struct tms *tbuffer;
gde tms - imya struktury, v kotoruyu pomeshchayutsya vozvrashchaemye znacheniya i koto-
raya opisyvaetsya sleduyushchim obrazom:
struct tms {
/* time_t - imya struktury dannyh, v kotoroj hranitsya vremya */
time_t tms_utime; /* vremya vypolneniya processa v rezhime zadachi */
time_t tms_stime; /* vremya vypolneniya processa v rezhime yadra */
time_t tms_cutime; /* vremya vypolneniya potomkov v rezhime zadachi */
time_t tms_cstime; /* vremya vypolneniya potomkov v rezhime yadra */
};
Funkciya times vozvrashchaet vremya, proshedshee "s nekotorogo proizvol'nogo momen-
ta v proshlom", kak pravilo, s momenta zagruzki sistemy.
Na Risunke 8.7 privedena programma, v kotoroj process-roditel' sozdaet
10 potomkov, kazhdyj iz kotoryh 10000 raz vypolnyaet pustoj cikl. Process-ro-
ditel' obrashchaetsya k funkcii times pered sozdaniem potomkov i posle ih zaver-
sheniya, v svoyu ochered' potomki vyzyvayut etu funkciyu pered nachalom cikla i
posle ego zaversheniya. Kto-to po naivnosti mozhet podumat', chto vremya vypolne-
niya potomkov processa v rezhimah zadachi i yadra ravno summe sootvetstvuyushchih
slagaemyh kazhdogo potomka, a real'noe vremya processa-roditelya yavlyaetsya sum-
moj real'nogo vremeni ego potomkov. Odnako, vremya vypolneniya potomkov ne
vklyuchaet v sebya vremya, zatrachennoe na ispolnenie sistemnyh funkcij fork i
exit, krome togo ono mozhet byt' iskazheno za schet obrabotki preryvanij i pe-
reklyuchenij konteksta.
S pomoshch'yu sistemnoj funkcii alarm pol'zovatel'skie processy mogut inici-
irovat' posylku signalov trevogi ("budil'nika") cherez kratnye promezhutki
vremeni. Naprimer, programma na Risunke 8.8 kazhduyu minutu proveryaet vremya
dostupa k fajlu i, esli k fajlu bylo proizvedeno obrashchenie, vyvodit sootvet-
stvuyushchee soobshchenie. Dlya etogo v cikle, s pomoshch'yu funkcii stat, ustanavliva-
etsya moment poslednego obrashcheniya k fajlu i, esli ono imelo mesto v techenie
poslednej minuty, vyvoditsya soobshchenie. Zatem process s pomoshch'yu funkcii
signal delaet rasporyazhenie prinimat' signaly trevogi, s pomoshch'yu funkcii
alarm zadaet interval mezhdu signalami v 60 sekund i s pomoshch'yu funkcii pause
priostanavlivaet svoe vypolnenie do momenta polucheniya signala. CHerez 60 se-
kund signal postupaet, yadro podgotavlivaet stek zadachi k vyzovu funkcii ob-
rabotki signala wakeup, funkciya vozvrashchaet upravlenie na operator, sleduyushchij
za vyzovom funkcii pause, i process ispolnyaet cikl vnov'.
Vse perechislennye funkcii raboty s vremenem protekaniya processa ob®edi-
nyaet to, chto oni opirayutsya na pokazaniya sistemnyh chasov (tajmera). Obrabaty-
vaya preryvaniya po tajmeru, yadro obrashchaetsya k razlichnym tajmernym schetchikam i
iniciiruet sootvetstvuyushchee dejstvie.
V funkcii programmy obrabotki preryvanij po tajmeru vhodit:
* perezapusk chasov,
* vyzov na ispolnenie funkcij yadra, ispol'zuyushchih vstroennye chasy,
* podderzhka vozmozhnosti profilirovaniya vypolneniya processov v rezhimah yadra
i zadachi;
* sbor statistiki o sisteme i protekayushchih v nej processah,
* slezhenie za vremenem,
* posylka processam signalov "budil'nika" po zaprosu,
* periodicheskoe vozobnovlenie processa podkachki (sm. sleduyushchuyu glavu),
* upravlenie dispetcherizaciej processov.
Nekotorye iz funkcij realizuyutsya pri kazhdom preryvanii po tajmeru, dru-
gie - po proshestvii neskol'kih tajmernyh tikov. Programma obrabotki preryva-
243
nij po tajmeru zapuskaetsya s vysokim prioritetom obrashcheniya k processoru, ne
dopuskaya vo vremya raboty vozniknoveniya drugih vneshnih sobytij (takih kak
preryvaniya ot periferijnyh ustrojstv). Poetomu programma obrabotki preryva-
nij po tajmeru rabotaet ochen' bystro, za maksimal'no-korotkoe vremya
probegaya svoi kriticheskie otrezki, kotorye dolzhny vypolnyat'sya bez preryvanij
so storony drugih processov. Algoritm obrabotki preryvanij po tajmeru prive-
den na Risunke 8.9.
+------------------------------------------------------------+
| #include |
| #include |
| #include |
| |
| main(argc,argv) |
| int argc; |
| char *argv[]; |
| { |
| extern unsigned alarm(); |
| extern wakeup(); |
| struct stat statbuf; |
| time_t axtime; |
| |
| if (argc != 2) |
| { |
| printf("tol'ko 1 argument\n"); |
| exit(); |
| } |
| |
| axtime = (time_t) 0; |
| for (;;) |
| { |
| /* poluchenie znacheniya vremeni dostupa k fajlu */ |
| if (stat(argv[1],&statbuf) == -1) |
| { |
| printf("fajla s imenem %s net\n",argv[1]); |
| exit(); |
| } |
| if (axtime != statbuf.st_atime) |
| { |
| printf("k fajlu %s bylo obrashchenie\n",argv[1]); |
| axtime = statbuf.st_atime; |
| } |
| signal(SIGALRM,wakeup); /* podgotovka k priemu |
| signala */ |
| alarm(60); |
| pause(); /* priostanov do polucheniya signala */|
| } |
| } |
| |
| wakeup() |
| { |
| } |
+------------------------------------------------------------+
Risunok 8.8. Programma, ispol'zuyushchaya sistemnuyu funkciyu alarm
244
+------------------------------------------------------------+
| algoritm clock |
| vhodnaya informaciya: otsutstvuet |
| vyhodnaya informaciya: otsutstvuet |
| { |
| perezapustit' chasy; /* chtoby oni snova posylali prery-|
| vaniya */ |
| esli (tablica otvetnyh signalov ne pusta) |
| { |
| ustanovit' vremya dlya otvetnyh signalov; |
| zapustit' funkciyu callout, esli vremya isteklo; |
| } |
| esli (profiliruetsya vypolnenie v rezhime yadra) |
| zapomnit' znachenie schetchika komand v moment preryva-|
| niya; |
| esli (profiliruetsya vypolnenie v rezhime zadachi) |
| zapomnit' znachenie schetchika komand v moment preryva-|
| niya; |
| sobrat' statistiku o samoj sisteme; |
| sobrat' statistiku o protekayushchih v sisteme processah; |
| vyverit' znachenie prodolzhitel'nosti ICP processom; |
| esli (proshla 1 sekunda ili bolee i ispolnyaetsya otrezok,|
| ne yavlyayushchijsya kriticheskim) |
| { |
| dlya (vseh processov v sisteme) |
| { |
| ustanovit' "budil'nik", esli on aktiven; |
| vyverit' znachenie prodolzhitel'nosti ICP; |
| esli (process budet ispolnyat'sya v rezhime zadachi)|
| vyverit' prioritet processa; |
| } |
| vozobnovit' v sluchae neobhodimosti vypolnenie pro- |
| cessa podkachki; |
| } |
| } |
+------------------------------------------------------------+
Risunok 8.9. Algoritm obrabotki preryvanij po tajmeru
V bol'shinstve mashin posle polucheniya preryvaniya po tajmeru trebuetsya
programmnymi sredstvami proizvesti perezapusk chasov, chtoby oni po proshestvii
intervala vremeni mogli vnov' preryvat' rabotu processora. Takie sredstva
yavlyayutsya mashinno-zavisimymi i my ih rassmatrivat' ne budem.
8.3.2 Vnutrennie sistemnye tajm-auty
Nekotorym iz procedur yadra, v chastnosti drajveram ustrojstv i setevym
protokolam, trebuetsya vyzov funkcij yadra v rezhime real'nogo vremeni. Napri-
mer, process mozhet perevesti terminal v rezhim vvoda bez obrabotki simvolov,
pri kotorom yadro vypolnyaet zaprosy pol'zovatelya na chtenie s terminala cherez
fiksirovannye promezhutki vremeni, ne dozhidayas', kogda pol'zovatel' nazhmet
klavishu "vozvrata karetki" (sm. razdel 10.3.3). YAdro hranit vsyu neobhodimuyu
informaciyu v tablice otvetnyh signalov (Risunok 8.9), v tom chisle imya funk-
cii, zapuskaemoj po istechenii intervala vremeni, parametr, peredavaemyj etoj
funkcii, a takzhe prodolzhitel'nost' intervala (v tajmernyh tikah) do momenta
245
zapuska funkcii.
Pol'zovatel' ne imeet vozmozhnosti napryamuyu kontrolirovat' zapisi v tab-
lice otvetnyh signalov; dlya raboty s nimi sushchestvuyut razlichnye sistemnye al-
goritmy. YAdro sortiruet zapisi v etoj tablice v sootvetstvii s velichinoj in-
tervala do momenta zapuska funkcij. V svyazi s etim dlya kazhdoj zapisi tablicy
zapominaetsya ne obshchaya prodolzhitel'nost' intervala, a tol'ko promezhutok vre-
meni mezhdu momentami zapuska dannoj i predydushchej funkcij. Obshchaya prodolzhi-
tel'nost' intervala do momenta zapuska funkcii skladyvaetsya iz promezhutkov
vremeni mezhdu momentami zapuska vseh funkcij, nachinaya s pervoj i vplot' do
tekushchej.
Funkciya Vremya do zapuska Funkciya Vremya do zapuska
+----------------------------+ +----------------------------+
| a() -2 | | a() -2 |
+----------------------------+ +----------------------------+
| b() 3 | | b() 3 |
+----------------------------+ +----------------------------+
| c() 10 | | f() 2 |
+----------------------------+ +----------------------------+
| c() 8 |
+----------------------------+
Do Posle
Risunok 8.10. Vklyuchenie novoj zapisi v tablicu otvetnyh signalov
Na Risunke 8.10 priveden primer dobavleniya novoj zapisi v tablicu otvet-
nyh signalov. (K otricatel'nomu znacheniyu polya "vremya do zapuska" dlya funkcii
a my vernemsya neskol'ko pozzhe). Sozdavaya novuyu zapis', yadro otvodit dlya nee
nadlezhashchee mesto i sootvetstvuyushchim obrazom pereustanavlivaet znachenie polya
"vremya do zapuska" v zapisi, sleduyushchej za dobavlyaemoj. Sudya po risunku, yadro
sobiraetsya zapustit' funkciyu f cherez 5 tajmernyh tikov: ono otvodit mesto
dlya nee v tablice srazu posle funkcii b i zanosit v pole "vremya do zapuska"
znachenie, ravnoe 2 (togda summa znachenij etih polej dlya funkcij b i f sosta-
vit 5), i menyaet "vremya do zapuska" funkcii c na 8 (pri etom funkciya c vse
ravno zapuskaetsya cherez 13 tajmernyh tikov). V odnih versiyah yadro pol'zuetsya
svyaznym spiskom ukazatelej na zapisi tablicy otvetnyh signalov, v drugih -
menyaet polozhenie zapisej pri korrektirovke tablicy. Poslednij sposob trebuet
znachitel'no men'shih izderzhek pri uslovii, chto yadro ne budet slishkom chasto
obrashchat'sya k tablice.
Pri kazhdom postuplenii preryvaniya po tajmeru programma obrabotki prery-
vaniya proveryaet nalichie zapisej v tablice otvetnyh signalov i v sluchae ih
obnaruzheniya umen'shaet znachenie polya "vremya do zapuska" v pervoj zapisi. Spo-
sob hraneniya prodolzhitel'nosti intervalov do momenta zapuska kazhdoj funkcii,
vybrannyj yadrom, pozvolyaet, umen'shiv znachenie polya "vremya do zapuska" v od-
noj tol'ko pervoj zapisi, sootvetstvenno umen'shit' prodolzhitel'nost' inter-
vala do momenta zapuska funkcij, opisannyh vo vseh zapisyah tablicy. Esli v
ukazannom pole pervoj zapisi hranitsya otricatel'noe ili nulevoe znachenie,
sootvetstvuyushchuyu funkciyu sleduet zapustit'. Programma obrabotki preryvanij po
tajmeru ne zapuskaet funkciyu nemedlenno, takim obrazom ona ne blokiruet voz-
niknovenie posleduyushchih preryvanij dannogo tipa. Tekushchij prioritet raboty
processora vrode by ne pozvolyaet takim preryvaniyam vmeshivat'sya v vypolnenie
processa, odnako yadro ne imeet predstavleniya o tom, skol'ko vremeni potrebu-
etsya na ispolnenie funkcii. Kazalos' by, esli funkciya vypolnyaetsya dol'she od-
nogo tajmernogo tika, vse posleduyushchie preryvaniya dolzhny byt' zablokirovany.
Vmesto etogo, programma obrabotki preryvanij v tipichnoj situacii oformlyaet
vyzov funkcii kak "programmnoe preryvanie", porozhdaemoe vypolneniem otdel'-
noj mashinnoj komandy. Poskol'ku sredi vseh preryvanij programmnye preryvaniya
imeyut samyj nizkij prioritet, oni blokiruyutsya, poka yadro ne zakonchit obra-
246
botku vseh ostal'nyh preryvanij. S momenta zaversheniya podgotovki k zapusku
funkcii i do momenta vozniknoveniya vyzyvaemogo zapuskom funkcii programmnogo
preryvaniya mozhet proizojti mnozhestvo preryvanij, v tom chisle i programmnyh,
v takom sluchae v pole "vremya do zapuska", prinadlezhashchee pervoj zapisi tabli-
cy, budet zaneseno otricatel'noe znachenie. Kogda zhe nakonec programmnoe pre-
ryvanie proishodit, programma obrabotki preryvanij ubiraet iz tablicy vse
zapisi s istekshimi znacheniyami polej "vremya do zapuska" i vyzyvaet sootvetst-
vuyushchuyu funkciyu.
Poskol'ku v ukazannom pole v nachal'nyh zapisyah tablicy mozhet hranit'sya
otricatel'noe ili nulevoe znachenie, programma obrabotki preryvanij dolzhna
najti v tablice pervuyu zapis' s polozhitel'nym znacheniem polya i umen'shit'
ego. Pust', naprimer, funkcii a sootvetstvuet "vremya do zapuska", ravnoe -2
(Risunok 8.10), to est' pered tem, kak funkciya a byla vybrana na vypolnenie,
sistema poluchila 2 preryvaniya po tajmeru. Pri uslovii, chto funkciya b 2 tika
nazad uzhe byla v tablice, yadro propuskaet zapis', sootvetstvuyushchuyu funkcii a,
i umen'shaet znachenie polya "vremya do zapuska" dlya funkcii b.
8.3.3 Postroenie profilya
Postroenie profilya yadra vklyuchaet v sebya izmerenie prodolzhitel'nosti vy-
polneniya sistemy v rezhime zadachi protiv rezhima yadra, a takzhe prodolzhitel'-
nosti vypolneniya otdel'nyh procedur yadra. Drajver parametrov yadra sledit za
otnositel'noj effektivnost'yu raboty modulej yadra, zameryaya parametry raboty
sistemy v moment preryvaniya po tajmeru. Drajver parametrov imeet spisok ad-
resov yadra (glavnym obrazom, funkcij yadra); eti adresa ranee byli zagruzheny
processom putem obrashcheniya k drajveru parametrov. Esli postroenie profilya yad-
ra vozmozhno, programma obrabotki preryvaniya po tajmeru zapuskaet podprogram-
mu obrabotki preryvanij, prinadlezhashchuyu drajveru parametrov, kotoraya oprede-
lyaet, v kakom iz rezhimov - yadra ili zadachi - rabotal processor v moment pre-
ryvaniya. Esli processor rabotal v rezhime zadachi, sistema postroeniya profilya
uvelichivaet znachenie parametra, opisyvayushchego prodolzhitel'nost' vypolneniya v
rezhime zadachi, esli zhe processor rabotal v rezhime yadra, sistema uvelichivaet
znachenie vnutrennego schetchika, sootvetstvuyushchego schetchiku komand. Pol'zova-
tel'skie processy mogut obrashchat'sya k drajveru parametrov, chtoby poluchit'
znacheniya parametrov yadra i razlichnuyu statisticheskuyu informaciyu.
+--------------------------------+
| Algoritm Adres Schetchik |
| |
| bread 100 5 |
| breada 150 0 |
| bwrite 200 0 |
| brelse 300 2 |
| getblk 400 1 |
| user - 2 |
+--------------------------------+
Risunok 8.11. Adresa nekotoryh algoritmov yadra
Na Risunke 8.11 privedeny gipoteticheskie adresa nekotoryh procedur yadra.
Pust' v rezul'tate 10 izmerenij, provedennyh v momenty postupleniya preryva-
nij po tajmeru, byli polucheny sleduyushchie znacheniya schetchika komand: 110, 330,
145, adres v prostranstve zadachi, 125, 440, 130, 320, adres v prostranstve
zadachi i 104. YAdro sohranit pri etom te znacheniya, kotorye pokazany na risun-
ke. Analiz etih znachenij pokazyvaet, chto sistema provela 20% svoego vremeni
v rezhime zadachi (user) i 50% vremeni potratila na vypolnenie algoritma bread
v rezhime yadra.
247
Esli izmerenie parametrov yadra vypolnyaetsya v techenie dlitel'nogo perioda
vremeni, rezul'taty izmerenij priblizhayutsya k istinnoj kartine ispol'zovaniya
sistemnyh resursov. Tem ne menee, opisyvaemyj mehanizm ne uchityvaet vremya,
potrachennoe na obrabotku preryvanij po tajmeru i vypolnenie procedur, bloki-
ruyushchih postuplenie preryvanij dannogo tipa, poskol'ku tajmer ne mozhet prery-
vat' vypolnenie kriticheskih otrezkov programm i, takim obrazom, ne mozhet v
eto vremya obrashchat'sya k podprogramme obrabotki preryvanij drajvera paramet-
rov. V etom nedostatok opisyvaemogo mehanizma, ibo kriticheskie otrezki prog-
ramm yadra chashche vsego naibolee vazhny dlya izmerenij. Sledovatel'no, rezul'taty
izmereniya parametrov yadra soderzhat opredelennuyu dolyu priblizitel'nosti. Uaj-
nberger [Weinberger 84] opisal mehanizm vklyucheniya schetchikov v glavnyh blokah
programmy, takih kak "if-then" i "else", s cel'yu povysheniya tochnosti izmere-
niya chastoty ih vypolneniya. Odnako, dannyj mehanizm uvelichivaet vremya scheta
programm na 50-200%, poetomu ego ispol'zovanie v kachestve postoyannogo meha-
nizma izmereniya parametrov yadra nel'zya priznat' racional'nym.
Na pol'zovatel'skom urovne dlya izmereniya parametrov vypolneniya processov
mozhno ispol'zovat' sistemnuyu funkciyu profil:
profil(buff,bufsize,offset,scale);
gde buff - adres massiva v prostranstve zadachi, bufsize - razmer massiva,
offset - virtual'nyj adres podprogrammy pol'zovatelya (obychno, pervoj po sche-
tu), scale - sposob otobrazheniya virtual'nyh adresov zadachi na adres massiva.
YAdro traktuet argument "scale" kak dvoichnuyu drob' s fiksirovannoj tochkoj
sleva. Tak, naprimer, znachenie argumenta v shestnadcatirichnoj sisteme schisle-
niya, ravnoe Oxffff, sootvetstvuet odnoznachnomu otobrazheniyu schetchika komand
na adresa massiva, znachenie, ravnoe Ox7fff, sootvetstvuet razmeshcheniyu v odnom
slove massiva buff dvuh adresov programmy, Ox3fff - chetyreh adresov program-
my i t.d. YAdro hranit parametry, peredavaemye pri vyzove sistemnoj funkcii,
v prostranstve processa. Esli tajmer preryvaet vypolnenie processa togda,
kogda on nahoditsya v rezhime zadachi, programma obrabotki preryvanij proveryaet
znachenie schetchika komand v moment preryvaniya, sravnivaet ego so znacheniem
argumenta offset i uvelichivaet soderzhimoe yachejki pamyati, adres kotoroj yavlya-
etsya funkciej ot bufsize i scale.
Rassmotrim v kachestve primera programmu, privedennuyu na Risunke 8.12,
izmeryayushchuyu prodolzhitel'nost' vypolneniya funkcij f i g. Snachala process, is-
pol'zuya sistemnuyu funkciyu signal, delaet ukazanie pri poluchenii signala o
preryvanii vyzyvat' funkciyu theend, zatem on vychislyaet diapazon adresov
programmy, v predelah kotoryh budet proizvodit'sya izmerenie prodolzhitel'nos-
ti (nachinaya s adresa funkcii main i konchaya adresom funkcii theend), i, nako-
nec, zapuskaet funkciyu profil, soobshchaya yadru o tom, chto on sobira-
etsya nachat' izmerenie. V rezul'tate vypolneniya programmy v techenie 10 sekund
na nesil'no zagruzhennoj mashine AT&T 3B20 byli polucheny dannye, predstavlen-
nye na Risunke 8.13. Adres funkcii f prevyshaet adres nachala profilirovaniya
na 204 bajta; poskol'ku tekst funkcii f imeet razmer 12 bajt, a razmer celo-
go chisla v mashine AT&T 3B20 raven 4 bajtam, adresa funkcii f otobrazhayutsya na
elementy massiva buf s nomerami 51, 52 i 53. Po takomu zhe principu adresa
funkcii g otobrazhayutsya na elementy buf c nomerami 54, 55 i 56. |lementy buf
s nomerami 46, 48 i 49 prednaznacheny dlya adresov, prinadlezhashchih ciklu funk-
cii main. V obychnom sluchae diapazon adresov, v predelah kotorogo vypolnyaetsya
izmerenie parametrov, opredelyaetsya v rezul'tate obrashcheniya k tablice identi-
fikatorov dlya dannoj programmy, gde ukazyvayutsya adresa programmnyh sekcij.
Pol'zovateli storonyatsya funkcii profil iz-za togo, chto ona kazhetsya im slish-
kom slozhnoj; vmesto nee oni ispol'zuyut pri kompilyacii programm na yazyke Si
parametr, soobshchayushchij kompilyatoru o neobhodimosti sgenerirovat' kod, sledyashchij
za hodom vypolneniya processov.
248
+------------------------------------------------------------+
| #include |
| int buffer[4096]; |
| main() |
| { |
| int offset,endof,scale,eff,gee,text; |
| extern theend(),f(),g(); |
| signal(SIGINT,theend); |
| endof = (int) theend; |
| offset = (int) main; |
| /* vychislyaetsya kolichestvo slov v tekste programmy */ |
| text = (endof - offset + sizeof(int) - 1)/sizeof(int); |
| scale = Oxffff; |
| printf |
| ("smeshchenie do nachala %d do konca %d dlina teksta %d\n",|
| offset,endof,text); |
| eff = (int) f; |
| gee = (int) g; |
| printf("f %d g %d fdiff %d gdiff %d\n",eff,gee, |
| eff-offset,gee-offset); |
| profil(buffer,sizeof(int)*text,offset,scale); |
| for (;;) |
| { |
| f(); |
| g(); |
| } |
| } |
| f() |
| { |
| } |
| g() |
| { |
| } |
| theend() |
| { |
| int i; |
| for (i = 0; i < 4096; i++) |
| if (buffer[i]) |
| printf("buf[%d] = %d\n",i,buffer[i]); |
| exit(); |
| } |
+------------------------------------------------------------+
Risunok 8.12. Programma, ispol'zuyushchaya sistemnuyu funkciyu profil
+------------------------------------------------------+
| smeshchenie do nachala 212 do konca 440 dlina teksta 57 |
| f 416 g 428 fdiff 204 gdiff 216 |
| buf[46] = 50 |
| buf[48] = 8585216 |
| buf[49] = 151 |
| buf[51] = 12189799 |
| buf[53] = 65 |
| buf[54] = 10682455 |
| buf[56] = 67 |
+------------------------------------------------------+
Risunok 8.13. Primer rezul'tatov vypolneniya programmy, is-
pol'zuyushchej sistemnuyu funkciyu profil
249
V moment postupleniya preryvaniya po tajmeru sistema mozhet vypolnyat'sya v
rezhime yadra ili zadachi, a takzhe nahodit'sya v sostoyanii prostoya (bezdejst-
viya). Sostoyanie prostoya oznachaet, chto vse processy priostanovleny v ozhidanii
nastupleniya sobytiya. Dlya kazhdogo sostoyaniya processora yadro imeet vnutrennie
schetchiki, ustanavlivaemye pri kazhdom preryvanii po tajmeru. Pozzhe pol'zova-
tel'skie processy mogut proanalizirovat' nakoplennuyu yadrom statisticheskuyu
informaciyu.
V prostranstve kazhdogo processa imeyutsya dva polya dlya zapisi prodolzhi-
tel'nosti vremeni, provedennogo processom v rezhime yadra i zadachi. V hode ob-
rabotki preryvanij po tajmeru yadro korrektiruet znachenie polya, sootvetstvuyu-
shchego tekushchemu rezhimu vypolneniya processa. Processy-roditeli sobirayut statis-
tiku o svoih potomkah pri vypolnenii funkcii wait, berya za osnovu informa-
ciyu, postupayushchuyu ot zavershayushchih svoe vypolnenie potomkov.
V prostranstve kazhdogo processa imeetsya takzhe odno pole dlya vedeniya uche-
ta ispol'zovaniya pamyati. V hode obrabotki preryvaniya po tajmeru yadro vychis-
lyaet obshchij ob®em pamyati, zanimaemyj tekushchim processom, ishodya iz razmera
chastnyh oblastej processa i ego dolevogo uchastiya v ispol'zovanii razdelyaemyh
oblastej pamyati. Esli, naprimer, process ispol'zuet oblasti dannyh i steka
razmerom 25 i 40 Kbajt, sootvetstvenno, i razdelyaet s chetyr'mya drugimi pro-
cessami odnu oblast' komand razmerom 50 Kbajt, yadro naznachaet processu 75
Kbajt pamyati (50K/5 + 25K + 40K). V sisteme s zameshcheniem stranic yadro vychis-
lyaet ob®em ispol'zuemoj pamyati putem podscheta chisla ispol'zuemyh v kazhdoj
oblasti stranic. Takim obrazom, esli preryvaemyj process imeet dve chastnye
oblasti i eshche odnu oblast' razdelyaet s drugim processom, yadro naznachaet emu
stol'ko stranic pamyati, skol'ko soderzhitsya v etih chastnyh oblastyah, plyus po-
lovinu stranic, prinadlezhashchih razdelyaemoj oblasti. Vsya ukazannaya informaciya
otrazhaetsya v uchetnoj zapisi pri zavershenii processa i mozhet byt' ispol'zova-
na dlya raschetov s zakazchikami mashinnogo vremeni.
8.3.5 Podderzhanie vremeni v sisteme
YAdro uvelichivaet pokazanie sistemnyh chasov pri kazhdom preryvanii po taj-
meru, izmeryaya vremya v tajmernyh tikah ot momenta zagruzki sistemy. |to zna-
chenie vozvrashchaetsya processu cherez sistemnuyu funkciyu time i daet vozmozhnost'
opredelyat' obshchee vremya vypolneniya processa. Vremya pervonachal'nogo zapuska
processa sohranyaetsya yadrom v adresnom prostranstve processa pri ispolnenii
sistemnoj funkcii fork, v moment zaversheniya processa eto znachenie vychitaetsya
iz tekushchego vremeni, rezul'tat vychitaniya i sostavlyaet real'noe vremya vypol-
neniya processa. V drugoj peremennoj tajmera, ustanavlivaemoj s pomoshch'yu sis-
temnoj funkcii stime i korrektiruemoj raz v sekundu, hranitsya kalendarnoe
vremya.
V nastoyashchej glave byl opisan osnovnoj algoritm dispetcherizacii processov
v sisteme UNIX. S kazhdym processom v sisteme svyazyvaetsya prioritet planiro-
vaniya, znachenie kotorogo poyavlyaetsya v moment perehoda processa v sostoyanie
priostanova i periodicheski korrektiruetsya programmoj obrabotki preryvanij po
tajmeru. Prioritet, prisvaivaemyj processu v moment perehoda v sostoyanie
priostanova, imeet znachenie, zavisyashchee ot togo, kakoj iz algoritmov yadra is-
polnyalsya processom v etot moment. Znachenie prioriteta, prisvaivaemoe proces-
su vo vremya vypolneniya programmoj obrabotki preryvanij po tajmeru (ili v tot
moment, kogda process vozvrashchaetsya iz rezhima yadra v rezhim zadachi), zavisit
ot togo, skol'ko vremeni process zanimal CP: process poluchaet nizkij priori-
tet, esli on obrashchalsya k CP, i vysokij - v protivnom sluchae. Sistemnaya funk-
ciya nice daet processu vozmozhnost' vliyat' na sobstvennyj prioritet putem do-
bavleniya parametra, uchastvuyushchego v pereschete prioriteta.
250
V glave byli takzhe rassmotreny sistemnye funkcii, svyazannye s vremenem
vypolneniya sistemy i protekayushchih v nej processov: s ustanovkoj i polucheniem
sistemnogo vremeni, polucheniem vremeni vypolneniya processov i ustanovkoj
signalov "budil'nika". Krome togo, opisany funkcii programmy obrabotki pre-
ryvanij po tajmeru, kotoraya sledit za vremenem v sisteme, upravlyaet tablicej
otvetnyh signalov, sobiraet statistiku, a takzhe podgotavlivaet zapusk plani-
rovshchika processov, programmy podkachki i "sborshchika" stranic. Programma pod-
kachki i "sborshchik" stranic yavlyayutsya ob®ektami rassmotreniya v sleduyushchej glave.
1. Pri perevode processov v sostoyanie priostanova yadro naznachaet processu,
ozhidayushchemu snyatiya blokirovki s indeksa, bolee vysokij prioritet po
sravneniyu s processom, ozhidayushchim osvobozhdeniya bufera. Tochno tak zhe,
processy, ozhidayushchie vvoda s terminala, poluchayut bolee vysokij prioritet
po sravneniyu s processami, ozhidayushchimi vozmozhnosti proizvodit' vyvod na
terminal. Ob®yasnite prichiny takogo povedeniya yadra.
*2. V algoritme obrabotki preryvanij po tajmeru predusmotren pereschet prio-
ritetov i perezapusk processov na vypolnenie s intervalom v 1 sekundu.
Pridumajte algoritm, v kotorom interval perezapuska dinamicheski menyaet-
sya v zavisimosti ot stepeni zagruzki sistemy. Perevesit li vyigrysh usi-
liya po uslozhneniyu algoritma ?
3. V shestoj redakcii sistemy UNIX dlya rascheta prodolzhitel'nosti ICP teku-
shchim processom ispol'zuetsya sleduyushchaya formula:
decay(ICP) = max (porogovyj prioritet, ICP-10);
a v sed'moj redakcii:
decay(ICP) = .8 * ICP;
Prioritet processa v obeih redakciyah vychislyaetsya po formule:
prioritet = ICP/16 + (bazovyj uroven' prioriteta);
Povtorite primer na Risunke 8.4, ispol'zuya privedennye formuly.
4. Prodelajte eshche raz primer na Risunke 8.4 s sem'yu processami vmesto
treh, a zatem izmenite chastotu preryvanij po tajmeru s 60 na 100 prery-
vanij v sekundu. Prokommentirujte rezul'tat.
5. Razrabotajte shemu, v kotoroj sistema nakladyvaet ogranichenie na pro-
dolzhitel'nost' vypolneniya processa, pri prevyshenii kotorogo process za-
vershaetsya. Kakim obrazom pol'zovatel' dolzhen otlichat' takoj process ot
processov, dlya kotoryh ne dolzhny sushchestvovat' podobnye ogranicheniya ?
Kakim obrazom dolzhna rabotat' shema, esli edinstvennym usloviem yavlyaet-
sya ee zapusk iz shell'a ?
6. Kogda process vypolnyaet sistemnuyu funkciyu wait i obnaruzhivaet prekra-
tivshego sushchestvovanie potomka, yadro priplyusovyvaet k ego ICP znachenie
polya ICP potomka. CHem ob®yasnyaetsya takoe "nakazanie" processa-roditelya ?
7. Komanda nice zapuskaet posleduyushchuyu komandu s peredachej ej ukazannogo
znacheniya, naprimer:
nice 6 nroff -mm big_memo > output
Napishite na yazyke Si programmu, realizuyushchuyu komandu nice.
8. Prosledite na primere Risunka 8.4, kakim obrazom budet osushchestvlyat'sya
dispetcherizaciya processov v tom sluchae, esli znachenie, peredavaemoe
funkciej nice dlya processa A, ravno 5 ili -5.
9. Provedite eksperiment s sistemnoj funkciej renice x y, gde x - kod
identifikacii processa (aktivnogo), a y - novoe znachenie nice dlya uka-
zannogo processa.
10. Vernemsya k primeru, privedennomu na Risunke 8.6. Predpolozhim, chto grup-
pe, v kotoruyu vhodit process A, vydelyaetsya 33% processornogo vremeni, a
gruppe, v kotoruyu vhodit process B, - 66% processornogo vremeni. V ka-
koj posledovatel'nosti budut ispolnyat'sya processy ? Obobshchite algoritm
vychisleniya prioritetov takim obrazom, chtoby znachenie gruppovogo ICP us-
rednyalos'.
251
11. Vypolnite komandu date. Komanda bez argumentov vyvodit tekushchuyu datu:
ukazav argument, naprimer:
date mmddhhmmyy
(super)pol'zovatel' mozhet ustanovit' tekushchuyu datu v sisteme
(sootvetstvenno, mesyac, chislo, chasy, minuty i god). Tak,
date 0911205084
ustanavlivaet v kachestve tekushchego vremeni 11 sentyabrya 1984 goda 8:50
popoludni.
12. V programmah mozhno ispol'zovat' funkciyu pol'zovatel'skogo
urovnya sleep:
sleep(seconds);
s pomoshch'yu kotoroj vypolnenie programmy priostanavlivaetsya na ukazannoe
chislo sekund. Razrabotajte ee algoritm, v kotorom ispol'zujte sistemnye
funkcii alarm i pause. CHto proizojdet, esli process vyzovet funkciyu
alarm ran'she funkcii sleep ? Rassmotrite dve vozmozhnosti: 1) dejstvie
ranee vyzvannoj funkcii alarm istekaet v to vremya, kogda process naho-
ditsya v sostoyanii priostanova, 2) dejstvie ranee vyzvannoj funkcii
alarm istekaet posle zaversheniya funkcii sleep.
*13. Obratimsya eshche raz k poslednej probleme. YAdro mozhet vypolnit' pereklyuche-
nie konteksta vo vremya ispolneniya funkcii sleep mezhdu vyzovami alarm i
pause. Togda est' opasnost', chto process poluchit signal alarm do togo,
kak vyzovet funkciyu pause. CHto proizojdet v etom sluchae ? Kak vovremya
raspoznat' etu situaciyu ?
252
Last-modified: Thu, 12 Feb 1998 07:20:11 GMT