Çekirdek ve Kullanıcı modu ayırt etme


6

Sürecin Çekirdek modunda veya Kullanıcı modunda olduğunu belirlemekten kim sorumludur? Çekirdeğin hangi işlemin hangi alana ait olduğunu bildiğini biliyorum, ancak CPU bunu nasıl belirler? İşlemci kipinden ya da ifadelerin yürütülmesinden haberdar olmalı mıyım? Eğer evet ise nasıl? ve eğer hayır ise, kullanıcı yasak bir şey yapmak istediğinde ne olur? Kullanıcı uygulamasının yalnızca makine kaynaklarının bir alt kümesini görebileceğini söylediğimizde, uygulamaların örneğin CPU'da belirli görevleri yapamayacağı anlamına gelir, ancak uygulamaları bu tür şeyler yapmayı durduran ve daha önemlisi nasıl?

Yanıtlar:


5

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.


Bu çok yardımcı olur. Ama hala belirsiz olan bir şey var. CPU'nun çalıştığı modun farkında olduğunu söylediniz, ama nasıl? Öğretim kelimesinde sadece biraz bit mi var? Bence çekirdek, modun ne olduğunu, çekirdeğin bunu nasıl yapması gerektiğini söylemeli.
Kamran

@Kamran: Bu mod "komut sözcüklerinde bit" değildir. İşlemcinin kendi başına takip ettiği CPU durumunun bir parçasıdır. Cevabımı biraz bilgi ekledim; umarım bu sorunuza cevap verir.
sleske


1

Sorunuzun temel cevabı şudur: "Bir kesinti olduğunda CPU çekirdek moduna geçer.". İşletim sisteminin kendisi belirlenirken, önyükleme işleminde kesinti vektörleri (işleyiciler), bunların hepsi çekirdeğe işaret ediyor. Bir işlem tarafından yapılan her sistem çağrısı (yazılım) kesmesinden başka bir şey değildir; bu, çekirdeğin kendisinden başka hiçbir şey olmayan kesme işleyicisinin (kayıtlarda belirtilen parametrelerle) çağrılması anlamına gelir.

Çekirdek, kontrolü bir kullanıcı işlemine vermeden önce, zamanlayıcıyı bir süre sonra bir kesmeye neden olacak şekilde ayarlar, işlemciyi kullanıcı moduna geçirir ve ardından kullanıcı işlemine denetim verir. Bir süre sonra, zamanlayıcı kesmeyi oluşturur ve kontrol çekirdeğe geri döner.

Tabii ki: zamanlayıcı ile oynamak, kesme vektörleriyle (işleyicileri) oynamak ve cpu modlarıyla oynamak tüm ayrıcalıklı talimatlardır ve çekirdek modu işlemlerine (çekirdeğin kendisi) izin verilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.