Sistem Operasi: Telung Piece Gampang. Bagean 3: Proses API (terjemahan)

Pengantar Sistem Operasi

Hey Habr! Aku pengin menehi perhatian marang sawetara artikel-terjemahan saka siji literatur sing menarik miturut pendapatku - OSTEP. Materi iki mbahas kanthi jero babagan sistem operasi kaya unix, yaiku, nggarap proses, macem-macem jadwal, memori, lan komponen liyane sing padha sing nggawe OS modern. Sampeyan bisa ndeleng asli kabeh bahan kene kene. Wigati dimangerteni manawa terjemahan kasebut digawe kanthi ora profesional (cukup bebas), nanging muga-muga bisa tetep makna umum.

Pakaryan laboratorium babagan subyek iki bisa ditemokake ing kene:

bagean liyane:

Sampeyan uga bisa mriksa saluranku ing telegram =)

Weker! Ana lab kanggo kuliah iki! Delengen github

Proses API

Ayo goleki conto nggawe proses ing sistem UNIX. Mengkono liwat rong panggilan sistem garpu () и eksekusi().

Telpon garpu()

Sistem Operasi: Telung Piece Gampang. Bagean 3: Proses API (terjemahan)

Coba program sing nggawe garpu () telpon. Asil saka eksekusi bakal kaya ing ngisor iki.

Sistem Operasi: Telung Piece Gampang. Bagean 3: Proses API (terjemahan)

Kaping pisanan, kita ngetik fungsi utama () lan print senar kanggo layar. Baris kasebut ngemot pengenal proses sing ing asline diarani PID utawa pengenal proses. Pengenal iki digunakake ing UNIX kanggo ngrujuk menyang proses. Printah sabanjure bakal nelpon garpu (). Ing jalur iki, salinan proses sing meh pas digawe. Kanggo OS, iku katon kaya ana 2 salinan program padha mlaku ing sistem, kang siji bakal metu saka garpu () fungsi. Proses anak mentas digawe (gandhengan karo proses tiyang sepah sing digawe) ora bakal kaleksanan maneh, wiwit saka fungsi utama (). Sampeyan kudu eling yen proses anak dudu salinan sing tepat saka proses induk; utamane, duwe ruang alamat dhewe, registrasi dhewe, pointer dhewe kanggo instruksi sing bisa dieksekusi, lan liya-liyane. Mangkono, nilai bali menyang panelpon saka fungsi garpu () bakal beda. Ing tartamtu, proses tiyang sepah bakal nampa nilai PID saka proses anak minangka bali, lan anak bakal nampa nilai witjaksono kanggo 0. Nggunakake kode bali iki, sampeyan banjur bisa misahake pangolahan lan meksa saben wong kanggo nindakake karya dhewe. . Nanging, eksekusi program iki ora ditetepake kanthi ketat. Sawise dibagi dadi 2 proses, OS wiwit ngawasi, uga ngrancang karyane. Yen dileksanakake ing prosesor siji-inti, salah siji saka pangolahan, ing kasus iki wong tuwa, bakal terus digunakake, banjur proses anak bakal nampa kontrol. Nalika miwiti maneh, kahanan bisa uga beda.

Telpon tunggu()

Sistem Operasi: Telung Piece Gampang. Bagean 3: Proses API (terjemahan)

Coba program ing ngisor iki. Ing program iki, amarga ana telpon ngenteni () Proses wong tuwa bakal tansah ngenteni proses anak rampung. Ing kasus iki, kita bakal entuk output teks sing ditetepake kanthi ketat ing layar

Sistem Operasi: Telung Piece Gampang. Bagean 3: Proses API (terjemahan)

exec() telpon

Sistem Operasi: Telung Piece Gampang. Bagean 3: Proses API (terjemahan)

Coba tantangan eksekusi(). Panggilan sistem iki migunani nalika kita pengin mbukak program sing beda banget. Kene kita bakal nelpon execvp() kanggo mbukak program wc yaiku program ngitung tembung. Apa sing kedadeyan nalika exec () diarani? Telpon iki liwati jeneng file eksekusi lan sawetara paramèter minangka argumen. Sawisé iku kode lan data statis saka file eksekusi iki dimuat lan bagean dhewe karo kode timpa. Wilayah memori sing isih ana, kayata tumpukan lan tumpukan, diinisialisasi maneh. Sawisé iku OS mung nglakokaké program, maringaken pesawat saka bantahan. Dadi, kita ora nggawe proses anyar, kita mung ngowahi program sing lagi mlaku dadi program liyane sing mlaku. Sawise nglakokake exec () telpon ing turunan, katon minangka program asli ora mbukak ing kabeh.

Komplikasi wiwitan iki pancen normal kanggo cangkang Unix, lan ngidini cangkang kasebut nglakokake kode sawise nelpon garpu (), nanging sadurunge telpon eksekusi(). Conto kode kasebut bakal nyetel lingkungan cangkang kanggo kabutuhan program sing diluncurake, sadurunge diluncurake.

Shell - mung program pangguna. Dheweke nuduhake sampeyan baris undhangan lan ngenteni sampeyan nulis soko ing. Umume kasus, yen sampeyan nulis jeneng program ana, cangkang bakal nemokake lokasi, nelpon cara garpu (), banjur nelpon sawetara jinis exec () kanggo nggawe proses anyar lan ngenteni rampung nggunakake a ngenteni () telpon. Nalika proses anak metu, cangkang bakal bali saka Enteni () telpon lan print pituduh maneh lan ngenteni printah sabanjuré ngetik.

Split fork () & exec () ngidini cangkang nindakake perkara ing ngisor iki, contone:
wc file > new_file.

Ing conto iki, output program wc dialihake menyang file. Cara cangkang entuk iki cukup prasaja - kanthi nggawe proses anak sadurunge nelpon eksekusi(), cangkang nutup output standar lan mbukak file file_new, mangkono, kabeh output saka program mlaku luwih wc bakal dialihake menyang file tinimbang layar.

Pipa Unix Kab dipun ginakaken ing cara sing padha, karo prabédan sing padha nggunakake pipo () telpon. Ing kasus iki, aliran output proses bakal disambungake menyang antrian pipa sing ana ing kernel, ing ngendi aliran input saka proses liyane bakal disambungake.

Source: www.habr.com

Add a comment