การจัดการโพรเซสและเธรด
การจัดการโพรเซสและเธรดคือวิธีการที่ระบบปฏิบัติการสร้าง จัดการคิว และยกเลิกหน่วยการประมวลผล — โพรเซสที่มีพื้นที่แอดเดรสของตนเองและเธรดที่ใช้พื้นที่ร่วมกัน — และสลับหน่วยประมวลผลระหว่างหน่วยเหล่านี้
Definition
การจัดการโพรเซสและเธรดประกอบด้วยกลไกของระบบปฏิบัติการที่แสดงโปรแกรมที่กำลังทำงานเป็นโพรเซสและเธรด, รักษาสถานะการทำงานของพวกมัน, สร้างและยุติพวกมัน, และสลับหน่วยประมวลผลระหว่างพวกมันในขณะที่รักษาและกู้คืนบริบทของพวกมัน
Scope
หัวข้อนี้ครอบคลุมนามธรรมของโพรเซสและวงจรชีวิตของมัน, บล็อกควบคุมโพรเซส, การสร้างและการยุติโพรเซส, เธรดและแบบจำลองมัลติเธรด, การสลับบริบท, และการสื่อสารระหว่างโพรเซส ไม่รวมถึงนโยบายที่ว่างานพร้อมทำงานใดจะรันต่อไป (การจัดตารางเวลา CPU) และการประสานงานของข้อมูลที่ใช้ร่วมกัน (การทำงานพร้อมกัน, ซึ่งกล่าวถึงภายใต้ระบบปฏิบัติการโดยทั่วไป) โดยเน้นที่โครงสร้างที่แสดงและจัดการการประมวลผล
Core questions
- ระบบปฏิบัติการต้องเก็บสถานะอะไรบ้างสำหรับแต่ละโพรเซสและเธรด?
- โพรเซสถูกสร้างขึ้นอย่างไร และเธรดแตกต่างจากโพรเซสอย่างไร?
- เกิดอะไรขึ้นระหว่างการสลับบริบท และมีค่าใช้จ่ายเท่าไร?
- โพรเซสสื่อสารและประสานงานกันอย่างไรในพื้นที่แอดเดรสที่แตกต่างกัน?
Key concepts
- โพรเซสและบล็อกควบคุมโพรเซส
- สถานะและวงจรชีวิตของโพรเซส
- เธรดและมัลติเธรด
- เธรดระดับผู้ใช้เทียบกับเธรดระดับเคอร์เนล
- การสลับบริบท
- fork และ exec
- การสื่อสารระหว่างโพรเซส
- การแยกโพรเซส
Key theories
- นามธรรมของโพรเซส
- ระบบปฏิบัติการแสดงโปรแกรมที่กำลังทำงานแต่ละโปรแกรมเป็นโพรเซสที่มีพื้นที่แอดเดรสของตนเองและบริบทการประมวลผลที่เก็บไว้ในบล็อกควบคุมโพรเซส ซึ่งช่วยให้สามารถแยก, จัดตารางเวลา, และควบคุมการใช้หน่วยประมวลผลร่วมกันได้
Mechanisms
แต่ละโพรเซสจะถูกอธิบายโดยบล็อกควบคุมโพรเซสที่เก็บรีจิสเตอร์, การแมปหน่วยความจำ, ไฟล์ที่เปิดอยู่, และสถานะการจัดตารางเวลา ระบบจะสร้างโพรเซส (เช่น ผ่าน fork และ exec), เปลี่ยนสถานะของพวกมัน (ใหม่, พร้อม, กำลังทำงาน, กำลังรอ, ยุติแล้ว), และสลับระหว่างพวกมันโดยการบันทึกบริบทหนึ่งและกู้คืนอีกบริบทหนึ่ง เธรดจะใช้พื้นที่แอดเดรสของโพรเซสร่วมกัน ทำให้การสลับถูกลงแต่ต้องมีการซิงโครไนซ์; การสื่อสารระหว่างโพรเซสใช้ไปป์, ข้อความ, หรือหน่วยความจำที่ใช้ร่วมกัน
Clinical relevance
การจัดการโพรเซสและเธรดเป็นพื้นฐานของการทำงานแบบมัลติทาสกิ้งในทุกระบบที่ทันสมัย การแยกโพรเซสเป็นรากฐานสำคัญของความปลอดภัยและความเสถียร, เธรดช่วยให้แอปพลิเคชันตอบสนองและทำงานแบบขนานได้, และต้นทุนของการสลับบริบทและการสื่อสารระหว่างโพรเซสมีผลต่อการออกแบบเซิร์ฟเวอร์, รันไทม์, และซอฟต์แวร์ที่ทำงานพร้อมกัน
History
แนวคิดของโพรเซสพัฒนาขึ้นพร้อมกับระบบมัลติโปรแกรมมิ่งและไทม์แชร์ริ่งในทศวรรษ 1960, และ UNIX ได้สร้างแบบจำลอง fork/exec และนามธรรมของโพรเซสที่ใช้กันอย่างแพร่หลายในปัจจุบัน เธรดถูกเพิ่มเข้ามาเพื่อใช้ประโยชน์จากมัลติโปรเซสเซอร์และปรับปรุงการตอบสนอง, โดยมีมาตรฐานเช่น POSIX threads ที่กำหนดรูปแบบเธรดที่ผู้ใช้มองเห็น
Debates
- เธรดระดับผู้ใช้เทียบกับเธรดระดับเคอร์เนล
- เธรดระดับผู้ใช้จัดการได้ง่ายแต่ไม่สามารถจัดตารางเวลาข้ามคอร์ได้อย่างอิสระและจะบล็อกทั้งโพรเซสเมื่อมีการเรียกบล็อกกิ้ง ในขณะที่เธรดระดับเคอร์เนลจะรวมเข้ากับตัวจัดตารางเวลาโดยมีค่าใช้จ่ายสูงกว่า; แบบจำลองไฮบริดพยายามรวมข้อดีเข้าด้วยกัน
Key figures
- Ken Thompson
- Dennis Ritchie
- Per Brinch Hansen
- Abraham Silberschatz
- Andrew S. Tanenbaum
Related topics
Seminal works
- silberschatz2018
- tanenbaum2014os
Frequently asked questions
- ระบบปฏิบัติการเก็บข้อมูลอะไรบ้างสำหรับแต่ละโพรเซส?
- ระบบจะเก็บบล็อกควบคุมโพรเซสที่บันทึกรีจิสเตอร์และตัวนับโปรแกรมที่บันทึกไว้ของโพรเซส, การแมปหน่วยความจำ, สถานะและลำดับความสำคัญของการจัดตารางเวลา, ไฟล์ที่เปิดอยู่, และข้อมูลการบัญชีและข้อมูลระบุตัวตน — ทุกสิ่งที่จำเป็นในการระงับโพรเซสและกลับมาทำงานต่อจากจุดที่หยุดไปได้อย่างแม่นยำ
- ทำไมการสลับระหว่างเธรดจึงถูกกว่าการสลับระหว่างโพรเซส?
- เธรดภายในโพรเซสเดียวกันใช้พื้นที่แอดเดรสและทรัพยากรเดียวกัน ดังนั้นการสลับระหว่างเธรดจึงไม่จำเป็นต้องเปลี่ยนการแมปหน่วยความจำ การสลับระหว่างโพรเซสยังต้องเปลี่ยนพื้นที่แอดเดรสและอาจล้างแคชการแปล ทำให้มีค่าใช้จ่ายสูงกว่า