Sistem operasi: Tilu Potongan Gampang. Bagian 3: Prosés API (tarjamahan)

Bubuka pikeun Sistem Operasi

Héy Habr! Abdi hoyong nengetan runtuyan artikel-tarjamahan tina hiji literatur metot dina pamanggih kuring - OSTEP. Bahan ieu ngabahas sacara jero ngeunaan sistem operasi sapertos unix, nyaéta, damel sareng prosés, rupa-rupa jadwal, mémori, sareng komponén anu sami anu ngawangun OS modern. Anjeun tiasa ningali asli sadaya bahan di dieu di dieu. Punten perhatikeun yén tarjamahan éta dilakukeun sacara teu profésional (rada bébas), tapi kuring ngarep-arep nahan harti umum.

Karya laboratorium dina subjek ieu tiasa dipendakan di dieu:

bagian séjén:

Anjeun oge bisa pariksa kaluar channel abdi di telegram =)

alarem! Aya lab pikeun kuliah ieu! Neuteup github

API prosés

Hayu urang tingali conto nyieun prosés dina sistem UNIX. Ieu lumangsung ngaliwatan dua telepon sistem garpu () и exec().

Panggil garpu()

Sistem operasi: Tilu Potongan Gampang. Bagian 3: Prosés API (tarjamahan)

Mertimbangkeun program nu ngajadikeun garpu () panggero. Hasil palaksanaanna bakal kieu.

Sistem operasi: Tilu Potongan Gampang. Bagian 3: Prosés API (tarjamahan)

Anu mimiti, urang asupkeun fungsi utama () jeung nyitak string ka layar. Garis ngandung identifier prosés nu dina aslina disebut PID atawa identifier prosés. Identifier ieu dianggo dina UNIX pikeun ngarujuk kana prosés. Paréntah salajengna bakal nelepon garpu (). Dina tahap ieu, salinan prosés anu ampir pasti didamel. Pikeun OS, eta Sigana mah aya 2 salinan program sarua ngajalankeun on sistem, anu dina gilirannana bakal kaluar fungsi garpu (). Prosés anak karek dijieun (dina hubungan jeung prosés indungna nu dijieun) moal deui dieksekusi, mimitian ti utama () fungsi. Perlu diinget yén prosés anak sanés salinan pasti tina prosés indungna; khususna, éta ngagaduhan rohangan alamat sorangan, registers sorangan, pointer sorangan kana paréntah anu tiasa dieksekusi, sareng anu sanésna. Ku kituna, nilai balik ka panelepon sahiji fungsi garpu () bakal béda. Khususna, prosés indungna bakal nampi nilai PID tina prosés anak salaku mulang, sareng murangkalih bakal nampi nilai anu sami sareng 0. Ngagunakeun kodeu balik ieu, anjeun teras tiasa misahkeun prosés sareng maksakeun masing-masing pikeun ngalakukeun padamelan na. . Tapi, palaksanaan program ieu henteu ditetepkeun sacara ketat. Saatos ngabagi kana 2 prosés, OS mimiti ngawas aranjeunna, ogé ngarencanakeun padamelan na. Lamun dieksekusi dina processor single-core, salah sahiji prosés, dina hal ieu indungna, bakal neruskeun gawé, lajeng prosés anak bakal nampa kontrol. Nalika ngamimitian deui, kaayaan tiasa béda.

Telepon ngantosan()

Sistem operasi: Tilu Potongan Gampang. Bagian 3: Prosés API (tarjamahan)

Pertimbangkeun program di handap ieu. Dina program ieu, alatan ayana panggero antosan () Prosés indungna bakal salawasna ngadagoan prosés anak pikeun réngsé. Dina hal ieu, urang bakal nampi kaluaran téks anu ditetepkeun sacara ketat dina layar

Sistem operasi: Tilu Potongan Gampang. Bagian 3: Prosés API (tarjamahan)

exec () panggero

Sistem operasi: Tilu Potongan Gampang. Bagian 3: Prosés API (tarjamahan)

Mertimbangkeun tantangan exec(). System panggero ieu mangpaat nalika urang rék ngajalankeun program lengkep béda. Di dieu urang bakal nelepon execvp() pikeun ngajalankeun program wc anu mangrupa program cacah kecap. Naon kajadian nalika exec () disebut? Telepon ieu disalurkeun nami file anu tiasa dieksekusi sareng sababaraha parameter salaku argumen. Saatos éta kode sareng data statik tina file anu tiasa dieksekusi ieu dimuat sareng bagean sorangan sareng kodena ditimpa. Wewengkon mémori sésa, sapertos tumpukan sareng tumpukan, diinisialisasi deui. Sanggeus éta OS saukur executes program, ngalirkeun eta sakumpulan argumen. Janten kami henteu nyiptakeun prosés énggal, kami ngan ukur ngarobih program anu ayeuna jalan janten program jalan anu sanés. Saatos executing exec () panggero dina turunan, nembongan saolah-olah program aslina teu ngajalankeun pisan.

Komplikasi ngamimitian ieu leres-leres normal pikeun cangkang Unix, sareng ngamungkinkeun cangkang éta ngaéksekusi kode saatos nelepon garpu (), tapi saméméh nelepon exec(). Conto kode sapertos kitu bakal nyaluyukeun lingkungan cangkang kana kabutuhan program anu diluncurkeun, sateuacan ngaluncurkeunana.

kerang - ngan hiji program pamaké. Anjeunna nunjukkeun anjeun garis uleman sareng ngantosan anjeun nyerat hiji hal di jerona. Dina kalolobaan kasus, lamun nulis ngaran program aya, cangkang bakal manggihan lokasina, nelepon garpu () métode, lajeng nelepon sababaraha tipe exec () pikeun nyieun hiji prosés anyar jeung ngadagoan nepi ka réngsé ngagunakeun a antosan () nelepon. Nalika prosés anak kaluar, cangkang bakal balik ti antosan () nelepon jeung nyitak ajakan deui jeung ngadagoan paréntah salajengna diasupkeun.

Garpu () & exec () pamisah ngamungkinkeun cangkang pikeun ngalakukeun hal-hal di handap ieu, contona:
wc file> new_file.

Dina conto ieu, kaluaran program wc dialihkeun ka file. Cara cangkang ngahontal ieu cukup basajan - ku nyieun prosés anak saméméh nelepon exec(), cangkang nutup kaluaran standar sareng muka file new_file, Ku kituna, sadaya kaluaran tina program ngajalankeun salajengna wc bakal dialihkeun ka file tinimbang layar.

Pipa Unix anu dilaksanakeun dina cara nu sarupa, kalawan bédana yén maranéhna ngagunakeun pipe a () nelepon. Dina hal ieu, aliran kaluaran prosés bakal disambungkeun ka antrian pipe lokasina di kernel, nu aliran input prosés sejen bakal disambungkeun.

sumber: www.habr.com

Tambahkeun komentar