Moris Dzh. Bah. Arhitektura operacionnoj sistemy Unix
THE DESIGN OF THE UNIX OPERATING SYSTEM by Maurice J. Bach
(Perevod s anglijskogo k.t.n. Kryukova A.V.)
Copyright c 1986 Korporaciya Bell Telephone Laboratories.
Izdano korporaciej Prentice-Hall.
Otdelenie Simon & Schuster
|nglvud Kliffs, N'yu-Dzhersi 07632
Seriya knig po programmnomu obespecheniyu izdatel'stva Prentice Hall.
Konsul'tant Brajan V. Kernigan
Nastoyashchee izdanie prednaznacheno dlya rasprostraneniya v teh
stranah, kotorye poluchili na eto pravo ot korporacii
Prentice-Hall International. Ne podlezhit vyvozu i rasprostraneniyu
v SSHA, Meksike i Kanade.
UNIX - zaregistrirovannaya torgovaya marka korporacii AT&T.
DEC, PDP i VAX - torgovye marki korporacii Digital Equipment
Corp. Series 32000 - torgovaya marka korporacii National
Semiconductor Corp. Ada - zaregistrirovannaya torgovaya marka pra-
vitel'stva SSHA (Ada Joint Program Office). UNIVAC - torgovaya mar-
ka korporacii Sperry Corp.
Nastoyashchij dokument nabran na fotonabornom ustrojstve APS-5
korporacii AUTOLOGIC s pomoshch'yu formatera TROFF v operacionnoj
srede UNIX |VM AT&T 3B20.
V processe podgotovki knigi ee avtorom i izdatelem bylo pri-
lozheno nemalo usilij. |ti usiliya byli svyazany s provedeniem teo-
reticheskih razrabotok i issledovanij i s vsestoronnej proverkoj
dejstvennosti teoreticheskih vykladok i programm. Avtor i izdatel'
ne dayut nikakih garantij, kak yasno vyrazhennyh, tak i podrazumeva-
yushchihsya, otnositel'no vklyuchennyh v knigu programm i dokumentacii.
Avtor i izdatel' ne otvechayut za sluchajnye ili proizvodnye nepo-
ladki, voznikayushchie v svyazi ili v rezul'tate ustanovki, vypolneniya
ili ispol'zovaniya etih programm.
Vse prava sohranyayutsya. Zapreshchaetsya vosproizvedenie otdel'nyh
chastej knigi bez pis'mennogo razresheniya izdatelya.
Otpechatano v Soedinennyh SHtatah Ameriki.
10 9 8 7 6 5
ISBN 0-13-201757-1 025
Prentice-Hall International (UK) Limited, London
Prentice-Hall of Australia Pty. Limited, Sidnej
Prentice-Hall Canada Inc., Toronto
Prentice-Hall Hispanoamericana, S.A., Mehiko
Prentice-Hall of India Private Limited, N'yu-Deli
Prentice-Hall of Japan, Inc., Tokio
Prentice-Hall of Southeast Asia Pte. Ltd., Singapur
Editora Prentice-Hall do Brasil, Ltda., Rio-de-ZHanejro
Prentice-Hall, Inc., |nglvud Kliffs, N'yu-Dzhersi
Vpervye sistema UNIX byla opisana v 1974 godu v stat'e Kena Tompsona i
Dennisa Richi v zhurnale "Communications of the ACM" [Thompson 74]. S etogo
vremeni ona poluchila shirokoe rasprostranenie i zavoevala shirokuyu populyar-
nost' sredi proizvoditelej |VM, kotorye vse chashche stali osnashchat' eyu svoi ma-
shiny. Osoboj populyarnost'yu ona pol'zuetsya v universitetah, gde dovol'no chas-
to uchastvuet v issledovatel'skom i uchebnom processe.
Mnozhestvo knig i statej posvyashcheno opisaniyu otdel'nyh chastej sistemy;
sredi nih dva special'nyh vypuska "Bell System Technical Journal" za 1978
god [BSTJ 78] i za 1984 god [BSTJ 84]. Vo mnogih knigah opisyvaetsya pol'zo-
vatel'skij interfejs, v chastnosti ispol'zovanie elektronnoj pochty, podgotov-
ka dokumentacii, rabota s komandnym processorom Shell; v nekotoryh knigah,
takih kak "The UNIX Programming Environment" [Kernighan 84] i "Advanced UNIX
Programming" [Rochkind 85], opisyvaetsya programmnyj interfejs. Nastoyashchaya
kniga posvyashchena opisaniyu vnutrennih algoritmov i struktur, sostavlyayushchih os-
novu operacionnoj sistemy (t.n. "yadro"), i ob座asneniyu ih vzaimosvyazi s prog-
rammnym interfejsom. Takim obrazom, ona budet polezna dlya rabotayushchih v raz-
lichnyh operacionnyh sredah. Vo-pervyh, ona mozhet ispol'zovat'sya v kachestve
uchebnogo posobiya po kursu "Operacionnye sistemy" kak dlya studentov posledne-
go kursa, tak i dlya aspirantov pervogo goda obucheniya. Pri rabote s knigoj
bylo by gorazdo poleznee obrashchat'sya neposredstvenno k ishodnomu tekstu sis-
temnyh programm, no knigu mozhno chitat' i nezavisimo ot nego. Vo-vtoryh, eta
kniga mozhet sluzhit' v kachestve spravochnogo rukovodstva dlya sistemnyh prog-
rammistov, iz kotorogo poslednie mogli by luchshe uyasnit' sebe mehanizm raboty
yadra operacionnoj sistemy i sravnit' mezhdu soboj algoritmy, ispol'zuemye v
UNIX, i algoritmy, ispol'zuemye v drugih operacionnyh sistemah. Nakonec,
programmisty, rabotayushchie v srede UNIX, mogut uglubit' svoe ponimanie meha-
nizma vzaimodejstviya programm s operacionnoj sistemoj i posredstvom etogo
prijti k napisaniyu bolee effektivnyh i sovershennyh programm.
Soderzhanie i poryadok postroeniya materiala v knige sootvetstvuyut kursu
lekcij, podgotovlennomu i prochitannomu mnoj dlya sotrudnikov firmy Bell
Laboratories, vhodyashchej v sostav korporacii AT&T, mezhdu 1983 i 1984 gg. Nes-
motrya na to, chto glavnoe vnimanie v kurse lekcij obrashchalos' na ishodnyj
tekst sistemnyh programm, ya obnaruzhil, chto ponimanie ishodnogo teksta obleg-
chaetsya, esli pol'zovatel' imeet predstavlenie o sistemnyh algoritmah. V kni-
ge ya pytalsya izlozhit' opisanie algoritmov kak mozhno proshche, chtoby i v malom
otrazit' prostotu i izyashchestvo rassmatrivaemoj operacionnoj sistemy. Takim
obrazom, kniga predstavlyaet soboj ne tol'ko podrobnoe istolkovanie osoben-
nostej sistemy na anglijskom yazyke; eto izobrazhenie obshchego mehanizma raboty
razlichnyh algoritmov, i chto gorazdo vazhnee, eto otrazhenie processa ih vzai-
modejstviya mezhdu soboj. Algoritmy predstavleny na psevdokode, pohozhem na
yazyk Si, poskol'ku chitatelyu legche vosprinimat' opisanie na estestvennom yazy-
ke; naimenovaniya algoritmov sootvetstvuyut imenam procedur, sostavlyayushchih yadro
operacionnoj sistemy. Risunki opisyvayut vzaimodejstvie razlichnyh informaci-
onnyh struktur pod upravleniem operacionnoj sistemy. V poslednih glavah mno-
gie sistemnye ponyatiya illyustriruyutsya s pomoshch'yu nebol'shih programm na yazyke
Si. V celyah ekonomii mesta i obespecheniya yasnosti izlozheniya iz etih primerov
isklyuchen kontrol' vozniknoveniya oshibok, kotoryj obychno predusmatrivaetsya pri
napisanii programm. |ti primery progonyalis' mnoyu pod upravleniem versii V;
za isklyucheniem programm, illyustriruyushchih osobennosti, prisushchie versii V, ih
mozhno vypolnyat' pod upravleniem drugih versij operacionnoj sistemy.
Bol'shoe chislo uprazhnenij, podgotovlennyh pervonachal'no dlya kursa lekcij,
privedeno v konce kazhdoj glavy, oni sostavlyayut klyuchevuyu chast' knigi. Otdel'-
nye uprazhneniya, illyustriruyushchie osnovnye ponyatiya, razmeshcheny neposredstvenno v
tekste knigi. Drugaya chast' uprazhnenij otlichaetsya bol'shej slozhnost'yu, pos-
kol'ku ih prednaznachenie sostoit v tom, chtoby pomoch' chitatelyu uglubit' svoe
ponimanie osobennostej sistemy. I, nakonec, chast' uprazhnenij yavlyaetsya po
3
prirode issledovatel'skoj, prednaznachennoj dlya izucheniya otdel'nyh problem.
Uprazhneniya povyshennoj slozhnosti pomecheny zvezdochkami.
Sistemnoe opisanie baziruetsya na osobennostyah operacionnoj sistemy UNIX
versiya V redakciya 2, rasprostraneniem kotoroj zanimaetsya korporaciya AT&T, s
uchetom otdel'nyh osobennostej redakcii 3. |to ta sistema, s kotoroj ya naibo-
lee znakom, odnako ya postaralsya otrazit' i interesnye detali drugih razno-
vidnostej operacionnyh sistem, v chastnosti sistem, rasprostranyaemyh cherez
"Berkeley Software Distribution" (BSD). YA ne kasalsya voprosov, svyazannyh s
harakteristikami otdel'nyh apparatnyh sredstv, starayas' tol'ko v obshchih cher-
tah ohvatit' process vzaimodejstviya yadra operacionnoj sistemy s apparatnymi
sredstvami i ignoriruya harakternye osobennosti fizicheskoj konfiguracii. Tem
ne menee, tam, gde voprosy, svyazannye s mashinnymi osobennostyami, predstavi-
lis' mne vazhnymi s tochki zreniya ponimaniya mehanizma funkcionirovaniya yadra,
okazalos' umestnym i uglublenie v detali. Po krajnej mere, beglyj prosmotr
zatronutyh v knige voprosov yasno ukazyvaet te sostavnye chasti operacionnoj
sistemy, kotorye yavlyayutsya naibolee mashinno-zavisimymi.
Obshchenie s knigoj predpolagaet nalichie u chitatelya opyta programmirovaniya
na odnom iz yazykov vysokogo urovnya i zhelatel'no na yazyke assemblera. CHitate-
lyu rekomenduetsya priobresti opyt raboty s operacionnoj sistemoj UNIX i poz-
nakomit'sya s yazykom programmirovaniya Si [Kernighan 78]. Tem ne menee, ya sta-
ralsya izlozhit' material v knige takim obrazom, chtoby chitatel' smog ovladet'
im dazhe pri otsutstvii trebuemyh navykov. V prilozhenii k knige privedeno
kratkoe opisanie obrashchenij k operacionnoj sisteme, kotorogo budet dostatochno
dlya togo, chtoby poluchit' predstavlenie o soderzhanii knigi, no kotoroe ne mo-
zhet sluzhit' v kachestve polnogo spravochnogo rukovodstva.
Material v knige postroen sleduyushchim obrazom. Glava 1 sluzhit vvedeniem,
soderzhashchim kratkoe, obshchee opisanie sistemnyh osobennostej s tochki zreniya
pol'zovatelya i ob座asnyayushchim strukturu sistemy. V glave 2 daetsya obshchee preds-
tavlenie ob arhitekture yadra i poyasnyayutsya nekotorye osnovnye ponyatiya. V os-
tal'noj chasti knigi osveshchayutsya voprosy, svyazannye s obshchej arhitekturoj sis-
temy i opisaniem ee razlichnyh komponent kak blokov edinoj konstrukcii. V nej
mozhno vydelit' tri razdela: fajlovaya sistema, upravlenie processami i vopro-
sy, svyazannye s razvitiem. Fajlovaya sistema predstavlena pervoj, poskol'ku
ee ponimanie legche po sravneniyu s upravleniem processami. Tak, glava 3 pos-
vyashchena opisaniyu mehanizma funkcionirovaniya sistemnogo bufera sverhoperativ-
noj pamyati (kesha), sostavlyayushchego osnovu fajlovoj sistemy. Glava 4 opisyvaet
informacionnye struktury i algoritmy, ispol'zuemye fajlovoj sistemoj. V etih
algoritmah ispol'zuyutsya metody, ob座asnyaemye v glave 3, dlya vedeniya vnutren-
nej "buhgalterii", neobhodimoj dlya upravleniya pol'zovatel'skimi fajlami.
Glava 5 posvyashchena opisaniyu obrashchenij k operacionnoj sisteme, obsluzhivayushchih
interfejs pol'zovatelya s fajlovoj sistemoj; dlya obespecheniya dostupa k pol'-
zovatel'skim fajlam ispol'zuyutsya algoritmy glavy 4.
Osnovnoe vnimanie v glave 6 udelyaetsya upravleniyu processami. V nej opre-
delyaetsya ponyatie konteksta processa i issleduyutsya vnutrennie sostavlyayushchie
yadra operacionnoj sistemy, upravlyayushchie kontekstom processa. V chastnosti,
rassmatrivaetsya obrashchenie k operacionnoj sisteme, obrabotka preryvanij i pe-
reklyuchenie konteksta. V glave 7 analiziruyutsya te sistemnye operacii, kotorye
upravlyayut kontekstom processa. Glava 8 kasaetsya planirovaniya processov, gla-
va 9 - raspredeleniya pamyati, vklyuchaya sistemy podkachki i zameshcheniya stranic.
V glave 10 daetsya obzor obshchih osobennostej vzaimodejstviya, kotoroe obes-
pechivayut drajvery ustrojstv, osoboe vnimanie udelyaetsya diskovym i terminal'-
nym drajveram. Nesmotrya na to, chto ustrojstva logicheski vhodyat v sostav faj-
lovoj sistemy, ih rassmotrenie do etogo momenta otkladyvalos' v svyazi s voz-
niknoveniem voprosov, svyazannyh s upravleniem processami, pri obsuzhdenii
terminal'nyh drajverov. |ta glava takzhe sluzhit mostikom k voprosam, svyazan-
nym s razvitiem sistemy, kotorye rassmatrivayutsya v konce knigi. Glava 11 ka-
saetsya vzaimodejstviya processov i organizacii setej, v tom chisle soobshchenij,
ispol'zuemyh v versii V, razdeleniya pamyati, semaforov i paketov BSD. Glava
12 soderzhit kompaktnoe izlozhenie osobennostej dvuhprocessornoj sistemy UNIX,
4
v glave 13 issleduyutsya dvuhmashinnye raspredelennye vychislitel'nye sistemy.
Material, predstavlennyj v pervyh devyati glavah, mozhet byt' prochitan v
processe izucheniya kursa "Operacionnye sistemy" v techenie odnogo semestra,
material ostal'nyh glav sleduet izuchat' na operezhayushchih seminarah s paral-
lel'nym vypolneniem prakticheskih zadanij.
Teper' mne by hotelos' predupredit' chitatelya o sleduyushchem. YA ne pytalsya
ocenit' proizvoditel'nost' sistemy v absolyutnom vyrazhenii, ne kasalsya i pa-
rametrov konfiguracii, neobhodimyh dlya installyacii sistemy. |ti dannye menya-
yutsya v zavisimosti ot tipa mashiny, konfiguracii kompleksa tehnicheskih sred-
stv, versii i realizacii sistemy, sostava zadach. Krome togo, ya soznatel'no
izbegal lyubyh predskazanij po povodu dal'nejshego razvitiya operacionnoj sis-
temy UNIX. Izlozhenie voprosov, svyazannyh s razvitiem, ne podkrepleno obyaza-
tel'stvom korporacii AT&T obespechit' sootvetstvuyushchie harakteristiki, dazhe ne
garantiruetsya to, chto sootvetstvuyushchie oblasti yavlyayutsya ob容ktom issledova-
niya.
Mne priyatno vyrazit' blagodarnost' mnogim druz'yam i kollegam za pomoshch'
pri napisanii etoj knigi i za konstruktivnye kriticheskie zamechaniya, vyska-
zannye pri oznakomlenii s rukopis'yu. YA dolzhen vyrazit' glubochajshuyu prizna-
tel'nost' YAnu Dzhonstonu, kotoryj posovetoval mne napisat' etu knigu, okazal
mne podderzhku na nachal'nom etape i prosmotrel nabrosok pervyh glav. YAn otk-
ryl mne mnogie sekrety remesla i ya vsegda budu v dolgu pered nim. Doris Ra-
jan takzhe podderzhivala menya s samogo nachala, i ya vsegda budu cenit' ee dob-
rotu i vnimatel'nost'. Dennis Richi dobrovol'no otvetil na mnogochislennye
voprosy, kasayushchiesya istoricheskogo i tehnicheskogo aspektov sistemy. Mnozhestvo
lyudej pozhertvovali svoim vremenem i silami na oznakomlenie s variantami ru-
kopisi, poyavlenie etoj knigi vo mnogom obyazano vyskazannym imi podrobnym za-
mechaniyam. Sredi nih Debbi Bech, Dug Bajer, Lenni Brendvejn, Stiv Baroff, Tom
Batler, Ron Gomes, Mesat Gandak, Laura Izrejel, Din Dzhegels, Kejt Kelleman,
Brajan Kernigan, Bob Martin, Bob Mitc, Dejv Novic, Majkl Poppers, Merilin
Sefran, Kurt SHimmel', Zui Spitc, Tom Veden, Bill Veber, Lerri Ver i Bob Zer-
rou. Meri Frustak pomogala podgotovit' rukopis' k naboru. YA hotel by takzhe
poblagodarit' moe rukovodstvo za postoyannuyu podderzhku, kotoruyu ya oshchushchal na
vsem protyazhenii raboty,i kolleg za atmosferu, sposobstvovavshuyu mne v rabote,
i za zamechatel'nye usloviya, predostavlennye firmoj AT&T Bell Laboratories.
Dzhon Vejt i personal izdatel'stva Prentice-Hall okazali samuyu raznoobraznuyu
pomoshch' v pridanii knige ee okonchatel'nogo vida. Poslednej po spisku, no ne
po velichine yavilas' pomoshch' moej zheny, Debbi, okazavshej mne emocional'nuyu
podderzhku, bez kotoroj ya by ne dostig uspeha.
5
GLAVA 1
OBSHCHIJ OBZOR OSOBENNOSTEJ SISTEMY
Za vremya, proshedshee s momenta ee poyavleniya v 1969 godu, sistema UNIX
stala dovol'no populyarnoj i poluchila rasprostranenie na mashinah s razlichnoj
moshchnost'yu obrabotki, ot mikroprocessorov do bol'shih |VM, obespechivaya na nih
obshchie usloviya vypolneniya programm. Sistema delitsya na dve chasti. Odnu chast'
sostavlyayut programmy i servisnye funkcii, to, chto delaet operacionnuyu sredu
UNIX takoj populyarnoj; eta chast' legko dostupna pol'zovatelyam, ona vklyuchaet
takie programmy, kak komandnyj processor, obmen soobshcheniyami, pakety obrabot-
ki tekstov i sistemy obrabotki ishodnyh tekstov programm. Drugaya chast' vklyu-
chaet v sebya sobstvenno operacionnuyu sistemu, podderzhivayushchuyu eti programmy i
funkcii. V etoj knige daetsya detal'noe opisanie sobstvenno operacionnoj sis-
temy. Osnovnoe vnimanie koncentriruetsya na opisanii sistemy UNIX versii V,
rasprostraneniem kotoroj zanimaetsya korporaciya AT&T, pri etom rassmatrivayut-
sya interesnye osobennosti i drugih versij. Privodyatsya osnovnye informacion-
nye struktury i algoritmy, ispol'zuemye v operacionnoj sisteme i v konechnom
itoge sozdayushchie usloviya dlya funkcionirovaniya standartnogo pol'zovatel'skogo
interfejsa.
Dannaya glava sluzhit vvedeniem v sistemu UNIX. V nej delaetsya obzor isto-
rii ee sozdaniya i namechayutsya kontury obshchej struktury sistemy. V sleduyushchej
glave soderzhitsya bolee detal'naya vvodnaya informaciya po operacionnoj sisteme.
V 1965 godu firma Bell Telephone Laboratories, ob容diniv svoi usiliya s
kompaniej General Electric i proektom MAC Massachusetskogo tehnologicheskogo
instituta, pristupili k razrabotke novoj operacionnoj sistemy, poluchivshej
nazvanie Multics [Organick 72]. Pered sistemoj Multics byli postavleny zada-
chi - obespechit' odnovremennyj dostup k resursam |VM bol'shogo kolichestva
pol'zovatelej, obespechit' dostatochnuyu skorost' vychislenij i hranenie dannyh
i dat' vozmozhnost' pol'zovatelyam v sluchae neobhodimosti sovmestno ispol'zo-
vat' dannye. Mnogie razrabotchiki, vposledstvii prinyavshie uchastie v sozdanii
rannih redakcij sistemy UNIX, uchastvovali v rabote nad sistemoj Multics v
firme Bell Laboratories. Hotya pervaya versiya sistemy Multics i byla zapushchena
v 1969 godu na |VM GE 645, ona ne obespechivala vypolnenie glavnyh vychisli-
tel'nyh zadach, dlya resheniya kotoryh ona prednaznachalas', i ne bylo dazhe yasno,
kogda celi razrabotki budut dostignuty. Poetomu firma Bell Laboratories
prekratila svoe uchastie v proekte.
Po okonchanii raboty nad proektom Multics sotrudniki Issledovatel'skogo
centra po informatike firmy Bell Laboratories ostalis' bez "dostatochno inte-
raktivnogo vychislitel'nogo sredstva" [Ritchie 84a]. Pytayas' usovershenstvo-
vat' sredu programmirovaniya, Ken Tompson, Dennis Richi i drugie nabrosali na
bumage proekt fajlovoj sistemy, poluchivshij pozdnee dal'nejshee razvitie v
rannej versii fajlovoj sistemy UNIX. Tompsonom byli napisany programmy, imi-
tiruyushchie povedenie predlozhennoj fajlovoj sistemy v rezhime podkachki dannyh po
zaprosu, im bylo dazhe sozdano prostejshee yadro operacionnoj sistemy dlya |VM
GE 645. V to zhe vremya on napisal na Fortrane igrovuyu programmu "Space
Travel" ("Kosmicheskoe puteshestvie") dlya sistemy GECOS (Honeywell 635), no
programma ne smogla udovletvorit' pol'zovatelej, poskol'ku upravlyat' "kosmi-
cheskim korablem" okazalos' slozhno, krome togo, pri zagruzke programma zani-
mala mnogo mesta. Pozzhe Tompson obnaruzhil maloispol'zuemyj komp'yuter PDP-7,
osnashchennyj horoshim graficheskim displeem i imeyushchij deshevoe mashinnoe vremya.
Sozdavaya programmu "Kosmicheskoe puteshestvie" dlya PDP-7, Tompson poluchil voz-
mozhnost' izuchit' mashinu, odnako usloviya razrabotki programm potrebovali is-
6
pol'zovaniya kross-assemblera dlya translyacii programmy na mashine s sistemoj
GECOS i ispol'zovaniya perfolenty dlya vvoda v PDP-7. Dlya togo, chtoby uluchshit'
usloviya razrabotki, Tompson i Richi vypolnili na PDP-7 svoj proekt sistemy,
vklyuchivshij pervuyu versiyu fajlovoj sistemy UNIX, podsistemu upravleniya pro-
cessami i nebol'shoj nabor utilit. V konce koncov, novaya sistema bol'she ne
nuzhdalas' v podderzhke so storony sistemy GECOS v kachestve operacionnoj sredy
razrabotki i mogla podderzhivat' sebya sama. Novaya sistema poluchila nazvanie
UNIX, po shodstvu s Multics ego pridumal eshche odin sotrudnik Issledovatel'-
skogo centra po informatike Brajan Kernigan.
Nesmotrya na to, chto eta rannyaya versiya sistemy UNIX uzhe byla mnogoobeshchayu-
shchej, ona ne mogla realizovat' svoj potencial do teh por, poka ne poluchila
primenenie v real'nom proekte. Tak, dlya togo, chtoby obespechit' funkcioniro-
vanie sistemy obrabotki tekstov dlya patentnogo otdela firmy Bell
Laboratories, v 1971 godu sistema UNIX byla perenesena na |VM PDP-11. Siste-
ma otlichalas' nebol'shim ob容mom: 16 Kbajt dlya sistemy, 8 Kbajt dlya programm
pol'zovatelej, obsluzhivala disk ob容mom 512 Kbajt i otvodila pod kazhdyj fajl
ne bolee 64 Kbajt. Posle svoego pervogo uspeha Tompson sobralsya bylo napi-
sat' dlya novoj sistemy translyator s Fortrana, no vmesto etogo zanyalsya yazykom
Bi (B), predshestvennikom kotorogo yavilsya yazyk BCPL [Richards 69]. Bi byl in-
terpretiruemym yazykom so vsemi nedostatkami, prisushchimi podobnym yazykam, poe-
tomu Richi peredelal ego v novuyu raznovidnost', poluchivshuyu nazvanie Si (C) i
razreshayushchuyu generirovat' mashinnyj kod, ob座avlyat' tipy dannyh i opredelyat'
strukturu dannyh. V 1973 godu sistema byla napisana zanovo na Si, eto byl
shag, neslyhannyj dlya togo vremeni, no imevshij ogromnyj rezonans sredi sto-
ronnih pol'zovatelej. Kolichestvo mashin firmy Bell Laboratories, na kotoryh
byla installirovana sistema, vozroslo do 25, v rezul'tate chego byla sozdana
gruppa po sistemnomu soprovozhdeniyu UNIX vnutri firmy.
V to vremya korporaciya AT&T ne mogla zanimat'sya prodazhej komp'yuternyh
produktov v svyazi s sootvetstvuyushchim soglasheniem, podpisannym eyu s federal'-
nym pravitel'stvom v 1956 godu, i rasprostranyala sistemu UNIX sredi univer-
sitetov, kotorym ona byla nuzhna v uchebnyh celyah. Sleduya bukve soglasheniya,
korporaciya AT&T ne reklamirovala, ne prodavala i ne soprovozhdala sistemu.
Nesmotrya na eto, populyarnost' sistemy ustojchivo rosla. V 1974 godu Tompson i
Richi opublikovali stat'yu, opisyvayushchuyu sistemu UNIX, v zhurnale Communications
of the ACM [Thompson 74], chto dalo eshche odin impul's k rasprostraneniyu siste-
my. K 1977 godu kolichestvo mashin, na kotoryh funkcionirovala sistema UNIX,
uvelichilos' do 500, pri chem 125 iz nih rabotali v universitetah. Sistema
UNIX zavoevala populyarnost' sredi telefonnyh kompanij, poskol'ku obespechiva-
la horoshie usloviya dlya razrabotki programm, obsluzhivala rabotu v seti v re-
zhime dialoga i rabotu v real'nom masshtabe vremeni (s pomoshch'yu sistemy MERT
[Lycklama 78a]). Pomimo universitetov, licenzii na sistemu UNIX byli pereda-
ny kommercheskim organizaciyam. V 1977 godu korporaciya Interactive Systems
stala pervoj organizaciej, poluchivshej prava na pereprodazhu sistemy UNIX s
nadbavkoj k cene za dopolnitel'nye uslugi (*), kotorye zaklyuchalis' v adapta-
cii sistemy k funkcionirovaniyu v avtomatizirovannyh sistemah upravleniya uch-
rezhdencheskoj deyatel'nost'yu. 1977 god takzhe byl otmechen "perenosom" sistemy
UNIX na mashinu, otlichnuyu ot PDP (blagodarya chemu stal vozmozhen zapusk sistemy
na drugoj mashine bez izmenenij ili s nebol'shimi izmeneniyami), a imenno na
Interdata 8/32.
S rostom populyarnosti mikroprocessorov drugie kompanii stali perenosit'
sistemu UNIX na novye mashiny, odnako ee prostota i yasnost' pobudili mnogih
razrabotchikov k samostoyatel'nomu razvitiyu sistemy, v rezul'tate chego bylo
---------------------------
(*) Organizacii, poluchivshie prava na pereprodazhu s nadbavkoj k cene za do-
polnitel'nye uslugi, osnashchayut vychislitel'nuyu sistemu prikladnymi prog-
rammami, kasayushchimisya konkretnyh oblastej primeneniya, stremyas' udovlet-
vorit' trebovaniya rynka. Takie organizacii chashche prodayut prikladnye
programmy, nezheli operacionnye sistemy, pod upravleniem kotoryh eti
programmy rabotayut.
7
sozdano neskol'ko variantov bazisnoj sistemy. Za period mezhdu 1977 i 1982
godom firma Bell Laboratories ob容dinila neskol'ko variantov, razrabotannyh
v korporacii AT&T, v odin, poluchivshij kommercheskoe nazvanie UNIX versiya III.
V dal'nejshem firma Bell Laboratories dobavila v versiyu III neskol'ko novyh
osobennostej, nazvav novyj produkt UNIX versiya V (**), i eta versiya stala
oficial'no rasprostranyat'sya korporaciej AT&T s yanvarya 1983 goda. V to zhe
vremya sotrudniki Kalifornijskogo universiteta v Berkli razrabotali variant
sistemy UNIX, poluchivshij nazvanie BSD 4.3 dlya mashin serii VAX i otlichayushchijsya
nekotorymi novymi, interesnymi osobennostyami. Osnovnoe vnimanie v etoj knige
koncentriruetsya na opisanii sistemy UNIX versii V, odnako vremya ot vremeni
my budem kasat'sya i osobennostej sistemy BSD.
K nachalu 1984 goda sistema UNIX byla uzhe installirovana priblizitel'no
na 100000 mashin po vsemu miru, pri chem na mashinah s shirokim diapazonom vy-
chislitel'nyh vozmozhnostej - ot mikroprocessorov do bol'shih |VM - i raznyh
izgotovitelej. Ni o kakoj drugoj operacionnoj sisteme nel'zya bylo by skazat'
togo zhe. Populyarnost' i uspeh sistemy UNIX ob座asnyalis' neskol'kimi prichina-
mi:
* Sistema napisana na yazyke vysokogo urovnya, blagodarya chemu ee legko chitat',
ponimat', izmenyat' i perenosit' na drugie mashiny. Po ocenkam, sdelannym
Richi, pervyj variant sistemy na Si imel na 20-40 % bol'shij ob容m i rabotal
medlennee po sravneniyu s variantom na assemblere, odnako preimushchestva is-
pol'zovaniya yazyka vysokogo urovnya namnogo pereveshivayut nedostatki (sm.
[Ritchie 78b], str. 1965).
* Nalichie dovol'no prostogo pol'zovatel'skogo interfejsa, v kotorom imeetsya
vozmozhnost' predostavlyat' vse neobhodimye pol'zovatelyu uslugi.
* Nalichie elementarnyh sredstv, pozvolyayushchih sozdavat' slozhnye programmy iz
bolee prostyh.
* Nalichie ierarhicheskoj fajlovoj sistemy, legkoj v soprovozhdenii i effektiv-
noj v rabote.
* Obespechenie soglasovaniya formatov v fajlah, rabota s posledovatel'nym po-
tokom bajtov, blagodarya chemu oblegchaetsya chtenie prikladnyh programm.
* Nalichie prostogo, posledovatel'nogo interfejsa s periferijnymi ustrojstva-
mi.
* Sistema yavlyaetsya mnogopol'zovatel'skoj, mnogozadachnoj; kazhdyj pol'zovatel'
mozhet odnovremenno vypolnyat' neskol'ko processov.
* Arhitektura mashiny skryta ot pol'zovatelya, blagodarya etomu oblegchen pro-
cess napisaniya programm, rabotayushchih na razlichnyh konfiguraciyah apparatnyh
sredstv.
Prostota i posledovatel'nost' voobshche otlichayut sistemu UNIX i ob座asnyayut
bol'shinstvo iz vysheprivedennyh dovodov v ee pol'zu.
Hotya operacionnaya sistema i bol'shinstvo komand napisany na Si, sistema
UNIX podderzhivaet ryad drugih yazykov, takih kak Fortran, Bejsik, Paskal',
Ada, Kobol, Lisp i Prolog. Sistema UNIX mozhet podderzhivat' lyuboj yazyk prog-
rammirovaniya, dlya kotorogo imeetsya kompilyator ili interpretator, i obespechi-
vat' sistemnyj interfejs, ustanavlivayushchij sootvetstvie mezhdu pol'zovatel'-
skimi zaprosami k operacionnoj sisteme i naborom zaprosov, prinyatyh v UNIX.
Na Risunke 1.1 izobrazhena arhitektura verhnego urovnya sistemy UNIX. Teh-
nicheskie sredstva, pokazannye v centre diagrammy, vypolnyayut funkcii, obespe-
chivayushchie funkcionirovanie operacionnoj sistemy i perechislennye v razdele
1.5. Operacionnaya sistema vzaimodejstvuet s apparaturoj neposredstvenno
---------------------------
(**) A chto zhe versiya IV ? Modifikaciya vnutrennego varianta sistemy poluchila
nazvanie "versiya V".
8
(***), obespechivaya obsluzhivanie programm i ih nezavisimost' ot detalej appa-
ratnoj konfiguracii. Esli predstavit' sistemu sostoyashchej iz plastov, v nej
mozhno vydelit' sistemnoe yadro, izolirovannoe ot pol'zovatel'skih
+---------+----------------------------------+
| | Drugie prikladnye programmy |
| +----+-------+--------+-------+----+ |
| | srr| nroff | sh | who | | |
| | +-------+--------+-------+ a. | |
| +----+ YAdro |out | |
| | | +--------------+ | | |
| |comr| | | +----+ |
| | | | Tehnicheskie | | | |
| cc +----+ | | |date| |
| | | | sredstva | | | |
| | as | | | +----+ |
| | | +--------------+ | | |
| +----+ | | |
| | +-------+--------+-------+ wc | |
| | ld | vi | ed | grep | | |
| +----+-------+--------+-------+----+ |
| | Drugie prikladnye programmy |
+---------+----------------------------------+
Risunok 1.1. Arhitektura sistemy UNIX
programm. Poskol'ku programmy ne zavisyat ot apparatury, ih legko perenosit'
iz odnoj sistemy UNIX v druguyu, funkcioniruyushchuyu na drugom komplekse tehni-
cheskih sredstv, esli tol'ko v etih programmah ne podrazumevaetsya rabota s
konkretnym oborudovaniem. Naprimer, programmy, raschitannye na opredelennyj
razmer mashinnogo slova, gorazdo trudnee perevodit' na drugie mashiny po srav-
neniyu s programmami, ne trebuyushchimi podobnyh ustanovlenij.
Programmy, podobnye komandnomu processoru shell i redaktoram (ed i vi) i
pokazannye na vneshnem po otnosheniyu k yadru sloe, vzaimodejstvuyut s yadrom pri
pomoshchi horosho opredelennogo nabora obrashchenij k operacionnoj sisteme. Obrashche-
niya k operacionnoj sisteme ponuzhdayut yadro k vypolneniyu razlichnyh operacij,
kotoryh trebuet vyzyvayushchaya programma, i obespechivayut obmen dannymi mezhdu yad-
rom i programmoj. Nekotorye iz programm, privedennyh na risunke, v standart-
nyh konfiguraciyah sistemy izvestny kak komandy, odnako na odnom urovne s ni-
mi mogut raspolagat'sya i dostupnye pol'zovatelyu programmy, takie kak prog-
ramma a.out, standartnoe imya dlya ispolnyaemogo fajla, sozdannogo kompilyatorom
s yazyka Si. Drugie prikladnye programmy raspolagayutsya vyshe ukazannyh prog-
ramm, na verhnem urovne, kak eto pokazano na risunke. Naprimer, standartnyj
kompilyator s yazyka Si, cc, raspolagaetsya na samom vneshnem sloe: on vyzyvaet
preprocessor dlya Si, assembler i zagruzchik (komponovshchik), t.e. otdel'nye
programmy predydushchego urovnya. Hotya na risunke privedena dvuhurovnevaya ierar-
hiya prikladnyh programm, pol'zovatel' mozhet rasshirit' ierarhicheskuyu struktu-
ru na stol'ko urovnej, skol'ko neobhodimo. V samom dele, stil' programmiro-
---------------------------
(***) V nekotoryh realizaciyah sistemy UNIX operacionnaya sistema vzaimodejst-
vuet s sobstvennoj operacionnoj sistemoj, kotoraya, v svoyu ochered',
vzaimodejstvuet s apparaturoj i vypolnyaet neobhodimye funkcii po obs-
luzhivaniyu sistemy. V takih realizaciyah dopuskaetsya installyaciya drugih
operacionnyh sistem s zagruzkoj pod ih upravleniem prikladnyh programm
parallel'no s sistemoj UNIX. Klassicheskim primerom podobnoj realizacii
yavilas' sistema MERT [Lycklama 78a]. Bolee novym primerom mogut slu-
zhit' realizacii dlya komp'yuterov serii IBM 370 [Felton 84] i UNIVAC
1100 [Bodenstab 84].
9
vaniya, prinyatyj v sisteme UNIX, dopuskaet razrabotku kombinacii programm,
vypolnyayushchih odnu i tu zhe, obshchuyu zadachu.
Mnogie prikladnye podsistemy i programmy, sostavlyayushchie verhnij uroven'
sistemy, takie kak komandnyj processor shell, redaktory, SCCS (sistema obra-
botki ishodnyh tekstov programm) i pakety programm podgotovki dokumentacii,
postepenno stanovyatsya sinonimom ponyatiya "sistema UNIX". Odnako vse oni pol'-
zuyutsya uslugami programm nizhnih urovnej i v konechnom schete yadra s pomoshch'yu
nabora obrashchenij k operacionnoj sisteme. V versii V prinyato 64 tipa obrashche-
nij k operacionnoj sisteme, iz kotoryh nemnogim men'she poloviny ispol'zuyutsya
chasto. Oni imeyut neslozhnye parametry, chto oblegchaet ih ispol'zovanie, pre-
dostavlyaya pri etom bol'shie vozmozhnosti pol'zovatelyu. Nabor obrashchenij k ope-
racionnoj sisteme vmeste s realizuyushchimi ih vnutrennimi algoritmami sostavlya-
yut "telo" yadra, v svyazi s chem rassmotrenie operacionnoj sistemy UNIX v etoj
knige svoditsya k podrobnomu izucheniyu i analizu obrashchenij k sisteme i ih vza-
imodejstviya mezhdu soboj. Koroche govorya, yadro realizuet funkcii, na kotoryh
osnovyvaetsya vypolnenie vseh prikladnyh programm v sisteme UNIX, i im zhe op-
redelyayutsya eti funkcii. V knige chasto upotreblyayutsya terminy "sistema UNIX",
"yadro" ili "sistema", odnako pri etom imeetsya vvidu yadro operacionnoj siste-
my UNIX, chto i dolzhno vytekat' iz konteksta.
1.3 OBZOR S TOCHKI ZRENIYA POLXZOVATELYA
V etom razdele kratko rassmatrivayutsya glavnye detali sistemy UNIX, v
chastnosti fajlovaya sistema, sreda vypolneniya processov i elementy struktur-
nyh blokov (naprimer, kanaly). Podrobnoe issledovanie vzaimodejstviya etih
detalej s yadrom soderzhitsya v posleduyushchih glavah.
Fajlovaya sistema UNIX harakterizuetsya:
* ierarhicheskoj strukturoj,
* soglasovannoj obrabotkoj massivov dannyh,
* vozmozhnost'yu sozdaniya i udaleniya fajlov,
* dinamicheskim rasshireniem fajlov,
* zashchitoj informacii v fajlah,
* traktovkoj periferijnyh ustrojstv (takih kak terminaly i lentochnye us-
trojstva) kak fajlov.
Fajlovaya sistema organizovana v vide dereva s odnoj ishodnoj vershinoj,
kotoraya nazyvaetsya kornem (zapisyvaetsya: "/"); kazhdaya vershina v drevovidnoj
strukture fajlovoj sistemy, krome list'ev, yavlyaetsya katalogom fajlov, a faj-
/
+-------------+------------+---------+---------+---------+
| | | | | |
fsl bin etc usr unix dev
+-+-+ +---+---+ | +-+-+ +-+-+
| | | | | | | | | |
mjb maury sh date who passwd src bin tty00 tty01
|
|
cmd
+---+---+
| |
date.c who.c
Risunok 1.2. Primer drevovidnoj struktury fajlovoj sistemy
10
ly, sootvetstvuyushchie dochernim vershinam, yavlyayutsya libo katalogami, libo obych-
nymi fajlami, libo fajlami ustrojstv. Imeni fajla predshestvuet ukazanie puti
poiska, kotoryj opisyvaet mesto raspolozheniya fajla v ierarhicheskoj strukture
fajlovoj sistemy. Imya puti poiska sostoit iz komponent, razdelennyh mezhdu
soboj naklonnoj chertoj (/); kazhdaya komponenta
predstavlyaet soboj nabor simvolov, sostavlyayushchih imya vershiny (fajla), kotoroe
yavlyaetsya unikal'nym dlya kataloga (predydushchej komponenty), v kotorom ono so-
derzhitsya. Polnoe imya puti poiska nachinaetsya s ukazaniya naklonnoj cherty i
identificiruet fajl (vershinu), poisk kotorogo vedetsya ot kornevoj vershiny
dereva fajlovoj sistemy s obhodom teh vetvej dereva fajlov, kotorye sootvet-
stvuyut imenam otdel'nyh komponent. Tak, puti "/etc/passwd", "/bin/who" i
"/usr/src/cmd/who.c" ukazyvayut na fajly, yavlyayushchiesya vershinami dereva, izob-
razhennogo na Risunke 1.2, a puti "/bin/passwd" i "/usr/ src/date.c" soderzhat
nevernyj marshrut. Imya puti poiska neobyazatel'no dolzhno nachinat'sya s kornya, v
nem sleduet ukazyvat' marshrut otnositel'no tekushchego dlya vypolnyaemogo proces-
sa kataloga, pri etom predydushchie simvoly "naklonnaya cherta" v imeni puti
opuskayutsya. Tak, naprimer, esli my nahodimsya v kataloge "/dev", to put'
"tty01" ukazyvaet fajl, polnoe imya puti poiska dlya kotorogo "/dev
/tty01".
Programmy, vypolnyaemye pod upravleniem sistemy UNIX, ne soderzhat nikakoj
informacii otnositel'no vnutrennego formata, v kotorom yadro hranit fajly
dannyh, dannye v programmah predstavlyayutsya kak besformatnyj potok bajtov.
Programmy mogut interpretirovat' potok bajtov po svoemu zhelaniyu, pri etom
lyubaya interpretaciya nikak ne budet svyazana s fakticheskim sposobom hraneniya
dannyh v operacionnoj sisteme. Tak, sintaksicheskie pravila, opredelyayushchie za-
danie metoda dostupa k dannym v fajle, ustanavlivayutsya sistemoj i yavlyayutsya
edinymi dlya vseh programm, odnako semantika dannyh opredelyaetsya konkretnoj
programmoj. Naprimer, programma formatirovaniya teksta troff ishchet v konce
kazhdoj stroki teksta simvoly perehoda na novuyu stroku, a programma ucheta
sistemnyh resursov acctcom rabotaet s zapisyami fiksirovannoj dliny. Obe
programmy pol'zuyutsya odnimi i temi zhe sistemnymi sredstvami dlya osushchestvle-
niya dostupa k dannym v fajle kak k potoku bajtov, i vnutri sebya preobrazuyut
etot potok po sootvetstvuyushchemu formatu. Esli lyubaya iz programm obnaruzhit,
chto format dannyh neveren, ona prinimaet sootvetstvuyushchie mery.
Katalogi pohozhi na obychnye fajly v odnom otnoshenii; sistema predstavlyaet
informaciyu v kataloge naborom bajtov, no eta informaciya vklyuchaet v sebya ime-
na fajlov v kataloge v ob座avlennom formate dlya togo, chtoby operacionnaya sis-
tema i programmy, takie kak ls (vyvodit spisok imen i atributov fajlov),
mogli ih obnaruzhit'.
Prava dostupa k fajlu reguliruyutsya ustanovkoj special'nyh bitov razreshe-
niya dostupa, svyazannyh s fajlom. Ustanavlivaya bity razresheniya dostupa, mozhno
nezavisimo upravlyat' vydachej razreshenij na chtenie, zapis' i vypolnenie dlya
treh kategorij pol'zovatelej: vladel'ca fajla, gruppovogo pol'zovatelya i
prochih. Pol'zovateli mogut sozdavat' fajly, esli razreshen dostup k katalogu.
Vnov' sozdannye fajly stanovyatsya list'yami v drevovidnoj strukture fajlovoj
sistemy.
Dlya pol'zovatelya sistema UNIX traktuet ustrojstva tak, kak esli by oni
byli fajlami. Ustrojstva, dlya kotoryh naznacheny special'nye fajly ustrojstv,
stanovyatsya vershinami v strukture fajlovoj sistemy. Obrashchenie programm k ust-
rojstvam imeet tot zhe samyj sintaksis, chto i obrashchenie k obychnym fajlam; se-
mantika operacij chteniya i zapisi po otnosheniyu k ustrojstvam v bol'shoj stepe-
ni sovpadaet s semantikoj operacij chteniya i zapisi obychnyh fajlov. Sposob
zashchity ustrojstv sovpadaet so sposobom zashchity obychnyh fajlov: putem sootvet-
stvuyushchej ustanovki bitov razresheniya dostupa k nim (fajlam). Poskol'ku imena
ustrojstv vyglyadyat tak zhe, kak i imena obychnyh fajlov, i poskol'ku nad ust-
rojstvami i nad obychnymi fajlami vypolnyayutsya odni i te zhe operacii, bol'shin-
stvu programm net neobhodimosti razlichat' vnutri sebya tipy obrabatyvaemyh
fajlov.
11
Naprimer, rassmotrim programmu na yazyke Si (Risunok 1.3), v kotoroj soz-
daetsya novaya kopiya sushchestvuyushchego fajla. Predpolozhim, chto ispolnyaemaya versiya
programmy imeet naimenovanie copy. Dlya zapuska programmy pol'zovatel' vvodit
s terminala:
copy oldfile newfile
gde oldfile - imya sushchestvuyushchego fajla, a newfile - imya sozdavaemogo fajla.
Sistema vypolnyaet proceduru main, prisvaivaya argumentu argc znachenie koli-
chestva parametrov v spiske argv, a kazhdomu elementu massiva argv znachenie
parametra, soobshchennogo pol'zovatelem. V privedennom primere argc imeet zna-
chenie 3, element argv[0] soderzhit stroku simvolov "copy" (imya programmy us-
lovno yavlyaetsya nulevym parametrom), argv[1] - stroku simvolov "oldfile", a
argv[2] - stroku simvolov "newfile". Zatem programma proveryaet, pravil'noe
li kolichestvo parametrov bylo ukazano pri ee zapuske. Esli eto tak, zapuska-
etsya operaciya open (otkryt') dlya fajla oldfile s parametrom "read-only"
(tol'ko dlya chteniya), v sluchae uspeshnogo vypolneniya kotoroj zapuskaetsya ope-
raciya creat (otkryt') dlya fajla newfile. Rezhim dostupa k vnov' sozdannomu
fajlu opisyvaetsya chislom 0666 (v vos'mirichnom kode), chto oznachaet razreshenie
dostupa k fajlu dlya chteniya i zapisi dlya vseh pol'zovatelej. Vse obrashcheniya k
operacionnoj sisteme v sluchae neudachi vozvrashchayut kod -1; esli zhe neudachno
zavershayutsya operacii open i creat, programma vydaet soobshchenie i zapuskaet
operaciyu exit (vyjti) s vozvrashcheniem koda sostoyaniya, ravnogo 1, zavershaya
svoyu rabotu i ukazyvaya na vozniknovenie oshibki.
Operacii open i creat vozvrashchayut celoe znachenie, yavlyayushcheesya deskriptorom
fajla i ispol'zuemoe programmoj v posleduyushchih ssylkah na fajly. Posle etogo
programma vyzyvaet podprogrammu copy, vypolnyayushchuyu v cikle operaciyu read (chi-
tat'), po kotoroj proizvoditsya chtenie v bufer porcii simvolov iz sushchestvuyu-
shchego fajla, i operaciyu write (pisat') dlya zapisi informacii v novyj fajl.
Operaciya read kazhdyj raz vozvrashchaet kolichestvo prochitannyh bajtov (0 - esli
dostignut konec fajla). Cikl zavershaetsya, esli dostignut konec fajla ili es-
li proizoshla oshibka pri vypolnenii operacii read (otsutstvuet kontrol' voz-
niknoveniya oshibok pri vypolnenii operacii write). Zatem upravlenie iz podp-
rogrammy copy vozvrashchaetsya v osnovnuyu programmu i zapuskaetsya operaciya exit
s kodom sostoyaniya 0 v kachestve parametra, chto ukazyvaet na uspeshnoe zavershe-
nie vypolneniya programmy.
Programma kopiruet lyubye fajly, ukazannye pri ee vyzove v kachestve argu-
mentov, pri uslovii, chto razresheno otkrytie sushchestvuyushchego fajla i sozdanie
novogo fajla. Fajl mozhet vklyuchat' v sebya kak tekst, kotoryj mozhet byt' vyve-
den na pechatayushchee ustrojstvo, naprimer, ishodnyj tekst programmy, tak i sim-
voly, ne vyvodimye na pechat', dazhe samu programmu. Takim obrazom, oba vyzo-
va:
copy copy.c newcopy.c
copy copy newcopy
yavlyayutsya dopustimymi. Sushchestvuyushchij fajl takzhe mozhet byt' katalogom. Napri-
mer, po vyzovu:
copy . dircontents
kopiruetsya soderzhimoe tekushchego kataloga, oboznachennogo simvolom ".", v obych-
nyj fajl "dircontents"; informaciya v novom fajle sovpadaet, vplot' do kazhdo-
go bajta, s soderzhimym kataloga, tol'ko etot fajl obychnogo tipa (dlya sozda-
niya novogo kataloga prednaznachena operaciya mknod). Nakonec, lyuboj iz fajlov
mozhet byt' fajlom ustrojstva. Naprimer, programma, vyzvannaya sleduyushchim obra-
zom:
12
+------------------------------------------------------------+
| #include |
| char buffer[2048]; |
| int version = 1; /* budet ob座asneno v glave 2 */ |
| |
| main(argc,argv) |
| int argc; |
| char *argv[]; |
| { |
| int fdold,fdnew; |
| |
| if (argc != 3) |
| { |
| printf("need 2 arguments for copy program\n); |
| exit(1); |
| } |
| fdold = open(argv[1],O_RDONLY); /* otkryt' ishodnyj |
| fajl tol'ko dlya |
| chteniya */ |
| if (fdold == -1) |
| { |
| printf("cannot open file %s\n",argv[1]); |
| exit(1); |
| } |
| fdnew = creat(argv[2],0666); /* sozdat' novyj fajl s |
| razresheniem chteniya i |
| zapisi dlya vseh pol'-|
| zovatelej */ |
| if (fdnew == -1) |
| { |
| printf("cannot create file %s\n",argv[2]); |
| exit(1); |
| } |
| copy(fdold,fdnew); |
| exit(0); |
| } |
| |
| copy(old,new) |
| int old,new; |
| { |
| int count; |
| |
| while ((count = read(old,buffer,sizeof(buffer))) > 0) |
| write(new,buffer,count); |
| } |
+------------------------------------------------------------+
Risunok 1.3. Programma kopirovaniya fajla
copy /dev/tty terminalread
chitaet simvoly, vvodimye s terminala (fajl /dev/tty sootvetstvuet terminalu
pol'zovatelya), i kopiruet ih v fajl terminalread, zavershaya rabotu tol'ko v
tom sluchae, esli pol'zovatel' nazhmet
. Pohozhaya forma zapuska programmy:
copy /dev/tty /dev/tty
13
vyzyvaet chtenie simvolov s terminala i ih kopirovanie obratno na terminal.
1.3.2 Sreda vypolneniya processov
Programmoj nazyvaetsya ispolnyaemyj fajl, a processom nazyvaetsya posledo-
vatel'nost' operacij programmy ili chast' programmy pri ee vypolnenii. V sis-
teme UNIX mozhet odnovremenno vypolnyat'sya mnozhestvo processov (etu osoben-
nost' inogda nazyvayut mul'tiprogrammirovaniem ili mnogozadachnym rezhimom),
pri chem ih chislo logicheski ne ogranichivaetsya, i mnozhestvo chastej programmy
(takoj kak copy) mozhet odnovremenno nahodit'sya v sisteme. Razlichnye sistem-
nye operacii pozvolyayut processam porozhdat' novye processy, zavershayut proces-
sy, sinhroniziruyut vypolnenie etapov processa i upravlyayut reakciej na nas-
tuplenie razlichnyh sobytij. Blagodarya razlichnym obrashcheniyam k operacionnoj
sisteme, processy vypolnyayutsya nezavisimo drug ot druga.
Naprimer, process, vypolnyayushchijsya v programme, privedennoj na Risunke
1.4, zapuskaet operaciyu fork, chtoby porodit' novyj process. Novyj process,
imenuemyj porozhdennym processom, poluchaet znachenie koda zaversheniya operacii
fork, ravnoe 0, i aktiviziruet operaciyu execl, kotoraya vypolnyaet programmu
copy (Risunok 1.3). Operaciya execl zagruzhaet fajl "copy", kotoryj predpolo-
zhitel'no nahoditsya v tekushchem kataloge, v adresnoe prostranstvo porozhdennogo
processa i zapuskaet programmu s parametrami, poluchennymi ot pol'zovatelya. V
sluchae uspeshnogo vypolneniya operacii execl upravlenie v vyzvavshij ee process
ne vozvrashchaetsya, poskol'ku process vypolnyaetsya v novom adresnom prostranstve
(podrobnee ob etom v glave 7). Tem vremenem, process, zapustivshij operaciyu
fork (roditel'skij process), poluchaet nenulevoe znachenie koda zaversheniya
operacii, vyzyvaet operaciyu wait, kotoraya priostanavlivaet ego vypolnenie do
teh por, poka ne zakonchitsya vypolnenie programmy copy, i zavershaetsya (kazhdaya
programma imeet vyhod v konce glavnoj procedury, posle kotoroj raspolagayutsya
programmy standartnyh bibliotek Si, podklyuchaemye v processe kompilyacii).
Naprimer, esli ispolnyaemaya programma nazyvaetsya run, pol'zovatel' zapuskaet
ee sleduyushchim obrazom:
+------------------------------------------------------------+
| main(argc,argv) |
| int argc; |
| char *argv[]; |
| { |
| /* predusmotreno 2 argumenta: ishodnyj fajl i novyj fajl */|
| if (fork() == 0) |
| execl("copy","copy",argv[1],argv[2],0); |
| wait((int *)0) |
| printf("copy done\n"); |
| } |
+------------------------------------------------------------+
Risunok 1.4. Programma porozhdeniya novogo processa, vypolnyayushchego kopiro-
vanie fajlov
run oldfile newfile
Process vypolnyaet kopirovanie fajla s imenem "oldfile" v fajl s imenem
"newfile" i vyvodit soobshchenie. Hotya dannaya programma malo chto dobavila k
programme "copy", v nej poyavilis' chetyre osnovnyh obrashcheniya k operacionnoj
sisteme, upravlyayushchie vypolneniem processov: fork, exec, wait i exit.
Voobshche ispol'zovanie obrashchenij k operacionnoj sisteme daet vozmozhnost'
pol'zovatelyu sozdavat' programmy, vypolnyayushchie slozhnye dejstviya, i kak sleds-
tvie, yadro operacionnoj sistemy UNIX ne vklyuchaet v sebya mnogie funkcii, yav-
14
lyayushchiesya chast'yu "yadra" v drugih sistemah. Takie funkcii, i sredi nih kompi-
lyatory i redaktory, v sisteme UNIX yavlyayutsya programmami pol'zovatel'skogo
urovnya. Naibolee harakternym primerom podobnoj programmy mozhet sluzhit' ko-
mandnyj processor shell, s kotorym obychno vzaimodejstvuyut pol'zovateli posle
vhoda v sistemu. Shell interpretiruet pervoe slovo komandnoj stroki kak imya
komandy: vo mnogih komandah, v tom chisle i v komandah fork (porodit' novyj
process) i exec (vypolnit' porozhdennyj process), sama komanda associiruetsya
s ee imenem, vse ostal'nye slova v komandnoj stroke traktuyutsya kak parametry
komandy.
Shell obrabatyvaet komandy treh tipov. Vo-pervyh, v kachestve imeni ko-
mandy mozhet byt' ukazano imya ispolnyaemogo fajla v ob容ktnom kode, poluchenno-
go v rezul'tate kompilyacii ishodnogo teksta programmy (naprimer, programmy
na yazyke Si). Vo-vtoryh, imenem komandy mozhet byt' imya komandnogo fajla, so-
derzhashchego nabor komandnyh strok, obrabatyvaemyh shell'om. Nakonec, komanda
mozhet byt' vnutrennej komandoj yazyka shell (v otlichie ot ispolnyaemogo faj-
la). Nalichie vnutrennih komand delaet shell yazykom programmirovaniya v dopol-
nenie k funkciyam komandnogo processora; komandnyj yazyk shell vklyuchaet koman-
dy organizacii ciklov (for-in-do-done i while-do-done), komandy vypolneniya
po usloviyam (if-then-else-fi), operator vybora, komandu izmeneniya tekushchego
dlya processa kataloga (cd) i nekotorye drugie. Sintaksis shell'a dopuskaet
sravnenie s obrazcom i obrabotku parametrov. Pol'zovatelyam, zapuskayushchim ko-
mandy, net neobhodimosti znat', kakogo tipa eti komandy.
Komandnyj processor shell ishchet imena komand v ukazannom nabore katalo-
gov, kotoryj mozhno izmenit' po zhelaniyu pol'zovatelya, vyzvav shell. Shell
obychno ispolnyaet komandu sinhronno, s ozhidaniem zaversheniya vypolneniya koman-
dy prezhde, chem schitat' sleduyushchuyu komandnuyu stroku. Tem ne menee, dopuskaetsya
i asinhronnoe ispolnenie, kogda ocherednaya komandnaya stroka schityvaetsya i is-
polnyaetsya, ne dozhidayas' zaversheniya vypolneniya predydushchej komandy. O koman-
dah, vypolnyaemyh asinhronno, govoryat, chto oni vypolnyayutsya na fone drugih ko-
mand. Naprimer, vvod komandy
who
vyzyvaet vypolnenie sistemoj programmy, hranyashchejsya v fajle
/bin/who (****) i osushchestvlyayushchej vyvod spiska pol'zovatelej, ko-
torye v nastoyashchij moment rabotayut s sistemoj. Poka komanda who vypolnyaetsya,
komandnyj processor shell ozhidaet zaversheniya ee vypolneniya i tol'ko zatem
zaprashivaet u pol'zovatelya sleduyushchuyu komandu. Esli zhe vvesti komandu
who &
sistema vypolnit programmu who na fone i shell gotov nemedlenno prinyat' sle-
duyushchuyu komandu.
V sredu vypolneniya kazhdogo processa v sisteme UNIX vklyuchaetsya tekushchij
katalog. Tekushchij dlya processa katalog yavlyaetsya nachal'nym katalogom, imya ko-
torogo prisoedinyaetsya ko vsem imenam putej poiska, kotorye ne nachinayutsya s
naklonnoj cherty. Pol'zovatel' mozhet zapustit' vnutrennyuyu komandu shell'a cd
(izmenit' katalog) dlya peremeshcheniya po derevu fajlovoj sistemy i dlya smeny
tekushchego kataloga. Komandnaya stroka
cd /usr/src/uts
delaet tekushchim katalog "/usr/src/uts". Komandnaya stroka
cd ../..
---------------------------
(****) Katalog "/bin" soderzhit bol'shinstvo neobhodimyh komand i obychno vho-
dit v chislo katalogov, v kotoryh vedet poisk komandnyj processor
shell.
15
delaet tekushchim katalog, kotoryj na dve vershiny "blizhe" k kornyu (kornevomu
katalogu): parametr ".." otnositsya k katalogu, yavlyayushchemusya roditel'skim dlya
tekushchego.
Poskol'ku shell yavlyaetsya pol'zovatel'skoj programmoj i ne vhodit v sos-
tav yadra operacionnoj sistemy, ego legko modificirovat' i pomeshchat' v konk-
retnye usloviya ekspluatacii. Naprimer, vmesto komandnogo processora Baurna
(nazyvaemogo tak po imeni ego sozdatelya, Stiva Baurna), yavlyayushchegosya chast'yu
versii V standartnoj sistemy, mozhno ispol'zovat' processor komand Si, obes-
pechivayushchij rabotu mehanizma vedeniya istorii izmenenij i pozvolyayushchij izbegat'
povtornogo vvoda tol'ko chto ispol'zovannyh komand. V nekotoryh sluchayah pri
zhelanii mozhno vospol'zovat'sya komandnym processorom shell s ogranichennymi
vozmozhnostyami, yavlyayushchimsya predydushchej versiej obychnogo shell'a. Sistema mozhet
rabotat' s neskol'kimi komandnymi processorami odnovremenno. Pol'zovateli
imeyut vozmozhnost' zapuskat' odnovremenno mnozhestvo processov, processy zhe v
svoyu ochered' mogut dinamicheski porozhdat' novye processy i sinhronizirovat'
ih vypolnenie. Vse eti vozmozhnosti obespechivayutsya blagodarya nalichiyu moshchnyh
programmnyh i apparatnyh sredstv, sostavlyayushchih sredu vypolneniya processov.
Hotya privlekatel'nost' shell'a v naibol'shej stepeni opredelyaetsya ego vozmozh-
nostyami kak yazyka programmirovaniya i ego vozmozhnostyami v obrabotke argumen-
tov, v dannom razdele osnovnoe vnimanie koncentriruetsya na srede vypolneniya
processov, upravlenie kotoroj v sisteme vozlozheno na komandnyj processor
shell. Drugie vazhnye osobennosti shell'a vyhodyat za ramki nastoyashchej knigi
(podrobnoe opisanie shell'a sm. v [Bourne 78]).
1.3.3 |lementy konstrukcionnyh blokov
Kak uzhe govorilos' ranee, koncepciya razrabotki sistemy UNIX zaklyuchalas'
v postroenii operacionnoj sistemy iz elementov, kotorye pozvolili by pol'zo-
vatelyu sozdavat' nebol'shie programmnye moduli, vystupayushchie v kachestve konst-
rukcionnyh blokov pri sozdanii bolee slozhnyh programm. Odnim iz takih ele-
mentov, s kotorym chasto stalkivayutsya pol'zovateli pri rabote s komandnym
processorom shell, yavlyaetsya vozmozhnost' perenaznacheniya vvoda-vyvoda. Govorya
uslovno, processy imeyut dostup k trem fajlam: oni chitayut iz fajla standart-
nogo vvoda, zapisyvayut v fajl standartnogo vyvoda i vyvodyat soobshcheniya ob
oshibkah v standartnyj fajl oshibok. Processy, zapuskaemye s terminala, obychno
ispol'zuyut terminal vmesto vseh etih treh fajlov, odnako kazhdyj fajl nezavi-
simo ot drugih mozhet byt' "perenaznachen". Naprimer, komanda
ls
vyvodit spisok vseh fajlov tekushchego kataloga na ustrojstvo (v fajl) standar-
tnogo vyvoda, a komanda
ls > output
perenaznachaet vyvodnoj potok so standartnogo vyvoda v fajl "output" v teku-
shchem kataloge, ispol'zuya vysheupomyanutyj sistemnyj vyzov creat. Podobnym zhe
obrazom, komanda
mail mjb < letter
otkryvaet (s pomoshch'yu sistemnogo vyzova open) fajl "letter" v kachestve fajla
standartnogo vvoda i peresylaet ego soderzhimoe pol'zovatelyu s imenem "mjb".
Processy mogut perenaznachat' odnovremenno i vvod, i vyvod, kak, naprimer, v
komandnoj stroke:
16
nroff -mm < doc1 > doc1.out 2> errors
gde programma formatirovaniya nroff chitaet vvodnoj fajl doc1, v kachestve faj-
la standartnogo vyvoda zadaet fajl doc1.out i vyvodit soobshcheniya ob oshibkah v
fajl errors ("2>" oznachaet perenaznachenie vyvoda, prednaznachavshegosya dlya
fajla s deskriptorom 2, kotoryj sootvetstvuet standartnomu fajlu oshibok).
Programmy ls, mail i nroff ne znayut, kakie fajly vybrany v kachestve fajlov
standartnogo vvoda, standartnogo vyvoda i zapisi soobshchenij ob oshibkah; ko-
mandnyj processor shell sam raspoznaet simvoly "<", ">" i "2>" i naznachaet v
sootvetstvii s ih ukazaniem fajly dlya standartnogo vvoda, standartnogo vyvo-
da i zapisi soobshchenij ob oshibkah neposredstvenno pered zapuskom processov.
Vtorym konstrukcionnym elementom yavlyaetsya kanal, mehanizm, obespechivayu-
shchij informacionnyj obmen mezhdu processami, vypolnenie kotoryh svyazano s ope-
raciyami chteniya i zapisi. Processy mogut perenaznachat' vyvodnoj potok so
standartnogo vyvoda na kanal dlya chteniya s nego drugimi processami, perenaz-
nachivshimi na kanal svoj standartnyj vvod. Dannye, posylaemye v kanal pervymi
processami, yavlyayutsya vhodnymi dlya vtoryh processov. Vtorye processy tak zhe
mogut perenaznachit' svoj vyvodnoj potok i tak dalee, v zavisimosti ot pozhe-
lanij programmista. I snova, tak zhe kak i v vysheukazannom sluchae, processam
net neobhodimosti znat', kakogo tipa fajl ispol'zuetsya v kachestve fajla
standartnogo vyvoda; ih vypolnenie ne zavisit ot togo, budet li fajlom stan-
dartnogo vyvoda obychnyj fajl, kanal ili ustrojstvo. V processe postroeniya
bol'shih i slozhnyh programm iz konstrukcionnyh elementov men'shego razmera
programmisty chasto ispol'zuyut kanaly i perenaznachenie vvoda-vyvoda pri sbor-
ke i soedinenii otdel'nyh chastej. I dejstvitel'no, takoj stil' programmiro-
vaniya nahodit podderzhku v sisteme, blagodarya chemu novye programmy mogut ra-
botat' vmeste s sushchestvuyushchimi programmami.
Naprimer, programma grep proizvodit poisk konteksta v nabore fajlov (yav-
lyayushchihsya parametrami programmy) po sleduyushchemu obrazcu:
grep main a.c b.c c.c
gde "main" - podstroka, poisk kotoroj proizvoditsya v fajlah a.c, b.c i c.c s
vydachej v fajl standartnogo vyvoda teh strok, v kotoryh ona soderzhitsya. So-
derzhimoe vyvodnogo fajla mozhet byt' sleduyushchim:
a.c: main(argc,argv)
c.c: /* here is the main loop in the program */
c.c: main()
Programma wc s neobyazatel'nym parametrom -l podschityvaet chislo strok v fajle
standartnogo vvoda. Komandnaya stroka
grep main a.c b.c c.c | wc -l
vyzovet podschet chisla strok v ukazannyh fajlah, gde budet obnaruzhena podst-
roka "main"; vyvodnoj potok komandy grep postupit neposredstvenno na vhod
komandy wc. Dlya predydushchego primera rezul'tat budet takoj:
3
Ispol'zovanie kanalov zachastuyu delaet nenuzhnym sozdanie vremennyh fajlov.
1.4 FUNKCII OPERACIONNOJ SISTEMY
Na Risunke 1.1 uroven' yadra operacionnoj sistemy izobrazhen neposredst-
venno pod urovnem prikladnyh programm pol'zovatelya. Vypolnyaya razlichnye ele-
mentarnye operacii po zaprosam pol'zovatel'skih processov, yadro obespechivaet
funkcionirovanie pol'zovatel'skogo interfejsa, opisannogo vyshe. Sredi funk-
17
cij yadra mozhno otmetit':
* Upravlenie vypolneniem processov posredstvom ih sozdaniya, zaversheniya ili
priostanovki i organizacii vzaimodejstviya mezhdu nimi.
* Planirovanie ocherednosti predostavleniya vypolnyayushchimsya processam vremeni
central'nogo processora (dispetcherizaciya). Processy rabotayut s central'nym
processorom v rezhime razdeleniya vremeni: central'nyj processor (*****) vy-
polnyaet process, po zavershenii otschityvaemogo yadrom kvanta vremeni process
priostanavlivaetsya i yadro aktiviziruet vypolnenie drugogo processa. Pozd-
nee yadro zapuskaet priostanovlennyj process.
* Vydelenie vypolnyaemomu processu operativnoj pamyati. YAdro operacionnoj sis-
temy daet processam vozmozhnost' sovmestno ispol'zovat' uchastki adresnogo
prostranstva na opredelennyh usloviyah, zashchishchaya pri etom adresnoe prostran-
stvo, vydelennoe processu, ot vmeshatel'stva izvne. Esli sisteme trebuetsya
svobodnaya pamyat', yadro osvobozhdaet pamyat', vremenno vygruzhaya process na
vneshnie
zapominayushchie ustrojstva, kotorye nazyvayut ustrojstvami vygruzki. Esli yadro
vygruzhaet processy na ustrojstva vygruzki celikom, takaya realizaciya siste-
my UNIX nazyvaetsya sistemoj so svopingom (podkachkoj); esli zhe na ustrojst-
vo vygruzki vyvodyatsya stranicy pamyati, takaya sistema nazyvaetsya sistemoj s
zameshcheniem stranic.
* Vydelenie vneshnej pamyati s cel'yu obespecheniya effektivnogo hraneniya infor-
macii i vyborka dannyh pol'zovatelya. Imenno v processe realizacii etoj
funkcii sozdaetsya fajlovaya sistema. YAdro vydelyaet vneshnyuyu pamyat' pod pol'-
zovatel'skie fajly, mobilizuet neispol'zuemuyu pamyat', strukturiruet fajlo-
vuyu sistemu v forme, dostupnoj dlya ponimaniya, i zashchishchaet pol'zovatel'skie
fajly ot nesankcionirovannogo dostupa.
* Upravlenie dostupom processov k periferijnym ustrojstvam, takim kak termi-
naly, lentochnye ustrojstva, diskovody i setevoe oborudovanie.
Vypolnenie yadrom svoih funkcij dovol'no ochevidno. Naprimer, ono uznaet,
chto dannyj fajl yavlyaetsya obychnym fajlom ili ustrojstvom, no skryvaet eto
razlichie ot pol'zovatel'skih processov. Tak zhe ono, formatiruya informaciyu
fajla dlya vnutrennego hraneniya, zashchishchaet vnutrennij format ot pol'zovatel'-
skih processov, vozvrashchaya im neotformatirovannyj potok bajtov. Nakonec, yadro
realizuet ryad neobhodimyh funkcij po obespecheniyu vypolneniya processov pol'-
zovatel'skogo urovnya, za isklyucheniem funkcij, kotorye mogut byt' realizovany
na samom pol'zovatel'skom urovne. Naprimer, yadro vypolnyaet dejstviya, neobho-
dimye shell'u kak interpretatoru komand: ono pozvolyaet processoru shell chi-
tat' vvodimye s terminala dannye, dinamicheski porozhdat' processy, sinhroni-
zirovat' vypolnenie processov, otkryvat' kanaly i pereadresovyvat' vvod-vy-
vod. Pol'zovateli mogut razrabatyvat' svoi versii komandnogo processora
shell s tem, chtoby privesti rabochuyu sredu v sootvetstvie so svoimi trebova-
niyami, ne zatragivaya drugih pol'zovatelej. Takie programmy pol'zuyutsya temi
zhe uslugami yadra, chto i standartnyj processor shell.
1.5 PREDPOLAGAEMAYA APPARATNAYA SREDA
Vypolnenie pol'zovatel'skih processov v sisteme UNIX osushchestvlyaetsya na
dvuh urovnyah: urovne pol'zovatelya i urovne yadra. Kogda process proizvodit
obrashchenie k operacionnoj sisteme, rezhim vypolneniya processa pereklyuchaetsya s
rezhima zadachi (pol'zovatel'skogo) na rezhim yadra: operacionnaya sistema pyta-
etsya obsluzhit' zapros pol'zovatelya, vozvrashchaya kod oshibki v sluchae neudachnogo
zaversheniya operacii. Dazhe esli pol'zovatel' ne nuzhdaetsya v kakih-libo opre-
delennyh uslugah operacionnoj sistemy i ne obrashchaetsya k nej s zaprosami,
--------------------------
(*****) V glave 12 rassmatrivayutsya mnogoprocessornye sistemy; do togo rech'
budet idti ob odnoprocessornoj modeli.
18
sistema eshche vypolnyaet uchetnye operacii, svyazannye s pol'zovatel'skim proces-
som, obrabatyvaet preryvaniya, planiruet processy, upravlyaet raspredeleniem
pamyati i t.d. Bol'shinstvo vychislitel'nyh sistem raznoobraznoj arhitektury (i
sootvetstvuyushchie im operacionnye sistemy) podderzhivayut bol'shee chislo urovnej,
chem ukazano zdes', odnako uzhe dvuh rezhimov, rezhima zadachi i rezhima yadra,
vpolne dostatochno dlya sistemy UNIX.
Osnovnye razlichiya mezhdu etimi dvumya rezhimami:
* V rezhime zadachi processy imeyut dostup tol'ko k svoim sobstvennym instruk-
ciyam i dannym, no ne k instrukciyam i dannym yadra (libo drugih processov).
Odnako v rezhime yadra processam uzhe dostupny adresnye prostranstva yadra i
pol'zovatelej. Naprimer, virtual'noe adresnoe prostranstvo processa mozhet
byt' podeleno na adresa, dostupnye tol'ko v rezhime yadra, i na adresa, dos-
tupnye v lyubom rezhime.
* Nekotorye mashinnye komandy yavlyayutsya privilegirovannymi i vyzyvayut voznik-
novenie oshibok pri popytke ih ispol'zovaniya v rezhime zadachi. Naprimer, v
mashinnom yazyke mozhet byt' komanda, upravlyayushchaya registrom sostoyaniya proces-
sora; processam, vypolnyayushchimsya v
Processy
A B C D
+-------+-------+-------+-------+
Rezhim yadra | YA | | | YA |
+-------+-------+-------+-------+
Rezhim zadachi | | Z | Z | |
+-------+-------+-------+-------+
Risunok 1.5. Processy i rezhimy ih vypolneniya
rezhime zadachi, ona nedostupna.
Proshche govorya, lyuboe vzaimodejstvie s apparaturoj opisyvaetsya v terminah
rezhima yadra i rezhima zadachi i protekaet odinakovo dlya vseh pol'zovatel'skih
programm, vypolnyayushchihsya v etih rezhimah. Operacionnaya sistema hranit vnutren-
nie zapisi o kazhdom processe, vypolnyayushchemsya v sisteme. Na Risunke 1.5 poka-
zano eto razdelenie: yadro delit processy A, B, C i D, raspolozhennye vdol'
gorizontal'noj osi, apparatnye sredstva vvodyat razlichiya mezhdu rezhimami vy-
polneniya, raspolozhennymi po vertikali.
Nesmotrya na to, chto sistema funkcioniruet v odnom iz dvuh rezhimov, yadro
dejstvuet ot imeni pol'zovatel'skogo processa. YAdro ne yavlyaetsya kakoj-to
osoboj sovokupnost'yu processov, vypolnyayushchihsya parallel'no s pol'zovatel'ski-
mi, ono samo vystupaet sostavnoj chast'yu lyubogo pol'zovatel'skogo processa.
Sdelannyj vyvod budet skoree otnosit'sya k "yadru", raspredelyayushchemu resursy,
ili k "yadru", proizvodyashchemu razlichnye operacii, i eto budet oznachat', chto
process, vypolnyaemyj v rezhime yadra, raspredelyaet resursy i proizvodit soot-
vetstvuyushchie operacii. Naprimer, komandnyj processor shell schityvaet vvodnoj
potok s terminala s pomoshch'yu zaprosa k operacionnoj sisteme. YAdro operacion-
noj sistemy, vystupaya ot imeni processora shell, upravlyaet funkcionirovaniem
terminala i peredaet vvodimye simvoly processoru shell. Shell perehodit v
rezhim zadachi, analiziruet potok simvolov, vvedennyh pol'zovatelem i vypolnya-
et zadannuyu posledovatel'nost' dejstvij, kotorye mogut potrebovat' vypolne-
niya i drugih sistemnyh operacij.
1.5.1 Preryvaniya i osobye situacii
Sistema UNIX pozvolyaet takim ustrojstva, kak vneshnie ustrojstva vvo-
da-vyvoda i sistemnye chasy, asinhronno preryvat' rabotu central'nogo proces-
19
sora. Po poluchenii signala preryvaniya yadro operacionnoj sistemy sohranyaet
svoj tekushchij kontekst (zastyvshij obraz vypolnyaemogo processa), ustanavlivaet
prichinu preryvaniya i obrabatyvaet preryvanie. Posle togo, kak preryvanie bu-
det obrabotano yadrom, prervannyj kontekst vosstanovitsya i rabota prodolzhitsya
tak, kak budto nichego ne sluchilos'. Ustrojstvam obychno pripisyvayutsya priori-
tety v sootvetstvii s ocherednost'yu obrabotki preryvanij. V processe obrabot-
ki preryvanij yadro uchityvaet ih prioritety i blokiruet obsluzhivanie preryva-
niya s nizkim prioritetom na vremya obrabotki preryvaniya s bolee vysokim prio-
ritetom.
Osobye situacii svyazany s vozniknoveniem nezaplanirovannyh sobytij, vyz-
vannyh processom, takih kak nedopustimaya adresaciya, zadanie privilegirovan-
nyh komand, delenie na nol' i t.d. Oni otlichayutsya ot preryvanij, kotorye vy-
zyvayutsya sobytiyami, vneshnimi po otnosheniyu k processu. Osobye situacii vozni-
kayut pryamo "posredine" vypolneniya komandy, i sistema, obrabotav osobuyu situ-
aciyu, pytaetsya perezapustit' komandu; schitaetsya, chto preryvaniya voznikayut
mezhdu vypolneniem dvuh komand, pri etom sistema posle obrabotki preryvaniya
prodolzhaet vypolnenie processa uzhe nachinaya so sleduyushchej komandy. Dlya obra-
botki preryvanij i osobyh situacij v sisteme UNIX ispol'zuetsya odin i tot zhe
mehanizm.
1.5.2 Urovni preryvaniya processora
YAdro inogda obyazano preduprezhdat' vozniknovenie preryvanij vo vremya kri-
ticheskih dejstvij, mogushchih v sluchae preryvaniya zaportit' informaciyu. Napri-
mer, vo vremya obrabotki spiska s ukazatelyami vozniknovenie preryvaniya ot
diska dlya yadra nezhelatel'no, t.k. pri obrabotke preryvaniya mozhno zaportit'
ukazateli, chto mozhno uvidet' na primere v sleduyushchej glave. Obychno imeetsya
ryad privilegirovannyh komand, ustanavlivayushchih uroven' preryvaniya processora
v slove sostoyaniya processora. Ustanovka urovnya preryvaniya na opredelennoe
znachenie otsekaet preryvaniya etogo i bolee nizkih urovnej, razreshaya obrabot-
ku tol'ko preryvanij s bolee vysokim prioritetom. Na Risunke 1.6 pokazana
posledovatel'nost' urovnej preryvaniya. Esli yadro ignoriruet preryvaniya ot
diska, v etom sluchae ignoriruyutsya i vse ostal'nye preryvaniya, krome preryva-
nij ot chasov i mashinnyh sboev.
+------------------------------+ ^
| Mashinnye sboi | |
+------------------------------+ |
| Sistemnye chasy | Vysokij prioritet
+------------------------------+ |
| Disk | |
+------------------------------+ |
| Setevoe oborudovanie | |
+------------------------------+ |
| Terminaly | Nizkij prioritet
+------------------------------+ |
| Programmnye preryvaniya | |
+------------------------------+ v
Risunok 1.6. Standartnye urovni preryvanij
1.5.3 Raspredelenie pamyati
YAdro postoyanno raspolagaetsya v operativnoj pamyati, naryadu s vypolnyayushchim-
sya v dannyj moment processom (ili chast'yu ego, po men'shej mere). V processe
kompilyacii programma-kompilyator generiruet posledovatel'nost' adresov, yavlya-
20
yushchihsya adresami peremennyh i informacionnyh struktur, a takzhe adresami inst-
rukcij i funkcij. Kompilyator generiruet adresa dlya virtual'noj mashiny tak,
slovno na fizicheskoj mashine ne budet vypolnyat'sya parallel'no s transliruemoj
ni odna drugaya programma.
Kogda programma zapuskaetsya na vypolnenie, yadro vydelyaet dlya nee mesto v
operativnoj pamyati, pri etom sovpadenie virtual'nyh adresov, sgenerirovannyh
kompilyatorom, s fizicheskimi adresami sovsem neobyazatel'no. YAdro, vzaimodejs-
tvuya s apparatnymi sredstvami, transliruet virtual'nye adresa v fizicheskie,
t.e. otobrazhaet adresa, sgenerirovannye kompilyatorom, v fizicheskie, mashinnye
adresa. Takoe otobrazhenie opiraetsya na vozmozhnosti apparatnyh sredstv, poe-
tomu komponenty sistemy UNIX, zanimayushchiesya im, yavlyayutsya mashinno-zavisimymi.
Naprimer, otdel'nye vychislitel'nye mashiny imeyut special'noe oborudovanie dlya
podkachki vygruzhennyh stranic pamyati. Glavy 6 i 9 posvyashcheny bolee podrobnomu
rassmotreniyu voprosov, svyazannyh s raspredeleniem pamyati, i issledovaniyu ih
sootnosheniya s apparatnymi sredstvami.
V etoj glave opisany polnaya struktura sistemy UNIX, vzaimootnosheniya mezh-
du processami, vypolnyayushchimisya v rezhime zadachi i v rezhime yadra, a takzhe appa-
ratnaya sreda funkcionirovaniya yadra operacionnoj sistemy. Processy vypolnyayut-
sya v rezhime zadachi ili v rezhime yadra, v kotorom oni pol'zuyutsya uslugami sis-
temy blagodarya nalichiyu nabora obrashchenij k operacionnoj sisteme. Arhitektura
sistemy podderzhivaet takoj stil' programmirovaniya, pri kotorom iz nebol'shih
programm, vypolnyayushchih tol'ko otdel'nye funkcii, no horosho, sostavlyayutsya bo-
lee slozhnye programmy, ispol'zuyushchie mehanizm kanalov i perenaznachenie vvo-
da-vyvoda.
Obrashcheniya k operacionnoj sisteme pozvolyayut processam proizvodit' opera-
cii, kotorye inache ne vypolnyayutsya. V dopolnenie k obrabotke podobnyh obrashche-
nij yadro operacionnoj sistemy osushchestvlyaet obshchie uchetnye operacii, upravlyaet
planirovaniem processov, raspredeleniem pamyati i zashchitoj processov v opera-
tivnoj pamyati, obsluzhivaet preryvaniya, upravlyaet fajlami i ustrojstvami i
obrabatyvaet osobye situacii, voznikayushchie v sisteme. V funkcii yadra sistemy
UNIX namerenno ne vklyucheny mnogie funkcii, yavlyayushchiesya chast'yu drugih operaci-
onnyh sistem, poskol'ku nabor obrashchenij k sisteme pozvolyaet processam vypol-
nyat' vse neobhodimye operacii na pol'zovatel'skom urovne. V sleduyushchej glave
soderzhitsya bolee detal'naya informaciya o yadre, opisyvayushchaya ego arhitekturu i
vvodyashchaya nekotorye osnovnye ponyatiya, kotorye ispol'zuyutsya pri opisanii ego
funkcionirovaniya.
21
GLAVA 2
VVEDENIE V ARHITEKTURU YADRA OPERACIONNOJ SISTEMY
V predydushchej glave byl sdelan tol'ko poverhnostnyj obzor osobennostej
operacionnoj sredy UNIX. V etoj glave osnovnoe vnimanie udelyaetsya yadru ope-
racionnoj sistemy, delaetsya obzor ego arhitektury i izlagayutsya v obshchih cher-
tah osnovnye ponyatiya i struktury, sushchestvennye dlya ponimaniya vsego posleduyu-
shchego materiala knigi.
2.1 ARHITEKTURA OPERACIONNOJ SISTEMY UNIH
Kak uzhe ranee bylo zamecheno (sm. [Christian 83], str.239), v sisteme
UNIX sozdaetsya illyuziya togo, chto fajlovaya sistema imeet "mesta" i chto u pro-
cessov est' "zhizn'". Obe sushchnosti, fajly i processy, yavlyayutsya central'nymi
ponyatiyami modeli operacionnoj sistemy UNIX. Na Risunke 2.1 predstavlena
blok-shema yadra sistemy, otrazhayushchaya sostav modulej, iz kotoryh sostoit yadro,
i ih vzaimosvyazi drug s drugom. V chastnosti, na nej sleva izobrazhena fajlo-
vaya podsistema, a sprava podsistema upravleniya processami, dve glavnye kom-
ponenty yadra. |ta shema daet logicheskoe predstavlenie o yadre, hotya v dejst-
vitel'nosti v strukture yadra imeyutsya otkloneniya ot modeli, poskol'ku otdel'-
nye moduli ispytyvayut vnutrennee vozdejstvie so storony drugih modulej.
Shema na Risunke 2.1 imeet tri urovnya: uroven' pol'zovatelya, uroven' yad-
ra i uroven' apparatury. Obrashcheniya k operacionnoj sisteme i biblioteki sos-
tavlyayut granicu mezhdu pol'zovatel'skimi programmami i yadrom, provedennuyu na
Risunke 1.1. Obrashcheniya k operacionnoj sisteme vyglyadyat tak zhe, kak obychnye
vyzovy funkcij v programmah na yazyke Si, i biblioteki ustanavlivayut sootvet-
stvie mezhdu etimi vyzovami funkcij i elementarnymi sistemnymi operaciya-
mi, o chem bolee podrobno sm. v glave 6. Pri etom programmy na assemblere mo-
gut obrashchat'sya k operacionnoj sisteme neposredstvenno, bez ispol'zovaniya
biblioteki sistemnyh vyzovov. Programmy chasto obrashchayutsya k drugim bibliote-
kam, takim kak biblioteka standartnyh podprogramm vvoda-vyvoda, dostigaya tem
samym bolee polnogo ispol'zovaniya sistemnyh uslug. Dlya etogo vo vremya kompi-
lyacii biblioteki svyazyvayutsya s programmami i chastichno vklyuchayutsya v programmu
pol'zovatelya. Dalee my proillyustriruem eti momenty na primere.
Na risunke sovokupnost' obrashchenij k operacionnoj sisteme razdelena na te
obrashcheniya, kotorye vzaimodejstvuyut s podsistemoj upravleniya fajlami, i te,
kotorye vzaimodejstvuyut s podsistemoj upravleniya processami. Fajlovaya pod-
sistema upravlyaet fajlami, razmeshchaet zapisi fajlov, upravlyaet svobodnym
prostranstvom, dostupom k fajlam i poiskom dannyh dlya pol'zovatelej. Proces-
sy vzaimodejstvuyut s podsistemoj upravleniya fajlami, ispol'zuya pri etom so-
vokupnost' special'nyh obrashchenij k operacionnoj sisteme, takih kak open
(dlya togo, chtoby otkryt' fajl na chtenie ili zapis'),close, read, write, stat
(zaprosit' atributy fajla), chown (izmenit' zapis' s informaciej o vladel'ce
fajla) i chmod (izmenit' prava dostupa k fajlu). |ti i drugie operacii rass-
matrivayutsya v glave 5.
Podsistema upravleniya fajlami obrashchaetsya k dannym, kotorye hranyatsya v
fajle, ispol'zuya bufernyj mehanizm, upravlyayushchij potokom dannyh mezhdu yadrom i
ustrojstvami vneshnej pamyati. Bufernyj mehanizm, vzaimodejstvuya s drajverami
ustrojstv vvoda-vyvoda blokami, iniciiruet peredachu dannyh k yadru i obratno.
Drajvery ustrojstv yavlyayutsya takimi modulyami v sostave yadra, kotorye upravlya-
yut rabotoj periferijnyh ustrojstv. Ustrojstva vvoda-vyvoda blokami otnosyatsya
22
programmy pol'zovatelya
^
| +----------------------+
tochka pere- | | biblioteki |
secheniya ---------|------- +----------------------+
- | - ^
Uroven' pol'zovatelya - | - |
--------------------------|---------------------|-----------------
Uroven' yadra v v
+---------------------------------------------------+
| ^ obrashcheniya k operacionnoj sisteme ^ |
+------+------------------------------------+-------+
| |
+-----------------+---------------+ +----------------+---------+
| v | | v |
| | | |
| podsistema upravle- | | ............|
| niya fajlami | | . vzaimo- .|
| <---+-+ | . dejstvie .|
| | | | . processov.|
| ^ ^ | | | podsistema ............|
| | | | | | ............|
+-------+--------------+----------+ | | . planirov-.|
| v +-+> upravleniya . shchik .|
| +--------------+ | ............|
| | bufer sverh- | | ............|
| | operativnoj | | processami . rasprede-.|
| | pamyati (kesh) | | . lenie .|
| +--------------+ | . pamyati .|
| ^ | ^ ............|
| | | | |
| v +-------+------------------+
+-------+----------------------+ |
| v . | |
| simvol . blok | |
| . | |
+------------------------------+ |
| | |
| drajvery ustrojstv | |
| ^ | |
+--------------+---------------+ |
| |
+--------------+------------------------------+------------------+
| v apparatnyj kontrol' v |
+----------------------------------------------------------------+
Uroven' yadra
------------------------------------------------------------------ Uroven'
apparatury
+----------------------------------------------------------------+
| tehnicheskie sredstva (apparatura) |
+----------------------------------------------------------------+
Risunok 2.1. Blok-shema yadra operacionnoj sistemy
k tipu zapominayushchih ustrojstv s proizvol'noj vyborkoj; ih drajvery postroeny
takim obrazom, chto vse ostal'nye komponenty sistemy vosprinimayut eti ustroj-
stva kak zapominayushchie ustrojstva s proizvol'noj vyborkoj. Naprimer, drajver
zapominayushchego ustrojstva na magnitnoj lente pozvolyaet yadru sistemy vosprini-
23
mat' eto ustrojstvo kak zapominayushchee ustrojstvo s proizvol'noj vyborkoj.
Podsistema upravleniya fajlami takzhe neposredstvenno vzaimodejstvuet s draj-
verami ustrojstv "nestrukturirovannogo" vvoda-vyvoda, bez vmeshatel'stva bu-
fernogo mehanizma. K ustrojstvam nestrukturirovannogo vvoda-vyvoda, inogda
imenuemym ustrojstvami posimvol'nogo vvoda-vyvoda (tekstovymi), otnosyatsya
ustrojstva, otlichnye ot ustrojstv vvoda-vyvoda blokami.
Podsistema upravleniya processami otvechaet za sinhronizaciyu processov,
vzaimodejstvie processov, raspredelenie pamyati i planirovanie vypolneniya
processov. Podsistema upravleniya fajlami i podsistema upravleniya processami
vzaimodejstvuyut mezhdu soboj, kogda fajl zagruzhaetsya v pamyat' na vypolnenie
(sm. glavu 7): podsistema upravleniya processami chitaet v pamyat' ispolnyaemye
fajly pered tem, kak ih vypolnit'.
Primerami obrashchenij k operacionnoj sisteme, ispol'zuemyh pri upravlenii
processami, mogut sluzhit' fork (sozdanie novogo processa), exec (nalozhenie
obraza programmy na vypolnyaemyj process), exit (zavershenie vypolneniya pro-
cessa), wait (sinhronizaciya prodolzheniya vypolneniya osnovnogo processa s mo-
mentom vyhoda iz porozhdennogo processa), brk (upravlenie razmerom pamyati,
vydelennoj processu) i signal (upravlenie reakciej processa na vozniknovenie
ekstraordinarnyh sobytij). Glava 7 posvyashchena rassmotreniyu etih i drugih sis-
temnyh vyzovov.
Modul' raspredeleniya pamyati kontroliruet vydelenie pamyati processam. Es-
li v kakoj-to moment sistema ispytyvaet nedostatok v fizicheskoj pamyati dlya
zapuska vseh processov, yadro peresylaet processy mezhdu osnovnoj i vneshnej
pamyat'yu s tem, chtoby vse processy imeli vozmozhnost' vypolnyat'sya. V glave 9
opisyvayutsya dva sposoba upravleniya raspredeleniem pamyati: vygruzka (podkach-
ka) i zameshchenie stranic. Programmu podkachki inogda nazyvayut planirovshchikom,
t.k. ona "planiruet" vydelenie pamyati processam i okazyvaet vliyanie na rabo-
tu planirovshchika central'nogo processora. Odnako v dal'nejshem my budem sta-
rat'sya ssylat'sya na nee kak na "programmu podkachki", chtoby izbezhat' putanicy
s planirovshchikom central'nogo processora.
Modul' "planirovshchik" raspredelyaet mezhdu processami vremya central'nogo
processora. On planiruet ocherednost' vypolneniya processov do teh por, poka
oni dobrovol'no ne osvobodyat central'nyj processor, dozhdavshis' vydeleniya
k.-l. resursa, ili do teh por, poka yadro sistemy ne vygruzit ih posle togo,
kak ih vremya vypolneniya prevysit zaranee opredelennyj kvant vremeni. Plani-
rovshchik vybiraet na vypolnenie gotovyj k zapusku process s naivysshim priori-
tetom; vypolnenie predydushchego processa (priostanovlennogo) budet prodolzheno
togda, kogda ego prioritet budet naivysshim sredi prioritetov vseh gotovyh k
zapusku processov. Sushchestvuet neskol'ko form vzaimodejstviya processov mezhdu
soboj, ot asinhronnogo obmena signalami o sobytiyah do sinhronnogo obmena so-
obshcheniyami.
Nakonec, apparatnyj kontrol' otvechaet za obrabotku preryvanij i za svyaz'
s mashinoj. Takie ustrojstva, kak diski i terminaly, mogut preryvat' rabotu
central'nogo processora vo vremya vypolneniya processa. Pri etom yadro sistemy
posle obrabotki preryvaniya mozhet vozobnovit' vypolnenie prervannogo proces-
sa. Preryvaniya obrabatyvayutsya ne samimi processami, a special'nymi funkciyami
yadra sistemy, perechislennymi v kontekste vypolnyaemogo processa.
2.2 VVEDENIE V OSNOVNYE PONYATIYA SISTEMY
V eto razdele daetsya obzor nekotoryh osnovnyh informacionnyh struktur,
ispol'zuemyh yadrom sistemy, i bolee podrobno opisyvaetsya funkcionirovanie
modulej yadra, pokazannyh na Risunke 2.1.
2.2.1 Obzor osobennostej podsistemy upravleniya fajlami
Vnutrennee predstavlenie fajla opisyvaetsya v indekse, kotoryj soderzhit
24
opisanie razmeshcheniya informacii fajla na diske i druguyu informaciyu, takuyu kak
vladelec fajla, prava dostupa k fajlu i vremya dostupa. Termin "indeks"
(inode) shiroko ispol'zuetsya v literature po sisteme UNIX. Kazhdyj fajl imeet
odin indeks, no mozhet byt' svyazan s neskol'kimi imenami, kotorye vse otrazha-
yutsya v indekse. Kazhdoe imya yavlyaetsya ukazatelem. Kogda process obrashchaetsya k
fajlu po imeni, yadro sistemy analiziruet po ocheredi kazhduyu komponentu imeni
fajla, proveryaya prava processa na prosmotr vhodyashchih v put' poiska katalogov,
i v konce koncov vozvrashchaet indeks fajla. Naprimer, esli process obrashchaetsya
k sisteme:
open("/fs2/mjb/rje/sourcefile", 1);
yadro sistemy vozvrashchaet indeks dlya fajla "/fs2/mjb/rje/sourcefile". Esli
process sozdaet novyj fajl, yadro prisvaivaet etomu fajlu neispol'zuemyj in-
deks. Indeksy hranyatsya v fajlovoj sisteme (i eto my eshche uvidim), odnako pri
obrabotke fajlov yadro zanosit ih v tablicu indeksov v operativnoj pamyati.
YAdro podderzhivaet eshche dve informacionnye struktury, tablicu fajlov i
pol'zovatel'skuyu tablicu deskriptorov fajla. Tablica fajlov vystupaet glo-
bal'noj strukturoj yadra, a pol'zovatel'skaya tablica deskriptorov fajla vyde-
lyaetsya pod process. Esli process otkryvaet ili sozdaet fajl, yadro vydelyaet v
kazhdoj tablice element, korrespondiruyushchij s indeksom fajla. |lementy v etih
treh strukturah - v pol'zovatel'skoj tablice deskriptorov fajla, v tablice
fajlov i v tablice indeksov - hranyat informaciyu o sostoyanii fajla i o dostu-
pe pol'zovatelej k nemu. V tablice fajlov hranitsya smeshchenie v bajtah ot na-
chala fajla do togo mesta, otkuda nachnet vypolnyat'sya sleduyushchaya komanda pol'-
zovatelya read ili write,
Pol'zovatel'skaya
tablica deskrip- Tablica fajlov Tablica indeksov
torov fajla
+---------+ +-----+ +-----+
| | | | | |
+---------+ | | | |
| --+---+ | | +-----+
+---------+ | | | +-------->| |
| --+-+ | +-----+ | +-----+
+---------+ | +-------->| --+---+ | |
| | | +-----+ | |
| | +--+ | ... | +-----+
| | | +-----+ +-------->| |
| | +------->| --+---+ +-----+
| | +-----+ | |
| | | | | |
+---------+ +-----+ +-----+
Risunok 2.2. Tablicy fajlov, deskriptorov fajla i indeksov
a takzhe informaciya o pravah dostupa k otkryvaemomu processu. Tablica desk-
riptorov fajla identificiruet vse otkrytye dlya processa fajly. Na Risunke
2.2 pokazany eti tablicy i svyazi mezhdu nimi. V sistemnyh operaciyah open (ot-
kryt') i creat (sozdat') yadro vozvrashchaet deskriptor fajla, kotoromu sootvet-
stvuet ukazatel' v tablice deskriptorov fajla. Pri vypolnenii operacij read
(chitat') i write (pisat') yadro ispol'zuet deskriptor fajla dlya vhoda v tab-
licu deskriptorov i, sleduya ukazatelyam na tablicu fajlov i na tablicu indek-
sov, nahodit informaciyu v fajle. Bolee podrobno eti informacionnye struktury
rassmatrivayutsya v glavah 4 i 5. Sejchas dostatochno skazat', chto ispol'zovanie
etih tablic obespechivaet razlichnuyu stepen' razdeleniya dostupa k fajlu.
Obychnye fajly i katalogi hranyatsya v sisteme UNIX na ustrojstvah vvo-
da-vyvoda blokami, takih kak magnitnye lenty ili diski. Poskol'ku sushchestvuet
25
nekotoroe razlichie vo vremeni dostupa k etim ustrojstvam, pri ustanovke sis-
temy UNIX na lentah razmeshchayut fajlovye sistemy. S godami bezdiskovye avtoma-
tizirovannye rabochie mesta stanut obshchim sluchaem, i fajly budut raspolagat'sya
v udalennoj sisteme, dostup k kotoroj budet osushchestvlyat'sya cherez set' (sm.
glavu 13). Dlya prostoty, tem ne menee, v posleduyushchem tekste podrazumevaetsya
ispol'zovanie diskov. V sisteme mozhet byt' neskol'ko fizicheskih diskov, na
kazhdom iz kotoryh mozhet razmeshchat'sya odna i bolee fajlovyh sistem. Razbivka
diska na neskol'ko fajlovyh sistem oblegchaet administratoru upravlenie hra-
nimymi dannymi. Na logicheskom urovne yadro imeet delo s fajlovymi sistemami,
a ne s diskami, pri etom kazhdaya sistema traktuetsya kak logicheskoe ustrojst-
vo, identificiruemoe nomerom. Preobrazovanie adresov logicheskogo ustrojstva
(fajlovoj sistemy) v adresa fizicheskogo ustrojstva (diska) i obratno vypol-
nyaetsya diskovym drajverom. Termin "ustrojstvo" v etoj knige ispol'zuetsya dlya
oboznacheniya logicheskogo ustrojstva, krome special'no ogovorennyh sluchaev.
Fajlovaya sistema sostoit iz posledovatel'nosti logicheskih blokov dlinoj
512, 1024, 2048 ili drugogo chisla bajt, kratnogo 512, v zavisimosti ot rea-
lizacii sistemy. Razmer logicheskogo bloka vnutri odnoj fajlovoj sistemy pos-
toyanen, no mozhet var'irovat'sya v raznyh fajlovyh sistemah v dannoj konfigu-
racii. Ispol'zovanie logicheskih blokov bol'shogo razmera uvelichivaet skorost'
peredachi dannyh mezhdu diskom i pamyat'yu, poskol'ku yadro smozhet peredat' bol'-
she informacii za odnu diskovuyu operaciyu, i sokrashchaet kolichestvo prodolzhi-
tel'nyh operacij. Naprimer, chtenie 1 Kbajta s diska za odnu operaciyu osushches-
tvlyaetsya bystree, chem chtenie 512 bajt za dve. Odnako, esli razmer logichesko-
go bloka slishkom velik, poleznyj ob容m pamyati mozhet umen'shit'sya, eto budet
pokazano v glave 5. Dlya prostoty termin "blok" v etoj knige budet ispol'zo-
vat'sya dlya oboznacheniya logicheskogo bloka, pri etom podrazumevaetsya logiches-
kij blok razmerom 1 Kbajt, krome special'no ogovorennyh sluchaev.
+---------+---------+-------------------+-----------------+
| blok | super- | spisok | informacionnye |
|zagruzki | blok | indeksov | bloki |
+---------+---------+-------------------+-----------------+
Risunok 2.3. Format fajlovoj sistemy
Fajlovaya sistema imeet sleduyushchuyu strukturu (Risunok 2.3).
* Blok zagruzki raspolagaetsya v nachale prostranstva, otvedennogo pod fajlo-
vuyu sistemu, obychno v pervom sektore, i soderzhit programmu nachal'noj zag-
ruzki, kotoraya schityvaetsya v mashinu pri zagruzke ili inicializacii opera-
cionnoj sistemy. Hotya dlya zapuska sistemy trebuetsya tol'ko odin blok zag-
ruzki, kazhdaya fajlovaya sistema imeet svoj (pust' dazhe pustoj) blok zagruz-
ki.
* Superblok opisyvaet sostoyanie fajlovoj sistemy - kakogo ona razmera,
skol'ko fajlov mozhet v nej hranit'sya, gde raspolagaetsya svobodnoe prost-
ranstvo, dostupnoe dlya fajlovoj sistemy, i drugaya informaciya.
* Spisok indeksov v fajlovoj sisteme raspolagaetsya vsled za superblokom. Ad-
ministratory ukazyvayut razmer spiska indeksov pri generacii fajlovoj sis-
temy. YAdro operacionnoj sistemy obrashchaetsya k indeksam, ispol'zuya ukazateli
v spiske indeksov. Odin iz indeksov yavlyaetsya kornevym indeksom fajlovoj
sistemy: eto indeks, po kotoromu osushchestvlyaetsya dostup k strukture katalo-
gov fajlovoj sistemy posle vypolneniya sistemnoj operacii mount (montiro-
vat') (razdel 5.14).
* Informacionnye bloki raspolagayutsya srazu posle spiska indeksov i soderzhat
dannye fajlov i upravlyayushchie dannye. Otdel'no vzyatyj informacionnyj blok
mozhet prinadlezhat' odnomu i tol'ko odnomu fajlu v fajlovoj sisteme.
26
V etom razdele my rassmotrim bolee podrobno podsistemu upravleniya pro-
cessami. Dayutsya raz座asneniya po povodu struktury processa i nekotoryh infor-
macionnyh struktur, ispol'zuemyh pri raspredelenii pamyati pod processy. Za-
tem daetsya predvaritel'nyj obzor diagrammy sostoyaniya processov i zatragiva-
yutsya razlichnye voprosy, svyazannye s perehodami iz odnogo sostoyaniya v drugoe.
Processom nazyvaetsya posledovatel'nost' operacij pri vypolnenii program-
my, kotorye predstavlyayut soboj nabory bajtov, interpretiruemye central'nym
processorom kak mashinnye instrukcii (t.n. "tekst"), dannye i stekovye struk-
tury. Sozdaetsya vpechatlenie, chto odnovremenno vypolnyaetsya mnozhestvo proces-
sov, poskol'ku ih vypolnenie planiruetsya yadrom, i, krome togo, neskol'ko
processov mogut byt' ekzemplyarami odnoj programmy. Vypolnenie processa zak-
lyuchaetsya v tochnom sledovanii naboru instrukcij, kotoryj yavlyaetsya zamknutym i
ne peredaet upravlenie naboru instrukcij drugogo processa; on schityvaet i
zapisyvaet informaciyu v razdel dannyh i v stek, no emu nedostupny dannye i
steki drugih processov. Odni processy vzaimodejstvuyut s drugimi processami i
s ostal'nym mirom posredstvom obrashchenij k operacionnoj sisteme.
S prakticheskoj tochki zreniya process v sisteme UNIX yavlyaetsya ob容ktom,
sozdavaemym v rezul'tate vypolneniya sistemnoj operacii fork. Kazhdyj process,
za isklyucheniem nulevogo, porozhdaetsya v rezul'tate zapuska drugim processom
operacii fork. Process, zapustivshij operaciyu fork, nazyvaetsya roditel'skim,
a vnov' sozdannyj process - porozhdennym. Kazhdyj process imeet odnogo rodite-
lya, no mozhet porodit' mnogo processov. YAdro sistemy identificiruet kazhdyj
process po ego nomeru, kotoryj nazyvaetsya identifikatorom processa (PID).
Nulevoj process yavlyaetsya osobennym processom, kotoryj sozdaetsya "vruchnuyu" v
rezul'tate zagruzki sistemy; posle porozhdeniya novogo processa (process 1)
nulevoj process stanovitsya processom podkachki. Process 1, izvestnyj pod ime-
nem init, yavlyaetsya predkom lyubogo drugogo processa v sisteme i svyazan s kazh-
dym processom osobym obrazom, opisyvaemym v glave 7.
Pol'zovatel', transliruya ishodnyj tekst programmy, sozdaet ispolnyaemyj
fajl, kotoryj sostoit iz neskol'kih chastej:
* nabora "zagolovkov", opisyvayushchih atributy fajla,
* teksta programmy,
* predstavleniya na mashinnom yazyke dannyh, imeyushchih nachal'nye
znacheniya pri zapuske programmy na vypolnenie, i ukazaniya na to, skol'ko
prostranstva pamyati yadro sistemy vydelit pod neinacializirovannye dannye,
tak nazyvaemye bss (*) (yadro ustanavlivaet ih v 0 v moment zapuska),
* drugih sekcij, takih kak informaciya simvolicheskih tablic.
Dlya programmy, privedennoj na Risunke 1.3, tekst ispolnyaemogo fajla
predstavlyaet soboj sgenerirovannyj kod dlya funkcij main i copy, k opredelen-
nym dannym otnositsya peremennaya version (vstavlennaya v programmu dlya togo,
chtoby v poslednej imelis' nekotorye opredelennye dannye), a k neopredelennym
- massiv buffer. Kompilyator s yazyka Si dlya sistemy versii V sozdaet otdel'no
tekstovuyu sekciyu po umolchaniyu, no ne isklyuchaetsya vozmozhnost' vklyucheniya inst-
rukcij programmy i v sekciyu dannyh, kak v predydushchih versiyah sistemy.
YAdro zagruzhaet ispolnyaemyj fajl v pamyat' pri vypolnenii sistemnoj opera-
cii exec, pri etom zagruzhennyj process sostoit po men'shej mere iz treh chas-
tej, tak nazyvaemyh oblastej: teksta, dannyh i steka. Oblasti teksta i dan-
nyh korrespondiruyut s sekciyami teksta i bss-dannyh ispolnyaemogo fajla, a ob-
last' steka sozdaetsya avtomaticheski i ee razmer dinamicheski ustanavlivaetsya
yadrom sistemy vo vremya vypolneniya. Stek sostoit iz logicheskih zapisej akti-
vacii, pomeshchaemyh v stek pri vyzove funkcii i vytalkivaemyh iz steka pri
vozvrate upravleniya v vyzvavshuyu proceduru; special'nyj registr, imenuemyj
ukazatelem vershiny steka, pokazyvaet tekushchuyu glubinu steka. Zapis' aktivacii
vklyuchaet parametry peredavae-
------------------------------------------------
(*) Sokrashchenie bss imeet proishozhdenie ot assemblernogo psevdooperatora dlya
mashiny IBM 7090 i rasshifrovyvaetsya kak "block started by symbol" ("blok, na-
chinayushchijsya s simvola").
27
mye funkcii, ee lokal'nye peremennye, a takzhe dannye, neobhodimye dlya voss-
tanovleniya predydushchej zapisi aktivacii, v tom chisle znacheniya schetchika komand
i ukazatelya vershiny steka v moment vyzova funkcii. Tekst programmy vklyuchaet
Stek zadachi Napravlenie Stek yadra
+--------------+ uvelicheniya steka +------------------+
| Lokal'nye | ^ | |
| peremennye | | | ^ |
| (ne pokazany)| | | . |
|--------------| | | . |
|Adres zapisi 2| | | . |
|--------------| | | . |
|Adres vozvrata| | | . |
| posle vyzova | | | . |
| write | | | . |
|--------------| | | . |
|parametry, pe-| | | . |
| redavaemye | | | . |
| write | | | . |
|(new, buffer, | | | v |
| count) | Zapis' 3 | |
+--------------+ call write() Zapis' 3 +------------------+
| Lokal'nye | | Lokal'nye |
| peremennye | | peremennye |
| (count) | | |
|--------------| |------------------|
|Adres zapisi 1| | Adres zapisi 1 |
|--------------| |------------------|
|Adres vozvrata| | Adres vozvrata |
| posle vyzova | | posle vyzova |
| copy | | func2 |
|--------------| |------------------|
|parametry, pe-| | parametry, pere- |
| redavaemye | | davaemye funkcii |
| copy | | yadra func2 |
| (old, new) | Zapis' 2 Zapis' 2 | |
+--------------+ call copy() call func2() +------------------+
| Lokal'nye | | Lokal'nye |
| peremennye | | peremennye |
|(fdold, fdnew)| | |
|--------------| |------------------|
|Adres zapisi 0| | Adres zapisi 0 |
|--------------| |------------------|
|Adres vozvrata| | Adres vozvrata |
| posle vyzova | | posle vyzova |
| main | | func1 |
|--------------| |------------------|
|parametry, pe-| | parametry, pere- |
| redavaemye | | davaemye funkcii |
| main | | yadra func1 |
| (argc, argv) | Zapis' 1 Zapis' 1 | |
+--------------+ call main() call func1() +------------------+
Zapis' 0 Zapis' 0
Start Interfejs
obrashchenij k operacionnoj sisteme
Risunok 2.4. Steki zadachi i yadra dlya programmy kopirovaniya.
28
posledovatel'nosti komand, upravlyayushchie uvelicheniem steka, a yadro sistemy vy-
delyaet, esli nuzhno, mesto pod stek. V programme na Risunke 1.3 parametry
argc i argv, a takzhe peremennye fdold i fdnew, soderzhashchiesya v vyzove funkcii
main, pomeshchayutsya v stek, kak tol'ko vstretilos' obrashchenie k funkcii main
(odin raz v kazhdoj programme, po usloviyu), tak zhe i parametry old i new i
peremennaya count, soderzhashchiesya v vyzove funkcii copy, pomeshchayutsya v stek v
moment obrashcheniya k ukazannoj funkcii.
Poskol'ku process v sisteme UNIX mozhet vypolnyat'sya v dvuh rezhimah, rezhi-
me yadra ili rezhime zadachi, on pol'zuetsya v kazhdom iz etih rezhimov otdel'nym
stekom. Stek zadachi soderzhit argumenty, lokal'nye peremennye i druguyu infor-
maciyu otnositel'no funkcij, vypolnyaemyh v rezhime zadachi. Sleva na Risunke
2.4 pokazan stek zadachi dlya processa, svyazannogo s vypolneniem sistemnoj
operacii write v programme copy. Procedura zapuska processa (vklyuchennaya v
biblioteku) obratilas' k funkcii main s peredachej ej dvuh parametrov, pomes-
tiv v stek zadachi zapis' 1; v zapisi 1 est' mesto dlya dvuh lokal'nyh pere-
mennyh funkcii main. Funkciya main zatem vyzyvaet funkciyu copy s peredachej ej
dvuh parametrov, old i new, i pomeshchaet v stek zadachi zapis' 2; v zapisi 2
est' mesto dlya lokal'noj peremennoj count. Nakonec, process aktiviziruet
sistemnuyu operaciyu write, vyzvav bibliotechnuyu funkciyu s tem zhe imenem. Kazh-
doj sistemnoj operacii sootvetstvuet tochka vhoda v biblioteke sistemnyh ope-
racij; biblioteka sistemnyh operacij napisana na yazyke assemblera i vklyuchaet
special'nye komandy preryvaniya, kotorye, vypolnyayas', porozhdayut "preryvanie",
vyzyvayushchee pereklyuchenie apparatury v rezhim yadra. Process ishchet v biblioteke
tochku vhoda, sootvetstvuyushchuyu otdel'noj sistemnoj operacii, podobno tomu, kak
on vyzyvaet lyubuyu iz funkcij, sozdavaya pri etom dlya bibliotechnoj funkcii za-
pis' aktivacii. Kogda process vypolnyaet special'nuyu instrukciyu, on pereklyu-
chaetsya v rezhim yadra, vypolnyaet operacii yadra i ispol'zuet stek yadra.
Stek yadra soderzhit zapisi aktivacii dlya funkcij, vypolnyayushchihsya v rezhime
yadra. |lementy funkcij i dannyh v steke yadra sootvetstvuyut funkciyam i dan-
nym, otnosyashchimsya k yadru, no ne k programme pol'zovatelya, tem ne menee, kons-
trukciya steka yadra podobna konstrukcii steka zadachi. Stek yadra dlya processa
pust, esli process vypolnyaetsya v rezhime zadachi. Sprava na Risunke 2.4 preds-
tavlen stek yadra dlya processa vypolneniya sistemnoj operacii write v program-
promezhutochnaya
tablica oblas- tablica
tej processov oblastej
+---------------------+ +-------------+ +------------+
| chast' adresnogo pro-| | | | |
| stranstva zadachi, | | | | |
| vydelennaya processu | | | | |
+---------------------+ +-------------+ +------------+
^ +--+-> ---+-----+-> |
| | +-------------+ +-----+------+
+----------+----------+ +--+-> ---+--+ | | |
| | | | +-------------+ | | | |
| | | | | | | +-----+------+
+----------+----------+ | | | +--+-> | |
| v -----+--+ | | +-----+---+--+
+---------------------+ | | | | | |
| | +-------------+ +-----+---+--+
| | | |
+---------------------+ | |
tablica processov +-------------------------+---+--+
| operativnaya pamyat' v v |
+--------------------------------+
Risunok 2.5. Informacionnye struktury dlya processov
29
me copy. Podrobno algoritmy vypolneniya sistemnoj operacii write budut opisa-
ny v posleduyushchih razdelah.
Kazhdomu processu sootvetstvuet tochka vhoda v tablice processov yadra,
krome togo, kazhdomu processu vydelyaetsya chast' operativnoj pamyati, otvedennaya
pod zadachu pol'zovatelya. Tablica processov vklyuchaet v sebya ukazateli na pro-
mezhutochnuyu tablicu oblastej processov, tochki vhoda v kotoruyu sluzhat v kaches-
tve ukazatelej na sobstvenno tablicu oblastej. Oblast'yu nazyvaetsya nepreryv-
naya zona
adresnogo prostranstva, vydelyaemaya processu dlya razmeshcheniya teksta, dannyh i
steka. Tochki vhoda v tablicu oblastej opisyvayut atributy oblasti, kak napri-
mer, hranyatsya li v oblasti tekst programmy ili dannye, zakrytaya li eta ob-
last' ili zhe sovmestno ispol'zuemaya, i gde konkretno v pamyati razmeshchaetsya
soderzhimoe oblasti. Vneshnij uroven' kosvennoj adresacii (cherez promezhutochnuyu
tablicu oblastej, ispol'zuemyh processami, k sobstvenno tablice oblastej)
pozvolyaet nezavisimym processam sovmestno ispol'zovat' oblasti. Kogda pro-
cess zapuskaet sistemnuyu operaciyu exec, yadro sistemy vydelyaet oblasti pod ee
tekst, dannye i stek, osvobozhdaya starye oblasti, kotorye ispol'zovalis' pro-
cessom. Esli process zapuskaet operaciyu fork, yadro udvaivaet razmer adresno-
go prostranstva starogo processa, pozvolyaya processam sovmestno ispol'zovat'
oblasti, kogda eto vozmozhno, i, s drugoj storony, proizvodya fizicheskoe kopi-
rovanie. Esli process zapuskaet operaciyu exit, yadro osvobozhdaet oblasti, ko-
torye ispol'zovalis' processom. Na Risunke 2.5 izobrazheny informacionnye
struktury, svyazannye s zapuskom processa. Tablica processov ssylaetsya na
promezhutochnuyu tablicu oblastej, ispol'zuemyh processom, v kotoroj soderzhatsya
ukazateli na zapisi v sobstvenno tablice oblastej, sootvetstvuyushchie oblastyam
dlya teksta, dannyh i steka processa.
Zapis' v tablice processov i chast' adresnogo prostranstva zadachi, vyde-
lennaya processu, soderzhat upravlyayushchuyu informaciyu i dannye o sostoyanii pro-
cessa. |to adresnoe prostranstvo yavlyaetsya rasshireniem sootvetstvuyushchej zapisi
v tablice processov, razlichiya mezhdu dannymi ob容ktami budut rassmotreny v
glave 6. V kachestve polej v tablice processov, kotorye rassmatrivayutsya v
posleduyushchih razdelah, vystupayut:
* pole sostoyaniya,
* identifikatory, kotorye harakterizuyut pol'zovatelya, yavlyayushchegosya vla-
del'cem processa (kod pol'zovatelya ili UID),
* znachenie deskriptora sobytiya, kogda process priostanovlen (nahoditsya v
sostoyanii "sna").
Adresnoe prostranstvo zadachi, vydelennoe processu, soderzhit opisyvayushchuyu
process informaciyu, dostup k kotoroj dolzhen obespechivat'sya tol'ko vo vremya
vypolneniya processa. Vazhnymi polyami yavlyayutsya:
* ukazatel' na poziciyu v tablice processov, sootvetstvuyushchuyu tekushchemu
processu,
* parametry tekushchej sistemnoj operacii, vozvrashchaemye znacheniya i kody
oshibok,
* deskriptory fajla dlya vseh otkrytyh fajlov,
* vnutrennie parametry vvoda-vyvoda,
* tekushchij katalog i tekushchij koren' (sm. glavu 5),
* granicy fajlov i processa.
YAdro sistemy imeet neposredstvennyj dostup k polyam adresnogo prostranst-
va zadachi, vydelennogo vypolnyaemomu processu, no ne imeet dostup k sootvets-
tvuyushchim polyam drugih processov. S tochki zreniya vnutrennego algoritma, pri
obrashchenii k adresnomu prostranstvu zadachi, vydelennomu vypolnyaemomu proces-
su, yadro ssylaetsya na strukturnuyu peremennuyu u, i, kogda zapuskaetsya na vy-
polnenie drugoj process, yadro perenastraivaet virtual'nye adresa takim obra-
zom, chtoby strukturnaya peremennaya u ukazyvala by na adresnoe prostranstvo
zadachi dlya novogo processa. V sistemnoj realizacii predusmotreno oblegchenie
identifikacii tekushchego processa blagodarya nalichiyu ukazatelya na sootvetstvuyu-
30
shchuyu zapis' v tablice processov iz adresnogo prostranstva zadachi.
2.2.2.1 Kontekst processa
Kontekstom processa yavlyaetsya ego sostoyanie, opredelyaemoe tekstom, znache-
niyami global'nyh peremennyh pol'zovatelya i informacionnymi strukturami, zna-
cheniyami ispol'zuemyh mashinnyh registrov, znacheniyami, hranimymi v pozicii
tablicy processov i v adresnom prostranstve zadachi, a takzhe soderzhimym ste-
kov zadachi i yadra, otnosyashchihsya k dannomu processu. Tekst operacij sistemy i
ee global'nye informacionnye struktury sovmestno ispol'zuyutsya vsemi proces-
sami, no ne yavlyayutsya sostavnoj chast'yu konteksta processa.
Govoryat, chto pri zapuske processa sistema ispolnyaetsya v kontekste pro-
cessa. Kogda yadro sistemy reshaet zapustit' drugoj process, ono vypolnyaet pe-
reklyuchenie konteksta s tem, chtoby sistema ispolnyalas' v kontekste drugogo
processa. YAdro osushchestvlyaet pereklyuchenie konteksta tol'ko pri opredelennyh
usloviyah, chto my uvidim v dal'nejshem. Vypolnyaya pereklyuchenie konteksta, yadro
sohranyaet informaciyu, dostatochnuyu dlya togo, chtoby pozdnee pereklyuchit'sya
vnov' na pervyj process i vozobnovit' ego vypolnenie. Analogichnym obrazom,
pri perehode iz rezhima zadachi v rezhim yadra, yadro sistemy sohranyaet informa-
ciyu, dostatochnuyu dlya togo, chtoby pozdnee vernut'sya v rezhim zadachi i prodol-
zhit' vypolnenie s prervannogo mesta. Odnako, perehod iz rezhima zadachi v re-
zhim yadra yavlyaetsya smenoj rezhima, no ne pereklyucheniem konteksta. Esli obra-
tit'sya eshche raz k Risunku 1.5, mozhno skazat', chto yadro vypolnyaet pereklyuchenie
konteksta, kogda menyaet kontekst processa A na kontekst processa B; ono me-
nyaet rezhim vypolneniya s rezhima zadachi na rezhim yadra i naoborot, ostavayas' v
kontekste odnogo processa, naprimer, processa A.
YAdro obrabatyvaet preryvaniya v kontekste prervannogo processa, pust' da-
zhe ono i ne vyzyvalo nikakogo preryvaniya. Prervannyj process mog pri etom
vypolnyat'sya kak v rezhime zadachi, tak i v rezhime yadra. YAdro sohranyaet infor-
maciyu, dostatochnuyu dlya togo, chtoby mozhno bylo pozzhe vozobnovit' vypolnenie
prervannogo processa, i obrabatyvaet preryvanie v rezhime yadra. YAdro ne po-
rozhdaet i ne planiruet porozhdenie kakogo-to osobogo processa po obrabotke
preryvanij.
2.2.2.2 Sostoyaniya processa
Vremya zhizni processa mozhno razdelit' na neskol'ko sostoyanij, kazhdoe iz
kotoryh imeet opredelennye harakteristiki, opisyvayushchie process. Vse sostoya-
niya processa rassmatrivayutsya v glave 6, odnako predstavlyaetsya sushchestvennym
dlya ponimaniya perechislit' nekotorye iz sostoyanij uzhe sejchas:
1. Process vypolnyaetsya v rezhime zadachi.
2. Process vypolnyaetsya v rezhime yadra.
3. Process ne vypolnyaetsya, no gotov k vypolneniyu i zhdet, kogda planirov-
shchik vyberet ego. V etom sostoyanii mozhet nahodit'sya mnogo processov, i algo-
ritm planirovaniya ustanavlivaet, kakoj iz processov budet vypolnyat'sya sledu-
yushchim.
4. Process priostanovlen ("spit"). Process "vpadaet v son", kogda on ne
mozhet bol'she prodolzhat' vypolnenie, naprimer, kogda zhdet zaversheniya vvo-
da-vyvoda.
Poskol'ku processor v kazhdyj moment vremeni vypolnyaet tol'ko odin pro-
cess, v sostoyaniyah 1 i 2 mozhet nahodit'sya samoe bol'shee odin process. |ti
dva sostoyaniya sootvetstvuyut dvum rezhimam vypolneniya, rezhimu zadachi i rezhimu
yadra.
31
2.2.2.3 Perehody iz sostoyaniya v sostoyanie
Sostoyaniya processa, perechislennye vyshe, dayut staticheskoe predstavlenie o
processe, odnako processy nepreryvno perehodyat iz sostoyaniya v sostoyanie v
sootvetstvii s opredelennymi pravilami. Diagramma perehodov predstavlyaet so-
boj orientirovannyj graf, vershiny kotorogo predstavlyayut soboj sostoyaniya, v
kotorye mozhet perejti process, a dugi - sobytiya, yavlyayushchiesya prichinami pere-
hoda processa iz odnogo sostoyaniya v drugoe. Perehod mezhdu dvumya sostoyaniyami
razreshen, esli sushchestvuet duga iz pervogo sostoyaniya vo vtoroe. Neskol'ko dug
mozhet vyhodit' iz odnogo sostoyaniya, odnako process perehodit tol'ko po odnoj
iz nih v zavisimosti ot togo, kakoe sobytie proizoshlo v sisteme. Na Risunke
2.6 predstavlena diagramma perehodov dlya sostoyanij, perechislennyh vyshe.
Kak uzhe govorilos' vyshe, v rezhime razdeleniya vremeni mozhet vypolnyat'sya
odnovremenno neskol'ko processov, i vse oni mogut odnovremenno rabotat' v
rezhime yadra. Esli im razreshit' svobodno vypolnyat'sya v rezhime yadra, to oni
mogut isportit' global'nye informacionnye struktury, prinadlezhashchie yadru.
Zapreshchaya proizvol'noe pereklyuchenie kontekstov i upravlyaya vozniknoveniem so-
bytij, yadro zashchishchaet svoyu celostnost'.
YAdro razreshaet pereklyuchenie konteksta tol'ko togda, kogda process pere-
hodit iz sostoyaniya "zapusk v rezhime yadra" v sostoyanie "sna v pamyati". Pro-
cessy, zapushchennye v rezhime yadra, ne mogut byt' vygruzheny drugimi processami;
poetomu inogda govoryat, chto yadro nevygruzhaemo, pri etom processy, nahodyashchie-
sya v rezhime zadachi, mogut vygruzhat'sya sistemoj. YAdro podderzhivaet celost-
nost' svoih informacionnyh struktur, poskol'ku ono nevygruzhaemo, takim obra-
zom reshaya problemu "vzaimnogo isklyucheniya" - obespecheniya togo, chto kritiches-
kie sekcii programmy vypolnyayutsya v kazhdyj moment vremeni v ramkah samoe
bol'shee odnogo processa.
V kachestve primera rassmotrim programmu (Risunok 2.7) vklyucheniya informa-
cionnoj struktury, chej adres soderzhitsya v ukazatele bp1, v spisok s ispol'-
zovaniem ukazatelej posle struktury, chej adres soderzhitsya v bp. Esli sistema
razreshila pereklyuchenie konteksta pri vypolnenii yadrom fragmenta programmy,
vozmozhno vozniknovenie sleduyushchej situacii. Predpolozhim, yadro vypolnyaet prog-
rammu
zapusk +-------+
v rezhi- | |
me za- | 1 |
dachi | |
+-+-----+
obrashchenie | ^ vozvrat
k sisteme | |
ili pre- | |
ryvanie | |
v |
zapusk +-----+-+
v rezhi- | |<---------+ preryvanie,
me yad- | 2 | | vozvrat iz
ra | |<---------+ preryvaniya
+-+-----+
priosta-| ^ process pla-
+-------+ nov | | nirovaniya +-------+
ozhidanie | |<----------+ +------------+ | gotovnost'
("son")| 4 +--------------------------->| 3 | k vypolneniyu
+-------+ probuzhdenie +-------+
pereklyuchenie
konteksta dopustimo
Risunok 2.6. Sostoyaniya processa i perehody mezhdu nimi
32
do kommentariev i zatem osushchestvlyaet pereklyuchenie konteksta. Spisok s is-
pol'zovaniem sdvoennyh ukazatelej imeet protivorechivyj vid: struktura bp1
tol'ko napolovinu vhodit v etot spisok. Esli process sleduet za perednimi
ukazatelyami, on obnaruzhit bp1 v dannom spiske, no esli on posleduet za fono-
vymi ukazatelyami, to voobshche ne najdet strukturu bp1 (Risunok 2.8). Esli dru-
gie processy budut obrabatyvat' ukazateli v spiske do momenta povtornogo za-
puska pervogo processa, struktura spiska mozhet postoyanno razrushat'sya. Siste-
ma UNIX preduprezhdaet vozniknovenie podobnyh situacij, zapreshchaya pereklyuchenie
kontekstov na vremya vypolneniya processa v rezhime yadra. Esli process pereho-
dit v sostoyanie "sna", delaya dopustimym pereklyuchenie konteksta, algoritmy
yadra obespechivayut zashchitu celostnosti informacionnyh struktur sistemy.
Problemoj, kotoraya mozhet privesti k narusheniyu celostnosti informacii yad-
ra, yavlyaetsya obrabotka preryvanij, mogushchaya vnosit' izmeneniya v informaciyu o
sostoyanii yadra. Naprimer, esli yadro vypolnyalo programmu, privedennuyu na Ri-
sunke 2.7, i poluchilo preryvanie po dostizhenii kommentariev, programma obra-
botki preryva-
+-----------------------------------------------------------+
| struct queue { |
| |
| |
| |
| } *bp, *bp1; |
| bp1 - > forp = bp - > forp; |
| bp1 - > backp = bp; |
| bp - > forp = bp1; |
| /* zdes' rassmotrite vozmozhnost' pereklyucheniya konteksta */|
| bp1 - > forp - > backp = bp1; |
+-----------------------------------------------------------+
Risunok 2.7. Primer programmy, sozdayushchej spisok s dvunapravlennymi ukazate-
lyami
+-------+
| |
| bp1 |
| |
+-------+
+-------+ +-------+
----->| +------------------------------>| +---->
| bp | | |
<-----+ |<------------------------------+ |<----
+-------+ +-------+
Vklyuchenie bp1 v spisok s dvunapravlennymi ukazatelyami
+-------+ +-------+ +-------+
----->| +---------->| +---------->| +---->
| bp | | bp1 | | |
<-----+ |<----------+ | +-----+ |<----
+-------+<----+ +-------+ | +-------+
+-------------------+
Risunok 2.8. Spisok s ukazatelyami, nekorrektnyj iz-za pereklyucheniya kontek-
sta
33
nij mozhet razrushit' ssylki, esli budet manipulirovat' ukazatelyami, kak bylo
pokazano ranee. CHtoby reshit' etu problemu, sistema mogla by zapretit' vse
preryvaniya na vremya raboty v rezhime yadra, no pri etom zatyanulas' by obrabot-
ka preryvaniya, chto v konechnom schete naneslo by ushcherb proizvoditel'nosti sis-
temy. Vmesto etogo yadro povyshaet prioritet preryvaniya processora, zapreshchaya
preryvaniya na vremya vypolneniya kriticheskih sekcij programmy. Sekciya program-
my yavlyaetsya kriticheskoj, esli v processe ee vypolneniya zapusk programm obra-
botki proizvol'nogo preryvaniya mozhet privesti k vozniknoveniyu problem, imeyu-
shchih otnoshenie k narusheniyu celostnosti. Naprimer, esli programma obrabotki
preryvaniya ot diska rabotaet s bufernymi ocheredyami, to chast' preryvaemoj
programmy, pri vypolnenii kotoroj yadro obrabatyvaet bufernye ocheredi, yavlya-
etsya kriticheskoj sekciej po otnosheniyu k programme obrabotki preryvaniya ot
diska. Kriticheskie sekcii neveliki po razmeru i vstrechayutsya nechasto, poetomu
ih sushchestvovanie ne okazyvaet prakticheski nikakogo vozdejstviya na proizvodi-
tel'nost' sistemy. V drugih operacionnyh sistemah dannyj vopros reshaetsya pu-
tem zapreshcheniya lyubyh preryvanij pri rabote v sistemnyh rezhimah ili putem
razrabotki shem blokirovki, obespechivayushchih celostnost'. V glave 12 my eshche
vernemsya k etomu voprosu, kogda budem govorit' o mnogoprocessornyh sistemah,
gde primeneniya ukazannyh mer dlya resheniya problemy nedostatochno.
CHtoby podvesti chertu, eshche raz skazhem, chto yadro zashchishchaet svoyu celost-
nost', razreshaya pereklyuchenie konteksta tol'ko togda, kogda process perehodit
v sostoyanie "sna", a takzhe prepyatstvuya vozdejstviyu odnogo processa na drugoj
s cel'yu izmeneniya sostoyaniya poslednego. Ono takzhe povyshaet prioritet prery-
vaniya processora na vremya vypolneniya kriticheskih sekcij programm, zapreshchaya
takim obrazom preryvaniya, kotorye v protivnom sluchae mogut vyzvat' narushenie
celostnosti. Planirovshchik processov periodicheski vygruzhaet processy, vypolnya-
yushchiesya v rezhime zadachi, dlya togo, chtoby processy ne mogli monopol'no ispol'-
zovat' central'nyj processor.
2.2.2.4 "Son" i probuzhdenie
Process, vypolnyayushchijsya v rezhime yadra, imeet znachitel'nuyu stepen' avtono-
mii v reshenii togo, kak emu sleduet reagirovat' na vozniknovenie sistemnyh
sobytij. Processy mogut obshchat'sya mezhdu soboj i "predlagat'" razlichnye al'-
ternativy, no pri etom okonchatel'noe reshenie oni prinimayut samostoyatel'no.
My eshche uvidim, chto sushchestvuet nabor pravil, kotorym podchinyaetsya povedenie
processov v razlichnyh obstoyatel'stvah, no kazhdyj process v konechnom itoge
sleduet etim pravilam po svoej sobstvennoj iniciative. Naprimer, esli pro-
cess dolzhen vremenno priostanovit' vypolnenie ("perejti ko snu"), on eto de-
laet po svoej dobroj vole. Sledovatel'no, programma obrabotki preryvanij ne
mozhet priostanovit' svoe vypolnenie, ibo esli eto sluchitsya, prervannyj pro-
cess dolzhen byl by "perejti ko snu" po umolchaniyu.
Processy priostanavlivayut svoe vypolnenie, potomu chto oni ozhidayut voz-
niknoveniya nekotorogo sobytiya, naprimer, zaversheniya vvoda-vyvoda na perife-
rijnom ustrojstve, vyhoda, vydeleniya sistemnyh resursov i t.d. Kogda govo-
ryat, chto process priostanovilsya po sobytiyu, to imeetsya vvidu, chto process
nahoditsya v sostoyanii "sna" do nastupleniya sobytiya, posle chego on probuditsya
i perejdet v sostoyanie "gotovnosti k vypolneniyu". Odnovremenno mogut prios-
tanovit'sya po sobytiyu mnogo processov; kogda sobytie nastupaet, vse proces-
sy, priostanovlennye po sobytiyu, probuzhdayutsya, poskol'ku znachenie usloviya,
svyazannogo s sobytiem, bol'she ne yavlyaetsya "istinnym". Kogda process probuzh-
daetsya, on perehodit iz sostoyaniya "sna" v sostoyanie "gotovnosti k vypolne-
niyu", nahodyas' v kotorom on uzhe mozhet byt' vybran planirovshchikom; sleduet ob-
ratit' vnimanie na to, chto on ne vypolnyaetsya nemedlenno. Priostanovlennye
processy ne zanimayut central'nyj processor. YAdru sistemy net nadobnosti pos-
toyanno proveryat' to, chto process vse eshche priostanovlen, t.k. ozhidaet nastup-
leniya sobytiya, i zatem budit' ego.
Naprimer, process, vypolnyaemyj v rezhime yadra, dolzhen inogda blokirovat'
34
strukturu dannyh na sluchaj priostanovki v budushchem; processy, pytayushchiesya ob-
ratit'sya k zablokirovannoj strukture, obyazany proverit' nalichie blokirovki i
priostanovit' svoe vypolnenie, esli struktura zablokirovana drugim proces-
som. YAdro vypolnyaet blokirovki takogo roda sleduyushchim obrazom:
while (uslovie "istinno")
sleep (sobytie: uslovie prinimaet znachenie "lozh'");
set condition true;
to est':
poka (uslovie "istinno")
priostanovit'sya (do nastupleniya sobytiya, pri kotorom
uslovie prinimaet znachenie "lozh'");
prisvoit' usloviyu znachenie "istina";
YAdro snimaet blokirovku i "budit" vse processy, priostanov-
lennye iz-za etoj blokirovki, sleduyushchim obrazom:
set condition false;
wakeup (sobytie: uslovie "lozhno");
to est':
prisvoit' usloviyu znachenie "lozh'";
perezapustit'sya (pri nastuplenii sobytiya, pri kotorom uslovie
prinimaet znachenie "lozh'");
Na Risunke 2.9 priveden primer, v kotorom tri processa, A, B i C ospari-
vayut zablokirovannyj bufer. Perehod v sostoyanie "sna" vyzyvaetsya zablokiro-
vannost'yu bufera. Processy, odnazhdy zapustivshis', obnaruzhivayut, chto bufer
zablokirovan, i priostanavlivayut svoe vypolnenie do nastupleniya sobytiya, po
kotoromu bufer budet razblokirovan. V konce koncov blokirovka s bufera sni-
maetsya i vse processy "probuzhdayutsya", perehodya v sostoyanie "gotovnosti k vy-
polneniyu". YAdro nakonec vybiraet odin iz processov, skazhem, B, dlya vypolne-
niya. Process B, vypolnyaya cikl "while", obnaruzhivaet, chto bufer razblokiro-
van, blokiruet ego i prodolzhaet svoe vypolnenie. Esli process B v dal'nejshem
snova priostanovitsya bez snyatiya blokirovki s bufera (naprimer, ozhidaya zaver-
sheniya operacii vvoda-vyvoda), yadro smozhet pristupit' k planirovaniyu vypolne-
niya drugih processov. Esli budet pri etom vybran process A, etot process,
vypolnyaya cikl "while", obnaruzhit, chto bufer zablokirovan, i snova perejdet v
sostoyanie "sna"; vozmozhno to zhe samoe proizojdet i s processom C. V konce
koncov vypolnenie processa B vozobnovitsya i blokirovka s bufera budet snyata,
v rezul'tate chego processy A i C poluchat dostup k nemu. Takim obrazom, cikl
"while-sleep" obespechivaet takoe polozhenie, pri kotorom samoe bol'shee odin
process mozhet imet' dostup k resursu.
Algoritmy perehoda v sostoyanie "sna" i probuzhdeniya bolee podrobno budut
rassmotreny v glave 6. Tem vremenem oni budut schitat'sya "nedelimymi". Pro-
cess perehodit v sostoyanie "sna" mgnovenno i nahoditsya v nem do teh por, po-
ka ne budet "razbuzhen". Posle togo, kak on priostanavlivaetsya, yadro sistemy
nachinaet planirovat' vypolnenie sleduyushchego processa i pereklyuchaet kontekst
na nego.
2.3 STRUKTURY DANNYH YADRA
Bol'shinstvo informacionnyh struktur yadra razmeshchaetsya v tablicah fiksiro-
vannogo razmera, a ne v dinamicheski vydelennoj pamyati. Preimushchestvo takogo
podhoda sostoit v tom, chto programma yadra prosta, no v nej ogranichivaetsya
chislo elementov informacionnoj struktury do znacheniya, predvaritel'no zadan-
nogo pri generacii sistemy. Esli vo vremya funkcionirovaniya sistemy chislo
elementov informacionnoj struktury yadra vyjdet za ukazannoe znachenie, yadro
ne smozhet dinamicheski vydelit' mesto dlya novyh elementov i dolzhno soobshchit'
35
ob oshibke pol'zovatelyu, sdelavshemu zapros. Esli, s drugoj storony, yadro sge-
nerirovano takim obrazom, chto vyhod za granicy tablichnogo prostranstva budet
maloveroyaten, dopolnitel'noe tablichnoe prostranstvo mozhet ne ponadobit'sya,
poskol'ku ono ne mozhet byt' ispol'zovano dlya drugih celej. Kak by to ni by-
lo, prostota algoritmov yadra predstavlyaetsya bolee vazhnoj, chem szhatie posled-
nih bajtov operativnoj pamyati. Obychno v algoritmah dlya poiska svobodnyh mest
v tablicah ispol'zuyutsya neslozhnye cikly i etot metod bolee ponyaten i inogda
bolee effektiven po sravneniyu s bolee slozhnymi shemami vydeleniya pamyati.
K upravlyayushchim processam, grubo govorya, otnosyatsya te processy, kotorye
vypolnyayut razlichnye funkcii po obespecheniyu blagopoluchnoj raboty pol'zovate-
lej sistemy. K takim funkciyam otnosyatsya formatirovanie diskov, sozdanie no-
vyh fajlovyh sistem, vosstanovlenie razrushennyh fajlovyh sistem, otladka yad-
ra i dr. S konceptual'noj
Vremya Process A Process B Process C
+-------------------------------------------------------------
| Bufer zablokirovan
| Priostanovlen
| . Bufer zablokirovan
| . Priostanovlen
| . . Bufer zablokirovan
| . . Priostanovlen
| +----------------------------------------------------------+
| |Bufer razblokirovan Probuzhdenie vseh "spyashchih" processov|
| +----------------------------------------------------------+
| Gotov k Gotov k Gotov k
| vypolneniyu vypolneniyu vypolneniyu
| . .
| . Zapushchen .
| . Bufer razblokirovan .
| . Blokirovka bufera .
| . . .
| . Priostanovka po .
| . proizvol'noj prichine .
| . . .
| Zapushchen . .
| Bufer zablokirovan . .
| Priostanovka . .
| . . Zapushchen
| . . Bufer zablokirovan
| . . Priostanovka
| . Probuzhdenie .
| . Snyatie blokirovki .
| . bufera .
| Gotov k Probuzhdenie vseh Gotov k
| vypolneniyu "spyashchih" processov vypolneniyu
|
v Pereklyuchenie konteksta
Zapushchen
Risunok 2.9. Mnogokratnaya priostanovka vypolneniya processov, vyzvannaya
blokirovkoj
36
tochki zreniya, mezhdu upravlyayushchimi i pol'zovatel'skimi processami net raznicy.
Oni ispol'zuyut odin i tot zhe nabor obrashchenij k operacionnoj sisteme, dostup-
nyj dlya vseh. Upravlyayushchie processy otlichayutsya ot obychnyh pol'zovatel'skih
processov tol'ko pravami i privilegiyami, kotorymi oni obladayut. Naprimer,
rezhimy razresheniya dostupa k fajlu mogut predusmatrivat' predostavlenie voz-
mozhnosti raboty s fajlami dlya upravlyayushchih processov i otsutstvie takoj voz-
mozhnosti dlya obychnyh pol'zovatelej. Vnutri sistemy yadro vydelyaet osobogo
pol'zovatelya, imenuemogo superpol'zovatelem, i nadelyaet ego osobymi privile-
giyami, o chem my eshche pogovorim nizhe. Pol'zovatel' mozhet stat' superpol'zova-
telem, esli sootvetstvuyushchim obrazom zaregistriruetsya v sisteme ili zapustit
special'nuyu programmu. Privilegii superpol'zovatelya budut rassmotreny v sle-
duyushchih glavah. Esli skazat' korotko, yadro sistemy ne vydelyaet upravlyayushchie
processy v otdel'nyj klass.
2.5 VYVODY I OBZOR POSLEDUYUSHCHIH GLAV
V etoj glave opisana arhitektura yadra operacionnoj sistemy; ego osnovny-
mi komponentami vystupayut podsistema upravleniya fajlami i podsistema uprav-
leniya processami. Podsistema upravleniya fajlami upravlyaet hraneniem i vybor-
koj dannyh v pol'zovatel'skih fajlah. Fajly organizovany v vide fajlovyh
sistem, kotorye traktuyutsya kak logicheskie ustrojstva; fizicheskoe ustrojstvo,
takoe kak disk, mozhet soderzhat' neskol'ko logicheskih ustrojstv (fajlovyh
sistem). Kazhdaya fajlovaya sistema imeet superblok, v kotorom opisyvaetsya
struktura i soderzhimoe fajlovoj sistemy, kazhdyj fajl v fajlovoj sisteme opi-
syvaetsya indeksom, hranyashchim atributy fajla. Sistemnye operacii rabotayut s
fajlami, ispol'zuya indeksy.
Processy nahodyatsya v razlichnyh sostoyaniyah i perehodyat iz sostoyaniya v
sostoyanie, sleduya opredelennym pravilam perehoda. V chastnosti, processy, vy-
polnyayushchiesya v rezhime yadra, mogut priostanovit' svoe vypolnenie i perejti v
sostoyanie "sna", no ni odin process ne mozhet perevesti v eto sostoyanie dru-
goj process. YAdro yavlyaetsya nevygruzhaemym i eto oznachaet, chto process, vypol-
nyayushchijsya v rezhime yadra, budet prodolzhat' svoe vypolnenie do teh por, poka ne
perejdet v sostoyanie "sna" ili poka ne vernetsya v rezhim zadachi. YAdro obespe-
chivaet celostnost' svoih informacionnyh struktur blagodarya svoej nevygruzhae-
mosti, a takzhe putem blokirovaniya preryvanij na vremya vypolneniya kriticheskih
sekcij programmy.
V ostal'nyh chastyah glavy detal'no opisyvayutsya podsistemy, izobrazhennye
na Risunke 2.1, a takzhe vzaimodejstvie mezhdu nimi, nachinaya s podsistemy up-
ravleniya fajlami i vklyuchaya podsistemu upravleniya processami. V sleduyushchej
glave rassmatrivaetsya bufer sverhoperativnoj pamyati (kesh) i opisyvayutsya al-
goritmy upravleniya buferom, ispol'zuemye v glavah 4, 5 i 7. V glave 4 rass-
matrivayutsya vnutrennie algoritmy fajlovoj sistemy, vklyuchaya obrabotku indek-
sov, strukturu fajlov, preobrazovanie imeni puti v indeks. V glave 5 rass-
matrivayutsya sistemnye operacii, kotorye, ispol'zuya privedennye v glave 4 al-
goritmy, obrashchayutsya k fajlovoj sisteme, t.e. takie, kak open, close, read i
write. Glava 6 imeet delo s ponyatiem konteksta processa i ego adresnym pros-
transtvom, a glava 7 rassmatrivaet sistemnye operacii, svyazannye s upravle-
niem processami i ispol'zuyushchie algoritmy glavy 6. Glava 8 kasaetsya planiro-
vaniya vypolneniya processov, v glave 9 obsuzhdayutsya algoritmy raspredeleniya
pamyati. Glava 10 posvyashchena drajveram ustrojstv, rassmotrenie kotoryh do togo
otkladyvalos', chtoby prezhde ob座asnit' svyaz' drajvera terminala s upravleniem
processami. V glave 11 predstavleno neskol'ko form vzaimodejstviya processov.
Nakonec, v poslednih dvuh glavah rassmatrivayutsya voprosy, svyazannye s uglub-
lennym izucheniem osobennostej sistemy, v chastnosti, osobennosti mnogoproces-
sornyh sistem i raspredelennyh sistem.
37
1. Rassmotrim sleduyushchij nabor komand:
grep main a.c b.c c.c > grepout &
wc -1 < grepout &
rm grepout &
Ampersand (simvol "&") v konce kazhdoj komandnoj stroki govorit komandnomu
processoru shell o tom, chto komandu sleduet vypolnit' na fone, pri etom
shell mozhet vypolnyat' vse komandnye stroki parallel'no. Pochemu eto ne
ravnocenno sleduyushchej komandnoj stroke ?
grep main a.c b.c c.c | wc -1
2. Rassmotrim primer programmy, privedennyj na Risunke 2.7. Predpolozhim, chto
v tot moment, kogda pri ee vypolnenii vstretilsya kommentarij, proizoshlo
pereklyuchenie konteksta i drugoj process ubral soderzhimoe bufera iz spiska
ukazatelej s pomoshch'yu sleduyushchih komand:
remove(gp)
struct queue *gp;
{
gp - > forp - > backp = gp - > backp;
gp - > backp - > forp = gp - > forp;
gp - > forp = gp - > backp = NULL;
}
Rassmotrim tri sluchaya:
- Process ubiraet iz spiska s ukazatelyami strukturu bp1.
- Process ubiraet iz spiska s ukazatelyami strukturu, sleduyushchuyu posle
struktury bp1.
- Process ubiraet iz spiska strukturu, kotoraya pervonachal'no sledovala za
bp1 do togo, kak struktura bp byla napolovinu vklyuchena v ukazannyj spi-
sok.
V kakom sostoyanii budet spisok posle togo, kak pervyj process zavershit
vypolnenie chasti programmy, raspolozhennoj posle kommentariev ?
3. CHto proizoshlo by v tom sluchae, esli yadro popytalos' by vozobnovit' vypol-
nenie vseh processov, priostanovlennyh po sobytiyu, no v sisteme ne bylo
by k etomu momentu ni odnogo takogo processa ?
38
Last-modified: Tue, 23 Mar 2004 10:06:51 GMT