Córais Oibriúcháin: Trí Phíosa Éasca. Cuid 3: Próiseas API (aistriúchán)

Réamhrá ar Chórais Oibriúcháin

Hey Habr! Ba mhaith liom d’aird a thabhairt ar shraith alt—aistriúcháin ar litríocht shuimiúil amháin i mo thuairim – OSTEP. Pléann an t-ábhar seo go domhain obair na gcóras oibriúcháin atá cosúil le unix, eadhon, obair le próisis, sceidealóirí éagsúla, cuimhne, agus comhpháirteanna eile dá samhail a chomhdhéanann OS nua-aimseartha. Is féidir leat bunchóip na n-ábhar go léir a fheiceáil anseo anseo. Tabhair faoi deara go ndearnadh an t-aistriúchán go neamhghairmiúil (go leor faoi shaoirse), ach tá súil agam gur choinnigh mé an bhrí ghinearálta.

Is féidir obair saotharlainne ar an ábhar seo a fháil anseo:

Páirteanna eile:

Is féidir leat mo chainéal a sheiceáil freisin ag teileagram =)

Aláram! Tá saotharlann don léacht seo! Féach github

Próiseáil API

Breathnaímid ar shampla de phróiseas a chruthú i gcóras UNIX. Tarlaíonn sé trí ghlaonna dhá chóras forc () и exec().

Glao forc()

Córais Oibriúcháin: Trí Phíosa Éasca. Cuid 3: Próiseas API (aistriúchán)

Smaoinigh ar chlár a dhéanann glao forc(). Beidh toradh a fhorghníomhaithe mar seo a leanas.

Córais Oibriúcháin: Trí Phíosa Éasca. Cuid 3: Próiseas API (aistriúchán)

Ar an gcéad dul síos, cuirimid isteach an phríomhfheidhm () agus priontálaimid an sreang chuig an scáileán. Tá aitheantóir an phróisis ar a dtugtar sa bhunleagan sa líne PID nó aitheantóir próisis. Úsáidtear an t-aitheantóir seo in UNIX chun tagairt a dhéanamh do phróiseas. Glaofaidh an chéad ordú eile forc (). Ag an bpointe seo, cruthaítear cóip beagnach beacht den phróiseas. Maidir leis an OS, tá an chuma ar an scéal go bhfuil 2 chóip den chlár céanna ag rith ar an gcóras, rud a scoirfidh an fheidhm forc(). Ní dhéanfar an próiseas linbh nuachruthaithe (maidir leis an bpróiseas tuismitheora a chruthaigh é) a fhorghníomhú a thuilleadh, ag tosú ón bpríomhfheidhm(). Ba chóir a mheabhrú nach cóip chruinn den phróiseas tuismitheora é próiseas linbh, go háirithe, tá a spás seoltaí féin, a chláir féin, a pointeoir féin ar threoracha inrite, agus a leithéidí. Mar sin, beidh an luach a thugtar ar ais chuig glaoiteoir na feidhme forc() difriúil. Go háirithe, gheobhaidh an próiseas tuismitheora luach PID an phróisis linbh mar thuairisceán, agus gheobhaidh an leanbh luach comhionann le 0. Ag baint úsáide as na cóid tuairisceáin seo, is féidir leat próisis a scaradh ansin agus iallach a chur ar gach ceann acu a chuid oibre féin a dhéanamh. . Mar sin féin, níl sainmhíniú docht ar fheidhmiú an chláir seo. Tar éis é a roinnt ina dhá phróiseas, tosaíonn an OS ag déanamh monatóireachta orthu, chomh maith lena gcuid oibre a phleanáil. Má dhéantar é a fhorghníomhú ar phróiseálaí aon-lárnach, leanfaidh ceann de na próisis, sa chás seo an tuismitheoir, ag obair, agus ansin gheobhaidh an próiseas leanbh rialú. Nuair a atosú, d'fhéadfadh an scéal a bheith difriúil.

Glaoigh fan ()

Córais Oibriúcháin: Trí Phíosa Éasca. Cuid 3: Próiseas API (aistriúchán)

Smaoinigh ar an gclár seo a leanas. Sa chlár seo, mar gheall ar láithreacht glao fan () Fanfaidh an próiseas tuismitheora i gcónaí leis an bpróiseas leanbh a chríochnú. Sa chás seo, gheobhaidh muid aschur téacs atá sainmhínithe go docht ar an scáileán

Córais Oibriúcháin: Trí Phíosa Éasca. Cuid 3: Próiseas API (aistriúchán)

exec() glaoch

Córais Oibriúcháin: Trí Phíosa Éasca. Cuid 3: Próiseas API (aistriúchán)

Smaoinigh ar an dúshlán exec(). Tá an glao córais seo úsáideach nuair is mian linn clár iomlán difriúil a rith. Anseo cuirfimid glaoch execvp() chun an clár wc a rith ar clár comhairimh focal é. Cad a tharlaíonn nuair a ghlaoitear exec()? Tugtar ainm an chomhaid inrite agus roinnt paraiméadair mar argóintí ar an nglao seo. Ina dhiaidh sin luchtaítear an cód agus na sonraí statacha ón gcomhad inrite seo agus déantar a mhír féin leis an gcód a fhorscríobh. Déantar na réimsí cuimhne atá fágtha, mar an chairn agus an gcarn, a aththionscnamh. Ina dhiaidh sin déanann an OS an clár a fhorghníomhú go simplí, ag tabhairt sraith argóintí dó. Mar sin níor chruthaigh muid próiseas nua, níor athraigh muid ach an clár atá ar siúl faoi láthair go clár reatha eile. Tar éis an glao exec() a dhéanamh ar an sliocht, tá an chuma ar an scéal nár rith an bunchlár ar chor ar bith.

Tá an casta tosaithe seo go hiomlán gnáth do bhlaoscán Unix, agus ceadaíonn sé don bhlaosc sin cód a fhorghníomhú tar éis glaoch forc (), ach roimh an nglao exec(). Sampla de chód den sórt sin is ea an timpeallacht bhlaosc a choigeartú do riachtanais an chláir atá á sheoladh, sula seolfar é.

Shell - ach clár úsáideora. Taispeánann sí líne an chuiridh duit agus fanann sí leat rud éigin a scríobh ann. I bhformhór na gcásanna, má scríobhann tú ainm cláir ann, gheobhaidh an bhlaosc a shuíomh, glaoigh ar an modh forc(), agus ansin glaoigh ar chineál éigin exec() chun próiseas nua a chruthú agus fanfaidh sé chun é a chríochnú ag baint úsáide as a fan () glaoch. Nuair a scoirfidh an próiseas leanbh, fillfidh an bhlaosc ón nglao fanacht() agus priontáil an leid arís agus fanfaidh an chéad ordú eile a chur isteach.

Ligeann an scoilt forc() & exec() don bhlaosc na rudaí seo a leanas a dhéanamh, mar shampla:
comhad wc > new_file.

Sa sampla seo, atreoraítear aschur an chláir wc chuig comhad. Tá an bealach a bhaineann an bhlaosc amach seo simplí go leor - trí phróiseas leanbh a chruthú roimh ghlaoch exec(), dúnann an bhlaosc aschur caighdeánach agus osclaíonn sé an comhad comhad_nua, mar sin, an t-aschur go léir ón gclár reatha reatha wc a atreorú chuig comhad seachas scáileán.

Píobán unix á gcur i bhfeidhm ar an mbealach céanna, agus an difríocht go n-úsáideann siad glao píopa(). Sa chás seo, beidh sruth aschuir an phróisis ceangailte le scuaine píopa atá suite san eithne, a mbeidh sruth ionchuir próiseas eile ceangailte leis.

Foinse: will.com

Add a comment