İşletim sistemlerinin ve çalıştıkları donanımın nasıl çalıştığı ve birbirleriyle nasıl etkileşime girdikleri hakkında daha fazla bilgi edinirken, neyin gariplik veya “kaynakların” yetersiz kullanımı gibi göründüğünü görünce şaşırabilirsiniz. Neden? Bugünün SuperUser Soru-Cevap gönderisinde meraklı bir okuyucunun sorusunun cevabı var.
Bugünün Soru ve Yanıt oturumu, topluluk tarafından yönlendirilen bir Soru-Cevap web sitesi grubu olan Stack Exchange'in bir alt bölümü olan SuperUser'in izniyle geliyor.
Fotoğraf Lemsipmatt'ın (Flickr) izniyle.
Soru
SuperUser okuyucu AdHominem, x86 işlemcilerin neden dört halkadan yalnızca ikisini kullandığını bilmek istiyor:
Linux ve Windows tabanlı x86 sistemleri yalnızca Yüzük 0 çekirdek modu ve Yüzük 3 kullanıcı modu için. İşlemciler neden hepsi sadece ikisini kullanıyorsa, neden dört farklı halkayı ayırt ediyorlar? Bu AMD64 mimarisiyle değişti mi?
X86 işlemciler neden dört halkadan yalnızca ikisini kullanıyor?
Cevap
SuperUser yazarı Jamie Hanrahan bizim için cevabı var:
Bunun iki temel nedeni vardır.
Birincisi, x86 CPU'ların dört bellek koruması halkası sunmasına rağmen, sunulan korumanın ayrıntı düzeyi yalnızca segment başına düzeydedir. Yani, her segment yazma devre dışı gibi diğer korumalarla birlikte belirli bir zil sesine (ayrıcalık düzeyi) ayarlanabilir. Ancak mevcut çok sayıda segment tanımlayıcısı yok. Çoğu işletim sistemi, münferit sayfalar için … gibi daha ince bir ayrıntıya sahip bellek korumasına sahip olmak ister.
Bu nedenle, sayfa tablosu tabanlı koruma girin. Hepsi olmasa da, çoğu modern x86 işletim sistemi, bölümleme mekanizmasını (zaten mümkün olduğunca çok) yok sayar ve sayfa tablosu girişlerindeki düşük dereceli bitlerden sağlanan korumayı kullanır. Bunlardan birine “ayrıcalıklı” bit denir. Bu bit, işlemcinin sayfaya erişmek için “ayrıcalıklı” düzeylerden birinde olup olmayacağını kontrol eder. “Ayrıcalıklı” seviyeler PL 0, 1 ve 2. Ancak bu sadece bir bit, bu nedenle sayfa sayfa koruma düzeyinde, bellek koruması söz konusu olduğunda kullanılabilen “mod” sayısı yalnızca iki tanedir: Bir sayfaya ayrıcalıksız moddan erişilebilir veya erişilebilir değildir. Dolayısıyla, sadece iki yüzük. Her sayfa için dört olası zil sesine sahip olmak için, her sayfa tablosu girişinde, olası dört zil sayısından birini kodlamak için (koruma tanımlayıcılarında olduğu gibi) iki koruma biti olması gerekir. Ancak, bunu yapmazlar.
Diğer neden işletim sistemi taşınabilirliği arzusudur. Sadece x86 ile ilgili değil; Unix bize bir işletim sisteminin birden fazla işlemci mimarisine göre nispeten taşınabilir olabileceğini ve bunun iyi bir şey olduğunu öğretti. Ve bazı işlemciler sadece iki halkayı destekler. Mimarideki birden fazla halkaya bağlı olmamak kaydıyla, işletim sistemi uygulayıcıları işletim sistemlerini daha taşınabilir hale getirdi.
Windows NT geliştirmeye özgü üçüncü bir neden var. NT’nin tasarımcıları (Microsoft'un DEC Western Region Labs'tan uzakta kiraladığı David Cutler ve ekibi) VMS konusunda daha önce geniş deneyime sahipti; aslında, Cutler ve diğer birkaçı VMS’nin özgün tasarımcıları arasındaydı. Ve VMS'nin tasarlandığı VAX işlemcinin dört halkası var (VMS dört halka kullanıyor).
Ancak VMS'lerde çalışan bileşenler 1 ve 2 numaralı halkalar (Sırasıyla Kayıt Yönetim Hizmetleri ve CLI) NT tasarımının dışında bırakılmıştır. Yüzük 2 VMS'de aslında işletim sistemi güvenliği ile ilgili değil, kullanıcının CLI ortamını bir programdan diğerine korumakla ilgiliydi ve Windows'un bu konsepti yoktu; CLI sıradan bir süreç olarak çalışır. VMS'lere gelince Yüzük 1, RMS kodu Yüzük 1 çağırmak zorunda kaldı Yüzük 0 oldukça sık ve halka geçişleri pahalıdır. Sadece gitmek için çok daha verimli olduğu ortaya çıktı Yüzük 0 ve bir sürü şeye sahip olmak yerine Yüzük 0 içindeki geçişler Yüzük 1 kod (yine, NT zaten RMS gibi bir şey yok).
X86, işletim sistemleri bunları kullanmadığı sırada neden dört halka uyguladığında, x86'dan çok daha yeni tasarıma sahip işletim sistemlerinden bahsediyorsunuz. X86'nın birçok program programlama özelliği, NT veya gerçek Unix-ish çekirdekleri uygulanmadan çok önce tasarlandı ve işletim sisteminin ne kullanacağını gerçekten bilmiyorlardı. X86'da disk belleği alana kadar gerçek Unix-ish veya VMS benzeri çekirdekler uygulayamadık.
Modern x86 işletim sistemleri sadece bölümlemeyi göz ardı etmekle kalmaz (sadece C, D ve S segmentlerini temel adres 0 ve 4 GB boyutunda ayarlarlar; F ve G segmentleri bazen temel işletim sistemi veri yapılarına işaret etmek için kullanılır ), “görev durumu bölümleri” gibi şeyleri de büyük ölçüde görmezden gelirler. TSS mekanizması, iplik bağlamı anahtarlaması için açıkça tasarlanmıştır, ancak çok fazla yan etkiye sahip olduğu ortaya çıkmaktadır, bu nedenle modern x86 işletim sistemleri bunu “elle” yapmaktadır. X86 NT'nin donanım görevlerini değiştirdiği tek zaman, çift hata istisnası gibi bazı gerçekten istisnai durumlar içindir.
X64 mimarisi ile ilgili olarak, bu kullanılmayan özelliklerin çoğu dışarıda bırakılmıştır. Kredi için, AMD aslında işletim sistemi çekirdek ekipleriyle konuştu ve x86'dan neye ihtiyaç duyduklarını, neye ihtiyaç duymadıklarını veya istemediklerini ve ne eklemek istediklerini sordu. X64 üzerindeki segmentler yalnızca körelmiş form olarak adlandırılabilir, görev durumu değiştirme yoktur, vb. Vardır ve işletim sistemleri yalnızca iki zil kullanmaya devam eder.
Açıklamaya eklemek istediğiniz bir şey var mı? Yorumlarda ses kapalı. Diğer teknoloji meraklısı Stack Exchange kullanıcılarından daha fazla cevap okumak ister misiniz? Tartışma dizisinin tamamını buradan kontrol edin.