GNU/Linux >> Belajar Linux >  >> Linux

Apakah utas kernel Linux benar-benar proses kernel?

Dokumentasinya bisa sangat membingungkan, jadi inilah yang "asli "Model Linux:

  • di dalam kernel Linux, sesuatu yang dapat dijalankan (&dijadwalkan) disebut "proses",
  • setiap proses memiliki Process ID (PID) unik sistem, dan Thread Group ID (TGID),
  • proses "normal" memiliki PID=TGID dan tidak ada proses lain yang berbagi nilai TGID ini,
  • proses "threaded" adalah proses yang nilai TGID-nya dibagi oleh proses lain,
  • beberapa proses yang berbagi TGID yang sama juga berbagi, setidaknya, ruang memori dan penangan sinyal yang sama (terkadang lebih),
  • jika proses "threaded" memiliki PID=TGID, itu bisa disebut "thread utama",
  • memanggil getpid() dari proses apa pun akan mengembalikan TGID-nya (=PID "utas utama"),
  • memanggil gettid() dari proses apa pun akan mengembalikan PID-nya (!),
  • segala jenis proses dapat dibuat dengan clone(2) panggilan sistem,
  • apa yang dibagikan antar proses diputuskan dengan meneruskan tanda khusus ke clone(2) ,
  • nama numerik folder yang dapat Anda cantumkan dengan ls /proc sebagai /proc/NUMBER adalah TGID,
  • nama numerik folder di /proc/TGID/task sebagai /proc/TGID/task/NUMBER adalah PID,
  • meskipun Anda tidak melihat setiap PID yang ada dengan ls /proc , Anda masih dapat melakukan cd /proc/any_PID .

Kesimpulan :dari sudut pandang kernel, hanya proses yang ada, masing-masing memiliki PID uniknya sendiri, dan yang disebut utas hanyalah jenis proses yang berbeda (berbagi, setidaknya, ruang memori yang sama dan penangan sinyal dengan satu atau beberapa lainnya -s).

Catatan: implementasi konsep "utas" di Linux telah menyebabkan kebingungan kosa kata, dan jika getpid() berbohong padamu tidak melakukan apa yang Anda pikirkan, itu karena perilakunya mengikuti kompatibilitas POSIX (utas seharusnya menggunakan PID yang sama).


Sama sekali tidak ada perbedaan antara utas dan proses di Linux. Jika Anda melihat clone(2) Anda akan melihat satu set bendera yang menentukan apa yang dibagikan, dan apa yang tidak dibagikan, di antara utas.

Proses klasik hanyalah utas yang tidak berbagi apa pun; Anda dapat membagikan komponen apa yang Anda inginkan di Linux.

Ini tidak terjadi pada implementasi OS lain, di mana terdapat perbedaan yang jauh lebih substansial.


Utas adalah proses di Linux. Mereka dibuat dengan clone panggilan sistem, yang mengembalikan ID proses yang dapat dikirimi sinyal melalui kill panggilan sistem, seperti proses. Proses utas terlihat di ps keluaran. clone panggilan diteruskan flag yang menentukan berapa banyak lingkungan proses induk yang dibagikan dengan proses utas.


Linux
  1. Proses UNIX / Linux:C fork() Fungsi

  2. Mengelola Proses Di Ubuntu Linux

  3. Apakah utas diimplementasikan sebagai proses di Linux?

  1. 30 Latihan Proses Linux Untuk Sysadmin

  2. Linux – Proses Init:Leluhur Semua Proses?

  3. Linux – Log Utas Sebelumnya Yang Sekarang Ditutup?

  1. Linux – Apakah Kernel Linux/unix yang Berbeda Dapat Dipertukarkan?

  2. UNIX / Linux:3 Cara Mengirim Sinyal ke Proses

  3. Pengantar Utas Linux – Bagian I