Mifumo ya Uendeshaji: Vipande Tatu Rahisi. Sehemu ya 2: Muhtasari: Mchakato (tafsiri)

Utangulizi wa Mifumo ya Uendeshaji

Habari Habr! Ningependa kukuletea msururu wa vifungu-tafsiri za fasihi moja ya kupendeza kwa maoni yangu - OSTEP. Nyenzo hii inajadili kwa undani kazi ya mifumo ya uendeshaji kama unix, yaani, kufanya kazi na michakato, wapangaji ratiba mbalimbali, kumbukumbu, na vipengele vingine vinavyofanana vinavyounda OS ya kisasa. Unaweza kuona asili ya nyenzo zote hapa hapa. Tafadhali kumbuka kuwa tafsiri ilifanywa bila taaluma (kwa uhuru kabisa), lakini natumai nilihifadhi maana ya jumla.

Kazi ya maabara juu ya mada hii inaweza kupatikana hapa:

Sehemu zingine:

Unaweza pia kuangalia kituo changu kwa telegramu =)

Wacha tuangalie uondoaji wa kimsingi zaidi ambao OS hutoa kwa watumiaji: mchakato. Ufafanuzi wa mchakato ni rahisi sana - ni programu inayoendesha. Programu yenyewe ni kitu kisicho na uhai kilicho kwenye diski - ni seti ya maagizo na uwezekano wa data tuli inayosubiri kuzinduliwa. Ni OS ambayo inachukua ka hizo na kuziendesha, kubadilisha programu kuwa kitu muhimu.
Mara nyingi, watumiaji wanataka kuendesha programu zaidi ya moja kwa wakati mmoja, kwa mfano, unaweza kuendesha kivinjari, mchezo, kicheza media, kihariri cha maandishi, na kadhalika kwenye kompyuta yako ndogo. Kwa kweli, mfumo wa kawaida unaweza kuendesha makumi au mamia ya michakato kwa wakati mmoja. Ukweli huu hurahisisha kutumia mfumo, hautawahi kuwa na wasiwasi kuhusu ikiwa CPU ni bure, unaendesha programu tu.

Hii inazua shida: jinsi ya kutoa udanganyifu wa CPU nyingi? OS inawezaje kuunda udanganyifu wa karibu idadi isiyo na kikomo ya CPU, hata ikiwa una CPU moja tu ya mwili?

OS huunda udanganyifu huu kupitia uboreshaji wa CPU. Kwa kuanza mchakato mmoja, kisha kuacha, kuanzia mchakato mwingine, na kadhalika, OS inaweza kudumisha udanganyifu kwamba kuna CPU nyingi za virtual, wakati kwa kweli kutakuwa na wasindikaji mmoja au zaidi wa kimwili. Mbinu hii inaitwa mgawanyiko wa rasilimali za CPU kwa wakati. Mbinu hii inaruhusu watumiaji kuendesha michakato mingi ya wakati mmoja kama wanavyotaka. Gharama ya suluhisho hili ni utendakazi - kwani ikiwa CPU itashirikiwa na michakato kadhaa, kila mchakato utachakatwa polepole zaidi.
Ili kutekeleza uboreshaji wa CPU, na haswa kuifanya vizuri, OS inahitaji usaidizi wa kiwango cha chini na cha juu. Usaidizi wa kiwango cha chini huitwa taratibu ni mbinu za kiwango cha chini au itifaki zinazotekeleza sehemu inayohitajika ya utendakazi. Mfano wa utendaji kama huo ni ubadilishaji wa muktadha, ambayo inatoa OS uwezo wa kusimamisha programu moja na kuendesha programu nyingine kwenye processor. Mgawanyiko huu wa wakati unatekelezwa katika mifumo yote ya kisasa ya uendeshaji.
Juu ya taratibu hizi ni baadhi ya mantiki iliyojengwa kwenye OS, kwa namna ya "sera". Sera ni algorithm fulani ya kufanya maamuzi kwa mfumo wa uendeshaji. Sera kama hizo, kwa mfano, huamua ni programu gani inapaswa kuzinduliwa (kutoka kwa orodha ya amri) kwanza. Kwa hiyo, kwa mfano, tatizo hili litatatuliwa na sera inayoitwa mratibu (sera ya kuratibu) na wakati wa kuchagua suluhu, itaongozwa na data kama vile: historia ya uanzishaji (programu ambayo ilizinduliwa kwa muda mrefu zaidi katika dakika za mwisho), mchakato huu unabeba mzigo gani (ni aina gani za programu zilizinduliwa), vipimo vya utendaji (iwe mfumo imeboreshwa kwa mwingiliano wa mwingiliano au kwa throughput ) na kadhalika.

Muhtasari: mchakato

Uondoaji wa programu inayoendesha inayotekelezwa na mfumo wa uendeshaji ndio tunaita mchakato. Kama ilivyoelezwa hapo awali, mchakato ni programu inayoendesha, kwa muda wowote wa papo hapo. Mpango ambao tunaweza kupata maelezo ya muhtasari kutoka kwa nyenzo mbalimbali za mfumo ambazo programu hii hufikia au kuathiri wakati wa utekelezaji wake.
Ili kuelewa vipengele vya mchakato, unahitaji kuelewa majimbo ya mfumo: ni nini programu inaweza kusoma au kubadilisha wakati wa uendeshaji wake. Kwa wakati wowote, unahitaji kuelewa ni vipengele vipi vya mfumo ni muhimu kwa utekelezaji wa programu.
Moja ya mambo ya wazi ya mfumo hali kwamba mchakato ni pamoja na ni kumbukumbu. Maagizo yapo kwenye kumbukumbu. Data ambayo programu inasoma au kuandika pia iko kwenye kumbukumbu. Kwa hivyo, kumbukumbu ambayo mchakato unaweza kushughulikia (inayoitwa nafasi ya anwani) ni sehemu ya mchakato.
Pia sehemu ya hali ya mfumo ni rejista. Maagizo mengi yanalenga kubadilisha thamani ya madaftari au kusoma thamani yao, na hivyo madaftari pia huwa sehemu muhimu ya uendeshaji wa mchakato.
Ikumbukwe kwamba hali ya mashine pia huundwa kutoka kwa rejista maalum. Kwa mfano, IP - pointer ya maagizo - kielekezi kwa maagizo ambayo programu inatekelezwa kwa sasa. Kuna pia kiashiria cha stack na kuhusiana nayo pointer ya sura, ambayo hutumiwa kusimamia: vigezo vya kazi, vigezo vya ndani na anwani za kurejesha.
Hatimaye, programu mara nyingi hufikia ROM (kumbukumbu ya kusoma tu). Taarifa hii ya "I/O" (ingizo/pato) inapaswa kujumuisha orodha ya faili zilizofunguliwa kwa sasa na mchakato.

Mchakato wa API

Ili kuboresha uelewa wetu wa jinsi mchakato unavyofanya kazi, hebu tujifunze mifano ya simu za mfumo ambazo zinapaswa kujumuishwa katika kiolesura chochote cha mfumo wa uendeshaji. API hizi zinapatikana kwa njia moja au nyingine kwenye OS yoyote.

Kujenga (uundaji): Mfumo wa Uendeshaji lazima ujumuishe njia fulani inayokuruhusu kuunda michakato mipya. Unapoingiza amri kwenye terminal au kuzindua programu kwa kubofya mara mbili kwenye ikoni, simu inatumwa kwa OS ili kuunda mchakato mpya na kisha kuzindua programu maalum.
Kuondolewa: Kwa kuwa kuna kiolesura cha kuunda mchakato, OS inapaswa pia kutoa uwezo wa kulazimisha kuondolewa kwa mchakato. Programu nyingi zitaanza na kuisha zenyewe zinapoendeshwa. Vinginevyo mtumiaji angependa kuweza kuwaua na kwa hivyo kiolesura cha kusimamisha mchakato kinaweza kuwa muhimu.
Kusubiri (inasubiri): Wakati mwingine ni muhimu kusubiri mchakato ukamilike, kwa hivyo baadhi ya miingiliano hutolewa ambayo hutoa uwezo wa kusubiri.
Udhibiti Mbalimbali (udhibiti mbalimbali): Mbali na kuua na kusubiri mchakato, pia kuna njia nyingine mbalimbali za udhibiti. Kwa mfano, mifumo mingi ya uendeshaji hutoa uwezo wa kufungia mchakato (kusimamisha utekelezaji wake kwa muda fulani) na kisha uendelee tena (endelea kutekeleza)
Hali ya Oda (jimbo): Kuna violesura mbalimbali vya kupata taarifa fulani kuhusu hali ya mchakato, kama vile ni muda gani umekuwa ukiendelea au uko katika hali gani kwa sasa.

Mifumo ya Uendeshaji: Vipande Tatu Rahisi. Sehemu ya 2: Muhtasari: Mchakato (tafsiri)

Uundaji wa Mchakato: Maelezo

Moja ya mambo ya kuvutia ni jinsi hasa mipango ni kubadilishwa katika michakato. Hasa jinsi OS inavyochukua na kuendesha programu. Jinsi mchakato huu umeundwa.
Kwanza kabisa, OS lazima ipakie msimbo wa programu na data tuli kwenye kumbukumbu (kwenye nafasi ya anwani ya mchakato). Programu kawaida ziko kwenye diski au kiendeshi cha hali dhabiti katika umbizo fulani linaloweza kutekelezwa. Kwa hivyo, mchakato wa kupakia programu na data tuli kwenye kumbukumbu inahitaji OS kuwa na uwezo wa kusoma byte hizo kutoka kwa diski na kuziweka mahali fulani kwenye kumbukumbu.

Katika mifumo ya awali ya uendeshaji, mchakato wa upakiaji ulifanyika kwa hamu, ambayo ina maana kwamba msimbo mzima uliwekwa kwenye kumbukumbu kabla ya programu kuzinduliwa. Mifumo ya kisasa ya uendeshaji hufanya hivyo kwa uvivu, yaani, kupakia vipande vya msimbo au data tu wakati programu inawahitaji wakati wa utekelezaji wake.

Mara tu nambari na data tuli inapopakiwa kwenye kumbukumbu ya Mfumo wa Uendeshaji, kuna mambo machache zaidi ambayo yanahitaji kufanywa kabla ya mchakato kuanza. Kiasi fulani cha kumbukumbu lazima kitengewe kwa rafu. Programu hutumia rafu kwa vigeu vya ndani, vigezo vya utendakazi, na anwani za kurejesha. OS inagawa kumbukumbu hii na inatoa kwa mchakato. Rafu pia inaweza kugawiwa na baadhi ya hoja, haswa inajaza vigezo vya kazi kuu kuu(), kwa mfano na safu ya argc na argv.

Mfumo wa uendeshaji unaweza pia kutenga kumbukumbu fulani kwenye lundo la programu. Lundo hutumiwa na programu kuomba data iliyogawiwa kwa njia dhahiri. Programu huomba nafasi hii kwa kupiga chaguo la kukokotoa malloc () na huisafisha kwa uwazi kwa kupiga chaguo la kukokotoa bure (). Lundo linahitajika kwa miundo ya data kama vile laha zilizounganishwa, majedwali ya hashi, miti na mengineyo. Mara ya kwanza, kiasi kidogo cha kumbukumbu kinatolewa kwa lundo, lakini baada ya muda, wakati programu inaendesha, lundo linaweza kuomba kumbukumbu zaidi kupitia maktaba ya API call malloc(). Mfumo wa uendeshaji unahusishwa katika mchakato wa kutenga kumbukumbu zaidi ili kusaidia kukidhi simu hizi.

Mfumo wa uendeshaji pia utafanya kazi za uanzishaji, haswa zile zinazohusiana na I/O. Kwa mfano, kwenye mifumo ya UNIX, kila mchakato kwa chaguo-msingi una vifafanuzi 3 vya faili wazi, kwa ingizo la kawaida, pato, na makosa. Vipini hivi huruhusu programu kusoma ingizo kutoka kwa terminal na pia kuonyesha habari kwenye skrini.

Kwa hivyo, kwa kupakia msimbo na data tuli kwenye kumbukumbu, kuunda na kuanzisha stack, na kufanya kazi nyingine zinazohusiana na kufanya kazi za I / O, OS huandaa hatua kwa mchakato wa kutekeleza. Hatimaye, kuna kazi moja ya mwisho iliyobaki: kuendesha programu kupitia sehemu yake ya kuingia, inayoitwa main() kazi. Kwa kutekeleza kazi kuu (), OS huhamisha udhibiti wa CPU kwa mchakato mpya iliyoundwa, kwa hivyo programu huanza kutekeleza.

Jimbo la mchakato

Sasa kwa kuwa tuna ufahamu fulani wa mchakato ni nini na jinsi unavyoundwa, hebu tuorodheshe mchakato unaosema unaweza kuwa ndani. Kwa fomu yake rahisi, mchakato unaweza kuwa katika mojawapo ya majimbo haya:
Mbio. Wakati wa kukimbia, mchakato unaendelea kwenye processor. Hii inamaanisha kuwa maagizo yanatekelezwa.
Tayari. Katika hali iliyo tayari, mchakato uko tayari kukimbia, lakini kwa sababu fulani OS haifanyi kwa wakati maalum.
imefungwa. Katika hali iliyozuiwa, mchakato hufanya shughuli fulani ambazo huizuia kuwa tayari kutekelezwa hadi tukio fulani litokee. Mfano mmoja wa kawaida ni wakati mchakato unapoanzisha operesheni ya IO, inakuwa imefungwa ili mchakato mwingine uweze kutumia kichakataji.

Mifumo ya Uendeshaji: Vipande Tatu Rahisi. Sehemu ya 2: Muhtasari: Mchakato (tafsiri)

Unaweza kufikiria majimbo haya kwa namna ya grafu. Kama tunavyoona kwenye picha, hali ya mchakato inaweza kubadilika kati ya RUNNING na READY kwa hiari ya OS. Wakati hali ya mchakato inabadilika kutoka READY hadi RUNNING, inamaanisha kuwa mchakato umeratibiwa. Katika mwelekeo kinyume - kuondolewa kutoka kwa mpangilio. Kwa sasa wakati mchakato unazuiwa, kwa mfano, ninaanzisha operesheni ya IO, OS itaiweka katika hali hii hadi tukio fulani litokee, kwa mfano kukamilika kwa IO. kwa wakati huu mpito kwa hali ya TAYARI na ikiwezekana mara moja hadi hali ya KUENDELEA ikiwa OS itaamua hivyo.
Wacha tuangalie mfano wa jinsi michakato miwili inavyopitia majimbo haya. Kuanza, wacha tufikirie kuwa michakato yote miwili inaendelea, na kila moja inatumia CPU pekee. Katika kesi hii, majimbo yao yataonekana kama hii.

Mifumo ya Uendeshaji: Vipande Tatu Rahisi. Sehemu ya 2: Muhtasari: Mchakato (tafsiri)

Katika mfano unaofuata, mchakato wa kwanza, baada ya muda wa kukimbia, unaomba IO na uingie hali ILIYOZUIWA, kuruhusu mchakato mwingine kukimbia (FIG 1.4). Mfumo wa uendeshaji unaona kuwa mchakato 0 hautumii CPU na huanza mchakato 1. Wakati mchakato wa 1 unaendelea, IO inakamilika na hali ya mchakato 0 inabadilika kuwa READY. Hatimaye, mchakato 1 umekamilika, na baada ya kukamilika, mchakato 0 huanza, kutekeleza, na kumaliza kazi yake.

Mifumo ya Uendeshaji: Vipande Tatu Rahisi. Sehemu ya 2: Muhtasari: Mchakato (tafsiri)

Muundo wa data

Mfumo wa Uendeshaji yenyewe ni programu, na kama programu nyingine yoyote, ina miundo muhimu ya data ambayo hufuatilia vipande mbalimbali vya habari. Ili kufuatilia hali ya kila mchakato, OS itasaidia baadhi orodha ya mchakato kwa michakato yote katika hali ya READY na baadhi ya maelezo ya ziada ya kufuatilia michakato inayoendeshwa kwa sasa. Pia, OS inapaswa kufuatilia michakato iliyozuiwa. Baada ya IO kukamilika, OS lazima iamshe mchakato unaohitajika na kuiweka katika hali tayari kukimbia.

Kwa mfano, OS lazima ihifadhi hali ya rejista za processor. Wakati mchakato unapoacha, hali ya rejista huhifadhiwa kwenye nafasi ya anwani ya mchakato, na kwa sasa uendeshaji wake unaendelea, maadili ya rejista yanarejeshwa na hivyo kuendelea na utekelezaji wa mchakato huu.

Mbali na majimbo yaliyo tayari, yaliyozuiwa, yanayoendesha, kuna majimbo mengine. Wakati mwingine, wakati wa uumbaji, mchakato unaweza kuwa katika hali ya INIT. Hatimaye, mchakato unaweza kuwekwa katika hali ya MWISHO wakati tayari umekamilika, lakini taarifa yake bado haijafutwa. Kwenye mifumo ya UNIX hali hii inaitwa mchakato wa zombie. Hali hii ni muhimu kwa hali ambapo mchakato wa mzazi unataka kujua msimbo wa kurejesha mtoto, kwa mfano, kwa kawaida 0 huashiria mafanikio na 1 hitilafu, lakini watayarishaji wa programu wanaweza kutoa misimbo ya ziada ya matokeo ili kuashiria matatizo tofauti. Mchakato wa mzazi unapokamilika, hutoa simu ya mwisho ya mfumo, kama vile wait(), ili kusubiri mchakato wa mtoto kusitishwa na kutoa ishara kwa OS kwamba inaweza kufuta data yoyote inayohusiana na mchakato uliokatishwa.

Mifumo ya Uendeshaji: Vipande Tatu Rahisi. Sehemu ya 2: Muhtasari: Mchakato (tafsiri)

Mambo muhimu ya hotuba:

mchakato - uondoaji kuu wa programu inayoendesha katika OS. Wakati wowote, mchakato unaweza kuelezewa na hali yake: yaliyomo kwenye kumbukumbu katika nafasi yake ya anwani, yaliyomo kwenye rejista za vichakataji, pamoja na kielekezi cha maagizo na kiashiria cha stack, na habari ya IO, kama vile faili zilizo wazi zinazosomwa au kuandikwa.
Mchakato wa API inajumuisha simu ambazo programu zinaweza kupiga ili kuchakata. Kawaida hizi ni kuunda, kufuta, au simu zingine.
● Mchakato uko katika mojawapo ya majimbo mengi, ikiwa ni pamoja na kukimbia, tayari, kuzuiwa. Matukio mbalimbali kama vile kuratibu, vighairi kutoka kwa kuratibu, au kusubiri kunaweza kubadilisha hali ya mchakato kutoka moja hadi nyingine.
Orodha ya mchakato ina habari kuhusu michakato yote katika mfumo. Kila kuingia ndani yake inaitwa kizuizi cha udhibiti wa mchakato, ambayo kwa kweli ni muundo unao na taarifa zote muhimu kuhusu mchakato maalum. 

Chanzo: mapenzi.com

Kuongeza maoni