mezhdu signalami v 60 sekund i s pomoshch'yu funkcii pause priostanavlivaet svoe vypolnenie do momenta polucheniya signala. CHerez 60 se- kund signal postupaet, yadro podgotavlivaet stek zadachi k vyzovu funkcii ob- rabotki signala wakeup, funkciya vozvrashchaet upravlenie na operator, sleduyushchij za vyzovom funkcii pause, i process ispolnyaet cikl vnov'. Vse perechislennye funkcii raboty s vremenem protekaniya processa ob®edi- nyaet to, chto oni opirayutsya na pokazaniya sistemnyh chasov (tajmera). Obrabaty- vaya preryvaniya po tajmeru, yadro obrashchaetsya k razlichnym tajmernym schetchikam i iniciiruet sootvetstvuyushchee dejstvie. 8.3 TAJMER V funkcii programmy obrabotki preryvanij po tajmeru vhodit: * perezapusk chasov, * vyzov na ispolnenie funkcij yadra, ispol'zuyushchih vstroennye chasy, * podderzhka vozmozhnosti profilirovaniya vypolneniya processov v rezhimah yadra i zadachi; * sbor statistiki o sisteme i protekayushchih v nej processah, * slezhenie za vremenem, * posylka processam signalov "budil'nika" po zaprosu, * periodicheskoe vozobnovlenie processa podkachki (sm. sleduyushchuyu glavu), * upravlenie dispetcherizaciej processov. Nekotorye iz funkcij realizuyutsya pri kazhdom preryvanii po tajmeru, dru- gie - po proshestvii neskol'kih tajmernyh tikov. Programma obrabotki preryva- 243 nij po tajmeru zapuskaetsya s vysokim prioritetom obrashcheniya k processoru, ne dopuskaya vo vremya raboty vozniknoveniya drugih vneshnih sobytij (takih kak preryvaniya ot periferijnyh ustrojstv). Poetomu programma obrabotki preryva- nij po tajmeru rabotaet ochen' bystro, za maksimal'no-korotkoe vremya probegaya svoi kriticheskie otrezki, kotorye dolzhny vypolnyat'sya bez preryvanij so storony drugih processov. Algoritm obrabotki preryvanij po tajmeru prive- den na Risunke 8.9. +------------------------------------------------------------+ | #include | | #include | | #include | | | | main(argc,argv) | | int argc; | | char *argv[]; | | { | | extern unsigned alarm(); | | extern wakeup(); | | struct stat statbuf; | | time_t axtime; | | | | if (argc != 2) | | { | | printf("tol'ko 1 argument\n"); | | exit(); | | } | | | | axtime = (time_t) 0; | | for (;;) | | { | | /* poluchenie znacheniya vremeni dostupa k fajlu */ | | if (stat(argv[1],&statbuf) == -1) | | { | | printf("fajla s imenem %s net\n",argv[1]); | | exit(); | | } | | if (axtime != statbuf.st_atime) | | { | | printf("k fajlu %s bylo obrashchenie\n",argv[1]); | | axtime = statbuf.st_atime; | | } | | signal(SIGALRM,wakeup); /* podgotovka k priemu | | signala */ | | alarm(60); | | pause(); /* priostanov do polucheniya signala */| | } | | } | | | | wakeup() | | { | | } | +------------------------------------------------------------+ Risunok 8.8. Programma, ispol'zuyushchaya sistemnuyu funkciyu alarm 244 +------------------------------------------------------------+ | algoritm clock | | vhodnaya informaciya: otsutstvuet | | vyhodnaya informaciya: otsutstvuet | | { | | perezapustit' chasy; /* chtoby oni snova posylali prery-| | vaniya */ | | esli (tablica otvetnyh signalov ne pusta) | | { | | ustanovit' vremya dlya otvetnyh signalov; | | zapustit' funkciyu callout, esli vremya isteklo; | | } | | esli (profiliruetsya vypolnenie v rezhime yadra) | | zapomnit' znachenie schetchika komand v moment preryva-| | niya; | | esli (profiliruetsya vypolnenie v rezhime zadachi) | | zapomnit' znachenie schetchika komand v moment preryva-| | niya; | | sobrat' statistiku o samoj sisteme; | | sobrat' statistiku o protekayushchih v sisteme processah; | | vyverit' znachenie prodolzhitel'nosti ICP processom; | | esli (proshla 1 sekunda ili bolee i ispolnyaetsya otrezok,| | ne yavlyayushchijsya kriticheskim) | | { | | dlya (vseh processov v sisteme) | | { | | ustanovit' "budil'nik", esli on aktiven; | | vyverit' znachenie prodolzhitel'nosti ICP; | | esli (process budet ispolnyat'sya v rezhime zadachi)| | vyverit' prioritet processa; | | } | | vozobnovit' v sluchae neobhodimosti vypolnenie pro- | | cessa podkachki; | | } | | } | +------------------------------------------------------------+ Risunok 8.9. Algoritm obrabotki preryvanij po tajmeru 8.3.1 Perezapusk chasov V bol'shinstve mashin posle polucheniya preryvaniya po tajmeru trebuetsya programmnymi sredstvami proizvesti perezapusk chasov, chtoby oni po proshestvii intervala vremeni mogli vnov' preryvat' rabotu processora. Takie sredstva yavlyayutsya mashinno-zavisimymi i my ih rassmatrivat' ne budem. 8.3.2 Vnutrennie sistemnye tajm-auty Nekotorym iz procedur yadra, v chastnosti drajveram ustrojstv i setevym protokolam, trebuetsya vyzov funkcij yadra v rezhime real'nogo vremeni. Napri- mer, process mozhet perevesti terminal v rezhim vvoda bez obrabotki simvolov, pri kotorom yadro vypolnyaet zaprosy pol'zovatelya na chtenie s terminala cherez fiksirovannye promezhutki vremeni, ne dozhidayas', kogda pol'zovatel' nazhmet klavishu "vozvrata karetki" (sm. razdel 10.3.3). YAdro hranit vsyu neobhodimuyu informaciyu v tablice otvetnyh signalov (Risunok 8.9), v tom chisle imya funk- cii, zapuskaemoj po istechenii intervala vremeni, parametr, peredavaemyj etoj funkcii, a takzhe prodolzhitel'nost' intervala (v tajmernyh tikah) do momenta 245 zapuska funkcii. Pol'zovatel' ne imeet vozmozhnosti napryamuyu kontrolirovat' zapisi v tab- lice otvetnyh signalov; dlya raboty s nimi sushchestvuyut razlichnye sistemnye al- goritmy. YAdro sortiruet zapisi v etoj tablice v sootvetstvii s velichinoj in- tervala do momenta zapuska funkcij. V svyazi s etim dlya kazhdoj zapisi tablicy zapominaetsya ne obshchaya prodolzhitel'nost' intervala, a tol'ko promezhutok vre- meni mezhdu momentami zapuska dannoj i predydushchej funkcij. Obshchaya prodolzhi- tel'nost' intervala do momenta zapuska funkcii skladyvaetsya iz promezhutkov vremeni mezhdu momentami zapuska vseh funkcij, nachinaya s pervoj i vplot' do tekushchej. Funkciya Vremya do zapuska Funkciya Vremya do zapuska +----------------------------+ +----------------------------+ | a() -2 | | a() -2 | +----------------------------+ +----------------------------+ | b() 3 | | b() 3 | +----------------------------+ +----------------------------+ | c() 10 | | f() 2 | +----------------------------+ +----------------------------+ | c() 8 | +----------------------------+ Do Posle Risunok 8.10. Vklyuchenie novoj zapisi v tablicu otvetnyh signalov Na Risunke 8.10 priveden primer dobavleniya novoj zapisi v tablicu otvet- nyh signalov. (K otricatel'nomu znacheniyu polya "vremya do zapuska" dlya funkcii a my vernemsya neskol'ko pozzhe). Sozdavaya novuyu zapis', yadro otvodit dlya nee nadlezhashchee mesto i sootvetstvuyushchim obrazom pereustanavlivaet znachenie polya "vremya do zapuska" v zapisi, sleduyushchej za dobavlyaemoj. Sudya po risunku, yadro sobiraetsya zapustit' funkciyu f cherez 5 tajmernyh tikov: ono otvodit mesto dlya nee v tablice srazu posle funkcii b i zanosit v pole "vremya do zapuska" znachenie, ravnoe 2 (togda summa znachenij etih polej dlya funkcij b i f sosta- vit 5), i menyaet "vremya do zapuska" funkcii c na 8 (pri etom funkciya c vse ravno zapuskaetsya cherez 13 tajmernyh tikov). V odnih versiyah yadro pol'zuetsya svyaznym spiskom ukazatelej na zapisi tablicy otvetnyh signalov, v drugih - menyaet polozhenie zapisej pri korrektirovke tablicy. Poslednij sposob trebuet znachitel'no men'shih izderzhek pri uslovii, chto yadro ne budet slishkom chasto obrashchat'sya k tablice. Pri kazhdom postuplenii preryvaniya po tajmeru programma obrabotki prery- vaniya proveryaet nalichie zapisej v tablice otvetnyh signalov i v sluchae ih obnaruzheniya umen'shaet znachenie polya "vremya do zapuska" v pervoj zapisi. Spo- sob hraneniya prodolzhitel'nosti intervalov do momenta zapuska kazhdoj funkcii, vybrannyj yadrom, pozvolyaet, umen'shiv znachenie polya "vremya do zapuska" v od- noj tol'ko pervoj zapisi, sootvetstvenno umen'shit' prodolzhitel'nost' inter- vala do momenta zapuska funkcij, opisannyh vo vseh zapisyah tablicy. Esli v ukazannom pole pervoj zapisi hranitsya otricatel'noe ili nulevoe znachenie, sootvetstvuyushchuyu funkciyu sleduet zapustit'. Programma obrabotki preryvanij po tajmeru ne zapuskaet funkciyu nemedlenno, takim obrazom ona ne blokiruet voz- niknovenie posleduyushchih preryvanij dannogo tipa. Tekushchij prioritet raboty processora vrode by ne pozvolyaet takim preryvaniyam vmeshivat'sya v vypolnenie processa, odnako yadro ne imeet predstavleniya o tom, skol'ko vremeni potrebu- etsya na ispolnenie funkcii. Kazalos' by, esli funkciya vypolnyaetsya dol'she od- nogo tajmernogo tika, vse posleduyushchie preryvaniya dolzhny byt' zablokirovany. Vmesto etogo, programma obrabotki preryvanij v tipichnoj situacii oformlyaet vyzov funkcii kak "programmnoe preryvanie", porozhdaemoe vypolneniem otdel'- noj mashinnoj komandy. Poskol'ku sredi vseh preryvanij programmnye preryvaniya imeyut samyj nizkij prioritet, oni blokiruyutsya, poka yadro ne zakonchit obra- 246 botku vseh ostal'nyh preryvanij. S momenta zaversheniya podgotovki k zapusku funkcii i do momenta vozniknoveniya vyzyvaemogo zapuskom funkcii programmnogo preryvaniya mozhet proizojti mnozhestvo preryvanij, v tom chisle i programmnyh, v takom sluchae v pole "vremya do zapuska", prinadlezhashchee pervoj zapisi tabli- cy, budet zaneseno otricatel'noe znachenie. Kogda zhe nakonec programmnoe pre- ryvanie proishodit, programma obrabotki preryvanij ubiraet iz tablicy vse zapisi s istekshimi znacheniyami polej "vremya do zapuska" i vyzyvaet sootvetst- vuyushchuyu funkciyu. Poskol'ku v ukazannom pole v nachal'nyh zapisyah tablicy mozhet hranit'sya otricatel'noe ili nulevoe znachenie, programma obrabotki preryvanij dolzhna najti v tablice pervuyu zapis' s polozhitel'nym znacheniem polya i umen'shit' ego. Pust', naprimer, funkcii a sootvetstvuet "vremya do zapuska", ravnoe -2 (Risunok 8.10), to est' pered tem, kak funkciya a byla vybrana na vypolnenie, sistema poluchila 2 preryvaniya po tajmeru. Pri uslovii, chto funkciya b 2 tika nazad uzhe byla v tablice, yadro propuskaet zapis', sootvetstvuyushchuyu funkcii a, i umen'shaet znachenie polya "vremya do zapuska" dlya funkcii b. 8.3.3 Postroenie profilya Postroenie profilya yadra vklyuchaet v sebya izmerenie prodolzhitel'nosti vy- polneniya sistemy v rezhime zadachi protiv rezhima yadra, a takzhe prodolzhitel'- nosti vypolneniya otdel'nyh procedur yadra. Drajver parametrov yadra sledit za otnositel'noj effektivnost'yu raboty modulej yadra, zameryaya parametry raboty sistemy v moment preryvaniya po tajmeru. Drajver parametrov imeet spisok ad- resov yadra (glavnym obrazom, funkcij yadra); eti adresa ranee byli zagruzheny processom putem obrashcheniya k drajveru parametrov. Esli postroenie profilya yad- ra vozmozhno, programma obrabotki preryvaniya po tajmeru zapuskaet podprogram- mu obrabotki preryvanij, prinadlezhashchuyu drajveru parametrov, kotoraya oprede- lyaet, v kakom iz rezhimov - yadra ili zadachi - rabotal processor v moment pre- ryvaniya. Esli processor rabotal v rezhime zadachi, sistema postroeniya profilya uvelichivaet znachenie parametra, opisyvayushchego prodolzhitel'nost' vypolneniya v rezhime zadachi, esli zhe processor rabotal v rezhime yadra, sistema uvelichivaet znachenie vnutrennego schetchika, sootvetstvuyushchego schetchiku komand. Pol'zova- tel'skie processy mogut obrashchat'sya k drajveru parametrov, chtoby poluchit' znacheniya parametrov yadra i razlichnuyu statisticheskuyu informaciyu. +--------------------------------+ | Algoritm Adres Schetchik | | | | bread 100 5 | | breada 150 0 | | bwrite 200 0 | | brelse 300 2 | | getblk 400 1 | | user - 2 | +--------------------------------+ Risunok 8.11. Adresa nekotoryh algoritmov yadra Na Risunke 8.11 privedeny gipoteticheskie adresa nekotoryh procedur yadra. Pust' v rezul'tate 10 izmerenij, provedennyh v momenty postupleniya preryva- nij po tajmeru, byli polucheny sleduyushchie znacheniya schetchika komand: 110, 330, 145, adres v prostranstve zadachi, 125, 440, 130, 320, adres v prostranstve zadachi i 104. YAdro sohranit pri etom te znacheniya, kotorye pokazany na risun- ke. Analiz etih znachenij pokazyvaet, chto sistema provela 20% svoego vremeni v rezhime zadachi (user) i 50% vremeni potratila na vypolnenie algoritma bread v rezhime yadra. 247 Esli izmerenie parametrov yadra vypolnyaetsya v techenie dlitel'nogo perioda vremeni, rezul'taty izmerenij priblizhayutsya k istinnoj kartine ispol'zovaniya sistemnyh resursov. Tem ne menee, opisyvaemyj mehanizm ne uchityvaet vremya, potrachennoe na obrabotku preryvanij po tajmeru i vypolnenie procedur, bloki- ruyushchih postuplenie preryvanij dannogo tipa, poskol'ku tajmer ne mozhet prery- vat' vypolnenie kriticheskih otrezkov programm i, takim obrazom, ne mozhet v eto vremya obrashchat'sya k podprogramme obrabotki preryvanij drajvera paramet- rov. V etom nedostatok opisyvaemogo mehanizma, ibo kriticheskie otrezki prog- ramm yadra chashche vsego naibolee vazhny dlya izmerenij. Sledovatel'no, rezul'taty izmereniya parametrov yadra soderzhat opredelennuyu dolyu priblizitel'nosti. Uaj- nberger [Weinberger 84] opisal mehanizm vklyucheniya schetchikov v glavnyh blokah programmy, takih kak "if-then" i "else", s cel'yu povysheniya tochnosti izmere- niya chastoty ih vypolneniya. Odnako, dannyj mehanizm uvelichivaet vremya scheta programm na 50-200%, poetomu ego ispol'zovanie v kachestve postoyannogo meha- nizma izmereniya parametrov yadra nel'zya priznat' racional'nym. Na pol'zovatel'skom urovne dlya izmereniya parametrov vypolneniya processov mozhno ispol'zovat' sistemnuyu funkciyu profil: profil(buff,bufsize,offset,scale); gde buff - adres massiva v prostranstve zadachi, bufsize - razmer massiva, offset - virtual'nyj adres podprogrammy pol'zovatelya (obychno, pervoj po sche- tu), scale - sposob otobrazheniya virtual'nyh adresov zadachi na adres massiva. YAdro traktuet argument "scale" kak dvoichnuyu drob' s fiksirovannoj tochkoj sleva. Tak, naprimer, znachenie argumenta v shestnadcatirichnoj sisteme schisle- niya, ravnoe Oxffff, sootvetstvuet odnoznachnomu otobrazheniyu schetchika komand na adresa massiva, znachenie, ravnoe Ox7fff, sootvetstvuet razmeshcheniyu v odnom slove massiva buff dvuh adresov programmy, Ox3fff - chetyreh adresov program- my i t.d. YAdro hranit parametry, peredavaemye pri vyzove sistemnoj funkcii, v prostranstve processa. Esli tajmer preryvaet vypolnenie processa togda, kogda on nahoditsya v rezhime zadachi, programma obrabotki preryvanij proveryaet znachenie schetchika komand v moment preryvaniya, sravnivaet ego so znacheniem argumenta offset i uvelichivaet soderzhimoe yachejki pamyati, adres kotoroj yavlya- etsya funkciej ot bufsize i scale. Rassmotrim v kachestve primera programmu, privedennuyu na Risunke 8.12, izmeryayushchuyu prodolzhitel'nost' vypolneniya funkcij f i g. Snachala process, is- pol'zuya sistemnuyu funkciyu signal, delaet ukazanie pri poluchenii signala o preryvanii vyzyvat' funkciyu theend, zatem on vychislyaet diapazon adresov programmy, v predelah kotoryh budet proizvodit'sya izmerenie prodolzhitel'nos- ti (nachinaya s adresa funkcii main i konchaya adresom funkcii theend), i, nako- nec, zapuskaet funkciyu profil, soobshchaya yadru o tom, chto on sobira- etsya nachat' izmerenie. V rezul'tate vypolneniya programmy v techenie 10 sekund na nesil'no zagruzhennoj mashine AT&T 3B20 byli polucheny dannye, predstavlen- nye na Risunke 8.13. Adres funkcii f prevyshaet adres nachala profilirovaniya na 204 bajta; poskol'ku tekst funkcii f imeet razmer 12 bajt, a razmer celo- go chisla v mashine AT&T 3B20 raven 4 bajtam, adresa funkcii f otobrazhayutsya na elementy massiva buf s nomerami 51, 52 i 53. Po takomu zhe principu adresa funkcii g otobrazhayutsya na elementy buf c nomerami 54, 55 i 56. |lementy buf s nomerami 46, 48 i 49 prednaznacheny dlya adresov, prinadlezhashchih ciklu funk- cii main. V obychnom sluchae diapazon adresov, v predelah kotorogo vypolnyaetsya izmerenie parametrov, opredelyaetsya v rezul'tate obrashcheniya k tablice identi- fikatorov dlya dannoj programmy, gde ukazyvayutsya adresa programmnyh sekcij. Pol'zovateli storonyatsya funkcii profil iz-za togo, chto ona kazhetsya im slish- kom slozhnoj; vmesto nee oni ispol'zuyut pri kompilyacii programm na yazyke Si parametr, soobshchayushchij kompilyatoru o neobhodimosti sgenerirovat' kod, sledyashchij za hodom vypolneniya processov. 248 +------------------------------------------------------------+ | #include | | int buffer[4096]; | | main() | | { | | int offset,endof,scale,eff,gee,text; | | extern theend(),f(),g(); | | signal(SIGINT,theend); | | endof = (int) theend; | | offset = (int) main; | | /* vychislyaetsya kolichestvo slov v tekste programmy */ | | text = (endof - offset + sizeof(int) - 1)/sizeof(int); | | scale = Oxffff; | | printf | | ("smeshchenie do nachala %d do konca %d dlina teksta %d\n",| | offset,endof,text); | | eff = (int) f; | | gee = (int) g; | | printf("f %d g %d fdiff %d gdiff %d\n",eff,gee, | | eff-offset,gee-offset); | | profil(buffer,sizeof(int)*text,offset,scale); | | for (;;) | | { | | f(); | | g(); | | } | | } | | f() | | { | | } | | g() | | { | | } | | theend() | | { | | int i; | | for (i = 0; i < 4096; i++) | | if (buffer[i]) | | printf("buf[%d] = %d\n",i,buffer[i]); | | exit(); | | } | +------------------------------------------------------------+ Risunok 8.12. Programma, ispol'zuyushchaya sistemnuyu funkciyu profil +------------------------------------------------------+ | smeshchenie do nachala 212 do konca 440 dlina teksta 57 | | f 416 g 428 fdiff 204 gdiff 216 | | buf[46] = 50 | | buf[48] = 8585216 | | buf[49] = 151 | | buf[51] = 12189799 | | buf[53] = 65 | | buf[54] = 10682455 | | buf[56] = 67 | +------------------------------------------------------+ Risunok 8.13. Primer rezul'tatov vypolneniya programmy, is- pol'zuyushchej sistemnuyu funkciyu profil 249 8.3.4 Uchet i statistika V moment postupleniya preryvaniya po tajmeru sistema mozhet vypolnyat'sya v rezhime yadra ili zadachi, a takzhe nahodit'sya v sostoyanii prostoya (bezdejst- viya). Sostoyanie prostoya oznachaet, chto vse processy priostanovleny v ozhidanii nastupleniya sobytiya. Dlya kazhdogo sostoyaniya processora yadro imeet vnutrennie schetchiki, ustanavlivaemye pri kazhdom preryvanii po tajmeru. Pozzhe pol'zova- tel'skie processy mogut proanalizirovat' nakoplennuyu yadrom statisticheskuyu informaciyu. V prostranstve kazhdogo processa imeyutsya dva polya dlya zapisi prodolzhi- tel'nosti vremeni, provedennogo processom v rezhime yadra i zadachi. V hode ob- rabotki preryvanij po tajmeru yadro korrektiruet znachenie polya, sootvetstvuyu- shchego tekushchemu rezhimu vypolneniya processa. Processy-roditeli sobirayut statis- tiku o svoih potomkah pri vypolnenii funkcii wait, berya za osnovu informa- ciyu, postupayushchuyu ot zavershayushchih svoe vypolnenie potomkov. V prostranstve kazhdogo processa imeetsya takzhe odno pole dlya vedeniya uche- ta ispol'zovaniya pamyati. V hode obrabotki preryvaniya po tajmeru yadro vychis- lyaet obshchij ob®em pamyati, zanimaemyj tekushchim processom, ishodya iz razmera chastnyh oblastej processa i ego dolevogo uchastiya v ispol'zovanii razdelyaemyh oblastej pamyati. Esli, naprimer, process ispol'zuet oblasti dannyh i steka razmerom 25 i 40 Kbajt, sootvetstvenno, i razdelyaet s chetyr'mya drugimi pro- cessami odnu oblast' komand razmerom 50 Kbajt, yadro naznachaet processu 75 Kbajt pamyati (50K/5 + 25K + 40K). V sisteme s zameshcheniem stranic yadro vychis- lyaet ob®em ispol'zuemoj pamyati putem podscheta chisla ispol'zuemyh v kazhdoj oblasti stranic. Takim obrazom, esli preryvaemyj process imeet dve chastnye oblasti i eshche odnu oblast' razdelyaet s drugim processom, yadro naznachaet emu stol'ko stranic pamyati, skol'ko soderzhitsya v etih chastnyh oblastyah, plyus po- lovinu stranic, prinadlezhashchih razdelyaemoj oblasti. Vsya ukazannaya informaciya otrazhaetsya v uchetnoj zapisi pri zavershenii processa i mozhet byt' ispol'zova- na dlya raschetov s zakazchikami mashinnogo vremeni. 8.3.5 Podderzhanie vremeni v sisteme YAdro uvelichivaet pokazanie sistemnyh chasov pri kazhdom preryvanii po taj- meru, izmeryaya vremya v tajmernyh tikah ot momenta zagruzki sistemy. |to zna- chenie vozvrashchaetsya processu cherez sistemnuyu funkciyu time i daet vozmozhnost' opredelyat' obshchee vremya vypolneniya processa. Vremya pervonachal'nogo zapuska processa sohranyaetsya yadrom v adresnom prostranstve processa pri ispolnenii sistemnoj funkcii fork, v moment zaversheniya processa eto znachenie vychitaetsya iz tekushchego vremeni, rezul'tat vychitaniya i sostavlyaet real'noe vremya vypol- neniya processa. V drugoj peremennoj tajmera, ustanavlivaemoj s pomoshch'yu sis- temnoj funkcii stime i korrektiruemoj raz v sekundu, hranitsya kalendarnoe vremya. 8.4 VYVODY V nastoyashchej glave byl opisan osnovnoj algoritm dispetcherizacii processov v sisteme UNIX. S kazhdym processom v sisteme svyazyvaetsya prioritet planiro- vaniya, znachenie kotorogo poyavlyaetsya v moment perehoda processa v sostoyanie priostanova i periodicheski korrektiruetsya programmoj obrabotki preryvanij po tajmeru. Prioritet, prisvaivaemyj processu v moment perehoda v sostoyanie priostanova, imeet znachenie, zavisyashchee ot togo, kakoj iz algoritmov yadra is- polnyalsya processom v etot moment. Znachenie prioriteta, prisvaivaemoe proces- su vo vremya vypolneniya programmoj obrabotki preryvanij po tajmeru (ili v tot moment, kogda process vozvrashchaetsya iz rezhima yadra v rezhim zadachi), zavisit ot togo, skol'ko vremeni process zanimal CP: process poluchaet nizkij priori- tet, esli on obrashchalsya k CP, i vysokij - v protivnom sluchae. Sistemnaya funk- ciya nice daet processu vozmozhnost' vliyat' na sobstvennyj prioritet putem do- bavleniya parametra, uchastvuyushchego v pereschete prioriteta. 250 V glave byli takzhe rassmotreny sistemnye funkcii, svyazannye s vremenem vypolneniya sistemy i protekayushchih v nej processov: s ustanovkoj i polucheniem sistemnogo vremeni, polucheniem vremeni vypolneniya processov i ustanovkoj signalov "budil'nika". Krome togo, opisany funkcii programmy obrabotki pre- ryvanij po tajmeru, kotoraya sledit za vremenem v sisteme, upravlyaet tablicej otvetnyh signalov, sobiraet statistiku, a takzhe podgotavlivaet zapusk plani- rovshchika processov, programmy podkachki i "sborshchika" stranic. Programma pod- kachki i "sborshchik" stranic yavlyayutsya ob®ektami rassmotreniya v sleduyushchej glave. 8.5 UPRAZHNENIYA 1. Pri perevode processov v sostoyanie priostanova yadro naznachaet processu, ozhidayushchemu snyatiya blokirovki s indeksa, bolee vysokij prioritet po sravneniyu s processom, ozhidayushchim osvobozhdeniya bufera. Tochno tak zhe, processy, ozhidayushchie vvoda s terminala, poluchayut bolee vysokij prioritet po sravneniyu s processami, ozhidayushchimi vozmozhnosti proizvodit' vyvod na terminal. Ob®yasnite prichiny takogo povedeniya yadra. *2. V algoritme obrabotki preryvanij po tajmeru predusmotren pereschet prio- ritetov i perezapusk processov na vypolnenie s intervalom v 1 sekundu. Pridumajte algoritm, v kotorom interval perezapuska dinamicheski menyaet- sya v zavisimosti ot stepeni zagruzki sistemy. Perevesit li vyigrysh usi- liya po uslozhneniyu algoritma ? 3. V shestoj redakcii sistemy UNIX dlya rascheta prodolzhitel'nosti ICP teku- shchim processom ispol'zuetsya sleduyushchaya formula: decay(ICP) = max (porogovyj prioritet, ICP-10); a v sed'moj redakcii: decay(ICP) = .8 * ICP; Prioritet processa v obeih redakciyah vychislyaetsya po formule: prioritet = ICP/16 + (bazovyj uroven' prioriteta); Povtorite primer na Risunke 8.4, ispol'zuya privedennye formuly. 4. Prodelajte eshche raz primer na Risunke 8.4 s sem'yu processami vmesto treh, a zatem izmenite chastotu preryvanij po tajmeru s 60 na 100 prery- vanij v sekundu. Prokommentirujte rezul'tat. 5. Razrabotajte shemu, v kotoroj sistema nakladyvaet ogranichenie na pro- dolzhitel'nost' vypolneniya processa, pri prevyshenii kotorogo process za- vershaetsya. Kakim obrazom pol'zovatel' dolzhen otlichat' takoj process ot processov, dlya kotoryh ne dolzhny sushchestvovat' podobnye ogranicheniya ? Kakim obrazom dolzhna rabotat' shema, esli edinstvennym usloviem yavlyaet- sya ee zapusk iz shell'a ? 6. Kogda process vypolnyaet sistemnuyu funkciyu wait i obnaruzhivaet prekra- tivshego sushchestvovanie potomka, yadro priplyusovyvaet k ego ICP znachenie polya ICP potomka. CHem ob®yasnyaetsya takoe "nakazanie" processa-roditelya ? 7. Komanda nice zapuskaet posleduyushchuyu komandu s peredachej ej ukazannogo znacheniya, naprimer: nice 6 nroff -mm big_memo > output Napishite na yazyke Si programmu, realizuyushchuyu komandu nice. 8. Prosledite na primere Risunka 8.4, kakim obrazom budet osushchestvlyat'sya dispetcherizaciya processov v tom sluchae, esli znachenie, peredavaemoe funkciej nice dlya processa A, ravno 5 ili -5. 9. Provedite eksperiment s sistemnoj funkciej renice x y, gde x - kod identifikacii processa (aktivnogo), a y - novoe znachenie nice dlya uka- zannogo processa. 10. Vernemsya k primeru, privedennomu na Risunke 8.6. Predpolozhim, chto grup- pe, v kotoruyu vhodit process A, vydelyaetsya 33% processornogo vremeni, a gruppe, v kotoruyu vhodit process B, - 66% processornogo vremeni. V ka- koj posledovatel'nosti budut ispolnyat'sya processy ? Obobshchite algoritm vychisleniya prioritetov takim obrazom, chtoby znachenie gruppovogo ICP us- rednyalos'. 251 11. Vypolnite komandu date. Komanda bez argumentov vyvodit tekushchuyu datu: ukazav argument, naprimer: date mmddhhmmyy (super)pol'zovatel' mozhet ustanovit' tekushchuyu datu v sisteme (sootvetstvenno, mesyac, chislo, chasy, minuty i god). Tak, date 0911205084 ustanavlivaet v kachestve tekushchego vremeni 11 sentyabrya 1984 goda 8:50 popoludni. 12. V programmah mozhno ispol'zovat' funkciyu pol'zovatel'skogo urovnya sleep: sleep(seconds); s pomoshch'yu kotoroj vypolnenie programmy priostanavlivaetsya na ukazannoe chislo sekund. Razrabotajte ee algoritm, v kotorom ispol'zujte sistemnye funkcii alarm i pause. CHto proizojdet, esli process vyzovet funkciyu alarm ran'she funkcii sleep ? Rassmotrite dve vozmozhnosti: 1) dejstvie ranee vyzvannoj funkcii alarm istekaet v to vremya, kogda process naho- ditsya v sostoyanii priostanova, 2) dejstvie ranee vyzvannoj funkcii alarm istekaet posle zaversheniya funkcii sleep. *13. Obratimsya eshche raz k poslednej probleme. YAdro mozhet vypolnit' pereklyuche- nie konteksta vo vremya ispolneniya funkcii sleep mezhdu vyzovami alarm i pause. Togda est' opasnost', chto process poluchit signal alarm do togo, kak vyzovet funkciyu pause. CHto proizojdet v etom sluchae ? Kak vovremya raspoznat' etu situaciyu ? 252