PCB บน Linux อยู่ที่ไหน


10

PCB หรือบล็อกการควบคุมกระบวนการถูกกำหนดเช่นนี้ใน Wikipedia

Process Control Block (PCB หรือที่เรียกว่า Task Controlling Block, [1] โครงสร้างงานหรือ Switchframe) เป็นโครงสร้างข้อมูลในเคอร์เนลระบบปฏิบัติการที่มีข้อมูลที่จำเป็นในการจัดการกระบวนการเฉพาะ PCB คือ "การสำแดงของกระบวนการในระบบปฏิบัติการ

และหน้าที่ของมันคือ:

Process identification data
Processor state data
Process control data

ดังนั้น PCB ของกระบวนการสามารถพบได้ที่ไหน?


คำตอบ:


15

ในเคอร์เนล Linux แต่ละโพรเซสจะถูกแทนด้วย a task_structในลิสต์ที่ลิงก์เป็นทวีคูณส่วนหัวinit_task(pid 0 ไม่ใช่ pid 1) นี้เป็นที่รู้จักกันทั่วไปว่าเป็นตารางกระบวนการ

/procในโหมดผู้ใช้ตารางกระบวนการนี้ปรากฏแก่ผู้ใช้ตามปกติภายใต้ รับหัวข้อสำหรับคำถามของคุณ:

  • ข้อมูลการระบุกระบวนการคือ ID กระบวนการ (ซึ่งอยู่ในพา ธ/proc/<process-id>/...) บรรทัดคำสั่ง ( cmd) และคุณลักษณะอื่น ๆ ที่อาจเป็นไปได้ทั้งนี้ขึ้นอยู่กับคำนิยามของ 'การระบุ' ของคุณ

  • ข้อมูลสถานะของกระบวนการรวมถึงข้อมูลการตั้งเวลา ( sched, statและschedstat) สิ่งที่กระบวนการในขณะนี้กำลังรอ ( wchan) สภาพแวดล้อม ( environ) เป็นต้น

  • ข้อมูลการควบคุมกระบวนการอาจกล่าวได้ว่าเป็นข้อมูลรับรอง ( uid_map) และข้อ จำกัด ของทรัพยากร ( limits)

ดังนั้นทุกอย่างขึ้นอยู่กับวิธีที่คุณกำหนดเงื่อนไขของคุณ ... /procแต่โดยทั่วไปข้อมูลทั้งหมดที่เกี่ยวกับกระบวนการที่สามารถพบได้ใน


"หัวซึ่งก็คือinit_task(pid 0 ไม่ใช่ pid 1)" ไม่มีสิ่งเช่นinit_taskนั้น มันinitและ pid ของมันคือ 1 ไม่ใช่ 0 (ยืนยันผ่านpidof init)
AleksandrH

1
@AleksandrH init_task เป็นโครงสร้างเคอร์เนลไม่ใช่กระบวนการ มันชี้ไปที่งานที่ไม่ได้ใช้งานซึ่งแสดงภายในโดย pid 0. init_task และ init นั้นต่างออกไปโดยสิ้นเชิง
Flup

และยังpidเป็นเพียงกระบวนการ ...
AleksandrH

1
@AleksandrH อ่าน init / init_task.c ในแผนผังซอร์สเคอร์เนล ( github.com/torvalds/linux/blob/master/init/init_task.c )
Flup
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.