Saat mempelajari lebih lanjut tentang bagaimana sistem operasi dan perangkat keras yang dijalankan bekerja dan berinteraksi satu sama lain, Anda mungkin terkejut melihat apa yang tampak sebagai keanehan atau penggunaan "sumber daya" yang kurang baik. Mengapa demikian? Postingan Tanya Jawab SuperUser hari ini memiliki jawaban untuk pertanyaan pembaca yang penasaran.
Sesi Tanya & Jawab hari ini hadir atas kebaikan SuperUser — subdivisi Stack Exchange, pengelompokan situs web Tanya Jawab berbasis komunitas.
Foto milik Lemsipmatt (Flickr) .
Pertanyaan
Pembaca SuperUser AdHominem ingin tahu mengapa CPU x86 hanya menggunakan dua dari empat deringan:
Sistem x86 berbasis Linux dan Windows hanya digunakan Dering 0 untuk mode kernel dan Dering 3 untuk mode pengguna. Mengapa prosesor bahkan membedakan empat cincin berbeda jika semuanya akhirnya hanya menggunakan dua cincin saja? Apakah ini berubah dengan arsitektur AMD64?
Mengapa CPU x86 hanya menggunakan dua dari empat deringan?
Jawabannya
Kontributor SuperUser Jamie Hanrahan memiliki jawabannya untuk kami:
Ada dua alasan utama.
Yang pertama adalah, meskipun CPU x86 memang menawarkan empat cincin perlindungan memori, granularitas perlindungan yang ditawarkan hanya pada tingkat per segmen. Artinya, setiap segmen dapat disetel ke cincin tertentu (tingkat hak istimewa) bersama dengan perlindungan lain seperti nonaktif-tulis. Tetapi tidak banyak deskriptor segmen yang tersedia. Sebagian besar sistem operasi ingin memiliki perincian perlindungan memori yang jauh lebih baik, seperti… untuk halaman individual.
Jadi, masukkan proteksi berbasis tabel halaman. Sebagian besar, jika tidak semua, sistem operasi x86 modern kurang lebih mengabaikan mekanisme segmentasi (sebisa mungkin) dan mengandalkan perlindungan yang tersedia dari bit orde rendah dalam entri tabel halaman. Salah satunya disebut bit "istimewa". Bit ini mengontrol apakah prosesor harus berada di salah satu tingkat "istimewa" untuk mengakses halaman. Tingkat "hak istimewa" adalah PL 0, 1, dan 2 . Tapi itu hanya satu bit, jadi pada tingkat perlindungan halaman demi halaman, jumlah "mode" yang tersedia sejauh menyangkut perlindungan memori hanyalah dua: Sebuah halaman dapat diakses dari mode non-hak istimewa, atau tidak. Karenanya, hanya dua deringan. Untuk memiliki empat cincin yang mungkin untuk setiap halaman, mereka harus memiliki dua bit perlindungan di setiap entri tabel halaman untuk menyandikan salah satu dari empat kemungkinan nomor dering (seperti halnya deskriptor segmen). Namun, mereka tidak melakukannya.
Alasan lainnya adalah keinginan untuk portabilitas sistem operasi. Ini bukan hanya tentang x86; Unix mengajari kami bahwa sistem operasi bisa relatif portabel untuk beberapa arsitektur prosesor, dan itu adalah hal yang baik. Dan beberapa prosesor hanya mendukung dua dering. Dengan tidak bergantung pada beberapa cincin dalam arsitektur, pelaksana sistem operasi membuat sistem operasi lebih portabel.
Ada alasan ketiga yang khusus untuk pengembangan Windows NT. Desainer NT (David Cutler dan timnya, yang dipekerjakan Microsoft dari DEC Western Region Labs) memiliki pengalaman ekstensif sebelumnya tentang VMS; Faktanya, Cutler dan beberapa lainnya termasuk di antara desainer asli VMS. Dan prosesor VAX yang dirancang untuk VMS memiliki empat cincin (VMS menggunakan empat cincin).
Tetapi komponen yang berjalan di VMS Cincin 1 dan 2 (Record Management Services dan CLI, masing-masing) ditinggalkan dari desain NT. Dering 2 di VMS tidak benar-benar tentang keamanan sistem operasi, melainkan tentang menjaga lingkungan CLI pengguna dari satu program ke program berikutnya, dan Windows tidak memiliki konsep itu; CLI berjalan sebagai proses biasa. Adapun VMS Dering 1 , kode RMS masuk Dering 1 harus menelepon Dering 0 cukup sering, dan transisi cincin mahal. Ternyata jauh lebih efisien untuk sekedar pergi ke Dering 0 dan selesai dengan itu daripada memiliki banyak Dering 0 transisi dalam Dering 1 kode (sekali lagi, bukan berarti NT memiliki sesuatu seperti RMS).
Adapun mengapa x86 menerapkan empat cincin sementara sistem operasi tidak menggunakannya, Anda berbicara tentang sistem operasi dengan desain yang jauh lebih baru daripada x86. Banyak fitur pemrograman sistem x86 dirancang jauh sebelum NT atau kernel Unix-ish yang sebenarnya diimplementasikan padanya, dan mereka tidak benar-benar tahu sistem operasi apa yang akan digunakan. Baru setelah kami mendapatkan paging di x86, kami baru dapat mengimplementasikan kernel Unix-ish atau mirip VMS yang sebenarnya.
Sistem operasi x86 modern tidak hanya mengabaikan segmentasi (mereka hanya mengatur segmen C, D, dan S dengan alamat dasar 0 dan ukuran 4 GB; segmen F dan G terkadang digunakan untuk menunjuk ke struktur data sistem operasi utama ), mereka juga mengabaikan hal-hal seperti "segmen status tugas". Mekanisme TSS jelas dirancang untuk pengalihan konteks utas, tetapi ternyata memiliki terlalu banyak efek samping, jadi sistem operasi x86 modern melakukannya "dengan tangan". Satu-satunya saat x86 NT mengubah tugas perangkat keras adalah untuk beberapa kondisi yang benar-benar luar biasa, seperti pengecualian kesalahan ganda.
Mengenai arsitektur x64, banyak fitur yang tidak digunakan ini ditinggalkan. Untuk pujian mereka, AMD benar-benar berbicara dengan tim kernel sistem operasi dan menanyakan apa yang mereka butuhkan dari x86, apa yang tidak mereka butuhkan atau tidak inginkan, dan apa yang ingin mereka tambahkan. Segmen pada x64 hanya ada dalam apa yang disebut bentuk vestigial, pengalihan status tugas tidak ada, dll., Dan sistem operasi terus menggunakan hanya dua deringan.
Punya sesuatu untuk ditambahkan ke penjelasannya? Suarakan di komentar. Ingin membaca lebih banyak jawaban dari pengguna Stack Exchange yang paham teknologi? Lihat utas diskusi lengkap di sini .