Pergalên Xebatê: Sê Parçeyên Hêsan. Beş 2: Abstraction: Pêvajo (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 =)

Ka em li abstrasyona herî bingehîn a ku OS ji bikarhêneran re peyda dike binihêrin: pêvajoyê. Danasîna pêvajoyê pir hêsan e - ew e bernameya xebitandinê. Bername bixwe tiştek bêcan e ku li ser dîskê ye - ew komek rêwerzan e û dibe ku hin daneyên statîk ku li benda destpêkirinê ne. Ew OS-ê ye ku wan bytes digire û dimeşîne, bernameyê vediguherîne tiştek kêrhatî.
Bi gelemperî, bikarhêner dixwazin ku di heman demê de bêtir ji yek bernameyê bimeşînin, mînakî, hûn dikarin gerokek, lîstikek, lîstikvanek medyayê, edîtorê nivîsê û yên wekî li ser laptopa xwe bimeşînin. Bi rastî, pergalek tîpîk dikare bi deh an bi sedan pêvajoyên hevdemî bimeşîne. Ev rastî karanîna pergalê hêsantir dike, hûn çu carî ne hewce ne ku hûn xeman nebin ka CPU belaş e, hûn tenê bernameyan dimeşînin.

Ev pirsgirêk derdixe holê: meriv çawa xeyala gelek CPU-yan peyda dike? Çawa OS dikare xeyala hema hema bêdawî ya CPU-yan biafirîne, hetta ku we tenê yek CPU-ya laşî hebe?

OS vê xeyalê bi virtualîzasyona CPU-yê diafirîne. Bi destpêkirina pêvajoyek, dûv re rawestandina wê, destpêkirina pêvajoyek din, û hwd, OS dikare xeyala ku gelek CPU-yên virtual hene bidomîne, dema ku di rastiyê de dê yek an çend pêvajoyên laşî hebin. Ev teknîkî tê gotin dabeşkirina çavkaniyên CPU ji hêla demê ve. Ev teknîk dihêle ku bikarhêner bi qasî ku dixwazin pêvajoyên hevdemî bimeşînin. Mesrefa vê çareseriyê performans e - ji ber ku heke CPU ji hêla çend pêvajoyan ve were parve kirin, her pêvajo dê hêdîtir were pêvajo kirin.
Ji bo pêkanîna virtualîzasyona CPU-yê, û nemaze ji bo başkirina wê, OS-ê hem pêdiviya nizm û hem jî asta bilind hewce dike. Piştgiriya asta nizm tê gotin mekanîzmayên Rêbaz an protokolên asta nizm in ku beşa pêdivî ya fonksiyonê bicîh dikin. Nimûneyek fonksiyonek wusa veguheztina kontekstê ye, ku OS-yê jêhatîbûnê dide bernameyekê rawestîne û bernameyek din li ser pêvajoyê bimeşîne. Ev dabeşkirina demê di hemî pergalên xebitandinê yên nûjen de tête bicîh kirin.
Li ser van mekanîzmayan hin mantiq di OS-ê de, di forma "polîtîkayan" de hatî çêkirin. siyaseta ji bo pergala xebitandinê hin algorîtmayek biryargirtinê ye. Siyasetên weha, ji bo nimûne, biryar didin ka kîjan bername divê pêşîn (ji navnîşek fermanan) were destpêkirin. Ji ber vê yekê, wek nimûne, ev pirsgirêk dê bi polîtîkaya bi navê xwe çareser bibe plansazker (siyaseta plansazkirinê) û dema ku çareseriyek hilbijêrin, ew ê ji hêla daneyên weha ve were rêve kirin: dîroka destpêkirinê (kîjan bername di deqên paşîn de herî dirêj hate destpêkirin), ev pêvajo çi bar dike (çi celeb bername hatin destpêkirin), metrîkên performansê (gelo pergal ji bo danûstendina înteraktîf an ji bo rêveçûnê xweşbîn e) û hwd.

Abstraction: pêvajo

Abstrakasyona bernameyek xebitandinê ya ku ji hêla pergala xebitandinê ve hatî darve kirin ew e ku em jê re dibêjin pêvajoya. Wekî ku berê hate behs kirin, pêvajoyek tenê bernameyek xebitandinê ye, di her heyamek demkî de. Bernameyek ku em pê re dikarin agahdariya kurteya ji çavkaniyên pergalê yên cihêreng ên ku ev bername di dema pêkanîna xwe de digihîje an bandorê li wan dike bistînin.
Ji bo fêmkirina pêkhateyên pêvajoyê, hûn hewce ne ku rewşên pergalê fam bikin: ka bername di dema xebata xwe de dikare çi bixwîne an biguhezîne. Di her kêliyê de, hûn hewce ne ku fêm bikin ka kîjan hêmanên pergalê ji bo pêkanîna bernameyê girîng in.
Yek ji hêmanên diyar ên pergalê ku pêvajo di nav xwe de dihewîne ev e bîr. Talîmat di bîranînê de cih digirin. Daneyên ku bername dixwîne an dinivîse jî di bîranînê de cih digire. Ji ber vê yekê, bîranîna ku pêvajoyek dikare navnîşan bike (ku jê re cîhê navnîşan tê gotin) beşek pêvajoyê ye.
Di heman demê de beşek ji dewleta pergalê qeyd in. Gelek talîmat bi mebesta guheztina nirxa tomaran an xwendina nirxa wan têne armanc kirin, û bi vî rengî tomar jî dibin beşek girîng a xebata pêvajoyê.
Divê were zanîn ku dewleta makîneyê jî ji hin qeydên taybetî pêk tê. Bo nimûne, IP - nîşana talîmatê - nîşanek ji bo rêwerziya ku bername niha dimeşîne. Her weha heye stack pointer û pê ve girêdayî ye nîşankerê çarçoveyê, ku ji bo birêvebirinê têne bikar anîn: Parametreyên fonksiyonê, guhêrbarên herêmî û navnîşanên vegerê.
Di dawiyê de, bername bi gelemperî digihîjin ROM-ê (bîra tenê-xwendin). Divê ev agahdariya "I/O" (kevn/derketin) navnîşek pelên ku niha ji hêla pêvajoyê ve hatine vekirin vehewîne.

Pêvajoya API

Ji bo ku em têgihîştina xwe ya ku pêvajo çawa dixebite baştir bikin, werin em mînakên bangên pergalê yên ku divê di navbeynkariya pergala xebitandinê de cih bigirin bixwînin. Van API bi yek formek an yekî din li ser her OS-ê peyda dibin.

Xûliqandin (çêkirin): Divê OS-ê hin rêbazan bigire ku destûrê dide te ku hûn pêvajoyên nû biafirînin. Gava ku hûn fermanek têkevin nav termînalê an jî bi du-klîkkirina ser îkonek serîlêdanek dest pê bikin, bangek ji OS re tê şandin da ku pêvajoyek nû biafirîne û dûv re bernameya diyarkirî bide destpêkirin.
Deletion: Ji ber ku ji bo afirandina pêvajoyek navbeynkarek heye, divê OS jî şiyana rakirina pêvajoyek bi zorê peyda bike. Pir bername dê bi xwezayî dest pê bikin û bi xwe biqedin dema ku ew diçin. Wekî din, bikarhêner dixwaze ku bikaribe wan bikuje û bi vî rengî navgînek ku pêvajoyê rawestîne dê kêrhatî be.
Payin (li bendê): Carinan kêrhatî ye ku meriv li benda qedandina pêvajoyek bisekinin, ji ber vê yekê hin navber têne peyda kirin ku kapasîteya bendê peyda dikin.
Misc Control (Kontrola curbecur): Ji bilî kuştin û li benda pêvajoyê, rêbazên din ên kontrolê yên cihêreng jî hene. Mînakî, piraniya pergalên xebitandinê şiyana cemidandina pêvajoyek (ji bo heyamek diyarkirî sekinandina wê) û dûv re ji nû ve destpêkirinê peyda dikin (berdewamkirina darvekirinê)
Rewş (dewlet): Ji bo bidestxistina hin agahdarî di derbarê rewşa pêvajoyek de, wek mînak ev çend dem dimeşe an niha di kîjan haletê de ye, navgînên cihêreng hene.

Pergalên Xebatê: Sê Parçeyên Hêsan. Beş 2: Abstraction: Pêvajo (werger)

Afirandina Pêvajoyê: Detayên

Yek ji tiştên balkêş ev e ku bi rastî bername çawa di pêvajoyan de têne veguheztin. Bi taybetî OS-ê bernameyê çawa hildibijêre û dimeşîne. Pêvajo bi rastî çawa tê afirandin.
Berî her tiştî, OS-ê pêdivî ye ku koda bernameyê û daneyên statîk di nav bîranînê de (li cîhê navnîşana pêvajoyê) bar bike. Bername bi gelemperî li ser dîskek an ajokerek hişk-dewletê di hin formatên îcrakar de cih digirin. Ji ber vê yekê, pêvajoya barkirina bername û daneyên statîk di nav bîranînê de hewce dike ku OS bikaribe wan bytes ji dîskê bixwîne û wan li cîhek bîranînê bi cîh bike.

Di pergalên xebitandinê yên destpêkê de, pêvajoya barkirinê bi dilxwazî ​​hate kirin, ku tê vê wateyê ku berî destpêkirina bernameyê tevahiya kodê di bîranînê de hate barkirin. Pergalên xebitandinê yên nûjen vê yekê bi tembelî dikin, ango, perçeyên kodê an daneyê tenê dema ku bername di dema darvekirina xwe de hewce dike bar dikin.

Dema ku kod û daneyên statîk di bîra OS-ê de têne barkirin, çend tiştên din hene ku divê bêne kirin berî ku pêvajo bimeşîne. Pêdivî ye ku hin mîqdara bîranîn ji bo stackê were veqetandin. Bername ji bo guhêrbarên herêmî, parametreyên fonksiyonê, û navnîşanên vegerê stakê bikar tînin. OS vê bîranînê vediqetîne û dide pêvajoyê. Stack dikare bi hin argumanan jî were veqetandin, bi taybetî ew parametreyên fonksiyona sereke () tije dike, mînakî bi komek argc û argv.

Pergala xebitandinê jî dibe ku hin bîranînê ji qeşa bernameyê re veqetîne. Heap ji hêla bernameyan ve tê bikar anîn da ku bi eşkere daneyên dînamîkî yên veqetandî daxwaz bikin. Bername bi bangkirina fonksiyonê vê cîhê daxwaz dikin malloc () û bi gazîkirina fonksiyonê wê bi eşkere paqij dike belaş(). Heap ji bo strukturên daneyê yên wekî pelên girêdayî, tabloyên haş, dar û yên din hewce ye. Di destpêkê de, mîqdarek piçûk ji bîrê re tê veqetandin, lê bi demê re, her ku bername dimeşîne, heap dikare bi navgîniya API-ya pirtûkxaneyê banga malloc() bike, bêtir bîranînê bixwaze. Pergala xebitandinê di pêvajoya veqetandina bêtir bîranînê de beşdar e ku ji bo têrkirina van bangan bibe alîkar.

Pergala xebitandinê dê di heman demê de peywirên destpêkêkirinê jî pêk bîne, nemaze yên ku bi I/O ve girêdayî ne. Mînakî, li ser pergalên UNIX, her pêvajo ji hêla xwerû ve 3 ravekerên pelê vekirî hene, ji bo têketin, derketin û xeletiya standard. Van destan rê didin bername ku têketina ji termînalê bixwînin û her weha agahdariya li ser ekranê nîşan bidin.

Ji ber vê yekê, bi barkirina kod û daneyên statîk di nav bîranînê de, afirandin û destpêkirina stikê, û kirina karên din ên têkildarî pêkanîna karên I/O, OS qonaxê ji bo pêkanîna pêvajoyê amade dike. Di dawiyê de, peywirek paşîn maye: xebitandina bernameyê di nav xala têketina wê de, ku jê re fonksiyona sereke () tê gotin. Bi pêkanîna fonksiyona sereke () re, OS kontrola CPU-yê vediguhezîne pêvajoya nû hatî afirandin, bi vî rengî bername dest bi darvekirinê dike.

Rewşa pêvajoyê

Naha ku me hin têgihîştina pêvajoyek çi ye û ew çawa tê afirandin, em ê pêvajoyên pêvajoyên ku ew tê de be navnîş bikin. Di forma xweya herî hêsan de, pêvajoyek dikare di yek ji van dewletan de be:
bi bez. Dema ku dimeşîne, pêvajo li ser pêvajoyê dimeşe. Ev tê wê wateyê ku talîmat têne kirin.
amade. Di rewşa amade de, pêvajo amade ye ku bixebite, lê ji ber hin sedeman OS wê di wextê diyarkirî de pêk nayîne.
Blocked. Di rewşa astengkirî de, pêvajoyek hin operasyonan pêk tîne ku rê nade ku ew amade be heya ku bûyerek çêbibe. Nimûneyek hevpar ev e ku gava pêvajoyek operasyonek IO-yê dide destpêkirin, ew tê asteng kirin da ku hin pêvajoyek din karibe pêvajoyê bikar bîne.

Pergalên Xebatê: Sê Parçeyên Hêsan. Beş 2: Abstraction: Pêvajo (werger)

Hûn dikarin van dewletan di forma grafikê de xeyal bikin. Wekî ku em di wêneyê de dibînin, rewşa pêvajoyê dikare li gorî biryara OS-ê di navbera RUNNING û READY de biguhere. Dema ku rewşa pêvajoyek ji AMADE diguhere berbi RUNNING, ev tê wê wateyê ku pêvajo hatiye plansaz kirin. Di rêça berevajî de - ji sêwiranê hate derxistin. Wextê ku pêvajoyek BLOCK dibe, mînakî, ez operasyonek IO dest pê dikim, OS dê di vê rewşê de bimîne heya ku bûyerek çêbibe, mînakî qedandina IO. di vê gavê de derbasbûna rewşa AMADE û belkî tavilê berbi rewşa READYê ger OS wisa biryar bide.
Werin em li mînakekê binêrin ka du pêvajo di nav van dewletan de çawa dimeşin. Ji bo destpêkê, em bifikirin ku her du pêvajo dimeşin, û her yek tenê CPU bikar tîne. Di vê rewşê de, dewletên wan wê bi vî rengî bin.

Pergalên Xebatê: Sê Parçeyên Hêsan. Beş 2: Abstraction: Pêvajo (werger)

Di mînaka jêrîn de, pêvajoya yekem, piştî demek xebitandinê, IO daxwaz dike û dikeve rewşa BLOCKED, dihêle ku pêvajoyek din bimeşîne (WÊN 1.4). OS dibîne ku pêvajo 0 CPU bikar nayîne û pêvajoya 1 dest pê dike. Dema ku pêvajoya 1 dimeşe, IO qediya û rewşa pêvajoya 0 diguhere READY. Di dawiyê de, pêvajoya 1 qediya, û piştî qedandinê, pêvajoya 0 dest pê dike, pêk tîne û karê xwe diqedîne.

Pergalên Xebatê: Sê Parçeyên Hêsan. Beş 2: Abstraction: Pêvajo (werger)

Struktura daneyan

OS bixwe bernameyek e, û mîna her bernameyek din, hin strukturên daneya sereke hene ku agahdariya cihêreng ên têkildar dişopînin. Ji bo şopandina rewşa her pêvajoyê, OS dê hin piştgirî bike lîsteya pêvajoyê ji bo hemî pêvajoyên di dewleta READY de û hin agahdariya zêde ji bo şopandina pêvajoyên ku niha têne meşandin. Di heman demê de, OS divê pêvajoyên astengkirî bişopîne. Piştî ku IO qediya, OS divê pêvajoya hewce hişyar bike û wê bixe rewşek ku amade ye ku bixebite.

Mînakî, OS divê rewşa tomarên pêvajoyê biparêze. Di vê gavê de ku pêvajo disekine, rewşa tomaran di cîhê navnîşana pêvajoyê de tê hilanîn, û di dema ku xebata wê berdewam dike de, nirxên tomaran têne sererast kirin û bi vî rengî pêkanîna vê pêvajoyê berdewam dike.

Ji bilî dewletên hazir, astengkirî, rêvebirin, hin dewletên din jî hene. Carinan, di dema afirandinê de, dibe ku pêvajoyek di rewşa INIT de be. Di dawiyê de, pêvajoyek dikare di rewşa FINAL de were danîn dema ku ew jixwe qedandiye, lê agahdariya wê hîn nehatiye paqij kirin. Li ser pergalên UNIX ev rewş tê gotin pêvajoya zombie. Ev rewş ji bo rewşên ku pêvajoyek dêûbav dixwaze koda vegerê ya zarokek bizane bikêr e, mînakî, bi gelemperî 0 serkeftinek û 1 xeletiyek nîşan dide, lê bernamenûs dikarin kodên derketinê yên din derxînin da ku pirsgirêkên cûda nîşan bidin. Dema ku pêvajoya dêûbav bi dawî dibe, ew bangek pergalê ya paşîn dike, wek sekandin(), da ku li bendê bimîne ku pêvajoya zarok biqede û ji OS-ê re îşaret bike ku ew dikare daneyên ku bi pêvajoya qedandî ve girêdayî ye paqij bike.

Pergalên Xebatê: Sê Parçeyên Hêsan. Beş 2: Abstraction: Pêvajo (werger)

Xalên sereke yên dersê:

pêvajoya - abstrakasyona sereke ya bernameyek xebitandinê di OS-ê de. Di her kêliyê de, pêvajoyek dikare ji hêla rewşa wê ve were diyar kirin: naveroka bîranînê di cîhê navnîşana wê de, naveroka tomarên pêvajoyê, tevî nîşana rêwerzan û nîşana stikê, û agahdariya IO, wek pelên vekirî yên têne xwendin an nivîsandin.
Pêvajoya API ji bangên ku bername dikarin ji pêvajoyan re bikin pêk tê. Bi gelemperî ev çêkirin, jêbirin, an bangên din in.
● Pêvajo li yek ji gelek dewletan e, di nav de xebitîn, amade, asteng kirin. Bûyerên cihêreng ên wekî plansazkirin, îstîsnayên ji plansazkirinê, an bendewarî dikarin rewşa pêvajoyek ji yek ji ya din biguhezînin.
Lîsteya pêvajoyê agahdariya li ser hemî pêvajoyên di pergalê de heye. Her têketina wê jê re bloka kontrolkirina pêvajoyê tê gotin, ku di rastiyê de avahiyek e ku di derheqê pêvajoyek taybetî de hemî agahdariya pêwîst dihewîne. 

Source: www.habr.com

Add a comment