Pertama-tama, saya seorang pemula, jadi jika pertanyaan ini terdengar konyol, tunjukkan asumsi yang salah.
Dari apa yang saya mengerti, tugas sistem operasi adalah mengelola perangkat keras dan perangkat lunak yang berjalan pada OS. Juga, dari apa yang saya mengerti, program perakitan memungkinkan seseorang untuk mengontrol perangkat keras hampir secara langsung. Dalam program perakitan, seseorang dapat membaca dan menulis data ke dalam register, dan membaca dan menulis data ke dalam RAM.
Mengingat kebebasan untuk mengacaukan register dan RAM ini, apakah program perakitan tidak akan memengaruhi sistem operasi? Misalkan OS menggunakan register A untuk menyimpan informasi penting, dan misalkan saya menjalankan program rakitan pada OS itu. Jika program berhasil menulis sampah ke register A, OS pasti akan terpengaruh.
Pertanyaan:
Apakah mungkin mengacaukan register A dengan cara yang dijelaskan di atas?
Jika tidak, apa yang menghentikan program perakitan dari memodifikasi register yang digunakan oleh OS?
sumber
Jawaban:
Pada akhirnya, semua program yang kode mesin, terlepas dari apakah bahasa sumber itu assembler atau bahasa tingkat tinggi.
Yang penting adalah bahwa ada mekanisme perangkat keras yang membatasi apa yang dapat dilakukan oleh proses tertentu, termasuk "mengacaukan" register yang dapat mempengaruhi program lain atau sistem operasi itu sendiri.
Ini dimulai dengan perbedaan sederhana antara mode operasi "pengguna" dan "pengawas", dan sejak itu berkembang menjadi arsitektur keamanan dengan beberapa "cincin" hak istimewa.
Berikut adalah contoh yang sangat umum untuk membuatnya sedikit lebih konkret:
Dalam "mode pengguna", suatu proses tidak dapat akses memori yang belum ditugaskan untuk ID prosesnya. Memori yang ditetapkan untuk proses lain dan sistem operasi itu sendiri diblokir. Ini termasuk nilai-nilai register yang digunakan oleh proses-proses lainnya. Ini diberlakukan oleh perangkat keras MMU.
Oleh karena itu, dalam "mode pengguna", suatu proses tidak dapat mengakses register kontrol MMU.
Dan jelas, dalam "mode pengguna", suatu proses tidak dapat mengubah mode menjadi "mode pengawas" kecuali melalui mekanisme yang sangat jelas yang melibatkan pemanggilan fungsi sistem operasi.
Sistem operasi mendapatkan kontrol jika proses mencoba untuk memecahkan setiap aturan ini. Setelah itu terjadi, OS hanya dapat menghentikan proses menyinggung, tidak pernah melaksanakan lagi instruksi nya.
sumber
Banyak sistem operasi multitasking menggunakan struktur data yang disebut Blok Kontrol Proses (PCB) untuk menangani masalah register yang ditimpa. Ketika Anda menjalankan kode Anda, OS menciptakan proses baru untuk melacaknya. PCB berisi informasi tentang proses dan ruang Anda yang dialokasikan untuk menampung konten register. Katakanlah proses A saat ini sedang berjalan pada prosesor dan kode Anda sedang dalam proses B. Apa yang terjadi ketika Anda menjalankan kode Anda berjalan seperti ini:
Data status proses A (isi register, penghitung program, dll.) Disalin ke dalam PCB-nya.
Data status proses B disalin dari PCB ke register CPU
Proses B berjalan pada prosesor sampai selesai atau didahului
Data status proses B disalin kembali ke dalam PCB-nya
Data status proses A disalin kembali ke CPU dan terus berjalan
Jika sistem operasi berjalan sebagai proses A, maka Anda dapat melihat bagaimana menyimpan registernya sebelum program Anda berjalan kemudian menyalinnya kembali ke CPU setelah program Anda berakhir mencegah program pengguna dari mengacaukan apa yang terjadi dalam proses lain.
Untuk menghindari proses pengguna menulis data OS dalam memori, sebagian besar platform menggunakan segmentasi memori. Pada dasarnya, menggunakan memori virtual, ruang alamat yang dilihat proses dapat dipetakan ke berbagai alamat fisik sewenang-wenang. Selama ruang memori fisik proses tidak tumpang tindih, tidak mungkin bagi satu proses untuk menimpa data orang lain.
Tentu saja, berbagai OS melakukan berbagai hal secara berbeda, jadi ini tidak berlaku dalam setiap kasus. Juga, pada sebagian besar platform, proses OS berjalan dalam mode yang berbeda dari proses pengguna dan ada beberapa seluk-beluk di sana.
sumber
Tergantung pada platform apa yang Anda bicarakan.
Pada prosesor yang lebih mendasar, prosesor hanya menjalankan instruksi apa pun yang diminta oleh program untuk dieksekusi.
Pada prosesor yang lebih canggih, ada (setidaknya) dua mode. Dalam satu modus, prosesor melakukan apa saja program mengatakan itu untuk melakukan. Dalam modus lain, prosesor itu sendiri menolak untuk mengeksekusi instruksi tertentu.
Apa berhenti program menabrak seluruh sistem? Dengan jenis pertama prosesor, jawabannya adalah "tidak". Dengan prosesor dasar, satu program nakal memang bisa menghancurkan seluruh sistem. Semua komputer rumah 8-bit awal, dan banyak dari yang 16-bit, termasuk dalam kategori ini.
Pada PC modern, prosesor memiliki "perlindungan" hardware. Pada dasarnya OS berjalan dalam mode khusus yang memungkinkannya melakukan apa saja, sedangkan program normal berjalan dalam mode di mana prosesor hanya akan mengizinkan tindakan tertentu (berdasarkan pada pengaturan apa yang telah dikonfigurasi OS pada prosesor). Hal-hal seperti hanya mengakses register tertentu, atau hanya mengakses rentang memori tertentu.
Jelas, membiarkan satu program jahat menabrak seluruh sistem itu buruk. (Ada juga implikasi keamanan yang parah dalam membiarkan program jahat mengakses data apa pun yang diinginkannya.) Untuk menghindarinya, Anda memerlukan dua hal:
Sebuah prosesor yang sebenarnya memiliki perangkat keras perlindungan (yaitu, dapat dikonfigurasi untuk menolak menjalankan instruksi tertentu).
OS yang benar-benar menggunakan fasilitas ini untuk melindungi diri. (Tidak ada gunanya memiliki chip dengan sirkuit perlindungan jika OS tidak pernah menggunakannya!)
Hampir semua OS desktop modern yang dapat Anda beri nama (Windows, Linux, Mac OS, BSD ...) itu adalah OS mode terlindungi yang berjalan pada prosesor dengan perangkat keras perlindungan. Jika Anda melakukan pengembangan tertanam pada beberapa mikrokontroler 8-bit, itu mungkin tidak memiliki perangkat keras perlindungan. (Atau OS, dalam hal ini ...)
sumber
Q. Apa berhenti program perakitan dari menabrak sistem operasi?
A. Tidak ada.
Namun, banyak programmer yang sangat pintar telah berusaha sangat keras selama bertahun-tahun untuk membuatnya semakin sulit. Sayangnya, untuk setiap programmer yang pandai, ada banyak, banyak lainnya yang di antara mereka lebih kreatif, lebih ambisius, dan kadang-kadang hanya lebih beruntung daripada yang pintar. Setiap kali seorang programmer yang pandai mengatakan bahwa tidak ada yang harus, mau atau bisa melakukan sesuatu, seseorang di luar sana akan menemukan cara untuk melakukannya. Microsoft Windows (sebagai contoh) telah ada selama hampir 35 tahun dan kami masih memiliki BSoD (Blue Screens of Death), yang hanya instruksi yang membuat sistem operasi crash.
Mari kita mulai dengan sedikit terminologi. Segala sesuatu yang berjalan di komputer melakukannya dalam kode mesin. Bit yang membaca penekanan tombol atau gerakan mouse pointer, sedikit yang berubah warna pixel pada layar atau membaca byte dari file dan bit yang menghitung apakah peluru Anda memukul orang jahat atau bit yang menentukan jika aplikasi kartu kredit Anda akan diterima semua dijalankan sebagai urutan instruksi kode mesin. Beberapa pekerjaan sangat umum dan dilakukan sangat sering sehingga masuk akal untuk mengumpulkan instruksi yang diperlukan untuk melakukannya dan meminta semua orang menggunakan perakitan itu. Banyak pekerjaan ini yang memungkinkan atau membantu orang lain untuk menggunakan komputer cenderung disebut sistem operasi tetapi tidak ada yang secara inheren berbeda antara mereka dan program lain. Mereka semua hanya urutan instruksi kode mesin.
Apa yang membuat sistem operasi lebih rumit (dan karena itu rentan terhadap crash) adalah mereka harus memperhitungkan hal-hal yang biasanya tidak perlu Anda pikirkan. Ambil paling sederhana pekerjaan sebagai contoh. Saya ingin menulis pesan di akhir file. Dalam bahasa tingkat tinggi Anda akan menulis sesuatu seperti:
Mari kita abaikan semua perincian tentang bagaimana status fisik diakses dan diubah atau bagaimana mereka ditafsirkan sebagai bit dan byte atau bagaimana byte tersebut ditransfer ke dan dari memori dan CPU, dan percaya bahwa semua itu ditangani oleh program yang disediakan oleh OS. di balik layar. Mari kita pikirkan tentang bagaimana Anda menambahkan ke akhir file. 1) Cari tahu di mana ujung file, 2) tulis sesuatu di posisi itu. Apa yang mungkin salah? Sebenarnya cukup banyak. Pikirkan apa lagi yang terjadi di komputer saat Anda melakukan hal-hal yang cerdas. Jika apa pun yang dilakukan oleh orang lain (termasuk sistem operasi itu sendiri) perubahan file Anda bekerja pada cara apapun, maka pekerjaan benar-benar sederhana ini tiba-tiba mendapat banyak lagi rumit. File lebih panjang, file lebih pendek. File tidak ada lagi. Disk penuh,
sumber