Siostaman-obrachaidh: Trì pìosan furasta. Pàirt 3: Pròiseas API (eadar-theangachadh)

Ro-ràdh gu siostaman-obrachaidh

Hi Habr! Bu mhath leam sreath de artaigilean a thoirt nad aire - eadar-theangachadh de aon litreachas inntinneach nam bheachd-sa - OSTEP. Tha an stuth seo a’ beachdachadh gu domhainn air obair shiostaman obrachaidh coltach ri unix, is e sin, obair le pròiseasan, diofar chlàran, cuimhne, agus co-phàirtean eile den aon seòrsa a tha a’ dèanamh suas OS ùr-nodha. Chì thu an stuth tùsail uile an seo an seo. Thoir an aire gun deach an eadar-theangachadh a dhèanamh gu neo-phroifeasanta (gu math saor), ach tha mi an dòchas gun do ghlèidh mi am brìgh coitcheann.

Gheibhear obair-lann air a’ chuspair seo an seo:

Pàirtean eile:

Faodaidh tu cuideachd sùil a thoirt air an t-sianal agam aig teileagram =)

Alarm! Tha obair-lann ann airson an òraid seo! Seall github

API pròiseas

Bheir sinn sùil air eisimpleir de bhith a’ cruthachadh pròiseas ann an siostam UNIX. Bidh e a’ tachairt tro dhà ghairm siostam forc () и exec().

Call fork()

Siostaman-obrachaidh: Trì pìosan furasta. Pàirt 3: Pròiseas API (eadar-theangachadh)

Beachdaich air prògram a nì gairm fork(). Bidh toradh a chur gu bàs mar a leanas.

Siostaman-obrachaidh: Trì pìosan furasta. Pàirt 3: Pròiseas API (eadar-theangachadh)

An toiseach, bidh sinn a’ dol a-steach don phrìomh ghnìomh () agus a’ clò-bhualadh an t-sreang chun sgrion. Anns an loidhne tha an aithnichear pròiseas ris an canar anns an dreach thùsail PID no aithnichear pròiseas. Tha an aithnichear seo air a chleachdadh ann an UNIX gus iomradh a thoirt air pròiseas. Canaidh an ath àithne fork (). Aig an ìre seo, tha leth-bhreac cha mhòr ceart den phròiseas air a chruthachadh. Airson an OS, tha e coltach gu bheil 2 leth-bhreac den aon phrògram a’ ruith air an t-siostam, a dh’ fhàgas an gnìomh fork () an uair sin. Cha tèid am pròiseas cloinne a chaidh a chruthachadh às ùr (a ​​thaobh a’ phròiseas phàrant a chruthaich e) a chur an gnìomh tuilleadh, a’ tòiseachadh bhon phrìomh ghnìomh (). Bu chòir cuimhneachadh nach e fìor leth-bhreac den phròiseas phàrant a th’ ann am pròiseas leanaibh; gu sònraichte, tha àite seòlaidh aige fhèin, na clàran aige fhèin, a chomharradh fhèin air stiùireadh so-ghnìomhaichte, agus an leithid. Mar sin, bidh an luach a thilleas gu neach-fios na gnìomh forc () eadar-dhealaichte. Gu sònraichte, gheibh am pròiseas pàrant luach PID pròiseas an leanaibh mar thilleadh, agus gheibh an leanabh luach co-ionann ri 0. A’ cleachdadh nan còdan tilleadh sin, faodaidh tu an uairsin pròiseasan a sgaradh agus toirt air gach fear dhiubh an obair aige fhèin a dhèanamh . Ach, chan eil coileanadh a’ phrògraim seo air a mhìneachadh gu cruaidh. Às deidh dhaibh a bhith air an roinneadh ann an 2 phròiseas, bidh an OS a ’tòiseachadh a’ cumail sùil orra, a bharrachd air a bhith a ’dealbhadh an cuid obrach. Ma thèid a chuir gu bàs air pròiseasar aon-cridhe, leanaidh aon de na pròiseasan, sa chùis seo am pàrant, ag obair, agus an uairsin gheibh am pròiseas leanaibh smachd. Nuair a thòisicheas tu a-rithist, faodaidh an suidheachadh a bhith eadar-dhealaichte.

Call feitheamh()

Siostaman-obrachaidh: Trì pìosan furasta. Pàirt 3: Pròiseas API (eadar-theangachadh)

Beachdaich air a’ phrògram a leanas. Anns a 'phrògram seo, air sgàth an làthair gairm feitheamh () Bidh am pròiseas pàrant an-còmhnaidh a 'feitheamh ri pròiseas an leanaibh a chrìochnachadh. Anns a 'chùis seo, gheibh sinn toradh teacsa teann air an sgrion

Siostaman-obrachaidh: Trì pìosan furasta. Pàirt 3: Pròiseas API (eadar-theangachadh)

exec() gairm

Siostaman-obrachaidh: Trì pìosan furasta. Pàirt 3: Pròiseas API (eadar-theangachadh)

Beachdaich air an dùbhlan exec(). Tha an gairm siostam seo feumail nuair a tha sinn airson prògram gu tur eadar-dhealaichte a ruith. An seo canaidh sinn execvp() gus am prògram wc a ruith a tha na phrògram cunntais fhaclan. Dè thachras nuair a thèid exec() a ghairm? Thèid a’ ghairm seo seachad air ainm an fhaidhle so-ghnìomhaichte agus cuid de pharamadairean mar argamaidean. Às deidh sin tha an còd agus an dàta statach bhon fhaidhle so-ghnìomhaichte seo air a luchdachadh agus tha an earrann aige fhèin leis a’ chòd air a sgrìobhadh thairis. Tha na raointean cuimhne a tha air fhàgail, leithid a’ chruach agus an tiùrr, air an ath-thòiseachadh. Às deidh sin bidh an OS dìreach a’ cur an gnìomh am prògram, a’ dol seachad air seata argamaidean. Mar sin cha do chruthaich sinn pròiseas ùr, dìreach dh'atharraich sinn am prògram a tha a' ruith an-dràsta gu prògram ruith eile. Às deidh an gairm exec () a chuir a-steach don t-sliochd, tha e coltach nach do ruith am prògram tùsail idir.

Tha an duilgheadas tòiseachaidh seo gu tur àbhaisteach airson slige Unix, agus leigidh e leis an t-slige sin còd a chuir an gnìomh às deidh gairm forc (), ach roimh 'n ghairm exec(). Is e eisimpleir de chòd mar seo a bhith ag atharrachadh àrainneachd nan sligean a rèir feumalachdan a’ phrògram a thathar a’ cur air bhog, mus tèid a chuir air bhog.

Shell - dìreach prògram cleachdaiche. Bidh i a’ sealltainn loidhne cuireadh dhut agus a’ feitheamh riut rudeigin a sgrìobhadh innte. Anns a 'mhòr-chuid de chùisean, ma sgrìobhas tu ainm prògram an sin, lorgaidh an t-slige far a bheil e, cuir fios gu modh fork (), agus an uairsin cuir fios gu seòrsa de exec () gus pròiseas ùr a chruthachadh agus feitheamh ris a chrìochnachadh le bhith a' cleachdadh a feitheamh () glaodh. Nuair a thig pròiseas an leanaibh a-mach, tillidh an t-slige bhon ghairm feitheamh () agus clò-bhuail e a-rithist agus feitheamh gus an tèid an ath àithne a chuir a-steach.

Tha an sgaradh forc () & exec () a’ leigeil leis an t-slige na rudan a leanas a dhèanamh, mar eisimpleir:
wc faidhle> new_file.

San eisimpleir seo, tha toradh a’ phrògram wc air ath-stiùireadh gu faidhle. Tha an dòigh anns a bheil an slige a 'coileanadh seo gu math sìmplidh - le bhith a' cruthachadh pròiseas leanabh mus cuir thu fios exec(), bidh an slige a’ dùnadh toradh àbhaisteach agus a’ fosgladh am faidhle ùr_faidhle, mar sin, a h-uile toradh bhon phrògram ruith eile wc thèid ath-stiùireadh gu faidhle an àite sgrion.

Pìoba unix air an cur an gnìomh san aon dòigh, leis an eadar-dhealachadh gu bheil iad a’ cleachdadh gairm pìob(). Anns a 'chùis seo, bidh sruth toraidh a' phròiseas ceangailte ri ciudha pìoba a tha suidhichte anns an kernel, ris am bi sruth a-steach pròiseas eile ceangailte.

Source: www.habr.com

Cuir beachd ann