17 điểm bởi GN⁺ 2024-06-08 | 3 bình luận | Chia sẻ qua WhatsApp
  • Khi tìm kiếm về PID 0 trên web, phần lớn thông tin xuất hiện là sai.
  • Khi tìm PID 0 trên Google, Bing, DuckDuckGo và Kagi, rất khó tìm được câu trả lời chính xác.
  • Thông tin sai trên Wikipedia đã lan truyền suốt 16 năm, khiến nhiều trang web trích dẫn lại.

Lịch sử của PID 0

  • PID 0 tham gia vào lập lịch và quản lý điện năng, không liên quan đến phân trang.
  • PID 0 đóng vai trò bộ lập lịch chạy khi lõi CPU không có việc để làm.
  • Ở Unix thời kỳ đầu, PID 0 từng làm các công việc liên quan đến quản lý bộ nhớ, nhưng ở Unix hiện đại thì không còn như vậy.

Vai trò thực sự của PID 0

  • PID 0 khởi động kernel, sau đó đảm nhiệm vai trò quản lý các lõi CPU.
  • Trong kernel Linux, PID 0 được triển khai bằng hàm do_idle.
  • Ở các kernel khác như FreeBSD, nó cũng thực hiện vai trò tương tự.

Sự nhầm lẫn về PID 0

  • Ý nghĩa của PID trong kernel và trong không gian người dùng là khác nhau.
  • Trong kernel, task_struct biểu diễn một thread, và PID mang nghĩa là ID của thread.
  • Trong không gian người dùng, PID biểu diễn một process, và điều này tương đương với ID của nhóm thread.

PID 0 trong hệ thống đa lõi

  • Trong hệ thống đa lõi, mỗi lõi CPU có một thread idle riêng.
  • Các thread idle này đều thuộc nhóm thread 0.
  • Trong không gian người dùng, chúng được nhận diện là PID 0.

Kết luận

  • PID 0 có tồn tại và là thread khởi động kernel.
  • PID 0 thực hiện các tác vụ khởi tạo kernel ban đầu, rồi chuyển thành thread idle.
  • PID 0 không liên quan đến quản lý bộ nhớ.
  • Trong hệ thống đa lõi, mỗi lõi đều có một thread idle và tất cả chúng đều thuộc nhóm thread 0.

Ý kiến của GN⁺

  • Tầm quan trọng của thông tin chính xác: Thông tin sai bị lan truyền trong thời gian dài khiến nhiều người chấp nhận nó như sự thật. Điều này một lần nữa nhắc lại tầm quan trọng của việc cung cấp thông tin chính xác.
  • Độ phức tạp của kernel: Quá trình khởi tạo và cơ chế lập lịch của kernel rất phức tạp, và hiểu được chúng sẽ giúp ích rất nhiều cho kỹ sư phần mềm.
  • Sự nhầm lẫn về PID: Vì ý nghĩa của PID trong kernel và trong không gian người dùng khác nhau, nên việc hiểu rõ điều này là rất quan trọng.
  • Hệ thống đa lõi: Hiểu vai trò của PID 0 trong các hệ thống đa lõi hiện đại sẽ giúp tối ưu hiệu năng hệ thống.
  • Ảnh hưởng của Wikipedia: Điều này cho thấy thông tin trên Wikipedia ảnh hưởng đến rất nhiều trang web như thế nào. Nó nhấn mạnh tầm quan trọng của việc cập nhật thông tin chính xác.

3 bình luận

 
thinkpad 2024-07-17

Nhớ lại vụ việc ngày xưa khi agent đó đã kill -9 0...

 
whizkyu 2024-06-09

Thú vị đấy.

 
GN⁺ 2024-06-08
Ý kiến trên Hacker News
  • Thú vị dưới góc nhìn khảo cổ học: câu nói "pid 0 là một phần của nhân [Linux]" rất hữu ích khi gỡ lỗi kernel. Từ góc nhìn tiến trình không gian người dùng, "pid 0 có nghĩa là chính tôi".
  • Sự tự tin thái quá trên mạng: trên mạng, nhiều người tỏ ra quá tự tin về những gì mình biết. Giọng điệu chắc nịch chỉ nên được các chuyên gia sử dụng.
  • PID 0 trong Windows: trong Windows dựa trên NT, PID 0 là "System Idle Process", tương tự Linux. Trong Windows dựa trên DOS thì không có PID 0, và idle loop nằm trong VMM32.
  • PID 0 trong Unix học thuật: trong phần lớn các hệ Unix học thuật, PID 0 liên quan đến hệ thống con bộ nhớ (paging). Linux không phải hệ duy nhất sở hữu khái niệm PID 0.
  • Sai lầm của kiến thức phổ thông: "kiến thức phổ thông" thường sai. Cách đúng là kiểm tra mã nguồn kernel.
  • Cách dùng thứ ba của PID 0: trong Linux, trường hợp getppid trả về 0 là khi tiến trình cha nằm trong một PID namespace khác.
  • Gợi ý tài liệu bổ sung: nếu quan tâm đến quá trình khởi động kernel ban đầu, rất đáng đọc tài liệu tuyệt vời này. Linux Insides
  • Câu hỏi về lệnh ps -aux: khi nhập lệnh "ps -aux", thông tin của người dùng khác cũng được hiển thị. Mặc định chẳng phải đó nên là thông tin riêng tư sao?
  • Cách dùng thú vị của kill 0: chia sẻ một script dùng kill 0 để chạy lệnh trong một khoảng thời gian giới hạn rồi kết thúc.
  • Việc tái sử dụng PID 0 trong mã v4: thật thú vị khi mã v4 tái sử dụng pid 0. Có ký ức rằng đã phải giải quyết vấn đề này trong kernel vào giữa những năm 80.