Pergalên Xebatê: Sê Parçeyên Hêsan. Beş 4: Danasîna plansazker (werger)

Destpêka Pergalên Xebatê

Hey Habr! Ez dixwazim rêzek gotar-wergerên yek wêjeya balkêş bi nerîna min - OSTEP-ê bînim ber çavên we. Ev materyal bi kûrahî li ser xebata pergalên xebitandinê yên mîna unix-ê nîqaş dike, ango, xebata bi pêvajoyên, plansazkerên cihêreng, bîranîn û hêmanên din ên mîna ku OS-ya nûjen pêk tînin. Hûn dikarin orîjînala hemî materyalan li vir bibînin vir. Ji kerema xwe bala xwe bidin ku werger bi rengek neprofesyonel (gelek serbest) hatîye kirin, lê ez hêvî dikim ku min wateya giştî parastiye.

Xebatên laboratîfê yên li ser vê mijarê li vir têne dîtin:

Parçeyên din:

Hûn dikarin li kanala min jî temaşe bikin têlxiram =)

Destpêka Scheduler

Esasê pirsgirêkê: Meriv çawa siyasetek plansazker pêş dixe
Divê çarçoveyên polîtîkaya plansazkerê bingehîn çawa bêne sêwirandin? Divê pêşbîniyên sereke çi bin? Çi metrîk girîng in? Di pergalên komputera destpêkê de kîjan teknîkên bingehîn hatine bikar anîn?

Texmînên Karê Karê

Berî ku em li ser polîtîkayên mumkun nîqaş bikin, bila pêşî li ser pêvajoyên ku di pergalê de diqewimin, ku bi hev re têne gotin, çend hûrguliyên hêsan bikin. bargiraniya kar. Diyarkirina bargiraniyê beşek krîtîk a sêwirana siyasetê ye, û her ku hûn di derbarê bargiraniyê de zanibin, hûn ê siyaseta ku hûn dikarin binivîsin çêtir e.

Ka em li ser pêvajoyên ku di pergalê de diqewimin, carinan jî jê re têne gotin, texmînên jêrîn bikin jobs (karûbar). Hema bêje hemû ev texmîn ne realîst in, lê ji bo pêşketina ramanê pêwîst in.

  1. Her peywir ji bo heman demê dimeşe,
  2. Hemî peywir bi hevdem têne danîn,
  3. Karê ku hatî peywirdarkirin heya qedandina xwe dixebite,
  4. Hemî peywir tenê CPU bikar tînin,
  5. Dema xebitandina her karekî tê zanîn.

Scheduler Metrics

Ji bilî hin texmînên di derbarê barkirinê de, amûrek din ji bo berhevdana polîtîkayên plansazkirinê yên cihêreng hewce ye: metrîkên plansazker. Metrîk tenê hinek pîvana tiştekî ye. Gelek metrîk hene ku dikarin ji bo berhevdana plansazkeran bikar bînin.

Mînakî, em ê metrîkek bi navê bikar bînin dema zivirîna (dema zivirandinê). Dema zivirîna peywirê wekî ferqa di navbera dema qedandina peywirê û dema gihîştina peywirê de di pergalê de tê destnîşankirin.

Tturnaround=Temamkirin−Tarrival

Ji ber ku me texmîn kir ku hemî peywir di heman demê de hatine, wê hingê Ta=0 û bi vî rengî Tt=Tc. Dema ku em texmînên jorîn biguherînin dê ev nirx bi xwezayî biguheze.

Metrîka din - rastiyê (edalet, durustî). Hilberîn û edalet bi gelemperî di plansaziyê de taybetmendiyên dijber in. Mînakî, plansazker dibe ku performansê xweşbîn bike, lê bi bihayê li benda xebitandina karên din, bi vî rengî dadperweriyê kêm dike.

PÊKÎ DI PÊŞÎ DE (FIFO)

Algorîtmaya herî bingehîn a ku em dikarin bicîh bikin FIFO an jî tê gotin yekem hatin (nav), yekem xizmet (derket). Vê algorîtmayê çend avantajên xwe hene: ew pir hêsan e ku were bicîh kirin û ew bi hemî texmînên me re têkildar e û karî pir baş dike.

Ka em li mînakek hêsan binêrin. Em bêjin 3 peywir bi hev re hatine danîn. Lê em bihesibînin ku peywira A ji yên din hinekî zûtir hat, ji ber vê yekê ew ê ji yên din zûtir di navnîşa darvekirinê de xuya bibe, mîna B-yê bi C re. Werin em texmîn bikin ku her yek ji wan dê 10 çirkeyan were darve kirin. Di vê rewşê de dema navînî ya temamkirina van karan dê çend be?

Pergalên Xebatê: Sê Parçeyên Hêsan. Beş 4: Danasîna plansazker (werger)

Bi jimartina nirxan - 10+20+30 û dabeşkirina bi 3, em navînî dema pêkanîna bernameyê bi qasî 20 saniyeyan digirin.
Niha em hewl bidin ku texmînên xwe biguherînin. Bi taybetî, texmîna 1 û bi vî rengî em ê êdî texmîn nekin ku her peywirê heman wext digire ku were darve kirin. Wê FIFO vê carê çawa bike?

Wekî ku diqewime, demên cûda yên pêkanîna peywiran bandorek zehf neyînî li ser hilberîna algorîtmaya FIFO dike. Em bihesibînin ku peywira A dê 100 çirkeyan bigire, dema ku B û C dê her yekê dîsa jî 10 çirkeyan bigire.

Pergalên Xebatê: Sê Parçeyên Hêsan. Beş 4: Danasîna plansazker (werger)

Wek ku ji jimarê jî diyar dibe, dema navîn ya pergalê dê bibe (100+110+120)/3=110. Ev bandor tê gotin bandora konvoyê, Gava ku hin serfkarên demkurt ên çavkaniyekê dê li dû xerîdarek giran rêz bikin. Mîna rêza dikana firoşgehê ye dema ku mişterek bi selikek tije li ber we be. Çareseriya herî baş a pirsgirêkê ev e ku hûn hewl bidin ku kaseya dravê biguhezînin an rehet bibin û bi kûr ve nefes bistînin.

Kurttirîn Karê Pêşî

Ma gengaz e ku meriv bi pêvajoyên giran re rewşek weha bi rengek çareser bike? Bicî. Cûreyek din a plansaziyê tê gotinKurttirîn Karê Pêşî (SJF). Algorîtmaya wê di heman demê de pir primitive e - wekî ku ji navê xwe diyar dike, karên herî kurt dê pêşî, yek li pey hev werin destpêkirin.

Pergalên Xebatê: Sê Parçeyên Hêsan. Beş 4: Danasîna plansazker (werger)

Di vê nimûneyê de, encama meşandina heman pêvajoyan dê bibe başbûnek di dema navînî ya bernameyê de û ew ê wekhev be Li şûna 50 ​​110, ku hema hema 2 carî çêtir e.

Bi vî rengî, ji bo texmîna hatî dayîn ku hemî peywir di heman demê de digihîjin, algorîtmaya SJF wekî algorîtmaya herî çêtirîn xuya dike. Lêbelê, texmînên me hîn jî ne realîst xuya dikin. Vê carê em texmîna 2 diguherînin û vê carê xeyal dikin ku peywir dikarin di her kêliyê de hebin, û ne hemî di heman demê de. Ev dikare bibe sedema çi pirsgirêkan?

Pergalên Xebatê: Sê Parçeyên Hêsan. Beş 4: Danasîna plansazker (werger)

Werin em bifikirin ku peywira A (100c) pêşî tê û dest bi cîbicîkirinê dike. Di t=10 de, peywirên B û C digihîjin, her yek ji wan 10 saniyeyan digire. Ji ber vê yekê dema darvekirinê ya navîn e (100+(110-10)+(120-10))3 = 103. Plansaz dikare çi bike da ku vê yekê baştir bike?

Dema Pêşîn-Kêmkirinê ya Herî Kurt (STCF)

Ji bo ku rewş baştir bibe, em ji texmîna 3 derdixin ku bername hatiye destpêkirin û heya qedandinê dimeşîne. Wekî din, em ê hewceyê piştgiriya hardware û, wekî ku hûn texmîn dikin, em ê bikar bînin timer ji bo rawestandina karekî bi bez û guherîna kontekstê. Ji ber vê yekê, plansazkar dikare di dema ku peywirên B, C digihîje tiştek bike - cîbicîkirina peywira A rawestîne û peywirên B û C bixe nav pêvajoyê û piştî qedandina wan, pêkanîna pêvajoya A bidomîne. Plansazek ​​weha tê gotin. STCFan Pêşî Karê Pêşîn.

Pergalên Xebatê: Sê Parçeyên Hêsan. Beş 4: Danasîna plansazker (werger)

Encama vê plansaziyê dê bibe encama jêrîn: ((120-0)+(20-10)+(30-10))/3=50. Bi vî rengî, plansaziyek wusa ji bo karên me hê çêtir dibe.

Dema Bersiva Metric

Ji ber vê yekê, heke em dema xebitandina karan zanibin û ku ev peywir tenê CPU bikar tînin, STCF dê çareseriya çêtirîn be. Û carekê di demên destpêkê de, van algorîtmayan pir baş dixebitin. Lêbelê, bikarhêner nuha piraniya dema xwe li termînalê derbas dike û ezmûnek înteraktîf a hilberîner hêvî dike. Bi vî rengî metrîkek nû çêbû - dema bersivdayînê (bersiv).

Dema bersivê bi vî rengî tê hesibandin:

Tresponse=Tfirstrun−Tarrival

Bi vî awayî, ji bo nimûneya berê, dema bersivê dê bibe: A=0, B=0, C=10 (abg=3,33).

Û derket holê ku algorîtmaya STCF di rewşek ku 3 peywir di heman demê de digihîjin ne ew qas baş e - ew ê li bendê bimîne heya ku karên piçûk bi tevahî biqede. Ji ber vê yekê algorîtma ji bo metrika dema zivirînê baş e, lê ji bo metrika înteraktîfiyê xirab e. Bifikirin ku hûn li termînalê rûdiniştin û hewl didin ku karakteran li edîtorek binivîsin û ji 10 çirkeyan zêdetir li bendê bimînin ji ber ku hin peywirek din CPU digire. Pir ne xweş e.

Pergalên Xebatê: Sê Parçeyên Hêsan. Beş 4: Danasîna plansazker (werger)

Ji ber vê yekê em bi pirsgirêkek din re rû bi rû ne - em çawa dikarin plansaziyek ku ji dema bersivê re hesas e ava bikin?

Dor Robin

Ji bo çareserkirina vê pirsgirêkê algorîtmayek hate pêşxistin Dor Robin (RR). Fikra bingehîn pir hêsan e: Li şûna ku em peywiran bimeşînin heya ku ew biqedin, em ê peywirê ji bo demek diyarkirî bimeşînin (ku jê re perçeyek dem tê gotin) û dûv re ji rêzê veguhezînin karek din. Algorîtma karê xwe dubare dike heya ku hemî peywir biqede. Di vê rewşê de, dema xebitandina bernameyê divê pirjimar be ku piştî ku demjimêr dê pêvajoyê qut bike. Mînakî, heke demjimêrek her x=10ms pêvajoyekê qut bike, wê hingê mezinahiya paceya pêkanîna pêvajoyê divê pirjimara 10 be û 10,20 an x*10 be.

Ka em li mînakekê binêrin: Karên ABC bi hevdemî digihîjin pergalê û her yek ji wan dixwaze 5 çirkeyan bixebite. Algorîtmaya SJF dê her karekî berî destpêkirina karekî din biqedîne. Berevajî vê, algorîtmaya RR ya bi pencereyek destpêkirinê = 1s dê bi karên jêrîn re derbas bibe (Hêjîrê 4.3):

Pergalên Xebatê: Sê Parçeyên Hêsan. Beş 4: Danasîna plansazker (werger)
(Dîsa SJF (Ji bo Dema Bersivdanê Nebaş)

Pergalên Xebatê: Sê Parçeyên Hêsan. Beş 4: Danasîna plansazker (werger)
(Round Robin (Ji bo Dema Bersivdanê Baş e)

Dema bersivê ya navîn ji bo algorîtmaya RR (0+1+2)/3=1 e, lê ji bo SJF (0+5+10)/3=5.

Ev mentiqî ye ku meriv texmîn bike ku paceya demê ji bo RR-yê pîvanek pir girîng e; ew çi qas piçûktir be, ew qas dema bersivdanê jî bilindtir e. Lêbelê, divê hûn wê pir piçûk nekin, ji ber ku dema guheztina kontekstê dê di performansa giştî de jî rolek bilîze. Bi vî rengî, bijartina dema paceya darvekirinê ji hêla mîmarê OS-ê ve tê destnîşankirin û bi karên ku têne plansaz kirin ve girêdayî ye. Veguheztina çarçowe ne tenê operasyona karûbarê ye ku wextê winda dike - bernameya xebitandinê li ser gelek tiştên din dixebite, mînakî, cachên cihêreng, û bi her guheztinê re pêdivî ye ku ev hawîrdor were hilanîn û sererast kirin, ku dikare gelek tiştan jî bigire. dem.

Ger em tenê li ser metrîka dema bersivê bipeyivin RR nexşerek mezin e. Lê metrîka dema zivirîna peywirê dê bi vê algorîtmê re çawa tevbigere? Mînaka jorîn bifikirin, dema ku dema xebitandinê ya A, B, C = 5s û di heman demê de digihîje. Karê A dê di 13-an de, B di 14-an de, C di 15-an de biqede û dema zivirîna navîn dê bibe 14s. Ji ber vê yekê, RR ji bo metrîka veguherînê algorîtmaya herî xirab e.

Bi gotinên gelemperî, her algorîtmaya RR-type adil e; ew dema CPU di navbera hemî pêvajoyan de wekhev dabeş dike. Û bi vî awayî, ev metrîk bi berdewamî bi hevûdu re nakokî.

Bi vî rengî, me çend algorîtmayên berevajî hene û di heman demê de hîn jî çend texmîn hene - ku dema peywirê tê zanîn û ku peywir tenê CPU bikar tîne.

Tevlihevkirina bi I/O

Berî her tiştî, em texmîna 4 jê bikin ku pêvajo tenê CPU bikar tîne; bi xwezayî, ev ne wusa ye û pêvajo dikarin bigihîjin alavên din.

Wexta ku pêvajoyek operasyonek I/O daxwaz dike, pêvajo dikeve rewşa astengkirî, li bendê ye ku I/O biqede. Ger I/O ji dîska hişk re were şandin, wê hingê operasyonek weha dikare çend ms an jî dirêjtir bigire, û dê pêvajo di vê gavê de bêkar bimîne. Di vê demê de, plansazker dikare pêvajoyê bi pêvajoyek din re dagir bike. Biryara paşîn ku dê plansazker bide ev e ku kengê pêvajo dê I/O-ya xwe temam bike. Dema ku ev diqewime, dê qutbûnek çêbibe û OS dê pêvajoya ku I/O tê gotin têxe rewşa amade.

Werin em li mînakek çend pirsgirêkan binêrin. Her yek ji wan 50 ms dema CPU hewce dike. Lêbelê, ya yekem dê her 10ms bigihîje I/O (ku dê her 10ms jî were darve kirin). Û pêvajoya B bi tenê pêvajoyek 50ms bêyî I/O bikar tîne.

Pergalên Xebatê: Sê Parçeyên Hêsan. Beş 4: Danasîna plansazker (werger)

Di vê nimûneyê de em ê plansazkerê STCF bikar bînin. Ger pêvajoyek mîna A li ser wê were destpêkirin dê plansazker çawa tevbigere? Ew ê jêrîn bike: Pêşî ew ê bi tevahî pêvajoya A-yê bixebite, û paşê pêvajoya B-yê.

Pergalên Xebatê: Sê Parçeyên Hêsan. Beş 4: Danasîna plansazker (werger)

Nêzîkatiya kevneşopî ya ji bo çareserkirina vê pirsgirêkê ev e ku meriv her 10 ms jêrxebata pêvajoya A wekî karek cûda derman bike. Bi vî rengî, dema ku bi algorîtmaya STJF re dest pê dike, bijartina di navbera peywirek 50 ms û peywirek 10 ms de diyar e. Dûv re, dema ku jêrxebata A qediya, dê pêvajoya B û I/O were destpêkirin. Piştî ku I/O qediya, dê adetî be ku li şûna pêvajoya B-yê pêvajoya 10ms A ji nû ve dest pê bike. Bi vî rengî, gengaz e ku meriv hevgirtinê pêk bîne, li cihê ku CPU ji hêla pêvajoyek din ve tê bikar anîn dema ku ya yekem li benda pêvajoyê ye. I/O. Wekî encamek, pergal çêtir tê bikar anîn - di dema ku pêvajoyên înteraktîf li benda I/O ne, pêvajoyên din dikarin li ser pêvajoyê bêne darve kirin.

Oracle êdî nema

Naha em biceribînin ku em ji texmîna ku dema xebitandina peywirê tê zanîn xilas bibin. Ev bi gelemperî li ser tevahiya navnîşê texmîna herî xirab û nerealîst e. Bi rastî, di navgîniya OS-ya asayî ya navîn de, OS bixwe bi gelemperî di derbarê dema pêkanîna karan de pir hindik dizane, ji ber vê yekê hûn çawa dikarin nexşerêyek ava bikin bêyî ku hûn zanibin ka dê kar çiqas dirêj bikişîne? Dibe ku em dikarin hin prensîbên RR-ê bikar bînin ku vê pirsgirêkê çareser bikin?

Encam

Me li ramanên bingehîn ên plansazkirina peywirê nihêrî û li 2 malbatên plansazker nihêrî. Yekem yekem karê herî kurt dest pê dike û bi vî rengî dema zivirînê zêde dike, dema ku ya duyemîn di navbera hemî karan de bi heman rengî tê perçe kirin, dema bersivdayînê zêde dike. Li cihê ku algorîtmayên malbata din baş in, her du algorîtma jî xirab in. Me her weha nihêrî ka çawa karanîna paralel a CPU û I/O dikare performansê baştir bike, lê pirsgirêk bi zelalbûna OS-ê re çareser nekir. Û di dersa paşîn de em ê li plansazek ​​ku li paşeroja nêzîk dinihêre û hewl dide ku pêşerojê pêşbîn bike binihêrin. Û jê re rêzika berteka pir-ast tê gotin.

Source: www.habr.com

Add a comment