p0 อยู่ในสถานะกำลังทำงานเมื่อมีเธรดอย่างน้อยหนึ่งเธรดอยู่ในสถานะกำลังทำงานอยู่
ไม่ใช่ทุกครั้ง สถานะกระบวนการและสถานะเธรดอาจแตกต่างกัน ดังนั้นจึงไม่จำเป็นเมื่อเธรดกำลังทำงานอยู่ p0
ยังคงทำงานอยู่ ซึ่งอาจอยู่ในสถานะบล็อกหรือพร้อมใช้งาน สถานการณ์ที่เป็นไปได้บางประการระหว่างเธรดและกระบวนการ:
กระบวนการอยู่ในสถานะพร้อม หนึ่งในเธรดของกระบวนการอยู่ในสถานะกำลังทำงาน
กระบวนการถูกบล็อกในสถานะถูกบล็อก หนึ่งในเธรดของกระบวนการอยู่ในสถานะกำลังทำงาน
เช่น. เมื่อแอปพลิเคชันแบบเธรดเริ่มต้นเป็นกระบวนการที่มีเธรดเดี่ยว ในขณะนั้นกระบวนการอยู่ในสถานะกำลังทำงาน จากนั้นแอปพลิเคชันจะใช้ไลบรารีเธรดระดับผู้ใช้เพื่อสร้างเธรดเพิ่มเติม ตอนนี้เมื่อเธรด A เริ่มทำงาน มันจะเข้าสู่สถานะกำลังทำงาน สมมติว่าเธรด A ทำการเรียกระบบ I/O ในสถานการณ์นี้ การควบคุมจะถูกถ่ายโอนไปยังเคอร์เนลซึ่งจะบล็อกกระบวนการ ในกรณีนี้ เธรด A ยังคงทำงานอยู่ แม้ว่ากระบวนการจะอยู่ในสถานะถูกบล็อกก็ตาม นี่เป็นหนึ่งในตัวอย่างเมื่อกระบวนการถูกบล็อกแต่เธรดกำลังทำงานอยู่
แน่นอนว่าใน TCB จะต้องมีฟิลด์สำหรับสถานะเธรด
ใช่ มีฟิลด์สำหรับสถานะ (เช่น running , ยุติ , ready , block ฯลฯ ) ใน tcb
มีสถานะการดำเนินการใน PCB หรือไม่และเพราะเหตุใด
ใช่ มีสาขาของรัฐใน PCB ด้วย แต่ไม่ได้คำนวณจากสถานะ tcb เพราะอย่างที่บอกไปแล้วว่าสถานะทั้งสองอาจแตกต่างกันได้ โดยทั่วไปเธรดจะเรียกขั้นตอนที่แตกต่างกันและทำให้ประวัติการดำเนินการแตกต่างกัน
หวังว่าคุณจะพอใจกับคำตอบของฉัน ขอให้โชคดี :-)
---› ตรวจสอบลิงก์นี้เพื่อใช้อ้างอิง
---› ตรวจสอบลิงก์สำหรับเนื้อหาของ TCB และ PCB
person
Punit Vara
schedule
06.12.2015