If-Koubou

Mengapa CPU x86 Hanya Menggunakan Dua Dari Empat "Dering"?

Mengapa CPU x86 Hanya Menggunakan Dua Dari Empat "Dering"? (Bagaimana caranya)

Ketika mempelajari lebih lanjut tentang bagaimana sistem operasi dan perangkat keras yang mereka jalankan di tempat kerja dan berinteraksi satu sama lain, Anda mungkin terkejut melihat apa yang tampaknya menjadi keanehan atau kurangnya pemanfaatan "sumber daya" yang terjadi. Mengapa demikian? Posting SuperUser Q & A saat ini memiliki jawaban untuk pertanyaan pembaca yang ingin tahu.

Sesi Tanya & Jawab hari ini hadir untuk memberi kami hak milik SuperUser-sub divisi Stack Exchange, pengelompokan situs web Q & A berbasis komunitas.

Foto milik Lemsipmatt (Flickr).

Pertanyaan

Pembaca SuperUser AdHominem ingin tahu mengapa CPU x86 hanya menggunakan dua dari empat dering:

Linux dan Windows hanya menggunakan sistem x86 Ring 0 untuk mode kernel dan Ring 3 untuk mode pengguna. Mengapa prosesor bahkan membedakan empat cincin berbeda jika semuanya akhirnya hanya menggunakan dua dari mereka? Apakah ini berubah dengan arsitektur AMD64?

Mengapa CPU x86 hanya menggunakan dua dari empat dering?

Jawabannya

Penyumbang SuperUser Jamie Hanrahan memiliki jawabannya untuk kami:

Ada dua alasan utama.

Yang pertama adalah, meskipun CPU x86 memang menawarkan empat cincin perlindungan memori, perincian perlindungan yang ditawarkan dengan demikian hanya pada tingkat per-segmen. Artinya, setiap segmen dapat diatur ke ring tertentu (level privilege) bersama dengan perlindungan lain seperti write-disabled. Tetapi tidak banyak deskriptor segmen yang tersedia. Sebagian besar sistem operasi ingin memiliki perincian perlindungan memori yang lebih halus, seperti ... untuk halaman individual.

Jadi, masukkan perlindungan berbasis tabel halaman. Sebagian besar, jika tidak semua, sistem operasi x86 modern kurang lebih mengabaikan mekanisme segmentasi (sebisa mungkin) dan bergantung pada perlindungan yang tersedia dari bit low-order dalam entri tabel halaman. Salah satunya disebut bit "istimewa". Bit ini mengontrol apakah prosesor harus berada di salah satu level “istimewa” untuk mengakses halaman. Tingkat "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 hanya dua: Sebuah halaman dapat diakses dari mode non-istimewa, atau tidak. Oleh karena itu, hanya dua dering. 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 nomor dering yang mungkin (seperti halnya pendeskripsi segmen). Namun, mereka tidak melakukannya.

Alasan lainnya adalah keinginan untuk mengoperasikan portabilitas sistem. Ini bukan hanya tentang x86; Unix mengajarkan 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 dering dalam arsitektur, pelaksana sistem operasi membuat sistem operasi menjadi lebih portabel.

Ada alasan ketiga yang khusus untuk pengembangan Windows NT. Desainer NT (David Cutler dan timnya, yang disewa Microsoft dari DEC Western Region Labs) memiliki pengalaman sebelumnya yang luas tentang VMS; Bahkan, Cutler dan beberapa yang lain di antara desainer asli VMS. Dan prosesor VAX yang dirancang VMS memiliki empat cincin (VMS menggunakan empat dering).

Tetapi komponen yang berjalan di VMS Rings 1 dan 2 (Layanan Manajemen Catatan dan CLI, masing-masing) yang tersisa dari desain NT. Ring 2 di VMS tidak benar-benar tentang keamanan sistem operasi, melainkan tentang melestarikan lingkungan CLI pengguna dari satu program ke yang berikutnya, dan Windows tidak memiliki konsep itu; CLI berjalan sebagai proses biasa. Seperti untuk VMS Ring 1, kode RMS di Ring 1 harus memanggil Ring 0 cukup sering, dan transisi cincin mahal. Ternyata jauh lebih efisien untuk pergi begitu saja Ring 0 dan dilakukan dengan itu daripada memiliki banyak Ring 0 transisi dalam Ring 1 kode (sekali lagi, bukan berarti NT memiliki sesuatu seperti RMS).

Adapun mengapa x86 menerapkan empat dering saat sistem operasi tidak menggunakannya, Anda berbicara tentang sistem operasi desain yang jauh lebih baru daripada x86. Banyak fitur pemrograman sistem x86 yang dirancang jauh sebelum NT atau kernel Unix-ish yang sebenarnya diimplementasikan di atasnya, dan mereka tidak benar-benar tahu apa yang akan digunakan sistem operasi. Tidak sampai kami mendapat paging di x86 bahwa kami dapat mengimplementasikan kernel-kernel yang benar-benar Unix-ish atau VMS-like.

Tidak hanya sistem operasi x86 modern yang 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 tugas negara". Mekanisme TSS jelas dirancang untuk switching konteks benang, tetapi ternyata memiliki terlalu banyak efek samping, sehingga sistem operasi x86 modern melakukannya "dengan tangan". Satu-satunya waktu 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 kredit 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 mungkin disebut bentuk vestigial, pengalihan status tugas tidak ada, dll, dan sistem operasi terus menggunakan hanya dua dering.

Memiliki sesuatu untuk ditambahkan ke penjelasan? Bicaralah di komentar. Ingin membaca lebih banyak jawaban dari pengguna Stack Exchange yang paham teknologi lainnya? Lihat diskusi lengkap di sini.