Anasayfa » nasıl » X86 İşlemciler Neden Dört Halka dan Sadece İkiini Kullanıyor?

    X86 İşlemciler Neden Dört Halka dan Sadece İkiini Kullanıyor?

    İşletim sistemlerinin ve çalıştıkları donanımların nasıl çalıştıkları ve birbirleriyle etkileşime girdikleri hakkında daha fazla şey öğrenirken, neyin tuhaf göründüğünü veya “kaynakların” az kullanıldığını görünce şaşırmış olabilirsiniz. Neden? Bugünün Süper Kullanıcı Soru-Cevap yazısı meraklı bir okuyucunun sorusuna cevap verdi.

    Bugünün Soru ve Cevap oturumu bize topluluk tarafından yönlendirilen bir soru-cevap web sitesi grubu olan Stack Exchange'in bir alt birimi olan SuperUser'ın izniyle geliyor..

    Fotoğraf Lemsipmatt (Flickr) izniyle.

    Soru

    SuperUser okuyucu AdHominem, x86 işlemcilerin neden dört halkadan sadece ikisini kullandığını bilmek istiyor:

    Linux ve Windows tabanlı x86 sistemleri yalnızca 0 halkası çekirdek modu ve 3. halka kullanıcı modu için. İşlemciler neden yalnızca ikisini kullanmaya başlarlarsa dört farklı zil sesini neden ayırt ediyorlar? AMD64 mimarisiyle bu değişti?

    X86 işlemcileri neden dört halkadan sadece ikisini kullanıyor??

    Cevap

    SuperUser yazarı Jamie Hanrahan'ın bize cevabı var:

    İki temel sebep var..

    Birincisi, x86 işlemcileri dört bellek koruması halkası sunsa da, sunulan korumanın ayrıntı düzeyi yalnızca bölüm başına düzeyindedir. Diğer bir deyişle, her bölüm yazma engelli gibi diğer korumalarla birlikte belirli bir zil (ayrıcalık düzeyi) olarak ayarlanabilir. Ancak bu kadar çok segment tanımlayıcısı mevcut değildir. Çoğu işletim sistemi, münferit sayfalar için… gibi daha ince bir bellek koruma derecesine sahip olmak ister.

    Öyleyse, tablo tabanlı koruma sayfasına girin. Hepsi olmasa da çoğu, modern x86 işletim sistemleri, çok az ya da çok, parçalama mekanizmasını (ne kadar olursa olsun) görmezden gelir ve sayfa tablosu girişlerinde düşük sıralı bitlerin sağladığı korumaya güvenir. Bunlardan biri “imtiyazlı” bit olarak adlandırılır. Bu bit, işlemcinin sayfaya erişmek için “ayrıcalıklı” seviyelerden birinde olması gerekip gerekmediğini kontrol eder. “Ayrıcalıklı” seviyeler PL 0, 1 ve 2. Ancak bu sadece bir bit, sayfa sayfa koruma düzeyinde, bellek koruması ile ilgili olarak mevcut olan "mod" sayısı sadece ikidir: Bir sayfaya, ayrıcalıklı olmayan moddan erişilebilir veya erişilemez. Dolayısıyla, sadece iki yüzük. Her sayfa için dört olası zil olması için, dört olası zil sayısından birini kodlamak için her sayfa tablosu girişinde iki koruma bitine sahip olmaları gerekir (tıpkı segment tanımlayıcıları gibi). Ancak, onlar yok.

    Diğer bir neden ise işletim sisteminin taşınabilirliği için bir istek. Sadece x86 ile ilgili değil; Unix bize bir işletim sisteminin birden fazla işlemci mimarisine nispeten taşınabilir olabileceğini ve bunun iyi bir şey olduğunu öğretti. Bazı işlemciler yalnızca iki zili destekler. Mimarideki çoklu halkalara bağlı olmadığından, 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ı (David Cutler ve Microsoft'un DEC Western Region Labs'ten kiraladığı ekibi) VMS konusunda daha önceki deneyimlere sahipti; Aslında, Cutler ve diğerleri, VMS'nin orijinal tasarımcıları arasındaydı. Ve VMS'nin tasarlandığı VAX işlemcide dört halka bulunur (VMS dört halka kullanır).

    Ancak VMS’lerde çalışan bileşenler 1. ve 2. Yüzükler (Sırasıyla Record Management Services ve CLI) NT tasarımının dışında bırakıldı. 2. halka VMS'de 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 bu konsepte sahip değildi; CLI sıradan bir işlem olarak çalışır. VMS gelince 1. halka, içindeki RMS kodu 1. halka aramak zorunda kaldı 0 halkası oldukça sık ve halka geçişleri pahalıdır. Sadece gitmek için çok daha verimli olduğu ortaya çıktı 0 halkası ve çok yapmak yerine 0 halkası içindeki geçişler 1. halka kod (yine, NT'nin RMS gibi bir şeye sahip olduğu değil).

    X86'nın neden işletim sistemleri kullanmıyorken dört halka kullandığı konusunda, x86'dan çok daha yeni tasarım işletim sistemlerinden bahsediyorsunuz. X86'nın sistem programlama özelliklerinin birçoğu NT veya gerçek Unix-ish çekirdekleri üzerine uygulamadan çok önce tasarlandı ve işletim sisteminin ne kullanacağını gerçekten bilmiyorlardı. Gerçek Unix-ish veya VMS benzeri çekirdekleri uygulayabildiğimiz x86'da çağrı yapana kadar değildi..

    Modern x86 işletim sistemleri sadece segmentlemeyi göz ardı etmiyor, aynı zamanda temel adresi 0 ve 4 GB boyutunda C, D ve S segmentlerini de kuruyorlar; F ve G segmentleri bazen temel işletim sistemi veri yapılarına işaret etmek için kullanılıyor Ayrıca, “görev durumu segmentleri” gibi şeyleri de büyük ölçüde görmezden geliyorlar. TSS mekanizması, iplik bağlamında anahtarlama için açıkça tasarlandı, ancak çok fazla yan etkisi olduğu ortaya çıktı, bu yüzden modern x86 işletim sistemleri “elle” yapıyor. X86 NT'nin donanım görevlerini değiştirdiği tek zaman, bir çift hata istisnası gibi gerçekten istisnai durumlar içindir..

    X64 mimarisi ile ilgili olarak, bu kullanılmayan özelliklerin çoğu dışarıda bırakıldı. Kredileri için, AMD aslında işletim sistemi çekirdek ekipleriyle konuştu ve x86'dan neye ihtiyaçları olduğunu, neye ihtiyaç duymadıklarını veya neleri istemediklerini ve neleri eklemek istediklerini sordu. X64'teki segmentler yalnızca biçimsel biçim olarak adlandırılabilir, görev durumu değiştirme mevcut değil vb. Şeklinde mevcuttur ve işletim sistemleri sadece iki halka kullanmaya devam eder..


    Açıklamaya eklemek için bir şey var mı? Yorumlarda ses kesiliyor. Diğer teknoloji meraklısı Stack Exchange kullanıcılarından daha fazla cevap okumak ister misiniz? Burada tüm tartışma konusuna göz atın.