Çekirdek bir süreç midir?


30
  1. Linux'ta daima ilk sürecin deriz init(pid == 1). Ancak neden sistemi oluşturan ve initsüreci oluşturan çekirdek (başlangıç) değil . Çekirdek bir süreç midir?
  2. Tüm kullanıcı alanı iş parçacıklarının init işleminde kullanıldığını biliyoruz. Peki ya zamanlayıcı ve hafıza yönetimi gibi diğer çekirdekler?

Temel olarak, beni şaşırtan şey çekirdeğin yapısı. Eğer bir süreçse, tek bir süreç mi yoksa çoklu süreçlerden mi oluşuyor?

Yanıtlar:


19

Kısa cevaplar:

  1. Hayır, bu bir süreç değil
  2. Kullanıcı konuları init'te köklenmemiş.

Init sadece ilk işlemdir; herhangi bir işlemi veya ipliği yönetmez. Bu çekirdek syscalls fork () ve exec kullanarak bazı oluşturur.

Sanırım bir sürecin ne olduğu hakkında çamurlu bir fikriniz var. bu sadece kod yürütme biraz anlamına gelmez. Evet, çekirdek başlangıçtan önce yürütülür (ve bundan önceki önyükleyici bile). Ancak, bir 'işlemin' belirli bir tanımı vardır:

  • Kullanıcı alanında çalışır
  • Bir işlem kimliği ile çalışır
  • Pek çok etkileşimin çekirdekten geçmesi gerekir
  • Tüm kaynakların çekirdekten gelmesi gerekir
  • Çekirdek tarafından zamanlanması gerekenler

Böylece, çekirdek bir kez başlatıldığında, init çalışır ve bu, yapılandırmasının söylediği diğer işlemleri başlatır.

# 2 devam ettiği sürece, bütün çekirdekler çekirdek içindedir. Çekirdeği geniş bir kod alanı olarak düşünün. Yine, bir işlem değil, büyük bir kod blob. Çekirdeğin bölümleri bellek yönetimi, bunun bölümlerini kendi zamanlama bölümleriyle (sürücüler vb.) Ve bölümlerini zamanlama süreçleriyle ilgilenir.


3
OP'nin aklını mikro tanecikler tarafından uçurmak için yeterli olup olmadığını merak ediyorum. Düzenlememe dahil etmedim, çünkü herhangi bir oranda dikkat dağıtıcı olacağını düşündüm.
new123456,

4
Çekirdeği düşünmenin bir yolu, sizin adınıza bir şeyler yapmasını istemek için giriş noktalarıyla (sistem çağırır) devasa bir kütüphane gibidir. Diğer bir tamamlayıcı görünüm, olayların işlenmesini beklemek yerine oturması, kullanıcının bir sistem araması veya bir donanım kesintisi olması (örn. Yeni ağ paketi geldi). Bazı şeylerin üstesinden gelmek zaman alır, bu yüzden çekirdek işi sadece iç dişlere gönderir ve kimseye döner.
vonbrand

15

Çekirdek hiç bir süreç gibi davranmıyor. Programlanmıyor, bir işlem adına (işlem bağlamı veya kullanıcı bağlamı olarak adlandırılır) çalışır veya bir kesme veya istisna sonucu ("kesme-bağlam" olarak adlandırılır) çalışır.

Bununla birlikte, Linux çekirdeği bazı görevleri yerine getirmek için ya da kesme bağlamında çok uzun bir süre boyunca bir şey çalıştırmaktan kaçınmak için çekirdek parçacıklarını ortaya çıkarır (ksoftirqd iş parçacığının yaptığı şey budur; .

psKomutun çıktısında çekirdek ipuçlarını görebilirsiniz . Kolayca tanımlanırlar: adları parantez arasındadır. Bazıları CPU başına bir örnek çalıştırır, CPU bir eğik çizgiden sonra bir sayı ile tanımlanır, bu nedenle [ksoftirqd / 0] CPU 0'daki ksoftirqd örneğidir.


1

Çekirdeğin çeşitli bölümlerinin aslında birincil sentinel ile işlemlerin olduğu mikro-çekirdekte kavramlar vardır, çoğunlukla sadece IPC'yi yönetir.

Linux - daha iyisi veya kötüsü için - mikro çekirdek sistemi değildir.


1

Hayır, öyle değil ... Çekirdek (ve çekirdek uzantıları) doğrudan belleğe yüklenir. Çekirdekte güvenli olmayan kod varsa, bununla büyük bela arasında hiçbir şey durmaz.

Bu bir yana, çekirdek temelde işlemler arasında yürütür / geçer. Açıkçası, aslında süreçleri çalıştıran bir şey bir sürecin kendisi olmayacak.

(tl; dr 1. no 2. çekirdeğin bir kısmı / uzantısı)


0

ninjalj yazdı: "Çekirdek hiç bir süreç gibi davranmıyor. Planlanmamış."

Eh, boşuna bir işlem (temelde pid 0, hiçbir yerde gösterilmese de) programlanmış ve her zaman çalıştırılabilir durumda.


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.