Mifumo ya Uendeshaji: Vipande Tatu Rahisi. Sehemu ya 1: Utangulizi (tafsiri)

Utangulizi wa Mifumo ya Uendeshaji

Habari Habr! Ningependa kuwasilisha kwa mawazo yako mfululizo wa makala-tafsiri za fasihi moja ya kuvutia 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:
- asili: kurasa.cs.wisc.edu/~remzi/OSTEP/Homework/homework.html
- asili: github.com/remzi-arpacidusseau/ostep-code
- marekebisho yangu ya kibinafsi: github.com/bykvaadm/OS/tree/master/ostep

Unaweza pia kuangalia kituo changu kwa telegramu =)

Uendeshaji wa programu

Ni nini hufanyika wakati programu inaendeshwa? Programu inayoendesha hufanya jambo moja rahisi - hufanya maagizo. Kila sekunde, mamilioni na hata uwezekano wa mabilioni ya maagizo hutolewa na kichakataji kutoka kwa RAM, kwa upande wake huamua (kwa mfano, inatambua ni aina gani ya maagizo haya) na kuyatekeleza. Hii inaweza kuwa kuongeza nambari mbili, kupata kumbukumbu, kuangalia hali, kuruka kwa kazi, na kadhalika. Baada ya utekelezaji wa maagizo moja, processor inaendelea kwa utekelezaji wa mwingine. Na kwa hivyo maagizo baada ya maagizo, yanatekelezwa hadi programu itakapomalizika.
Mfano huu kwa asili unachukuliwa kuwa rahisi - kwa kweli, ili kuharakisha processor, vifaa vya kisasa hukuruhusu kutekeleza maagizo kwa zamu, kuhesabu matokeo iwezekanavyo, kutekeleza maagizo wakati huo huo, na hila zinazofanana.

Von Neumann mfano wa hesabu

Njia iliyorahisishwa ya kazi iliyoelezewa na sisi ni sawa na mfano wa hesabu wa Von Neumann. Von Neumann ni mmoja wa waanzilishi wa mifumo ya kompyuta, pia ni mmoja wa waandishi wa nadharia ya mchezo. Wakati mpango unaendelea, kundi la matukio mengine hufanyika, michakato mingine mingi na kazi ya mantiki ya mtu wa tatu, lengo kuu ambalo ni kurahisisha uzinduzi, uendeshaji na matengenezo ya mfumo.
Kuna seti ya programu ambayo ina jukumu la kufanya programu rahisi kuendesha (au hata kuruhusu programu nyingi kukimbia kwa wakati mmoja), ambayo inaruhusu programu kushiriki kumbukumbu sawa, na kuwasiliana na vifaa tofauti. Seti hiyo ya programu (programu) kimsingi inaitwa mfumo wa uendeshaji na kazi zake ni pamoja na ufuatiliaji kwamba mfumo hufanya kazi kwa usahihi na kwa ufanisi, pamoja na kuhakikisha urahisi wa usimamizi wa mfumo huu.

Mfumo wa uendeshaji

Mfumo wa uendeshaji, uliofupishwa kama OS, ni seti ya programu zinazohusiana zilizoundwa kudhibiti rasilimali za kompyuta na kupanga mwingiliano wa watumiaji na kompyuta..
OS inafikia ufanisi wake mahali pa kwanza, kwa njia ya mbinu muhimu zaidi - mbinu uboreshaji. OS huingiliana na rasilimali ya kimwili (processor, kumbukumbu, diski, nk) na kuibadilisha kuwa fomu ya jumla zaidi, yenye nguvu zaidi, na rahisi kutumia yenyewe. Kwa hiyo, kwa ufahamu wa jumla, unaweza takribani kulinganisha mfumo wa uendeshaji na mashine ya kawaida.
Ili kuruhusu watumiaji kutoa amri kwa mfumo wa uendeshaji na hivyo kutumia uwezo wa mashine ya kawaida (kama vile kuendesha programu, kugawa kumbukumbu, kufikia faili, na kadhalika), mfumo wa uendeshaji hutoa interface inayoitwa. API (kiolesura cha programu ya programu) na ambayo unaweza kupiga simu (simu). Mfumo wa uendeshaji wa kawaida huruhusu mamia ya simu za mfumo kupigwa.
Hatimaye, tangu virtualization inaruhusu programu nyingi kuendesha (hivyo kushiriki CPU), na wakati huo huo kupata maelekezo na data zao (hivyo kugawana kumbukumbu), na kufikia disks (hivyo kugawana vifaa vya I/O). ), mfumo wa uendeshaji pia huitwa a. meneja wa rasilimali. Kila processor, disk na kumbukumbu ni rasilimali ya mfumo, na hivyo moja ya majukumu ya mfumo wa uendeshaji inakuwa kazi ya kusimamia rasilimali hizi, kufanya hivyo kwa ufanisi, kwa uaminifu, au kinyume chake, kulingana na kazi ambayo mfumo huu wa uendeshaji. imeundwa.

Uboreshaji wa CPU

Fikiria programu ifuatayo:
(https://www.youtube.com/watch?v=zDwT5fUcki4&feature=youtu.be)

Mifumo ya Uendeshaji: Vipande Tatu Rahisi. Sehemu ya 1: Utangulizi (tafsiri)

Haifanyi vitendo vyovyote maalum, kwa kweli, yote inayofanya ni kuita kazi spin(), ambaye kazi yake ni kuzunguka kupitia ukaguzi wa wakati na kurudi baada ya sekunde moja kupita. Kwa hivyo, inarudia kwa muda usiojulikana kamba ambayo mtumiaji alipitisha kama hoja.
Wacha tuendeshe programu hii na tuipitishe herufi "A" kama hoja. Matokeo sio ya kuvutia sana - mfumo hufanya tu programu ambayo mara kwa mara huonyesha mhusika "A".
Sasa hebu tujaribu chaguo wakati matukio mengi ya programu sawa yanaendesha, lakini ikitoa herufi tofauti ili kuifanya iwe wazi zaidi. Katika kesi hii, matokeo yatakuwa tofauti. Licha ya ukweli kwamba tuna processor moja, programu inatekelezwa wakati huo huo. Inatokeaje? Lakini inageuka kuwa mfumo wa uendeshaji, si bila msaada wa uwezo wa vifaa, hujenga udanganyifu. Udanganyifu kwamba mfumo una vichakataji vingi pepe, kugeuza kichakataji kimoja halisi kuwa nambari isiyo na kikomo kinadharia na hivyo kuruhusu programu zinazoonekana kufanya kazi kwa wakati mmoja. Udanganyifu huu unaitwa Uboreshaji wa CPU.
Picha hii inaleta maswali mengi, kwa mfano, ikiwa programu kadhaa zinataka kukimbia kwa wakati mmoja, ni ipi itazinduliwa? "Sera" za OS zinawajibika kwa swali hili. Sera hutumiwa katika sehemu nyingi katika Mfumo wa Uendeshaji na kujibu maswali kama haya, na ni njia za msingi ambazo OS hutekelezea. Kwa hivyo jukumu la OS kama meneja wa rasilimali.

Uboreshaji wa kumbukumbu

Sasa hebu tuangalie kumbukumbu. Mfano wa kimwili wa kumbukumbu katika mifumo ya kisasa inawakilishwa kama safu ya ka.. Ili kusoma kutoka kwa kumbukumbu, unahitaji kutaja anwani ya selikuipata. Ili kuandika au kusasisha data, lazima pia ubainishe data na anwani ya seli mahali pa kuiandikia.
Kumbukumbu hupatikana kila wakati wakati wa utekelezaji wa programu. Programu huhifadhi muundo wake wote wa data kwenye kumbukumbu na kuipata kwa kutekeleza maagizo mbalimbali. Maagizo, wakati huo huo, pia yanahifadhiwa kwenye kumbukumbu, kwa hiyo pia hupatikana kwa kila ombi la maagizo yanayofuata.

malloc() simu

Fikiria programu ifuatayo, ambayo inatenga eneo la kumbukumbu kwa kutumia simu malloc () ( https://youtu.be/jnlKRnoT1m0 ):

Mifumo ya Uendeshaji: Vipande Tatu Rahisi. Sehemu ya 1: Utangulizi (tafsiri)

Mpango huo hufanya mambo kadhaa. Kwanza, hutenga kumbukumbu (mstari wa 7), kisha huchapisha anwani ya seli iliyotengwa (mstari wa 9), huandika sifuri kwa slot ya kwanza ya kumbukumbu iliyotengwa. Ifuatayo, programu huingia kwenye kitanzi ambacho huongeza thamani iliyohifadhiwa kwenye kumbukumbu kwenye anwani katika kutofautiana kwa "p". Pia huchapisha kitambulisho cha mchakato yenyewe. Kitambulisho cha mchakato ni cha kipekee kwa kila mchakato unaoendeshwa. Baada ya kuzindua nakala kadhaa, tutajikwaa juu ya matokeo ya kuvutia: Katika kesi ya kwanza, ikiwa hutafanya chochote na tu kukimbia nakala kadhaa, basi anwani zitakuwa tofauti. Lakini hii haingii chini ya nadharia yetu! Sahihi, kwa kuwa ugawaji wa kisasa una uboreshaji wa kumbukumbu unaowezeshwa na chaguo-msingi. Ikiwa imezimwa, tunapata matokeo yanayotarajiwa - anwani za kumbukumbu za programu mbili zinazoendesha wakati huo huo zitafanana.

Mifumo ya Uendeshaji: Vipande Tatu Rahisi. Sehemu ya 1: Utangulizi (tafsiri)

Matokeo yake, zinageuka kuwa programu mbili za kujitegemea zinafanya kazi na nafasi zao za anwani za kibinafsi, ambazo kwa upande wake zimepangwa na mfumo wa uendeshaji katika kumbukumbu ya kimwili.. Kwa hiyo, matumizi ya anwani za kumbukumbu ndani ya programu moja haitaathiri wengine kwa njia yoyote, na inaonekana kwa kila programu kuwa ina kipande chake cha kumbukumbu ya kimwili, iliyotolewa kabisa. Ukweli, hata hivyo, ni kwamba kumbukumbu ya kimwili ni rasilimali iliyoshirikiwa inayosimamiwa na mfumo wa uendeshaji.

Uthabiti

Mada nyingine muhimu ndani ya mifumo ya uendeshaji ni - uthabiti. Neno hili linatumika wakati wa kuzungumza juu ya matatizo katika mfumo ambayo yanaweza kutokea wakati wa kufanya kazi na vitu vingi kwa wakati mmoja ndani ya programu sawa. Masuala ya uthabiti hutokea hata ndani ya mfumo wa uendeshaji yenyewe. Katika kumbukumbu zilizopita na mifano ya virtualization ya processor, tuligundua kwamba OS inasimamia mambo mengi kwa wakati mmoja - huanza mchakato wa kwanza, kisha wa pili, na kadhalika. Kama ilivyotokea, tabia hii inaweza kusababisha matatizo fulani. Kwa hivyo, kwa mfano, programu za kisasa zenye nyuzi nyingi hupata shida kama hizo.

Fikiria programu ifuatayo:

Mifumo ya Uendeshaji: Vipande Tatu Rahisi. Sehemu ya 1: Utangulizi (tafsiri)

Programu katika kazi kuu huunda nyuzi mbili kwa kutumia simu pthread_create(). Katika mfano huu, uzi unaweza kuzingatiwa kama chaguo la kukokotoa linaloendesha katika nafasi sawa ya kumbukumbu kando ya vitendaji vingine, kwa uwazi zaidi ya kitendakazi kimoja kinachofanya kazi kwa wakati mmoja. Katika mfano huu, kila thread huanza na kutekeleza kazi worker() ambayo kwa upande wake huongeza tu kutofautisha,.

Wacha tuendeshe programu hii kwa hoja ya 1000. Kama unavyoweza kukisia, matokeo yanapaswa kuwa 2000 kwa sababu kila uzi uliongeza utofauti mara 1000. Walakini, kila kitu sio rahisi sana. Hebu jaribu kuendesha programu kwa utaratibu wa marudio zaidi ya ukubwa.

Mifumo ya Uendeshaji: Vipande Tatu Rahisi. Sehemu ya 1: Utangulizi (tafsiri)

Kwa kuingiza nambari, kwa mfano, 100000, tunatarajia kuona matokeo kama nambari 200000. Walakini, ikiwa tutaendesha nambari 100000 mara kadhaa, hatutaona tu jibu sahihi, lakini pia kupata majibu tofauti yasiyo sahihi. Jibu liko katika ukweli kwamba ili kuongeza nambari, shughuli tatu zinahitajika - kutoa nambari kutoka kwa kumbukumbu, kuongeza, na kisha kuandika nambari nyuma. Kwa kuwa maagizo haya yote hayatekelezwi kwa atomi (yote kwa wakati mmoja), mambo ya ajabu kama haya yanaweza kutokea. Tatizo hili linaitwa katika programu hali ya mbio. Wakati nguvu zisizojulikana kwa wakati usiojulikana zinaweza kuathiri utendakazi wa shughuli zako zozote.

Chanzo: mapenzi.com

Kuongeza maoni