Pergalên Xebatê: Sê Parçeyên Hêsan. Beş 1: Destpêk (werger)

Destpêka Pergalên Xebatê

Silav Habr! Ez dixwazim rêzek gotar-wergerên yek edebiyata ku li gorî min balkêş e pêşkêşî we bikim - OSTEP. Ev materyal bi kûrahî xebata pergalên xebitandinê yên mîna unix-ê, ango xebata bi pêvajoyan, plansazkerên cihêreng, bîranîn û hêmanên din ên wekhev ên ku OS-ya nûjen pêk tînin, bi kûr ve dikole. 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:
- orjînal: pages.cs.wisc.edu/~remzi/OSTEP/Homework/homework.html
- orjînal: github.com/remzi-arpacidusseau/ostep-code
- adaptasyona min a kesane: github.com/bykvaadm/OS/tree/master/ostep

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

Operasyona bernameyê

Dema ku bernameyek dimeşîne çi dibe? Bernameyek xebitandinê tiştek hêsan dike - ew talîmatan pêk tîne. Her saniye, bi mîlyonan û belkî bi mîlyaran talîmat ji hêla pêvajoyê ve ji RAM-ê têne derxistin, di encamê de ew wan deşîfre dike (mînak, nas dike ku ev rêwerzan ji kîjan celebê ne) û wan bi cih tîne. Ev dibe ku du hejmaran lê zêde bike, bigihîje bîranînê, ceribandinek rewşek, avêtina fonksiyonek, û hwd. Piştî qedandina yek rêwerzan, pêvajo ber bi pêkanîna yekî din ve diçe. Û bi vî awayî talîmat li dû rêwerzan, ew têne darve kirin heya ku bername biqede.
Ev mînak bi xwezayî bi rengek hêsan tête hesibandin - di rastiyê de, ji bo lezkirina pêvajoyê, hardware nûjen dihêle hûn rêwerzan ji rêzê bicîh bikin, encamên mimkun bihesibînin, talîmatan bi hevdemî bicîh bînin, û hîleyên wekhev.

Modela hesabkirina Von Neumann

Forma hêsankirî ya xebitandinê ya ku me diyar kiriye dişibihe modela hesabkirinê ya Von Neumann. Von Neumann yek ji pêşengên pergalên komputerê ye, ew di heman demê de yek ji nivîskarên teoriya lîstikê ye.. Dema ku bername dimeşe, komek bûyerên din diqewimin, gelek pêvajoyên din û mantiqa partiya sêyemîn dimeşînin, ku armanca sereke hêsankirina destpêkirin, xebitandin û domandina pergalê ye.
Komek nermalava ku berpirsiyar e ku bernameyan bi hêsanî bixebitîne (an jî destûr bide ku gelek bername di heman demê de bixebitin), dihêle ku bername heman bîranînê parve bikin, hem jî bi cîhazên cihêreng re têkilî daynin. Komek weha ji nermalava (nermalavê) di bingeh de jê re pergala xebitandinê tê gotin û erkên wê çavdêriya ku pergal rast û bikêrhatî kar dike, û hem jî dabînkirina hêsaniya birêvebirina vê pergalê heye.

pergala xebatê ya

Pergala xebitandinê, bi kurteya OS, komek bernameyên bi hev ve girêdayî ye ku ji bo birêvebirina çavkaniyên komputerê û organîzekirina têkiliya bikarhêner bi komputerê re hatî çêkirin..
OS di serî de bi teknîka herî girîng - teknolojiyê bandoriya xwe bi dest dixe virtualization. OS bi çavkaniyek fizîkî (pêvajoker, bîranîn, dîsk, hwd.) re têkildar dibe û wê vediguherîne formek gelemperî, jêhatîtir û karanîna hêsantir. Ji ber vê yekê, ji bo têgihiştinek gelemperî, hûn dikarin pir bi gelemperî pergala xebitandinê bi makîneyek virtual re bidin hev.
Ji bo ku bikarhêner fermanan bidin pergala xebitandinê û bi vî rengî îmkanên makîneya virtual bikar bînin (wek: meşandina bernameyekê, veqetandina bîranînê, gihîştina pelê û hwd.), pergala xebitandinê navgînek bi navê API (navbera bernamesaziya serîlêdanê) û kîjan bangî dikare were kirin. Pergalek xebitandinê ya tîpîk dihêle hûn bi sedan bangên pergalê bikin.
Di dawiyê de, ji ber ku virtualîzasyon dihêle ku gelek bername bixebitin (bi vî rengî CPU-yê parve bikin), û di heman demê de bigihîjin rêwerz û daneyên wan (bi vî rengî bîranînê parve dikin), û bigihîjin dîskan (bi vî rengî cîhazên I/O parve dikin), ji pergala xebitandinê re jî çavkaniyek tê gotin. rêvebir. Her pêvajoyek, dîsk û bîranîn çavkaniyek pergalê ye û bi vî rengî yek ji rola pergala xebitandinê dibe peywira birêvebirina van çavkaniyan, kirina wê bi bandor, adil an berevajî vê yekê, li gorî karê ku pergala xebitandinê ji bo wê hatî sêwirandin. .

virtualîzasyona CPU

Bernameya jêrîn bifikirin:
(https://www.youtube.com/watch?v=zDwT5fUcki4&feature=youtu.be)

Pergalên Xebatê: Sê Parçeyên Hêsan. Beş 1: Destpêk (werger)

Ew ti kiryarên taybetî pêk nayîne; Bi rastî, ya ku dike fonksiyonek bang dike hûnîn(), ku peywira wî ew e ku bi çerxa demjimêrê kontrol bike û piştî ku yek saniye derbas bû vegere. Bi vî rengî, ew rêzika ku bikarhêner wekî arguman derbas kiriye bêdawî dubare dike.
Werin em vê bernameyê bimeşînin û nîşana "A" wekî arguman jê re derbas bikin. Encam bi taybetî ne balkêş e - pergal bi tenê bernameyek ku bi periyodîk nîşana "A" li ser ekranê nîşan dide pêk tîne.
Naha em vebijarkê biceribînin dema ku gelek mînakên heman bernameyê têne destpêkirin, lê tîpên cihêreng nîşan didin, da ku wê zelaltir bikin. Di vê rewşê de, encam dê hinekî cûda be. Tevî rastiya ku me yek pêvajoyek heye, bername bi hevdemî dimeşe. Ev çawa dibe? Lê derdikeve holê ku pergala xebitandinê, ne bê arîkariya kapasîteyên hardware, xeyalek diafirîne. Xewna ku di pergalekê de gelek pêvajoyên virtual hene, yek pêvajoyek laşî vediguherîne hejmareke teorîkî ya bêdawî û bi vî rengî dihêle ku bername bi rengek hevdemî bixebitin. Ji vê xeyalê re tê gotin virtualîzasyona CPU.
Ev wêne gelek pirsan derdixe holê, mînakî, heke çend bername di heman demê de bixwazin werin xebitandin, wê hingê kîjan dê were destpêkirin? "Siyasetên" OS ji vê pirsgirêkê berpirsiyar in. Polîtîkayên li gelek cihan di OS-ê de têne bikar anîn û bersiva pirsên mîna van didin, û di heman demê de mekanîzmayên bingehîn ên ku OS bicîh tîne jî ne. Ji ber vê yekê rola OS-ê wekî rêveberê çavkaniyê.

Virtualîzasyona bîranînê

Niha em li bîranînê binêrin. Modela fizîkî ya bîranînê di pergalên nûjen de wekî rêzek byte tê destnîşan kirin. Ji bo xwendina ji bîrê divê hûn diyar bikin navnîşana hucreyêji bo gihîştina wê. Ji bo nivîsandin an nûvekirina daneyan, divê hûn dane û navnîşana hucreya ku hûn lê binivîsin jî diyar bikin.
Di dema pêkanîna bernameyê de gihîştina bîranînê bi berdewamî pêk tê. Bername tevahiya avahiya daneya xwe di bîrê de hilîne û bi pêkanîna rêwerzên cihêreng digihîje wê. Di vê navberê de, rêwerzan jî di bîranînê de têne hilanîn, ji ber vê yekê ji bo her daxwazek ji bo talîmata din jî tê gihîştin.

Banga malloc ()

Bernameya jêrîn bifikirin, ku bi karanîna bangê herêmek bîranînê vediqetîne malloc () (https://youtu.be/jnlKRnoT1m0):

Pergalên Xebatê: Sê Parçeyên Hêsan. Beş 1: Destpêk (werger)

Bername çend tiştan dike. Pêşî, ew hin bîranînê vediqetîne (xêza 7), dûv re navnîşana şaneya veqetandî (xêza 9) çap dike, sifir li hêlîna yekem a bîranîna veqetandî dinivîse. Dûv re, bername dikeve dorpêkek ku tê de nirxa ku di bîranînê de li navnîşana guhêrbar "p" hatî hilanîn zêde dike. Ew jî nasnameya pêvajoyê ya xwe nîşan dide. Nasnameya pêvajoyê ji bo her pêvajoya xebitandinê yekta ye. Piştî destpêkirina çend kopiyan, em ê rastî encamek balkêş werin: Di gava yekem de, heke em tiştek nekin û tenê çend kopiyan bidin destpêkirin, navnîşan dê cûda bin. Lê ev yek nakeve bin teoriya me! Rast e, ji ber ku belavkirinên nûjen xwedan randomkirina bîranînê ji hêla xwerû ve hatî çalak kirin. Ger hûn wê neçalak bikin, em encama hêvîkirî digirin - navnîşanên bîranînê yên du bernameyên ku bi hevdemî têne xebitandin dê li hev werin.

Pergalên Xebatê: Sê Parçeyên Hêsan. Beş 1: Destpêk (werger)

Encam ev e ku du bernameyên serbixwe bi cîhên navnîşana xwe yên taybet re dixebitin, ku di encamê de ji hêla pergala xebitandinê ve di bîra laşî de têne nexşandin.. Ji ber vê yekê, karanîna navnîşanên bîranînê di nav bernameyekê de dê bi ti awayî bandorê li yên din neke, û her bername xuya dike ku perçeyek bîranîna xweya laşî, bi tevahî di destê xwe de ye. Lêbelê, rastî ev e ku bîranîna laşî çavkaniyek hevpar e ku ji hêla pergala xebitandinê ve tê rêve kirin.

Consistency

Di nav pergalên xebitandinê de mijarek din a girîng e hevgirtî. Ev têgîn dema ku behsa pirsgirêkên pergalê yên ku di yek bernameyê de bi yekcarî re bi gelek tiştan re dixebitin tê bikar anîn. Pirsgirêkên domdariyê di nav pergala xebitandinê bixwe de jî çêdibin. Di mînakên berê yên bi virtualîzekirina bîranîn û pêvajoyê de, me fêm kir ku OS di heman demê de gelek tiştan birêve dibe - pêvajoya yekem, dûv re ya duyemîn, û hwd. Wekî ku xuya dibe, ev tevger dikare bibe sedema hin pirsgirêkan. Mînakî, bernameyên pir-mijal ên nûjen zehmetiyên wusa dikişînin.

Bernameya jêrîn bifikirin:

Pergalên Xebatê: Sê Parçeyên Hêsan. Beş 1: Destpêk (werger)

Bername di fonksiyona sereke de bi karanîna bangê du mijaran diafirîne Pthread_create(). Di vê nimûneyê de, mijarek dikare wekî fonksiyonek ku di heman cîhê bîranînê de li kêleka fonksiyonên din dixebite were fikirîn, ku bi eşkere ji yek fonksiyonê di heman demê de dixebite. Di vê nimûneyê de, her mijarek fonksiyonek dest pê dike û pêk tîne karker() ya ku di encamê de bi tenê guhêrbar zêde dike,.

Werin em vê bernameyê bi argumanek 1000 bimeşînin. Wek ku we texmîn kir, divê encam bibe 2000, ji ber ku her mijar guhêrbar 1000 carî zêde kir. Lêbelê, her tişt ne ewqas hêsan e. Ka em hewl bidin ku bernameyê bi rêzek mezinahiyê bêtir dubareyan bimeşînin.

Pergalên Xebatê: Sê Parçeyên Hêsan. Beş 1: Destpêk (werger)

Bi ketina jimarekê, bo nimûne, 100000, em li bendê ne ku di encam de jimareya 200000 bibînin.Lêbelê, bi çend caran xistina jimareya 100000, em ê ne tenê bersiva rast nebînin, lê em ê bersivên cûda yên nerast jî werbigirin. Bersiv di vê rastiyê de ye ku zêdekirina jimarekê sê operasyonan hewce dike - derxistina hejmarê ji bîrê, zêdekirina wê, û paşê nivîsandina hejmarê. Ji ber ku van hemî rêwerzan bi atomî (hemî di heman demê de) nayên darve kirin, tiştên ecêb ên bi vî rengî dikarin bibin. Ev pirsgirêk di bernamekirinê de tê gotin rewşa nijadê - rewşa nijadê. Dema ku hêzên nenas di demek nenas de dikarin bandorê li ser pêkanîna yek ji operasyonên we bikin.

Source: www.habr.com

Add a comment