Sistem Operasi: Tiga Bagian Mudah. Bagian 1: Intro (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:

Anda juga dapat memeriksa saluran saya di telegram =)

Operasi program

Apa yang terjadi ketika suatu program sedang berjalan? Program yang sedang berjalan melakukan satu hal sederhana - ia menjalankan instruksi. Setiap detik, jutaan dan bahkan mungkin miliaran instruksi diambil oleh prosesor dari RAM, kemudian ia menerjemahkan kodenya (misalnya, ia mengenali jenis instruksi tersebut) dan mengeksekusinya. Ini bisa berupa menambahkan dua angka, mengakses memori, memeriksa suatu kondisi, melompat ke suatu fungsi, dan sebagainya. Setelah satu instruksi dieksekusi, prosesor melanjutkan eksekusi instruksi lainnya. Dan instruksi demi instruksi, mereka dieksekusi sampai program berakhir.

Contoh ini tentu saja dianggap disederhanakan - pada kenyataannya, untuk mempercepat prosesor, perangkat keras modern memungkinkan Anda menjalankan instruksi secara bergantian, menghitung kemungkinan hasil, menjalankan instruksi secara bersamaan, dan trik serupa.

Model komputasi Von Neumann

Bentuk pekerjaan sederhana yang kami jelaskan mirip dengan model komputasi Von Neumann. Von Neumann adalah salah satu pionir sistem komputer, ia juga salah satu penulis teori permainan. Saat program sedang berjalan, banyak peristiwa lain terjadi, banyak proses lain dan logika pihak ketiga bekerja, yang tujuan utamanya adalah untuk menyederhanakan peluncuran, pengoperasian, dan pemeliharaan sistem.

Ada seperangkat perangkat lunak yang bertanggung jawab untuk membuat program mudah dijalankan (atau bahkan memungkinkan beberapa program dijalankan secara bersamaan), memungkinkan program untuk berbagi memori yang sama, serta berkomunikasi dengan perangkat yang berbeda. Kumpulan perangkat lunak (software) ini pada dasarnya disebut sistem operasi dan tugasnya meliputi pemantauan bahwa sistem bekerja dengan benar dan efisien, serta memastikan kemudahan pengelolaan sistem ini.

Sistem operasi

Sistem operasi, disingkat OS, adalah sekumpulan program yang saling terkait yang dirancang untuk mengelola sumber daya komputer dan mengatur interaksi pengguna dengan komputer..

OS mencapai efektivitasnya terutama melalui teknik yang paling penting - teknik virtualisasi. OS berinteraksi dengan sumber daya fisik (prosesor, memori, disk, dll.) dan mengubahnya menjadi bentuk yang lebih umum, lebih kuat, dan lebih mudah digunakan. Oleh karena itu, untuk pemahaman umum, Anda dapat membandingkan secara kasar sistem operasi dengan mesin virtual.

Untuk memungkinkan pengguna memberikan perintah ke sistem operasi dan dengan demikian menggunakan kemampuan mesin virtual (seperti menjalankan program, mengalokasikan memori, mengakses file, dan sebagainya), sistem operasi menyediakan beberapa antarmuka yang disebut API (antarmuka pemrograman aplikasi) dan ke mana Anda dapat melakukan panggilan (panggilan). Sistem operasi pada umumnya memungkinkan ratusan panggilan sistem dilakukan.

Yang terakhir, karena virtualisasi memungkinkan beberapa program untuk berjalan (sehingga berbagi CPU), dan secara bersamaan mengakses instruksi dan datanya (sehingga berbagi memori), dan mengakses disk (sehingga berbagi perangkat I/O). ), sistem operasi juga disebut a manajer Sumber Daya. Setiap prosesor, disk, dan memori adalah sumber daya sistem, dan dengan demikian salah satu peran sistem operasi adalah tugas mengelola sumber daya ini, melakukannya secara efisien, jujur, atau sebaliknya, tergantung pada tugas yang dilakukan sistem operasi tersebut. dirancang.

Virtualisasi CPU

Pertimbangkan program berikut:
(https://www.youtube.com/watch?v=zDwT5fUcki4)

Sistem Operasi: Tiga Bagian Mudah. Bagian 1: Intro (terjemahan)

Itu tidak melakukan tindakan khusus apa pun, pada kenyataannya, yang dilakukannya hanyalah memanggil suatu fungsi berputar(), yang tugasnya adalah menelusuri pemeriksaan waktu dan kembali setelah satu detik berlalu. Dengan demikian, ia mengulangi string yang diteruskan pengguna sebagai argumen tanpa batas waktu.

Mari kita jalankan program ini dan berikan karakter "A" sebagai argumen. Hasilnya tidak terlalu menarik - sistem hanya menjalankan program yang secara berkala menampilkan karakter "A".

Sekarang mari kita coba opsi ketika banyak contoh dari program yang sama sedang berjalan, tetapi mengeluarkan huruf yang berbeda untuk membuatnya lebih jelas. Dalam hal ini, hasilnya akan sedikit berbeda. Terlepas dari kenyataan bahwa kami memiliki satu prosesor, program ini dijalankan secara bersamaan. Bagaimana hal itu bisa terjadi? Namun ternyata sistem operasi, bukannya tanpa bantuan kemampuan hardware, menciptakan ilusi. Ilusi bahwa sistem memiliki beberapa prosesor virtual, mengubah satu prosesor fisik menjadi jumlah yang secara teoritis tidak terbatas dan dengan demikian memungkinkan program-program berjalan secara bersamaan. Ilusi ini disebut Virtualisasi CPU.

Gambaran ini menimbulkan banyak pertanyaan, misalnya jika beberapa program ingin dijalankan secara bersamaan, program manakah yang akan diluncurkan? β€œKebijakan” OS bertanggung jawab atas pertanyaan ini. Kebijakan digunakan di banyak tempat di OS dan menjawab pertanyaan seperti ini, dan merupakan mekanisme dasar yang diimplementasikan oleh OS. Oleh karena itu peran OS sebagai pengelola sumber daya.

Virtualisasi memori

Sekarang mari kita lihat memori. Model fisik memori dalam sistem modern direpresentasikan sebagai array byte.. Untuk membaca dari memori, Anda perlu menentukan alamat seluntuk mengaksesnya. Untuk menulis atau memperbarui data, Anda juga harus menentukan data dan alamat sel tempat menulisnya.

Memori diakses terus-menerus selama eksekusi program. Sebuah program menyimpan seluruh struktur datanya dalam memori dan mengaksesnya dengan menjalankan berbagai instruksi. Sementara itu, instruksi juga disimpan dalam memori, sehingga juga diakses untuk setiap permintaan instruksi berikutnya.

malloc() panggilan

Perhatikan program berikut, yang mengalokasikan suatu wilayah memori menggunakan panggilan malloc () (https://youtu.be/jnlKRnoT1m0):

Sistem Operasi: Tiga Bagian Mudah. Bagian 1: Intro (terjemahan)

Program ini melakukan beberapa hal. Pertama, ia mengalokasikan sebagian memori (baris 7), kemudian mencetak alamat sel yang dialokasikan (baris 9), menulis nol ke slot pertama dari memori yang dialokasikan. Selanjutnya, program memasuki loop yang menambah nilai yang disimpan dalam memori pada alamat variabel β€œp”. Itu juga mencetak ID proses itu sendiri. ID proses unik untuk setiap proses yang berjalan. Setelah meluncurkan beberapa salinan, kita akan menemukan hasil yang menarik: Dalam kasus pertama, jika Anda tidak melakukan apa pun dan hanya menjalankan beberapa salinan, maka alamatnya akan berbeda. Tapi ini tidak termasuk dalam teori kami! Benar, karena distribusi modern mengaktifkan pengacakan memori secara default. Jika dinonaktifkan, kami mendapatkan hasil yang diharapkan - alamat memori dari dua program yang berjalan secara bersamaan akan cocok.

Sistem Operasi: Tiga Bagian Mudah. Bagian 1: Intro (terjemahan)

Hasilnya, ternyata dua program independen bekerja dengan ruang alamat pribadinya masing-masing, yang pada gilirannya dipetakan oleh sistem operasi ke dalam memori fisik.. Oleh karena itu, penggunaan alamat memori dalam satu program tidak akan mempengaruhi program lain dengan cara apa pun, dan tampaknya setiap program memiliki bagian memori fisiknya sendiri, yang sepenuhnya diberikan kepadanya. Kenyataannya, memori fisik adalah sumber daya bersama yang dikelola oleh sistem operasi.

Konsistensi

Topik penting lainnya dalam sistem operasi adalah - konsistensi. Istilah ini digunakan ketika berbicara tentang masalah pada sistem yang dapat terjadi ketika mengerjakan banyak hal secara bersamaan dalam program yang sama. Masalah konsistensi muncul bahkan di dalam sistem operasi itu sendiri. Pada contoh virtualisasi memori dan prosesor sebelumnya, kita menyadari bahwa OS mengelola banyak hal secara bersamaan - OS memulai proses pertama, lalu proses kedua, dan seterusnya. Ternyata, perilaku ini bisa menimbulkan beberapa masalah. Misalnya, program multi-thread modern mengalami kesulitan seperti itu.

Pertimbangkan program berikut:

Sistem Operasi: Tiga Bagian Mudah. Bagian 1: Intro (terjemahan)

Program dalam fungsi utama membuat dua thread menggunakan panggilan pthread_buat(). Dalam contoh ini, thread dapat dianggap sebagai fungsi yang berjalan di ruang memori yang sama bersama dengan fungsi lainnya, dan jelas ada lebih dari satu fungsi yang berjalan pada waktu yang sama. Dalam contoh ini, setiap thread memulai dan menjalankan fungsinya pekerja() yang pada gilirannya hanya menambah variabel,.

Mari kita jalankan program ini dengan argumen 1000. Seperti yang sudah Anda duga, hasilnya seharusnya 2000 karena setiap thread menambah variabel sebanyak 1000 kali. Namun, semuanya tidak sesederhana itu. Mari kita coba menjalankan program dengan urutan pengulangan yang lebih banyak.

Sistem Operasi: Tiga Bagian Mudah. Bagian 1: Intro (terjemahan)

Dengan memasukkan suatu angka, misalnya 100000, kita mengharapkan keluaran berupa angka 200000. Namun, jika kita menjalankan angka 100000 beberapa kali, kita tidak hanya tidak akan melihat jawaban yang benar, tetapi juga mendapatkan jawaban salah yang berbeda-beda. Jawabannya terletak pada kenyataan bahwa untuk menambah angka, diperlukan tiga operasi - mengekstraksi angka dari memori, menambah, dan kemudian menulis kembali angka tersebut. Karena semua instruksi ini tidak dijalankan secara atomik (semuanya pada saat yang sama), hal aneh seperti ini bisa terjadi. Masalah ini disebut dalam pemrograman kondisi balapan. Ketika kekuatan yang tidak diketahui pada saat yang tidak diketahui dapat mempengaruhi kinerja operasi Anda.

Sumber: www.habr.com

Tambah komentar