PCB trên Linux ở đâu


10

Một khối điều khiển PCB hoặc quy trình , được định nghĩa như thế này trên Wikipedia

Khối điều khiển quy trình (PCB, còn được gọi là Khối điều khiển tác vụ, [1] Cấu trúc tác vụ hoặc Switchframe) là cấu trúc dữ liệu trong nhân hệ điều hành có chứa thông tin cần thiết để quản lý một quy trình cụ thể. PCB là "biểu hiện của một quá trình trong một hệ điều hành

và nhiệm vụ của nó là:

Process identification data
Processor state data
Process control data

Vì vậy, PCB của một quá trình có thể được tìm thấy ở đâu?


Đồng thời xem Khối điều khiển quy trình trong Linux trên Stack Overflow.

Câu trả lời:


15

Trong nhân Linux, mỗi quy trình được thể hiện bằng một task_structdanh sách liên kết đôi, phần đầu của nó là init_task(pid 0, không phải pid 1). Điều này thường được gọi là bảng quy trình .

Trong chế độ người dùng, bảng quy trình hiển thị cho người dùng bình thường bên dưới /proc. Lấy tiêu đề cho câu hỏi của bạn:

  • Dữ liệu nhận dạng quy trình là ID tiến trình (nằm trong đường dẫn /proc/<process-id>/...), dòng lệnh ( cmd) và có thể các thuộc tính khác tùy thuộc vào định nghĩa của bạn về 'nhận dạng'.

  • Xử lý dữ liệu nhà nước bao gồm dữ liệu lập kế hoạch ( sched, statschedstat), những gì quá trình này hiện đang chờ đợi vào ( wchan), môi trường của nó ( environ) vv

  • Dữ liệu điều khiển quá trình có thể được coi là thông tin đăng nhập ( uid_map) và giới hạn tài nguyên ( limits).

Vì vậy, tất cả phụ thuộc vào cách bạn xác định các điều khoản của mình ... nhưng nói chung, tất cả dữ liệu về một quy trình có thể được tìm thấy /proc.


"Đầu của nó là init_task(pid 0, không phải pid 1)" Không có cái gì như init_task. Đó là init, và pid của nó là 1, không phải 0 (được xác nhận qua pidof init).
AlexanderrH

1
@AleksandrH init_task là một cấu trúc kernel và không phải là một quá trình. Nó chỉ ra tác vụ nhàn rỗi được thể hiện bên trong bởi pid 0. init_task và init là những thứ hoàn toàn khác nhau.
Flup

Và vẫn pidchỉ dành cho các quy trình ...
AleksandrH

1
@AleksandrH Đọc init / init_task.c trong cây nguồn kernel ( github.com/torvalds/linux/blob/master/init/init_task.c ).
Flup
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.