Sistem Pengendalian: Tiga Keping Mudah. Bahagian 1: Pengenalan (terjemahan)

Pengenalan kepada Sistem Operasi

Hello, Habr! Saya ingin menyampaikan kepada perhatian anda satu siri artikel-terjemahan satu kesusasteraan yang menarik pada pendapat saya - OSTEP. Bahan ini mengkaji secara mendalam 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:
- asal: pages.cs.wisc.edu/~remzi/OSTEP/Homework/homework.html
- asal: github.com/remzi-arpacidusseau/ostep-code
- penyesuaian peribadi saya: github.com/bykvaadm/OS/tree/master/ostep

Anda juga boleh menyemak saluran saya di telegram =)

Operasi program

Apa yang berlaku apabila program dijalankan? Program yang sedang berjalan melakukan satu perkara yang mudah - ia melaksanakan arahan. Setiap saat, berjuta-juta malah mungkin berbilion-bilion arahan diambil oleh pemproses daripada RAM, seterusnya menyahkodnya (contohnya, ia mengenali jenis arahan ini) dan melaksanakannya. Ini boleh menambah dua nombor, mengakses memori, menyemak keadaan, melompat ke fungsi, dan sebagainya. Selepas pelaksanaan satu arahan, pemproses meneruskan pelaksanaan yang lain. Jadi arahan demi arahan, ia dilaksanakan sehingga program tamat.
Contoh ini secara semula jadi dianggap dalam cara yang dipermudahkan - sebenarnya, untuk mempercepatkan pemproses, perkakasan moden membolehkan anda melaksanakan arahan di luar urutan, mengira keputusan yang mungkin, melaksanakan arahan serentak dan helah yang serupa.

Model pengiraan Von Neumann

Bentuk kerja ringkas yang diterangkan oleh kami adalah serupa dengan model pengiraan Von Neumann. Von Neumann adalah salah seorang pelopor sistem komputer, beliau juga merupakan salah seorang pengarang teori permainan. Semasa program sedang berjalan, sekumpulan acara lain berlaku, banyak proses lain dan logik pihak ketiga berfungsi, tujuan utamanya adalah untuk memudahkan pelancaran, operasi dan penyelenggaraan sistem.
Terdapat satu set perisian yang bertanggungjawab untuk menjadikan program mudah dijalankan (atau membenarkan berbilang program dijalankan pada masa yang sama), membenarkan program berkongsi memori yang sama, serta berkomunikasi dengan peranti yang berbeza. Set perisian (perisian) sedemikian pada asasnya dipanggil sistem pengendalian dan tugasnya termasuk memantau bahawa sistem berfungsi dengan betul dan cekap, serta memastikan kemudahan pengurusan sistem ini.

Sistem operasi

Sistem pengendalian, disingkatkan sebagai OS, ialah satu set program yang saling berkaitan yang direka untuk mengurus sumber komputer dan mengatur interaksi pengguna dengan komputer..
OS mencapai keberkesanannya di tempat pertama, melalui teknik yang paling penting - teknik virtualisasi. OS berinteraksi dengan sumber fizikal (pemproses, memori, cakera, dsb.) dan mengubahnya menjadi bentuk sendiri yang lebih umum, lebih berkuasa dan lebih mudah digunakan. Oleh itu, untuk pemahaman umum, anda boleh membandingkan sistem pengendalian dengan mesin maya secara kasar.
Untuk membolehkan pengguna memberi arahan kepada sistem pengendalian dan dengan itu menggunakan keupayaan mesin maya (seperti menjalankan program, memperuntukkan memori, mengakses fail dan sebagainya), sistem pengendalian menyediakan beberapa antara muka yang dipanggil. API (antara muka pengaturcaraan aplikasi) dan yang anda boleh membuat panggilan (panggilan). Sistem pengendalian biasa membolehkan beratus-ratus panggilan sistem dibuat.
Akhir sekali, memandangkan virtualisasi membenarkan berbilang atur cara untuk dijalankan (dengan itu berkongsi CPU), dan pada masa yang sama mengakses arahan dan data mereka (dengan itu berkongsi memori), dan mengakses cakera (dengan itu berkongsi peranti I/O). ), sistem pengendalian juga dipanggil a pengurus sumber. Setiap pemproses, cakera dan memori adalah sumber sistem, dan dengan itu salah satu peranan sistem pengendalian menjadi tugas mengurus sumber ini, melakukannya dengan cekap, jujur, atau sebaliknya, bergantung pada tugas yang digunakan oleh sistem pengendalian ini. dicipta.

virtualisasi CPU

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

Sistem Pengendalian: Tiga Keping Mudah. Bahagian 1: Pengenalan (terjemahan)

Ia tidak melakukan apa-apa tindakan khas, sebenarnya, apa yang dilakukannya hanyalah memanggil fungsi berputar(), yang tugasnya adalah untuk menelusuri semakan masa dan kembali selepas satu saat berlalu. Oleh itu, ia mengulangi rentetan yang diluluskan oleh pengguna sebagai hujah selama-lamanya.
Mari jalankan program ini dan berikan watak "A" sebagai hujah. Hasilnya tidak begitu menarik - sistem hanya melaksanakan program yang secara berkala memaparkan watak "A".
Sekarang mari kita cuba pilihan apabila banyak contoh program yang sama sedang berjalan, tetapi mengeluarkan huruf yang berbeza untuk menjadikannya lebih jelas. Dalam kes ini, hasilnya akan agak berbeza. Walaupun fakta bahawa kami mempunyai satu pemproses, program ini dilaksanakan secara serentak. Bagaimana ia berlaku? Tetapi ternyata sistem pengendalian, bukan tanpa bantuan keupayaan perkakasan, mencipta ilusi. Ilusi bahawa sistem itu mempunyai berbilang pemproses maya, menjadikan pemproses fizikal tunggal menjadi nombor tak terhingga secara teori dan dengan itu membenarkan program yang kelihatan berjalan serentak. Ilusi ini dipanggil virtualisasi CPU.
Gambar ini menimbulkan banyak persoalan, contohnya, jika beberapa program ingin dijalankan pada masa yang sama, yang manakah akan dilancarkan? "Dasar" OS bertanggungjawab untuk soalan ini. Dasar digunakan di banyak tempat dalam OS dan menjawab soalan seperti ini, dan merupakan mekanisme asas yang OS laksanakan. Oleh itu peranan OS sebagai pengurus sumber.

Virtualisasi memori

Sekarang mari kita lihat ingatan. Model fizikal memori dalam sistem moden diwakili sebagai tatasusunan bait.. Untuk membaca dari ingatan, anda perlu menentukan alamat seluntuk mengaksesnya. Untuk menulis atau mengemas kini data, anda juga mesti menentukan data dan alamat sel untuk menulisnya.
Memori diakses sentiasa semasa pelaksanaan program. Program menyimpan keseluruhan struktur datanya dalam ingatan dan mengaksesnya dengan melaksanakan pelbagai arahan. Arahan, sementara itu, juga disimpan dalam ingatan, jadi ia juga diakses untuk setiap permintaan untuk arahan seterusnya.

malloc() panggilan

Pertimbangkan program berikut, yang memperuntukkan kawasan memori menggunakan panggilan malloc () (https://youtu.be/jnlKRnoT1m0):

Sistem Pengendalian: Tiga Keping Mudah. Bahagian 1: Pengenalan (terjemahan)

Program ini melakukan beberapa perkara. Mula-mula, ia memperuntukkan beberapa memori (baris 7), kemudian mencetak alamat sel yang diperuntukkan (baris 9), menulis sifar ke slot pertama memori yang diperuntukkan. Seterusnya, program memasuki gelung di mana ia menambah nilai yang disimpan dalam memori pada alamat dalam pembolehubah "p". Ia juga mencetak ID proses itu sendiri. ID proses adalah unik untuk setiap proses yang sedang berjalan. Setelah melancarkan beberapa salinan, kami akan menemui hasil yang menarik: Dalam kes pertama, jika anda tidak melakukan apa-apa dan hanya menjalankan beberapa salinan, maka alamat akan berbeza. Tetapi ini tidak termasuk dalam teori kami! Betul, kerana pengedaran moden mempunyai rawak memori didayakan secara lalai. Jika ia dilumpuhkan, kami mendapat hasil yang dijangkakan - alamat memori dua program yang dijalankan secara serentak akan sepadan.

Sistem Pengendalian: Tiga Keping Mudah. Bahagian 1: Pengenalan (terjemahan)

Akibatnya, ternyata dua program bebas berfungsi dengan ruang alamat peribadi mereka sendiri, yang seterusnya dipetakan oleh sistem pengendalian dalam memori fizikal. Oleh itu, penggunaan alamat memori dalam satu atur cara tidak akan menjejaskan orang lain dalam apa jua cara, dan nampaknya setiap atur cara ia mempunyai sekeping ingatan fizikalnya sendiri, diberikan sepenuhnya kepadanya. Realitinya, bagaimanapun, ialah ingatan fizikal ialah sumber bersama yang diuruskan oleh sistem pengendalian.

Konsisten

Satu lagi topik penting dalam sistem pengendalian ialah βˆ’ konsisten. Istilah ini digunakan apabila bercakap tentang masalah dalam sistem yang boleh berlaku apabila bekerja dengan banyak perkara pada masa yang sama dalam program yang sama. Isu konsistensi timbul walaupun dalam sistem pengendalian itu sendiri. Dalam contoh virtualisasi memori dan pemproses sebelumnya, kami menyedari bahawa OS menguruskan banyak perkara pada masa yang sama - ia memulakan proses pertama, kemudian yang kedua, dan seterusnya. Ternyata, tingkah laku ini boleh membawa kepada beberapa masalah. Jadi, sebagai contoh, program berbilang benang moden mengalami kesukaran sedemikian.

Pertimbangkan program berikut:

Sistem Pengendalian: Tiga Keping Mudah. Bahagian 1: Pengenalan (terjemahan)

Program dalam fungsi utama mencipta dua utas menggunakan panggilan pthread_create(). Dalam contoh ini, benang boleh dianggap sebagai fungsi yang berjalan dalam ruang memori yang sama bersama fungsi lain, dengan jelas lebih daripada satu fungsi berjalan pada masa yang sama. Dalam contoh ini, setiap utas bermula dan melaksanakan fungsi worker() yang seterusnya hanya menambah pembolehubah,.

Mari jalankan program ini dengan hujah 1000. Seperti yang anda mungkin sangka, hasilnya sepatutnya 2000 kerana setiap thread menambah pembolehubah 1000 kali. Walau bagaimanapun, semuanya tidak begitu mudah. Mari cuba jalankan program dengan susunan magnitud lebih banyak ulangan.

Sistem Pengendalian: Tiga Keping Mudah. Bahagian 1: Pengenalan (terjemahan)

Dengan memasukkan nombor, sebagai contoh, 100000, kami menjangkakan untuk melihat output sebagai nombor 200000. Walau bagaimanapun, jika kita menjalankan nombor 100000 beberapa kali, kita bukan sahaja tidak akan melihat jawapan yang betul, tetapi juga mendapat jawapan yang tidak betul yang berbeza. Jawapannya terletak pada fakta bahawa untuk menambah nombor, tiga operasi diperlukan - mengekstrak nombor dari ingatan, menambah, dan kemudian menulis nombor itu kembali. Memandangkan semua arahan ini tidak dilaksanakan secara atom (semua pada masa yang sama), perkara aneh seperti ini boleh berlaku. Masalah ini dipanggil dalam pengaturcaraan keadaan bangsa. Apabila daya yang tidak diketahui pada saat yang tidak diketahui boleh menjejaskan prestasi mana-mana operasi anda.

Sumber: www.habr.com

Tambah komen