Sistem Pengendalian: Tiga Keping Mudah. Bahagian 2: Abstraksi: Proses (terjemahan)

Pengenalan kepada Sistem Operasi

Hai Habr! Saya ingin membawa perhatian anda satu siri artikel-terjemahan satu kesusasteraan yang menarik pada pendapat saya - OSTEP. Bahan ini membincangkan secara mendalam tentang kerja sistem pengendalian seperti unix, iaitu, bekerja dengan proses, pelbagai penjadual, memori, dan komponen lain yang serupa yang membentuk OS moden. Anda boleh melihat asal semua bahan di sini di sini. Sila ambil perhatian bahawa terjemahan itu dibuat secara tidak profesional (agak bebas), tetapi saya harap saya mengekalkan maksud umum.

Kerja makmal mengenai subjek ini boleh didapati di sini:

Bahagian lain:

Anda juga boleh menyemak saluran saya di telegram =)

Mari kita lihat abstraksi paling asas yang OS berikan kepada pengguna: proses. Takrifan prosesnya agak mudah - memang begitu menjalankan program. Program itu sendiri adalah perkara tidak bermaya yang terletak pada cakera - ia adalah satu set arahan dan mungkin beberapa data statik menunggu untuk dilancarkan. OS yang mengambil bait tersebut dan menjalankannya, mengubah atur cara menjadi sesuatu yang berguna.
Selalunya, pengguna ingin menjalankan lebih daripada satu program pada masa yang sama, sebagai contoh, anda boleh menjalankan penyemak imbas, permainan, pemain media, editor teks dan seumpamanya pada komputer riba anda. Malah, sistem biasa boleh menjalankan puluhan atau ratusan proses secara serentak. Fakta ini menjadikan sistem lebih mudah untuk digunakan, anda tidak perlu risau sama ada CPU adalah percuma, anda hanya menjalankan program.

Ini menimbulkan masalah: bagaimana untuk memberikan ilusi banyak CPU? Bagaimanakah OS boleh mencipta ilusi bilangan CPU yang hampir tidak terhingga, walaupun anda hanya mempunyai satu CPU fizikal?

OS mencipta ilusi ini melalui virtualisasi CPU. Dengan memulakan satu proses, kemudian menghentikannya, memulakan proses lain, dan seterusnya, OS boleh mengekalkan ilusi bahawa terdapat banyak CPU maya, sedangkan sebenarnya akan ada satu atau lebih pemproses fizikal. Teknik ini dipanggil pembahagian sumber CPU mengikut masa. Teknik ini membolehkan pengguna menjalankan seberapa banyak proses serentak yang mereka mahu. Kos penyelesaian ini ialah prestasi - kerana jika CPU dikongsi oleh beberapa proses, setiap proses akan diproses dengan lebih perlahan.
Untuk melaksanakan virtualisasi CPU, dan terutamanya untuk melakukannya dengan baik, OS memerlukan kedua-dua sokongan peringkat rendah dan tinggi. Sokongan tahap rendah dipanggil mekanisme ialah kaedah atau protokol peringkat rendah yang melaksanakan bahagian fungsi yang diperlukan. Contoh fungsi sedemikian ialah penukaran konteks, yang memberikan OS keupayaan untuk menghentikan satu program dan menjalankan program lain pada pemproses. Pembahagian masa ini dilaksanakan dalam semua sistem pengendalian moden.
Di atas mekanisme ini terdapat beberapa logik yang dibina ke dalam OS, dalam bentuk "dasar". Dasar ialah algoritma membuat keputusan tertentu untuk sistem pengendalian. Dasar sedemikian, sebagai contoh, memutuskan program mana yang harus dilancarkan (dari senarai arahan) terlebih dahulu. Jadi, sebagai contoh, masalah ini akan diselesaikan dengan dasar yang dipanggil penjadual (dasar penjadualan) dan apabila memilih penyelesaian, ia akan dipandu oleh data seperti: sejarah permulaan (program yang paling lama dilancarkan dalam minit terakhir), beban yang dibawa oleh proses ini (jenis program yang dilancarkan), metrik prestasi (sama ada sistem dioptimumkan untuk interaksi interaktif atau untuk throughput ) dan sebagainya.

Abstraksi: proses

Abstraksi program berjalan yang dilaksanakan oleh sistem pengendalian adalah apa yang kita panggil proses. Seperti yang dinyatakan sebelum ini, proses hanyalah program yang sedang berjalan, pada sebarang tempoh masa serta-merta. Program yang dengannya kita boleh mendapatkan maklumat ringkasan daripada pelbagai sumber sistem yang diakses atau terjejas oleh program ini semasa pelaksanaannya.
Untuk memahami komponen proses, anda perlu memahami keadaan sistem: perkara yang boleh dibaca atau diubah oleh program semasa operasinya. Pada bila-bila masa, anda perlu memahami elemen sistem mana yang penting untuk pelaksanaan program.
Salah satu elemen jelas sistem menyatakan bahawa proses termasuk adalah ΠΏΠ°ΠΌΡΡ‚ΡŒ. Arahan terletak dalam ingatan. Data yang dibaca atau ditulis oleh program juga terletak dalam ingatan. Oleh itu, ingatan yang boleh ditangani oleh proses (dipanggil ruang alamat) adalah sebahagian daripada proses.
Juga sebahagian daripada keadaan sistem ialah daftar. Banyak arahan bertujuan untuk menukar nilai daftar atau membaca nilainya, dan dengan itu daftar juga menjadi bahagian penting dalam operasi proses.
Perlu diingatkan bahawa keadaan mesin juga terbentuk daripada beberapa daftar khas. Sebagai contoh, IP - penunjuk arahan β€” penunjuk kepada arahan yang sedang dijalankan oleh program. Terdapat juga penunjuk timbunan dan berkaitan dengannya penunjuk bingkai, yang digunakan untuk mengurus: parameter fungsi, pembolehubah setempat dan alamat pemulangan.
Akhirnya, program sering mengakses ROM (memori baca sahaja). Maklumat "I/O" (input/output) ini hendaklah termasuk senarai fail yang sedang dibuka oleh proses tersebut.

API Proses

Untuk meningkatkan pemahaman kita tentang cara proses itu berfungsi, mari kita kaji contoh panggilan sistem yang harus disertakan dalam mana-mana antara muka sistem pengendalian. API ini tersedia dalam satu bentuk atau yang lain pada mana-mana OS.

● Buat (penciptaan): OS mesti memasukkan beberapa kaedah yang membolehkan anda membuat proses baharu. Apabila anda memasukkan arahan ke dalam terminal atau melancarkan aplikasi dengan mengklik dua kali pada ikon, panggilan dihantar ke OS untuk mencipta proses baharu dan kemudian melancarkan program yang ditentukan.
● Pemadaman: Memandangkan terdapat antara muka untuk mencipta proses, OS juga harus menyediakan keupayaan untuk memaksa penyingkiran proses. Kebanyakan program secara semula jadi akan bermula dan ditamatkan sendiri apabila ia dijalankan. Jika tidak, pengguna ingin dapat membunuh mereka dan dengan itu antara muka untuk menghentikan proses akan berguna.
● Tunggu (menunggu): Kadangkala adalah berguna untuk menunggu proses selesai, jadi beberapa antara muka disediakan yang menyediakan keupayaan untuk menunggu.
● Kawalan Pelbagai (pelbagai kawalan): Selain membunuh dan menunggu proses, terdapat juga pelbagai kaedah kawalan yang lain. Sebagai contoh, kebanyakan sistem pengendalian menyediakan keupayaan untuk membekukan proses (menghentikan pelaksanaannya untuk tempoh tertentu) dan kemudian menyambung semula (teruskan pelaksanaan)
● status (keadaan): Terdapat pelbagai antara muka untuk mendapatkan beberapa maklumat tentang status sesuatu proses, seperti berapa lama proses itu berjalan atau dalam keadaan apa ia sedang berada.

Sistem Pengendalian: Tiga Keping Mudah. Bahagian 2: Abstraksi: Proses (terjemahan)

Proses Penciptaan: Butiran

Salah satu perkara yang menarik ialah bagaimana sebenarnya program diubah menjadi proses. Terutamanya bagaimana OS mengambil dan menjalankan program. Bagaimana sebenarnya proses itu dibuat.
Pertama sekali, OS mesti memuatkan kod program dan data statik ke dalam memori (ke dalam ruang alamat proses). Program biasanya terletak pada cakera atau pemacu keadaan pepejal dalam beberapa format boleh laku. Oleh itu, proses memuatkan atur cara dan data statik ke dalam ingatan memerlukan OS untuk dapat membaca bait tersebut dari cakera dan meletakkannya di suatu tempat dalam ingatan.

Dalam sistem pengendalian awal, proses pemuatan dilakukan dengan penuh semangat, yang bermaksud bahawa keseluruhan kod telah dimuatkan ke dalam memori sebelum program dilancarkan. Sistem pengendalian moden melakukan ini dengan malas, iaitu memuatkan kepingan kod atau data hanya apabila program memerlukannya semasa pelaksanaannya.

Setelah kod dan data statik dimuatkan ke dalam memori OS, terdapat beberapa perkara lagi yang perlu dilakukan sebelum proses boleh dijalankan. Sebilangan besar memori mesti diperuntukkan untuk timbunan. Program menggunakan tindanan untuk pembolehubah tempatan, parameter fungsi dan alamat pemulangan. OS memperuntukkan memori ini dan memberikannya kepada proses. Tindanan juga boleh diperuntukkan dengan beberapa argumen, khususnya ia mengisi parameter fungsi main(), contohnya dengan tatasusunan argc dan argv.

Sistem pengendalian juga mungkin memperuntukkan beberapa memori kepada timbunan program. Timbunan digunakan oleh program untuk meminta data yang diperuntukkan secara dinamik secara eksplisit. Program meminta ruang ini dengan memanggil fungsi malloc () dan mengosongkannya secara eksplisit dengan memanggil fungsi tersebut percuma (). Timbunan diperlukan untuk struktur data seperti helaian terpaut, jadual cincang, pokok dan lain-lain. Pada mulanya, sejumlah kecil memori diperuntukkan kepada timbunan, tetapi dari masa ke masa, semasa program berjalan, timbunan boleh meminta lebih banyak memori melalui perpustakaan API panggilan malloc(). Sistem pengendalian terlibat dalam proses memperuntukkan lebih banyak memori untuk membantu memenuhi panggilan ini.

Sistem pengendalian juga akan melaksanakan tugas pemula, terutamanya yang berkaitan dengan I/O. Sebagai contoh, pada sistem UNIX, setiap proses secara lalai mempunyai 3 deskriptor fail terbuka, untuk input, output dan ralat standard. Pemegang ini membenarkan program membaca input daripada terminal serta memaparkan maklumat pada skrin.

Oleh itu, dengan memuatkan kod dan data statik ke dalam ingatan, mencipta dan memulakan tindanan, dan melakukan kerja lain yang berkaitan dengan melaksanakan tugas I/O, OS menyediakan peringkat untuk proses tersebut dilaksanakan. Akhirnya, ada satu tugas terakhir yang tinggal: menjalankan program melalui titik masuknya, dipanggil fungsi main(). Dengan melaksanakan fungsi utama(), OS memindahkan kawalan CPU ke proses yang baru dibuat, dengan itu program mula dilaksanakan.

Keadaan proses

Sekarang setelah kita mempunyai sedikit pemahaman tentang apa itu proses dan cara ia dicipta, mari kita senaraikan keadaan proses yang boleh dilakukan. Dalam bentuk yang paling mudah, proses boleh berada dalam salah satu keadaan berikut:
● Berlari. Apabila berjalan, proses berjalan pada pemproses. Ini bermakna arahan sedang dilaksanakan.
● Sedia. Dalam keadaan sedia, proses sedia untuk dijalankan, tetapi atas sebab tertentu OS tidak melaksanakannya pada masa yang ditentukan.
● disekat. Dalam keadaan disekat, proses melakukan beberapa operasi yang menghalangnya daripada bersedia untuk melaksanakan sehingga beberapa peristiwa berlaku. Satu contoh biasa ialah apabila proses memulakan operasi IO, ia menjadi disekat supaya beberapa proses lain boleh menggunakan pemproses.

Sistem Pengendalian: Tiga Keping Mudah. Bahagian 2: Abstraksi: Proses (terjemahan)

Anda boleh bayangkan keadaan ini dalam bentuk graf. Seperti yang kita lihat dalam gambar, keadaan proses boleh berubah antara RUNNING dan READY mengikut budi bicara OS. Apabila keadaan proses berubah daripada SEDIA kepada BERJALAN, ini bermakna proses itu telah dijadualkan. Dalam arah yang bertentangan - dikeluarkan dari susun atur. Pada masa ini apabila proses menjadi DISEKAT, sebagai contoh, saya memulakan operasi IO, OS akan menyimpannya dalam keadaan ini sehingga beberapa peristiwa berlaku, contohnya penyiapan IO. pada masa ini peralihan kepada keadaan SEDIA dan mungkin serta-merta kepada keadaan RUNNING jika OS memutuskan begitu.
Mari kita lihat contoh bagaimana dua proses bergerak melalui keadaan ini. Sebagai permulaan, mari kita bayangkan bahawa kedua-dua proses sedang berjalan, dan masing-masing hanya menggunakan CPU. Dalam kes ini, negeri mereka akan kelihatan seperti ini.

Sistem Pengendalian: Tiga Keping Mudah. Bahagian 2: Abstraksi: Proses (terjemahan)

Dalam contoh berikut, proses pertama, selepas beberapa lama berjalan, meminta IO dan memasuki keadaan DISEKAT, membenarkan proses lain dijalankan (GAMBAR 1.4). OS melihat bahawa proses 0 tidak menggunakan CPU dan memulakan proses 1. Semasa proses 1 berjalan, IO telah selesai dan status proses 0 berubah kepada SEDIA. Akhirnya, proses 1 telah selesai, dan setelah selesai, proses 0 bermula, melaksanakan dan menamatkan kerjanya.

Sistem Pengendalian: Tiga Keping Mudah. Bahagian 2: Abstraksi: Proses (terjemahan)

Struktur data

OS itu sendiri ialah sebuah program, dan seperti mana-mana program lain, ia mempunyai beberapa struktur data utama yang menjejaki pelbagai maklumat yang berkaitan. Untuk menjejaki keadaan setiap proses, OS akan menyokong beberapa senarai proses untuk semua proses dalam keadaan SEDIA dan beberapa maklumat tambahan untuk menjejaki proses yang sedang berjalan. Juga, OS harus memantau proses yang disekat. Selepas IO selesai, OS mesti membangunkan proses yang diperlukan dan meletakkannya dalam keadaan sedia untuk dijalankan.

Sebagai contoh, OS mesti mengekalkan keadaan daftar pemproses. Pada masa proses berhenti, keadaan daftar disimpan dalam ruang alamat proses, dan pada masa operasinya diteruskan, nilai daftar dipulihkan dan dengan itu meneruskan pelaksanaan proses ini.

Sebagai tambahan kepada keadaan sedia, disekat, berjalan, terdapat beberapa negeri lain. Kadangkala, pada masa penciptaan, proses mungkin berada dalam keadaan INIT. Akhir sekali, proses boleh diletakkan dalam keadaan AKHIR apabila ia telah selesai, tetapi maklumatnya masih belum dibersihkan. Pada sistem UNIX keadaan ini dipanggil proses zombi. Keadaan ini berguna untuk kes di mana proses ibu bapa ingin mengetahui kod pemulangan kanak-kanak, contohnya, biasanya 0 menandakan kejayaan dan 1 ralat, tetapi pengaturcara boleh mengeluarkan kod output tambahan untuk menandakan masalah yang berbeza. Apabila proses induk ditamatkan, ia membuat panggilan sistem terakhir, seperti tunggu(), untuk menunggu proses anak ditamatkan dan memberi isyarat kepada OS bahawa ia boleh mengosongkan sebarang data yang dikaitkan dengan proses yang ditamatkan.

Sistem Pengendalian: Tiga Keping Mudah. Bahagian 2: Abstraksi: Proses (terjemahan)

Perkara utama kuliah:

● proses β€” abstraksi utama program yang sedang berjalan dalam OS. Pada bila-bila masa tertentu, proses boleh diterangkan mengikut keadaannya: kandungan memori dalam ruang alamatnya, kandungan daftar pemproses, termasuk penunjuk arahan dan penuding tindanan, dan maklumat IO, seperti fail terbuka yang dibaca atau ditulis.
● API Proses terdiri daripada panggilan yang boleh dibuat oleh program kepada proses. Biasanya ini ialah buat, padam atau panggilan lain.
● Proses ini berada dalam salah satu daripada banyak keadaan, termasuk berjalan, sedia, disekat. Pelbagai acara seperti penjadualan, pengecualian daripada penjadualan, atau menunggu boleh mengubah keadaan proses daripada satu kepada yang lain.
● Senarai proses mengandungi maklumat tentang semua proses dalam sistem. Setiap entri di dalamnya dipanggil blok kawalan proses, yang sebenarnya adalah struktur yang mengandungi semua maklumat yang diperlukan tentang proses tertentu. 

Sumber: www.habr.com

Tambah komen