Beranda » bagaimana » Mengapa CPU x86 Hanya Menggunakan Dua Dari Empat Dering?

    Mengapa CPU x86 Hanya Menggunakan Dua Dari Empat Dering?

    Ketika mempelajari lebih lanjut tentang bagaimana sistem operasi dan perangkat keras yang dijalankannya bekerja dan berinteraksi satu sama lain, Anda mungkin akan terkejut melihat apa yang tampak sebagai keanehan atau kurang dimanfaatkannya "sumber daya" yang terjadi. Mengapa demikian? T&J Super Pengguna hari ini memiliki jawaban untuk pertanyaan pembaca yang penasaran.

    Sesi Tanya Jawab hari ini datang kepada kami berkat SuperUser-subdivisi 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:

    Sistem x86 berbasis Linux dan Windows hanya menggunakan 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 dering?

    Jawabannya

    Kontributor SuperUser Jamie Hanrahan memiliki jawaban untuk kita:

    Ada dua alasan utama.

    Yang pertama adalah bahwa, meskipun CPU x86 memang menawarkan empat cincin perlindungan memori, granularity dari perlindungan yang ditawarkan dengan demikian hanya pada tingkat per segmen. Artinya, setiap segmen dapat diatur ke dering tertentu (tingkat hak istimewa) bersama dengan perlindungan lain seperti dinonaktifkan. Tetapi tidak ada banyak deskriptor segmen yang tersedia. Sebagian besar sistem operasi ingin memiliki perincian perlindungan memori yang jauh lebih halus, seperti ... untuk setiap halaman.

    Jadi, masukkan perlindungan berbasis tabel halaman. Sebagian besar, jika tidak semua, sistem operasi x86 modern kurang lebih mengabaikan mekanisme segmentasi (sebanyak yang mereka bisa) 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 level "istimewa" untuk mengakses halaman. Level "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: Halaman dapat diakses dari mode non-privilege, atau tidak. Karenanya, hanya dua dering. Untuk memiliki empat dering yang mungkin untuk setiap halaman, mereka harus memiliki dua bit perlindungan di setiap entri tabel halaman untuk menyandikan satu dari empat nomor dering yang mungkin (seperti halnya deskriptor segmen). Namun, mereka tidak melakukannya.

    Alasan lainnya adalah keinginan untuk portabilitas sistem operasi. Ini bukan hanya tentang x86; Unix mengajarkan kepada kita 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 disewa oleh Microsoft dari DEC Western Region Labs) memiliki pengalaman luas sebelumnya tentang VMS; pada kenyataannya, Cutler dan beberapa yang lain adalah di antara desainer asli VMS. Dan prosesor VAX yang dirancang VMS memang memiliki empat dering (VMS menggunakan empat dering).

    Namun komponen yang dijalankan di VMS's Dering 1 dan 2 (Layanan Manajemen Catatan dan CLI, masing-masing) ditinggalkan dari desain NT. Dering 2 di VMS sebenarnya bukan 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 di Dering 1 harus memanggil Dering 0 cukup sering, dan transisi dering mahal. Ternyata jauh lebih efisien untuk pergi ke Dering 0 dan selesai dengan itu daripada harus banyak Dering 0 transisi dalam Dering 1 kode (sekali lagi, bukan berarti NT memiliki sesuatu seperti RMS).

    Adapun mengapa x86 menerapkan empat dering sementara sistem operasi tidak menggunakannya, Anda berbicara tentang sistem operasi dengan 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 dalamnya, dan mereka tidak benar-benar tahu apa yang akan digunakan sistem operasi. Tidak sampai kami mendapatkan halaman pada x86 kami dapat mengimplementasikan kernel Unix-ish atau VMS-like.

    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 kadang-kadang digunakan untuk menunjukkan struktur data sistem operasi utama ), mereka juga sebagian besar mengabaikan hal-hal seperti "segmen tugas negara". Mekanisme TSS jelas dirancang untuk switching konteks konteks, 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 ditinggalkan. Untuk kredit mereka, AMD benar-benar berbicara dengan tim kernel sistem operasi dan bertanya 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 form vestigial, pengalihan status tugas tidak ada, dll., Dan sistem operasi terus menggunakan hanya dua cincin.


    Punya sesuatu untuk ditambahkan ke penjelasan? Berbunyi dalam komentar. Ingin membaca lebih banyak jawaban dari pengguna Stack Exchange yang mengerti teknologi lainnya? Lihat utas diskusi lengkap di sini.