Sistem Operasi: Tiga Bagian Mudah. Bagian 2: Abstraksi: Proses (terjemahan)

Pengantar Sistem Operasi

Hai Habr! Saya ingin menyampaikan kepada Anda serangkaian artikel-terjemahan dari salah satu literatur yang menarik menurut saya - OSTEP. Materi ini membahas cukup mendalam tentang cara kerja sistem operasi mirip unix, yaitu bekerja dengan proses, berbagai penjadwal, memori, dan komponen serupa lainnya yang membentuk sebuah OS modern. Anda dapat melihat semua materi asli di sini di sini. Harap dicatat bahwa terjemahannya dibuat tidak profesional (cukup bebas), tapi saya harap saya tetap mempertahankan arti umum.

Pekerjaan laboratorium mengenai hal ini dapat ditemukan di sini:

Bagian lain:

Anda juga dapat memeriksa saluran saya di telegram =)

Mari kita lihat abstraksi paling mendasar yang disediakan OS bagi pengguna: proses. Definisi prosesnya cukup sederhana - memang begitu program yang sedang berjalan. Program itu sendiri adalah benda tak bernyawa yang terletak di disk - ini adalah sekumpulan instruksi dan mungkin beberapa data statis yang menunggu untuk diluncurkan. OS-lah yang mengambil byte tersebut dan menjalankannya, mengubah program menjadi sesuatu yang berguna.
Seringkali pengguna ingin menjalankan lebih dari satu program secara bersamaan, misalnya Anda dapat menjalankan browser, game, pemutar media, editor teks, dan sejenisnya di laptop Anda. Faktanya, suatu sistem biasa dapat menjalankan puluhan atau ratusan proses secara bersamaan. Fakta ini membuat sistem lebih mudah digunakan, Anda tidak perlu khawatir apakah CPU bebas, Anda cukup menjalankan program.

Hal ini menimbulkan masalah: bagaimana memberikan ilusi banyak CPU? Bagaimana OS dapat menciptakan ilusi jumlah CPU yang hampir tak terbatas, meskipun Anda hanya memiliki satu CPU fisik?

OS menciptakan ilusi ini melalui virtualisasi CPU. Dengan memulai satu proses, lalu menghentikannya, memulai proses lain, dan seterusnya, OS dapat mempertahankan ilusi bahwa terdapat banyak CPU virtual, padahal sebenarnya akan ada satu atau lebih prosesor fisik. Teknik ini disebut pembagian sumber daya CPU berdasarkan waktu. Teknik ini memungkinkan pengguna untuk menjalankan proses bersamaan sebanyak yang mereka inginkan. Biaya dari solusi ini adalah kinerja - karena jika CPU digunakan bersama oleh beberapa proses, setiap proses akan diproses lebih lambat.
Untuk mengimplementasikan virtualisasi CPU, dan khususnya untuk melakukannya dengan baik, OS memerlukan dukungan tingkat rendah dan tingkat tinggi. Dukungan tingkat rendah disebut mekanisme adalah metode atau protokol tingkat rendah yang mengimplementasikan bagian fungsionalitas yang diperlukan. Contoh dari fungsi tersebut adalah peralihan konteks, yang memberikan OS kemampuan untuk menghentikan satu program dan menjalankan program lain pada prosesor. Pembagian kali ini diterapkan di semua sistem operasi modern.
Di atas mekanisme ini terdapat beberapa logika yang dibangun ke dalam OS, dalam bentuk “kebijakan”. Kebijaksanaan adalah algoritma pengambilan keputusan tertentu untuk sistem operasi. Kebijakan tersebut, misalnya, menentukan program mana yang harus diluncurkan (dari daftar perintah) terlebih dahulu. Jadi, misalnya, masalah ini akan diselesaikan dengan kebijakan yang disebut penjadwal (kebijakan penjadwalan) dan ketika memilih solusi, itu akan dipandu oleh data seperti: riwayat startup (program mana yang diluncurkan paling lama dalam beberapa menit terakhir), beban apa yang dibawa oleh proses ini (jenis program apa yang diluncurkan), metrik kinerja (apakah sistem dioptimalkan untuk interaksi interaktif atau untuk throughput ) dan seterusnya.

Abstraksi: proses

Abstraksi dari program yang sedang berjalan yang dijalankan oleh sistem operasi inilah yang kami sebut proses. Seperti disebutkan sebelumnya, suatu proses hanyalah sebuah program yang berjalan, pada periode waktu tertentu. Sebuah program yang dengannya kita dapat memperoleh informasi ringkasan dari berbagai sumber daya sistem yang diakses atau dipengaruhi oleh program ini selama pelaksanaannya.
Untuk memahami komponen-komponen proses, Anda perlu memahami keadaan sistem: apa yang dapat dibaca atau diubah oleh program selama operasinya. Pada waktu tertentu, Anda perlu memahami elemen sistem mana yang penting untuk pelaksanaan program.
Salah satu elemen nyata dari keadaan sistem yang termasuk dalam proses adalah память. Instruksi terletak di memori. Data yang dibaca atau ditulis oleh program juga terletak di memori. Dengan demikian, memori yang dapat dialamati oleh suatu proses (disebut ruang alamat) adalah bagian dari proses.
Juga bagian dari keadaan sistem adalah register. Banyak instruksi yang ditujukan untuk mengubah nilai register atau membaca nilainya, dan dengan demikian register juga menjadi bagian penting dari pengoperasian proses.
Perlu diperhatikan bahwa status mesin juga dibentuk dari beberapa register khusus. Misalnya, IP - penunjuk instruksi — penunjuk ke instruksi yang sedang dijalankan program. Ada juga tumpukan penunjuk dan terkait dengannya penunjuk bingkai, yang digunakan untuk mengelola: parameter fungsi, variabel lokal, dan alamat pengirim.
Terakhir, program sering kali mengakses ROM (read-only memory). Informasi “I/O” (input/output) ini harus mencakup daftar file yang sedang dibuka oleh proses.

API Proses

Untuk meningkatkan pemahaman kita tentang cara kerja proses, mari pelajari contoh panggilan sistem yang harus disertakan dalam antarmuka sistem operasi apa pun. API ini tersedia dalam satu atau lain bentuk di OS apa pun.

membuat (penciptaan): OS harus menyertakan beberapa metode yang memungkinkan Anda membuat proses baru. Saat Anda memasukkan perintah ke terminal atau meluncurkan aplikasi dengan mengklik dua kali pada ikon, panggilan dikirim ke OS untuk membuat proses baru dan kemudian meluncurkan program yang ditentukan.
Pemindahan: Karena terdapat antarmuka untuk membuat suatu proses, OS juga harus menyediakan kemampuan untuk memaksa penghapusan suatu proses. Sebagian besar program secara alami akan dimulai dan berakhir dengan sendirinya saat dijalankan. Jika tidak, pengguna ingin dapat mematikannya dan dengan demikian antarmuka untuk menghentikan proses akan berguna.
Tunggu (menunggu): Terkadang menunggu hingga suatu proses selesai berguna, sehingga disediakan beberapa antarmuka yang menyediakan kemampuan untuk menunggu.
Kontrol Lain-Lain (berbagai kontrol): Selain mematikan dan menunggu proses, ada juga berbagai metode kontrol lainnya. Misalnya, sebagian besar sistem operasi menyediakan kemampuan untuk membekukan suatu proses (menghentikan eksekusinya selama jangka waktu tertentu) dan kemudian melanjutkannya (melanjutkan eksekusi)
Status (state): Ada berbagai antarmuka untuk memperoleh beberapa informasi tentang status suatu proses, seperti berapa lama proses tersebut telah berjalan atau keadaan apa yang sedang berlangsung.

Sistem Operasi: Tiga Bagian Mudah. Bagian 2: Abstraksi: Proses (terjemahan)

Pembuatan Proses: Detail

Salah satu hal yang menarik adalah bagaimana sebenarnya program diubah menjadi proses. Terutama bagaimana OS mengambil dan menjalankan program. Bagaimana tepatnya proses itu tercipta.
Pertama-tama, OS harus memuat kode program dan data statis ke dalam memori (ke dalam ruang alamat proses). Program biasanya terletak pada disk atau solid-state drive dalam beberapa format yang dapat dieksekusi. Dengan demikian, proses memuat program dan data statis ke dalam memori mengharuskan OS untuk dapat membaca byte tersebut dari disk dan menempatkannya di suatu tempat di memori.

Pada sistem operasi awal, proses pemuatan dilakukan dengan cepat, artinya seluruh kode dimuat ke dalam memori sebelum program diluncurkan. Sistem operasi modern melakukan hal ini dengan malas, yaitu memuat potongan kode atau data hanya ketika program memerlukannya selama eksekusi.

Setelah kode dan data statis dimuat ke dalam memori OS, ada beberapa hal lagi yang perlu dilakukan sebelum proses dapat berjalan. Sejumlah memori harus dialokasikan untuk tumpukan. Program menggunakan tumpukan untuk variabel lokal, parameter fungsi, dan alamat pengirim. OS mengalokasikan memori ini dan memberikannya pada proses. Tumpukan juga dapat dialokasikan dengan beberapa argumen, khususnya mengisi parameter fungsi main(), misalnya dengan array argc dan argv.

Sistem operasi juga dapat mengalokasikan sejumlah memori ke tumpukan program. Heap digunakan oleh program untuk secara eksplisit meminta data yang dialokasikan secara dinamis. Program meminta ruang ini dengan memanggil fungsinya malloc () dan menghapusnya secara eksplisit dengan memanggil fungsi tersebut Gratis(). Heap diperlukan untuk struktur data seperti linked sheet, tabel hash, tree dan lain-lain. Pada awalnya, sejumlah kecil memori dialokasikan ke heap, namun seiring berjalannya waktu, saat program berjalan, heap dapat meminta lebih banyak memori melalui panggilan API perpustakaan malloc(). Sistem operasi terlibat dalam proses mengalokasikan lebih banyak memori untuk membantu memenuhi panggilan ini.

Sistem operasi juga akan melakukan tugas inisialisasi, khususnya yang berkaitan dengan I/O. Misalnya, pada sistem UNIX, setiap proses secara default memiliki 3 deskriptor file terbuka, untuk input, output, dan kesalahan standar. Pegangan ini memungkinkan program membaca masukan dari terminal serta menampilkan informasi di layar.

Jadi, dengan memuat kode dan data statis ke dalam memori, membuat dan menginisialisasi tumpukan, dan melakukan pekerjaan lain yang terkait dengan pelaksanaan tugas I/O, OS mempersiapkan tahapan untuk mengeksekusi proses. Terakhir, ada satu tugas terakhir yang tersisa: menjalankan program melalui titik masuknya, yang disebut fungsi main(). Dengan menjalankan fungsi main(), OS mentransfer kendali CPU ke proses yang baru dibuat, sehingga program mulai dijalankan.

Status proses

Sekarang setelah kita memahami apa itu suatu proses dan bagaimana proses itu dibuat, mari kita buat daftar status proses yang mungkin terjadi. Dalam bentuknya yang paling sederhana, suatu proses dapat berada dalam salah satu keadaan berikut:
Running. Saat dijalankan, proses berjalan pada prosesor. Ini berarti bahwa instruksi sedang dijalankan.
Siap. Dalam keadaan siap, proses siap dijalankan, namun karena alasan tertentu OS tidak mengeksekusinya pada waktu yang ditentukan.
diblokir. Dalam keadaan diblokir, suatu proses melakukan beberapa operasi yang mencegahnya siap untuk dieksekusi hingga suatu peristiwa terjadi. Salah satu contoh umum adalah ketika suatu proses memulai operasi IO, proses tersebut diblokir sehingga beberapa proses lain dapat menggunakan prosesor tersebut.

Sistem Operasi: Tiga Bagian Mudah. Bagian 2: Abstraksi: Proses (terjemahan)

Anda dapat membayangkan keadaan-keadaan ini dalam bentuk grafik. Seperti yang bisa kita lihat pada gambar, status proses dapat berubah antara RUNNING dan READY sesuai kebijaksanaan OS. Ketika keadaan suatu proses berubah dari READY menjadi RUNNING, berarti proses tersebut telah dijadwalkan. Di arah yang berlawanan - dihapus dari tata letak. Pada saat suatu proses DIBLOKIR, misalnya, saya memulai operasi IO, OS akan mempertahankannya dalam keadaan ini sampai suatu peristiwa terjadi, misalnya selesainya IO. pada saat ini transisi ke status READY dan mungkin segera ke status RUNNING jika OS memutuskan demikian.
Mari kita lihat contoh bagaimana dua proses bergerak melalui keadaan ini. Untuk memulainya, bayangkan kedua proses sedang berjalan, dan masing-masing hanya menggunakan CPU. Dalam hal ini, negara bagian mereka akan terlihat seperti ini.

Sistem Operasi: Tiga Bagian Mudah. Bagian 2: Abstraksi: Proses (terjemahan)

Dalam contoh berikut, proses pertama, setelah beberapa waktu berjalan, meminta IO dan memasuki status BLOCKED, sehingga proses lain dapat berjalan (Gbr 1.4). OS melihat bahwa proses 0 tidak menggunakan CPU dan memulai proses 1. Saat proses 1 berjalan, IO selesai dan status proses 0 berubah menjadi READY. Akhirnya, proses 1 telah selesai, dan setelah selesai, proses 0 memulai, mengeksekusi, dan menyelesaikan pekerjaannya.

Sistem Operasi: Tiga Bagian Mudah. Bagian 2: Abstraksi: Proses (terjemahan)

Struktur data

OS itu sendiri adalah sebuah program, dan sama seperti program lainnya, ia memiliki beberapa struktur data penting yang melacak berbagai informasi relevan. Untuk melacak status setiap proses, OS akan mendukung beberapa proses Daftar proses untuk semua proses dalam keadaan READY dan beberapa informasi tambahan untuk melacak proses yang sedang berjalan. Selain itu, OS harus memantau proses yang diblokir. Setelah IO selesai, OS harus membangunkan proses yang diperlukan dan menempatkannya dalam keadaan siap dijalankan.

Misalnya, OS harus menjaga status register prosesor. Pada saat proses berhenti, status register disimpan dalam ruang alamat proses, dan pada saat operasi berlanjut, nilai register dipulihkan dan eksekusi proses ini dilanjutkan.

Selain status siap, diblokir, berjalan, ada beberapa negara bagian lainnya. Terkadang, pada saat pembuatan, suatu proses mungkin berada dalam status INIT. Terakhir, suatu proses dapat ditempatkan pada keadaan FINAL ketika proses tersebut telah selesai, namun informasinya belum dihapus. Pada sistem UNIX keadaan ini disebut proses zombie. Keadaan ini berguna ketika proses induk ingin mengetahui kode kembalian anak, misalnya, biasanya 0 menandakan keberhasilan dan 1 kesalahan, namun pemrogram dapat mengeluarkan kode keluaran tambahan untuk menandakan masalah yang berbeda. Ketika proses induk berakhir, ia membuat panggilan sistem terakhir, seperti wait(), untuk menunggu proses anak berakhir dan memberi sinyal kepada OS bahwa ia dapat menghapus data apa pun yang terkait dengan proses yang dihentikan tersebut.

Sistem Operasi: Tiga Bagian Mudah. Bagian 2: Abstraksi: Proses (terjemahan)

Poin-poin penting dari kuliah ini:

proses — abstraksi utama dari program yang sedang berjalan di OS. Pada waktu tertentu, suatu proses dapat dijelaskan berdasarkan keadaannya: isi memori dalam ruang alamatnya, isi register prosesor, termasuk penunjuk instruksi dan penunjuk tumpukan, dan informasi IO, seperti file terbuka yang sedang dibaca atau ditulis.
API Proses terdiri dari panggilan yang dapat dilakukan program ke proses. Biasanya ini adalah panggilan buat, hapus, atau lainnya.
● Proses berada dalam salah satu dari banyak status, termasuk berjalan, siap, diblokir. Berbagai kejadian seperti penjadwalan, pengecualian dari penjadwalan, atau menunggu dapat mengubah keadaan suatu proses dari satu proses ke proses lainnya.
Daftar proses berisi informasi tentang semua proses dalam sistem. Setiap entri di dalamnya disebut blok kendali proses, yang pada kenyataannya merupakan struktur yang berisi semua informasi yang diperlukan tentang proses tertentu. 

Sumber: www.habr.com

Tambah komentar