Apakah kernel sebuah proses?

30
  1. Di Linux, kami selalu mengatakan proses pertama adalah init(pid == 1). Tetapi mengapa bukan kernel (startup) yang mengatur sistem dan membuat initproses. Apakah kernel sebuah proses?
  2. Kami tahu semua utas ruang pengguna di-root pada proses init. Lalu bagaimana dengan scheduler dan hal-hal kernel lainnya, seperti manajemen memori?

Pada dasarnya, yang membingungkan saya adalah struktur kernel. Jika itu suatu proses, apakah itu proses tunggal, atau terdiri dari beberapa proses?

MarianD
sumber

Jawaban:

19

Jawaban pendek:

  1. Tidak, ini bukan proses
  2. Utas pengguna tidak di-root di init.

Init hanyalah proses pertama; itu tidak mengelola proses atau utas. Itu membuat beberapa, menggunakan fork syscalls kernel () dan exec.

Saya pikir Anda memiliki ide kotor tentang apa proses itu. itu tidak hanya berarti sedikit mengeksekusi kode. Ya, kernel dieksekusi sebelum init (dan boot loader bahkan sebelum itu). Tetapi 'proses' memiliki definisi spesifik:

  • Berjalan di ruang pengguna
  • Dijalankan dengan ID proses
  • Banyak interaksi harus melalui kernel
  • Semua sumber daya harus berasal dari kernel
  • Perlu dijadwalkan oleh kernel

Jadi, begitu kernel diinisialisasi, ia menjalankan init, yang kemudian memunculkan proses apa pun yang dikatakan konfigurasi lain.

Sejauh # 2, semua hal-hal kernel, well, di dalam kernel. Pikirkan kernel sebagai area kode yang luas. Sekali lagi, bukan proses, tetapi gumpalan kode besar. Bagian-bagian dari kernel menangani manajemen memori, bagian-bagiannya dengan bagian penjadwalan itu sendiri (seperti driver, dll.), Dan bagian-bagiannya dengan proses penjadwalan.

Homolka yang kaya
sumber
3
Saya ingin tahu apakah OP cukup tahu untuk membuat pikirannya meledak oleh kernel mikro? Saya tidak memasukkannya edit saya karena saya pikir itu akan mengganggu, bagaimanapun.
new123456
4
Salah satu cara berpikir kernel adalah seperti perpustakaan raksasa, dengan titik masuk (sistem panggilan) untuk memintanya melakukan sesuatu atas nama Anda. Pandangan lain, pelengkap, adalah bahwa ia menunggu acara untuk ditangani, baik itu panggilan sistem dari pengguna atau gangguan perangkat keras (misalnya, paket jaringan baru tiba). Beberapa hal membutuhkan waktu untuk ditangani, jadi kernel hanya mengirimkan pekerjaan ke utas internal dan kembali ke siapa pun yang dipanggil.
vonbrand
15

Kernel tidak benar-benar berperilaku seperti proses sama sekali. Itu tidak dijadwalkan, itu berjalan atas nama proses (disebut konteks proses atau konteks pengguna), atau berjalan sebagai hasil dari interupsi atau pengecualian (disebut konteks interrupt).

Yang mengatakan, kernel Linux memunculkan thread kernel untuk melakukan beberapa tugas, atau untuk menghindari menjalankan sesuatu pada konteks interupsi terlalu lama (itulah yang dilakukan thread ksoftirqd, menghindari latensi berlebihan yang dapat menyebabkan mis: menjatuhkan audio, ...) .

Anda dapat melihat utas kernel pada output dari psperintah. Mereka mudah diidentifikasi: nama mereka di antara tanda kurung. Beberapa dari mereka menjalankan satu instance per CPU, CPU diidentifikasi dengan angka setelah slash, jadi [ksoftirqd / 0] adalah instance dari ksoftirqd pada CPU 0.

ninjalj
sumber
1

Ada konsep dalam kernel mikro di mana berbagai bagian dari kernel memang proses dengan sentinel primer kebanyakan hanya mengelola IPC.

Linux - baik atau buruk - bukan sistem kernel mikro.

Jé Queue
sumber
1

Tidak, ini bukan ... Kernel (dan ekstensi kernel) langsung dimuat ke dalam memori. Jika ada kode yang tidak aman di kernel, tidak ada yang menghalangi dan masalah besar.

Selain itu, kernel pada dasarnya mengeksekusi / beralih antar proses. Jelas sesuatu yang benar-benar menjalankan proses tidak akan menjadi proses itu sendiri.

(tl; dr 1. no 2. bagian dari kernel / ekstensinya)

Aurel Bílý
sumber
0

ninjalj menulis: "Kernel sama sekali tidak berperilaku seperti sebuah proses. Itu tidak dijadwalkan,"

Nah, ada proses idle (pada dasarnya pid 0, meskipun tidak ditampilkan di mana saja) yang dijadwalkan dan selalu dalam kondisi runnable.

pengguna55078
sumber