Sistèm operasyon: Twa moso fasil. Pati 3: Pwosesis API (tradiksyon)

Entwodiksyon nan sistèm operasyon yo

Bonjou, Habr! Mwen ta renmen prezante nan atansyon w yon seri atik-tradiksyon yon sèl literati ki enteresan nan opinyon mwen - OSTEP. Materyèl sa a egzamine byen pwofondman travay sistèm operasyon UNIX, sètadi travay ak pwosesis, pwogramasyon divès kalite, memwa ak lòt konpozan ki sanble ak yon sistèm eksplwatasyon modèn. Ou ka wè orijinal la nan tout materyèl isit la isit la. Tanpri sonje ke tradiksyon an te fèt san pwofesyonèl (byen lib), men mwen espere ke mwen te kenbe siyifikasyon jeneral la.

Ou ka jwenn travay laboratwa sou sijè sa a isit la:

Lòt pati:

Ou ka tcheke tou chèn mwen an nan telegram =)

Alam! Gen yon laboratwa pou konferans sa a! Gade github

Pwosesis API

Ann gade yon egzanp pou kreye yon pwosesis nan yon sistèm UNIX. Li rive nan de apèl sistèm fouchèt () и egzekitif ().

Rele fouchèt ()

Sistèm operasyon: Twa moso fasil. Pati 3: Pwosesis API (tradiksyon)

Konsidere yon pwogram ki fè yon apèl fork(). Rezilta egzekisyon li yo pral jan sa a.

Sistèm operasyon: Twa moso fasil. Pati 3: Pwosesis API (tradiksyon)

Premye a tout, nou antre nan fonksyon prensipal () epi enprime fisèl la sou ekran an. Liy la gen idantifyan pwosesis ki nan orijinal la rele PID oswa idantifyan pwosesis. Yo itilize idantifyan sa a nan UNIX pou refere a yon pwosesis. Kòmandman kap vini an pral rele fork(). Nan pwen sa a, yo kreye yon kopi prèske egzak nan pwosesis la. Pou eksplwatasyon an, li sanble ke gen 2 kopi nan menm pwogram nan kouri sou sistèm nan, ki an vire pral soti nan fonksyon fouchèt (). Pwosesis pitit ki fèk kreye a (an relasyon ak pwosesis paran ki te kreye li) p ap egzekite ankò, apati fonksyon main() la. Li ta dwe sonje ke yon pwosesis timoun se pa yon kopi egzak nan pwosesis paran an patikilye, li gen pwòp espas adrès li yo, pwòp rejis li yo, pwòp pwent li nan enstriksyon ègzèkutabl, ak bagay sa yo. Kidonk, valè a retounen bay moun kap rele nan fonksyon fouchèt la ap diferan. An patikilye, pwosesis paran an pral resevwa valè PID pwosesis timoun nan kòm yon retounen, epi timoun nan ap resevwa yon valè egal a 0. Sèvi ak kòd retounen sa yo, ou ka Lè sa a, separe pwosesis epi fòse chak nan yo fè pwòp travay li. . Sepandan, ekzekisyon pwogram sa a pa entèdi defini. Apre divize an 2 pwosesis, eksplwatasyon an kòmanse kontwole yo, osi byen ke planifye travay yo. Si egzekite sou yon processeur sèl-nwayo, youn nan pwosesis yo, nan ka sa a paran an, ap kontinye travay, ak Lè sa a, pwosesis timoun nan ap resevwa kontwòl. Lè rekòmanse, sitiyasyon an ka diferan.

Rele tann()

Sistèm operasyon: Twa moso fasil. Pati 3: Pwosesis API (tradiksyon)

Konsidere pwogram sa a. Nan pwogram sa a, akòz prezans nan yon apèl tann() Pwosesis paran an ap toujou tann pou pwosesis pitit la fini. Nan ka sa a, nou pral jwenn yon pwodiksyon tèks entèdi defini sou ekran an

Sistèm operasyon: Twa moso fasil. Pati 3: Pwosesis API (tradiksyon)

exec() rele

Sistèm operasyon: Twa moso fasil. Pati 3: Pwosesis API (tradiksyon)

Konsidere defi a egzekitif (). Rele sistèm sa a itil lè nou vle kouri yon pwogram konplètman diferan. Isit la nou pral rele egzekvp () pou kouri pwogram wc ki se yon pwogram konte mo. Kisa k ap pase lè yo rele exec()? Se apèl sa a pase non an nan dosye a ègzèkutabl ak kèk paramèt kòm agiman. Apre sa, kòd la ak done estatik ki soti nan dosye sa a ègzèkutabl yo chaje ak segman pwòp li yo ak kòd la ranplase. Zòn memwa ki rete yo, tankou pil la ak pil, yo reinisyalize. Apre sa, eksplwatasyon an tou senpleman egzekite pwogram nan, pase li yon seri agiman. Se konsa, nou pa t kreye yon nouvo pwosesis, nou tou senpleman transfòme pwogram nan kounye a kouri nan yon lòt pwogram kouri. Apre egzekite exec() apèl la nan desandan an, li parèt kòm si pwogram orijinal la pa t 'kouri ditou.

Konplikasyon demaraj sa a konplètman nòmal pou yon kokiy Unix, epi li pèmèt koki sa a egzekite kòd apre yo fin rele fouchèt (), men anvan apèl la egzekitif (). Yon egzanp nan kòd sa a ta dwe ajiste anviwònman an koki a bezwen yo nan pwogram nan ke yo te lanse, anvan lanse li.

Shell - jis yon pwogram itilizatè. Li montre w liy envitasyon an epi li tann pou w ekri yon bagay ladan l. Nan pifò ka yo, si ou ekri non yon pwogram la, koki a pral jwenn kote li yo, rele metòd fork() la, epi answit rele kèk kalite exec () pou kreye yon nouvo pwosesis epi tann pou li fini lè l sèvi avèk yon tann() rele. Lè pwosesis timoun nan sòti, koki a ap retounen soti nan apèl la wait() epi enprime èd memwa a ankò epi tann pou pwochen lòd la dwe antre.

Divizyon fouchèt () & exec () pèmèt koki a fè bagay sa yo, pou egzanp:
wc fichye > new_file.

Nan egzanp sa a, pwodiksyon pwogram wc la redireksyon nan yon dosye. Fason koki a reyalize sa a se byen senp - pa kreye yon pwosesis timoun anvan ou rele egzekitif (), koki a fèmen pwodiksyon estanda ak louvri dosye a new_file, konsa, tout pwodiksyon soti nan pwogram nan kouri plis wc pral redireksyon nan yon dosye olye pou yo yon ekran.

Unix tiyo yo aplike nan yon fason menm jan an, ak diferans lan ke yo itilize yon apèl pipe(). Nan ka sa a, kouran pwodiksyon pwosesis la pral konekte nan yon keu tiyo ki sitiye nan nwayo a, ak ki kouran an opinyon nan yon lòt pwosesis yo pral konekte.

Sous: www.habr.com

Add nouvo kòmantè