Nhìn vào nguồn của strace
tôi thấy việc sử dụng cờ nhân bản CLONE_IDLETASK
được mô tả ở đó là:
#define CLONE_IDLETASK 0x00001000 /* kernel-only flag */
Sau khi nhìn sâu hơn vào nó, tôi thấy rằng, mặc dù cờ đó không được bao phủ bởi man clone
nó thực sự được sử dụng bởi kernel trong quá trình khởi động để tạo các tiến trình nhàn rỗi (tất cả đều phải có PID 0) cho mỗi CPU trên máy. tức là một máy có 8 CPU sẽ có ít nhất 7 (xem câu hỏi bên dưới) các quá trình "chạy" như vậy (ghi chú trích dẫn).
Bây giờ, điều này dẫn tôi đến một vài câu hỏi về quá trình "nhàn rỗi" đó thực sự làm gì. Giả định của tôi là nó thực hiện hoạt động NOP liên tục cho đến khi khung thời gian của nó kết thúc và kernel gán một quy trình thực sự để chạy hoặc gán quy trình nhàn rỗi một lần nữa (nếu CPU không được sử dụng). Tuy nhiên, đó là một phỏng đoán hoàn chỉnh. Vì thế:
Trên một máy có 8 CPU sẽ tạo ra 7 tiến trình nhàn rỗi như vậy? (và một CPU sẽ được giữ bởi chính kernel trong khi không hoạt động trong không gian người dùng?)
Là quá trình nhàn rỗi thực sự chỉ là một dòng vô hạn của các hoạt động NOP? (hoặc một vòng lặp làm như vậy).
Việc sử dụng CPU (giả sử
uptime
) có được tính đơn giản bằng quá trình nhàn rỗi trên CPU và thời gian không có trong một khoảng thời gian nhất định không?
PS Có khả năng rất nhiều câu hỏi này là do thực tế là tôi không hiểu đầy đủ về cách thức hoạt động của CPU. tức là tôi hiểu lắp ráp, khung thời gian và ngắt nhưng tôi không biết làm thế nào, ví dụ, CPU có thể sử dụng nhiều hay ít năng lượng tùy thuộc vào những gì nó đang thực thi. Tôi sẽ biết ơn nếu ai đó cũng có thể khai sáng cho tôi về điều đó.