Hm, oldukça ilginç bir soru. Yardım etmeye çalışacağım ...
Belirlemekten kim sorumludur?
işlemin Çekirdek modunda olduğu
veya Kullanıcı modu?
İşletim sistemi tasarımcıları karar verdi :-). Tüm modern işletim sistemi tüm işlemleri Kullanıcı modunda (x86 mimarisinde "Korumalı modda" çalma 3 ")) çalıştırır, çünkü bu, bellek koruması ve sanal bellek gibi özellikleri kullanmak için gereklidir. Daha eski ve / veya daha basit işletim sistemi tüm işlemleri Çekirdek modunda çalıştırabilir (örneğin, x86'da "Gerçek mod"); bu işletim sistemi tasarımına bağlıdır. Örneğin MS-DOS böyle çalıştı.
Gerçek işlemci isimlerinin ve türlerinin farklı mimariler arasında farklılık gösterdiğine dikkat edin (x86, Sparc, PowerPC ...); bununla birlikte, tüm modern işlemciler "kullanıcı" kipleri diyebilecek benzer "korumalı" kiplere sahiptir.
Çekirdeğin hangi işlemin hangi alana ait olduğunu bildiğini biliyorum, ancak CPU bunu nasıl belirler?
İşlemci "bilmez" çünkü işlemden hiçbir şey bilmiyor; bunlar işletim sistemi tarafından sağlanan soyutlamalar. CPU sadece kendisine beslenen kodu çalıştırır. CPU'nun farklı modlar arasında geçiş yapma talimatı vardır ve işletim sistemi CPU'yu gerektiği gibi doğru moda sokmak için bu talimatları kullanır.
Örneğin x86'da, bilgisayar "Gerçek modda" başlayacaktır (uyumluluk nedeniyle). Linux veya Windows (NT ve yukarı) gibi bir işletim sistemi önyükleme yaptığında, yaptığı ilk şeylerden biri "Korumalı moda" geçmek. Ardından her programın donanıma erişimini kontrol etmek için "halkalar" özelliğini kullanır. İşletim sistemi çekirdeği, 0 halkasında çalışır (tam ayrıcalıklar); kullanıcı yazılımı 3. halkada çalışıyor (sınırlı). İşletim sistemi kontrolü kullanıcı yazılımına geçirdiğinde (yani, bir kullanıcı işlemini başlattığında veya sürdürdüğü zaman), ilk önce 3. zile geçecektir. Daha sonra kontrol tekrar çekirdeğe döner, CPU tekrar 0'a geri döner.
Modlar / ziller arasında geçiş tam olarak nasıl çalıştığını CPU mimarisine bağlıdır. Çoğu mimaride anahtarlama için özel talimatlar veya mekanizmalar bulunur. CPU belirli bir moda / zile geçtiğinde, o modu (ve ilgili tüm kısıtlamaları) tek başına izleyecektir.
Bunun x86 mimarisinde nasıl çalıştığı hakkında ayrıntılar için, şu makaleye bakın: http://duartes.org/gustavo/blog/post/cpu-rings-privilege-and-protection
Bir kenara: Sınırlı CPU modlarındaki korumalar / kısıtlamalar çoğunlukla Hafıza yönetim ünitesi CPU’nun Daha eski ve / veya daha basit işlemciler (Amiga ve Atari ST tarafından kullanılan Motorola 68000 veya C64'ten 6510 gibi) bir MMU'ya sahip değildir; bu nedenle çekirdeği ve kullanıcı modunu ayıran bir işletim sistemi çalıştıramazlar. Bu yüzden örneğin Linux m68k portunun çalışması için en azından bir Motorola 68020 işlemci gerekiyor; önceki 68000 ve 68010’larda MMU yoktur.
CPU'nun farkında olması gerektiğini düşünüyorum
işlem veya yürütme modu
ifadeleri? Eğer evet ise nasıl?
Evet, CPU şu anda hangi modun çalıştığını bildiği anlamında farkındadır (nedenini bilmiyor olsa da).
ve eğer hayır ise, ne zaman
kullanıcı yasak bir şey yapmak ister?
Kullanıcı uygulamasının yalnızca söyleyebileceğini söylediğimizde
makinelerin bir alt kümesine bakın
kaynaklar, bunun anlamını biliyorum
uygulamalar belirli görevleri yapamaz
mesela CPU’da
bu tür şeyler yapmak için uygulamalar ve
daha önemlisi nasıl?
Çok güzel bir soru. CPU'nun kendisi uygulamayı durdurur.
Kod (bir uygulama), sınırlı yetkilere sahip bir modda çalışıyorsa (örneğin x86'daki Korumalı moddaki 3. halka), kodun yapamayacağı bazı şeyler vardır (atanmış alanın dışındaki erişim belleği gibi). İşlemci bunu bilir ve yürütmeden önce olası tüm ihlalleri kontrol eder. Bir ihlal tespit edilirse, CPU sorunlu kodun yürütülmesini durdurur (buna "istisna" veya donanım kesintisi denir) ve özel bir hata işleme koduna (önceden OS tarafından ayarlanmış) atlar.
Bu, kontrolü etkin bir şekilde OS'ye geri gönderir ve bu durum uygun gördüğü şekilde yapabilir: istisna diske takılmış olan belleğe erişiyor olsaydı, diskten bellek al (bu "disk belleği" nasıl çalışır), işlemi sonlandırır. hafızaya yasa dışı yoldan (korkunç "koruma hatası" veya "bölümlendirme hatası") vb.