Từ Kiến trúc hạt nhân Linux của Mauerer,
Chủ đề hạt nhân là các quá trình được bắt đầu trực tiếp bởi chính kernel. Họ ủy thác một hàm kernel cho một tiến trình riêng biệt và thực thi nó ở đó trong '' song song '' cho các tiến trình khác trong hệ thống (và trên thực tế, song song với việc thực thi chính kernel). Chủ đề hạt nhân thường được gọi là daemon (kernel) . Chúng được sử dụng để thực hiện, ví dụ, các tác vụ sau:
- Để định kỳ đồng bộ hóa các trang bộ nhớ đã sửa đổi với thiết bị khối mà các trang bắt nguồn (ví dụ: các tệp được ánh xạ bằng mmap).
- Để ghi các trang bộ nhớ vào vùng trao đổi nếu chúng hiếm khi được sử dụng.
- Để quản lý các hành động hoãn lại.
- Để thực hiện các tạp chí giao dịch cho các hệ thống tập tin.
Về cơ bản, có hai loại luồng nhân:
- Loại 1 - Chuỗi được bắt đầu và đợi cho đến khi kernel yêu cầu thực hiện một hành động cụ thể.
- Loại 2 - Sau khi bắt đầu, luồng chạy theo các khoảng thời gian định kỳ, kiểm tra việc sử dụng một tài nguyên cụ thể và thực hiện hành động khi mức sử dụng vượt quá hoặc giảm dưới giá trị giới hạn đã đặt. Nhân sử dụng loại luồng này cho các nhiệm vụ giám sát liên tục.
Vì sách của Mauer nói rằng các luồng nhân là các tiến trình, tôi nghĩ rằng chúng phải được chạy ở chế độ người dùng, thay vì chế độ lõi. (hoặc tôi có sai không? Một quy trình có thể chạy ở chế độ người dùng hoặc chế độ kernel vào các thời điểm khác nhau hay chỉ một chế độ không?)
Nhưng Hiểu biết về Linux Kernel của Bovet cho biết các luồng kernel chỉ chạy trong chế độ kernel (xem trích dẫn bên dưới). Các khái niệm về "chuỗi nhân" trong hai cuốn sách có cùng một khái niệm không?
Các hệ thống Unix truyền thống ủy thác một số tác vụ quan trọng để chạy các tiến trình không liên tục, bao gồm xóa bộ đệm đĩa, tráo đổi các trang không sử dụng, phục vụ các kết nối mạng, v.v. Thật vậy, nó không hiệu quả để thực hiện các nhiệm vụ này theo kiểu tuyến tính nghiêm ngặt; cả chức năng của chúng và các quá trình người dùng cuối đều nhận được phản hồi tốt hơn nếu chúng được lên lịch trong nền. Do một số quy trình hệ thống chỉ chạy trong Chế độ hạt nhân, nên các hệ điều hành hiện đại ủy thác các chức năng của chúng cho các luồng nhân , không bị vướng với bối cảnh Chế độ người dùng không cần thiết. Trong Linux, các luồng nhân khác với các quy trình thông thường theo các cách sau:
- Các luồng nhân chỉ chạy trong Chế độ hạt nhân, trong khi các quy trình thông thường chạy thay thế ở Chế độ hạt nhân và ở Chế độ người dùng.
- Vì các luồng nhân chỉ chạy trong Chế độ hạt nhân, chúng chỉ sử dụng các địa chỉ tuyến tính lớn hơn PAGE_OFFSET. Mặt khác, các quy trình thông thường sử dụng tất cả bốn gigabyte địa chỉ tuyến tính, ở Chế độ người dùng hoặc Chế độ hạt nhân.
Cuốn sách của Mauer cho biết các luồng nhân được khởi động trực tiếp bởi kernel và dường như cũng nói rằng daemon là từ đồng nghĩa của các luồng kernel. Vì vậy, tôi nghĩ rằng daemon phải được bắt đầu trực tiếp bởi kernel.
Nhưng https://unix.stackexchange.com/a/193918/674 nói rằng
screen
trình nền của nó được bắt đầu bởiscreen
giao diện người dùng (xem trích dẫn bên dưới). Tôi nghĩscreen
giao diện người dùng là một quá trình, thay vì kernel. Các khái niệmdaemon
trong cuốn sách của Mauerer và trong câu trả lời được liên kết có cùng một khái niệm không?Khi bạn lần đầu tiên bắt đầu
screen
, bạn thực sự bắt đầu một giao diện người dùng (ui), theo mặc định sẽ tạo ra một trình nền (trình quản lý phiên).Nói chung, Làm thế nào để bạn hiểu các khái niệm về "chuỗi nhân", "quá trình" và "daemon", mối quan hệ của chúng và sự khác biệt của chúng?