Anda menyebutkan bagaimana jika kode tersebut khusus untuk CPU, mengapa harus spesifik juga untuk OS. Ini sebenarnya lebih merupakan pertanyaan menarik yang diasumsikan oleh banyak jawaban di sini.
Model Keamanan CPU
Program pertama berjalan di sebagian besar arsitektur CPU berjalan di dalam apa yang disebut cincin dalam atau cincin 0 . Bagaimana lengkung CPU spesifik menerapkan dering berbeda-beda, tetapi hampir setiap CPU modern memiliki setidaknya 2 mode operasi, yang istimewa dan menjalankan kode 'bare metal' yang dapat melakukan operasi legal apa pun yang dapat dilakukan CPU dan yang lainnya adalah tidak dipercaya dan menjalankan kode terproteksi yang hanya dapat melakukan serangkaian kemampuan aman yang ditentukan. Namun beberapa CPU memiliki granularitas yang jauh lebih tinggi dan untuk menggunakan VM aman setidaknya 1 atau 2 cincin tambahan diperlukan (sering diberi label dengan angka negatif) namun ini berada di luar cakupan jawaban ini.
Di mana OS masuk
OS penugasan tunggal awal
Dalam DOS yang sangat awal dan sistem berbasis tugas tunggal lainnya awal semua kode dijalankan di cincin bagian dalam, setiap program yang pernah Anda jalankan memiliki kekuatan penuh atas seluruh komputer dan dapat melakukan apa saja jika terjadi kesalahan termasuk menghapus semua data Anda atau bahkan melakukan kerusakan perangkat keras dalam beberapa kasus ekstrem seperti mengatur mode tampilan yang tidak valid pada layar tampilan yang sangat lama, lebih buruk, ini bisa disebabkan oleh kode kereta yang sederhana tanpa ada niat jahat apa pun.
Kode ini sebenarnya sebagian besar OS agnostik, selama Anda memiliki loader yang mampu memuat program ke dalam memori (cukup sederhana untuk format biner awal) dan kode tersebut tidak bergantung pada driver apa pun, menerapkan semua akses perangkat keras itu sendiri yang harus dijalankan di bawah OS apa pun asalkan dijalankan di ring 0. Catatan, OS yang sangat sederhana seperti ini biasanya disebut monitor jika hanya digunakan untuk menjalankan program lain dan tidak menawarkan fungsionalitas tambahan.
OS multi-tasking modern
Sistem operasi yang lebih modern termasuk UNIX , versi Windows dimulai dengan NT dan berbagai OS lain yang sekarang tidak jelas memutuskan untuk memperbaiki situasi ini, pengguna menginginkan fitur tambahan seperti multitasking sehingga mereka dapat menjalankan lebih dari satu aplikasi sekaligus dan perlindungan, sehingga bug ( atau kode jahat) dalam suatu aplikasi tidak lagi dapat menyebabkan kerusakan tak terbatas pada mesin dan data.
Ini dilakukan dengan menggunakan cincin yang disebutkan di atas, OS akan mengambil satu-satunya tempat berjalan di cincin 0 dan aplikasi akan berjalan di cincin luar yang tidak dipercaya, hanya dapat melakukan serangkaian operasi terbatas yang diizinkan oleh OS.
Namun peningkatan utilitas dan perlindungan ini berbayar, program sekarang harus bekerja dengan OS untuk melakukan tugas-tugas yang tidak boleh mereka lakukan sendiri, mereka tidak bisa lagi mengambil kendali langsung atas hard disk dengan mengakses memori dan mengubah sewenang-wenang. data, sebaliknya mereka harus meminta OS untuk melakukan tugas-tugas ini untuk mereka sehingga dapat memeriksa bahwa mereka diizinkan untuk melakukan operasi, tidak mengubah file yang bukan milik mereka, itu juga akan memeriksa bahwa operasi itu memang sah dan tidak akan meninggalkan perangkat keras dalam keadaan tidak terdefinisi.
Setiap OS memutuskan implementasi yang berbeda untuk perlindungan ini, sebagian berdasarkan arsitektur tempat OS dirancang dan sebagian didasarkan pada desain dan prinsip-prinsip OS yang dimaksud, UNIX misalnya menempatkan fokus pada mesin yang baik untuk penggunaan multi-pengguna dan fokus fitur yang tersedia untuk ini sementara windows dirancang agar lebih sederhana, untuk berjalan pada perangkat keras yang lebih lambat dengan satu pengguna. Cara program ruang-pengguna juga berbicara dengan OS sangat berbeda pada X86 seperti pada ARM atau MIPS misalnya, memaksa OS multi-platform untuk membuat keputusan berdasarkan kebutuhan untuk bekerja pada perangkat keras yang ditargetkan untuknya.
Interaksi spesifik OS ini biasanya disebut "pemanggilan sistem" dan mencakup bagaimana program ruang pengguna berinteraksi dengan perangkat keras melalui OS sepenuhnya, mereka pada dasarnya berbeda berdasarkan fungsi OS dan dengan demikian sebuah program yang melakukan tugasnya melalui pemanggilan sistem perlu menjadi spesifik OS.
Program Loader
Selain panggilan sistem, setiap OS menyediakan metode berbeda untuk memuat program dari media penyimpanan sekunder dan ke dalam memori , agar dapat dimuat oleh OS tertentu, program harus berisi header khusus yang menjelaskan kepada OS bagaimana mungkin dimuat dan dijalankan.
Header ini dulunya cukup sederhana sehingga menulis loader untuk format yang berbeda hampir sepele, namun dengan format modern seperti elf yang mendukung fitur-fitur canggih seperti penghubung dinamis dan deklarasi lemah, sekarang hampir mustahil bagi OS untuk mencoba memuat binari. yang tidak dirancang untuk itu, ini berarti, bahkan jika tidak ada ketidakcocokan system call, sangat sulit untuk bahkan menempatkan program dalam ram dengan cara yang dapat dijalankan.
Perpustakaan
Namun, program jarang menggunakan pemanggilan sistem secara langsung, mereka hampir secara eksklusif mendapatkan fungsionalitasnya meskipun pustaka yang membungkus pemanggilan sistem dalam format yang sedikit lebih ramah untuk bahasa pemrograman, misalnya, C memiliki Perpustakaan Standar C dan glibc di Linux dan sejenisnya dan win32 lib di bawah Windows NT dan di atas, sebagian besar bahasa pemrograman lain juga memiliki pustaka yang serupa yang membungkus fungsionalitas sistem dengan cara yang tepat.
Pustaka-pustaka ini sampai taraf tertentu bahkan dapat mengatasi masalah lintas platform seperti dijelaskan di atas, ada sejumlah pustaka yang dirancang untuk menyediakan platform yang seragam untuk aplikasi sambil secara internal mengelola panggilan ke berbagai OS seperti SDL , ini berarti bahwa meskipun program tidak bisa kompatibel dengan biner, program yang menggunakan pustaka ini dapat memiliki sumber yang sama antar platform, membuat porting sesederhana kompilasi ulang.
Pengecualian atas
Terlepas dari semua yang saya katakan di sini, ada upaya untuk mengatasi keterbatasan karena tidak dapat menjalankan program di lebih dari satu sistem operasi. Beberapa contoh yang baik adalah proyek Wine yang telah berhasil ditiru baik win32 program loader, format biner dan pustaka sistem yang memungkinkan program Windows untuk berjalan di berbagai UNIX. Ada juga lapisan kompatibilitas yang memungkinkan beberapa sistem operasi BSD UNIX untuk menjalankan perangkat lunak Linux dan tentu saja Apple sendiri memungkinkan seseorang untuk menjalankan perangkat lunak MacOS lama di bawah MacOS X.
Namun proyek-proyek ini bekerja melalui tingkat besar upaya pengembangan manual. Bergantung pada seberapa berbedanya kedua OS tersebut, tingkat kesulitannya berkisar dari shim yang cukup kecil hingga hampir menyelesaikan emulasi OS lain yang seringkali lebih kompleks daripada menulis seluruh sistem operasi itu sendiri sehingga ini merupakan pengecualian dan bukan aturannya.