Hạt nhân là một quá trình?


30
  1. Trong Linux, chúng tôi luôn nói quy trình đầu tiên là init(pid == 1). Nhưng tại sao hạt nhân (khởi động) không thiết lập hệ thống và tạo initquy trình. Hạt nhân là một quá trình?
  2. Chúng tôi biết tất cả các luồng không gian người dùng được bắt nguồn từ quá trình init. Vậy thì còn lịch trình và các công cụ kernel khác, như quản lý bộ nhớ thì sao?

Về cơ bản, điều làm tôi bối rối là cấu trúc của kernel. Nếu nó là một quá trình, nó là một quá trình đơn lẻ, hay nó bao gồm nhiều quá trình?

Câu trả lời:


19

Câu trả lời ngắn:

  1. Không, nó không phải là một quá trình
  2. Chủ đề người dùng không được bắt nguồn từ init.

Ban đầu chỉ là quá trình đầu tiên; nó không quản lý bất kỳ quy trình hoặc chủ đề. Nó tạo ra một số, sử dụng kernel syscalls fork () và exec.

Tôi nghĩ rằng bạn có một ý tưởng lầy lội về quá trình là gì. nó không chỉ có nghĩa là một chút thực thi mã. Vâng, kernel thực thi trước init (và bộ tải khởi động trước đó). Nhưng một "quy trình" có một định nghĩa cụ thể về:

  • Chạy trong không gian người dùng
  • Chạy với ID tiến trình
  • Nhiều tương tác cần phải đi qua kernel
  • Tất cả tài nguyên cần đến từ kernel
  • Cần phải được lên lịch bởi kernel

Vì vậy, một khi kernel khởi tạo, nó sẽ chạy init, sau đó sinh ra bất kỳ quá trình nào khác mà cấu hình của nó nói đến.

Theo như # 2, tất cả các công cụ kernel là, trong kernel. Hãy nghĩ về kernel như một vùng mã lớn. Một lần nữa, không phải là một quá trình, mà là một blob mã lớn. Các phần của kernel xử lý việc quản lý bộ nhớ, các phần của nó với các phần lập lịch của chính nó (như trình điều khiển, v.v.) và các phần của nó với các quy trình lập lịch.


3
Tôi tự hỏi liệu OP có biết đủ để tâm trí của anh ấy bị thổi bay bởi những hạt nhân siêu nhỏ không? Tôi đã không đưa nó vào bản chỉnh sửa của mình vì tôi nghĩ nó sẽ gây mất tập trung ở mọi mức độ.
new123456

4
Một cách nghĩ về kernel giống như một thư viện khổng lồ, với các điểm vào (hệ thống gọi) để yêu cầu nó làm điều gì đó thay cho bạn. Một quan điểm khác, bổ sung, là nó chờ đợi các sự kiện được xử lý, có thể là một cuộc gọi hệ thống từ người dùng hoặc gián đoạn phần cứng (ví dụ: gói mạng mới đã đến). Một số công cụ cần có thời gian để xử lý, vì vậy kernel chỉ chuyển công việc đến các luồng nội bộ và trả về cho bất kỳ ai được gọi.
vonbrand

15

Hạt nhân không thực sự hoạt động như một quá trình. Nó không được lên lịch, nó chạy thay mặt cho một quá trình (được gọi là bối cảnh quá trình hoặc bối cảnh người dùng) hoặc chạy do gián đoạn hoặc ngoại lệ (được gọi là bối cảnh gián đoạn).

Điều đó nói rằng, nhân Linux tạo ra các luồng nhân để thực hiện một số tác vụ hoặc để tránh chạy một cái gì đó trên ngữ cảnh bị gián đoạn quá lâu (đó là điều mà luồng ksoftirqd thực hiện, tránh độ trễ quá mức có thể dẫn đến: ví dụ: giảm âm thanh, ...) .

Bạn có thể thấy các luồng nhân trên đầu ra của pslệnh. Chúng dễ dàng được xác định: tên của chúng nằm giữa các dấu ngoặc. Một số trong số chúng chạy một phiên bản cho mỗi CPU, CPU được xác định bằng một số sau dấu gạch chéo, vì vậy [ksoftirqd / 0] là phiên bản của ksoftirqd trên CPU 0.


1

Có các khái niệm trong các hạt vi mô trong đó các phần khác nhau của hạt nhân thực sự là các quá trình với phần tử chính chủ yếu chỉ quản lý IPC.

Linux - tốt hơn hoặc xấu hơn - không phải là một hệ thống nhân vi mô.


1

Không, không phải ... Kernel (và phần mở rộng kernel) được tải trực tiếp vào bộ nhớ. Nếu có mã không an toàn trong kernel, không có gì đứng giữa nó và rắc rối lớn.

Bỏ qua một bên, kernel về cơ bản thực thi / chuyển đổi giữa các tiến trình. Rõ ràng một cái gì đó thực sự chạy các quy trình sẽ không phải là một quá trình.

(tl; dr 1. không 2. một phần của kernel / phần mở rộng của nó)


0

ninjalj đã viết: "Hạt nhân không thực sự hoạt động giống như một quá trình. Nó không được lên lịch,"

Vâng, có quá trình nhàn rỗi (về cơ bản là 0, mặc dù nó không được hiển thị ở bất cứ đâu) được lên lịch và luôn ở trạng thái có thể chạy được.


0

Chuyển đổi bối cảnh

Các quy trình được quản lý bởi một đoạn mã OS được chia sẻ gọi là kernel

▪ The kernel is not a separate process, but rather runs as part of a user process

Công tắc ngữ cảnh chuyển luồng điều khiển từ quy trình này sang quy trình khác và được thực hiện bằng mã hạt nhân

Nguồn: https://cifts.cs.washington.edu/cifts/cse351/19su/lectures/18/CSE351-L18- Processes_19su.pdf , trang 36

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.