Nakarin Jukkrit | CS 309
Lecture 4
Posted by Nakarin Jukkrit on 21 August 2008, 09:25.

Process

หน้าที่ประการหนึ่งของ ระบบปฏิบัติการ ก็คือการจัดสรรทรัพยากรของระบบ ระบบปฏิบัติการจะต้องแบ่งทรัพยากรที่มีอยู่อย่างจำกัดให้กับผู้ที่ต้องการใช้ทรัพยากรเหล่านั้น ผู้ที่นำทรัพยากรไปใช้ก็คือโปรเซส (process) โปรเซสเป็นองค์ประกอบที่สำคัญของการทำงานของระบบคอมพิวเตอร์ โดยเฉพาะอย่างยิ่งในระบบคอมพิวเตอร์ขนาดใหญ่ที่มีผู้ใช้หลายคน (multi-user computer system) และมีการทำงานหลายงานพร้อมกัน หากงานเหล่านั้นเป็นอิสระไม่ขึ้นต่อกันโดยสิ้นเชิง จะไม่เกิดปัญหาใดๆ แต่ในความเป็นจริงงานเหล่านั้นต้องใช้ทรัพยากรร่วมกันไม่มากก็น้อย ดังนั้นการทำงานของงานหนึ่ง อาจมีผลกระทบทางอ้อมกับอีกงานหนึ่ง โดยผ่านทางทรัพยากรที่ใช้ร่วมกัน เพื่อมิให้งานต่างๆ ส่งผลกระทบกันในอันที่จะก่อให้เกิดความเสียหายต่อระบบ จึงเป็นหน้าที่หนึ่งของระบบปฏิบัติการที่จะต้องควบคุมงานหรือสับหลีกการทำงานของแต่ละโปรแกรมที่มาเกี่ยวข้องกัน (interaction) หน้าที่นี้เรียกว่า การเข้าจังหวะกันของโปรเซส หรือ การซิงโครไนซ์กระบวนการ (process synchronization)

องค์ประกอบของโปรเซส
โปรเซสที่สมบูรณ์จะต้องมีส่วนประกอบต่างๆ ดังนี้

1. ชื่อและหมายเลขรหัสประจำตัว (process ID) ของโปรเซส ซึ่งต้องไม่ซ้ำกับโปรเซสอื่น
2. โค้ดของโปรแกรม (program code) เป็นคำสั่งที่สามารถเอ็กซีคิ้วได้ทันที (ภาษาเครื่อง)
3. ข้อมูล (data) ที่โปรแกรมต้องการหรือจัดการ ข้อมูลนี้อาจเป็นของโปรเซสใดโปรเซสหนึ่ง หรืออาจใช้ได้ร่วมกันกับโปรเซสอื่นๆ ก็ได้
4. บล็อคควบคุมโปรเซส (process control block : PCB) ระบบปฏิบัติการกำหนดเนื้อที่บางส่วนในหน่วยความจำเพื่อทำเป็น PCB ซึ่งเป็นโครงสร้างข้อมูลชนิดหนึ่งซึ่งเก็บข้อมูลที่สำคัญของโปรเซสนั้นๆเอาไว้ข้อมูลเหล่านี้ ได้แก่
- สถานะของโปรเซสที่เป็นอยู่ในปัจจุบัน
- หมายเลขรหัสประจำตัวของโปรเซส
- ลำดับความสำคัญของโปรเซส
- พอยน์เตอร์ชี้ไปยังตำแหน่งที่อยู่ของโปรเซสในหน่วยความจำ
- พอยน์เตอร์ชี้ไปยังทรัพยากรต่างๆ ที่โปรเซสครอบครอง
- พื้นที่ที่เก็บค่าของรีจิสเตอร์ (register save area)
5. PCB เป็นศูนย์กลางในการเก็บข้อมูลสำคัญทั้งหลายของโปรเซสที่ระบบปฏิบัติการต้องการ เมื่อระบบปฏิบัติ-การทำการมอบหมายซีพียูให้โปรเซสอื่นได้ใช้บ้าง ระบบปฏิบัติการจะเก็บข้อมูลต่างๆ ของโปรเซสเดิมไว้ใน PCB เพื่อที่ จะนำมาใช้อีกครั้ง เมื่อโปรเซสนี้ได้กลับมาใช้หรือครอบครองซีพียู
6. PSW (program status words) เป็นตัวควบคุมลำดับขั้นการเอ็กซีคิ้วคำสั่งของโปรเซส และยังเก็บข้อมูลเกี่ยวกับสถานะของโปรเซส แอดเดรสของคำสั่งต่อไปที่จะถูกเอ็กซีคิ้วจะถูกเก็บไว้ใน PSW PSW นี้จึงมีหน้าที่คล้ายๆ กับโปรแกรมเคาน์เตอร์บนเครื่องไมโครคอมพิวเตอร์
7. คุณสมบัติของโปรเซส ได้แก่
- ลำดับความสำคัญ (priority) ของโปรเซส โปรเซสแต่ละตัวจะถูกกำหนดความสำคัญขึ้นขณะที่ โปรเซสถูกสร้างขึ้น ความสำคัญนี้อาจเปลี่ยนแปลงได้หรือไม่ได้สุดแล้วแต่ระบบปฏิบัติการ โปรเซสที่มีความสำคัญมาก ระบบปฏิบัติการก็จะให้สิทธิพิเศษมากกว่าโปรเซสที่มีความสำคัญน้อย เช่น เวลาของซีพียูนานกว่า (ให้ครอบครองซีพียูได้นานกว่า)
- อำนาจหน้าที่ (authority) เป็นสิ่งที่บ่องบอกว่าโปรเซสนั้นๆ สามารถทำอะไรได้บ้าง ใช้อุปกรณ์ชิ้นไหนได้บ้างเป็นต้น ตัวอย่างเช่น โปรเซส A ห้ามใช้ดิสก์ใดๆ ทั้งสิ้น แต่สามารถรับข้อมูลจากทุกๆ โปรเซสในระบบได้
- คุณสมบัติอื่นๆ ที่ ระบบปฏิบัติการ จะกำหนดให้มี
8.
1. สถานะพร้อม (ready state) คือสถานะที่โปรเซสพร้อมที่จะใช้ซีพียูทันทีที่ระบบปฏิบัติการมอบหมายให้ ในสถานะนี้ไม่มีการรันของโปรเซส
2. สถานะรัน (running state) คือสถานะที่โปรเซสกำลังครอบครองซีพียูอยู่ มีการรันของโปรเซสจริงๆ เพราะโปรเซสใช้ซีพียูเอ็กซีคิ้วคำสั่ง หรือโค้ดโปรแกรมของโปรเซสนั้น
3. สถานะติดขัด (blocked state) คือสถานะที่โปรเซสหยุดรอเหตุการณ์ใดเหตุการณ์หนึ่งให้เกิดขึ้น โปรเซสไม่จำเป็นต้องใช้ซีพียูและยังไม่พร้อมที่จะครอบครองซีพียู ซึ่งจะทำให้โปรเซสอื่นเข้ามาครอบครองซีพียูในช่วงนี้ได้
4. สถานะพัก (suspend state) คือสถานะที่โปรเซสไม่มีการทำงานใดๆ หยุดนิ่งอย่างสมบูรณ์ ไม่มีการรอการใช้ซีพียูหรือเหตุการณ์ใดๆ ให้เกิดขึ้น
หมายเหตุ รีจีสเตอร์คือแหล่งที่ใช้เก็บข้อมูลชั่วคราวที่มีลักษณะคล้ายกับหน่วยความจำ แต่มันจะถูกแยกออกจากหน่วยความจำ ต่างหาก รีจีสเตอร์จะเป็นแหล่งเก็บข้อมูลแบบพิเศษที่ทำให้ซีพียูสามารถดึงข้อมูลไปใช้งานได้เร็วกว่าหน่วยความจำธรรมดา รีจีสเตอร์จะอยู่ภายในหน่วยประมวลผลกลางและจะถูกจัดการและควบคุมโดยหน่วยควบคุม ซึ่งจะใช้เป็นแหล่งเก็บข้อมูลและคำสั่งภายในโปรแกรมที่จะถูกนำมาประมวลผล

สถานะของโปรเซส
โปรเซสต่างๆ ในระบบจะต้องมีสถานะการทำงานสถานะใดสถานะหนึ่งต่อไปนี้
โปรเซสสามารถเปลี่ยนจากสถานะหนึ่งไปอีกสถานะหนึ่งได้ แต่จะเปลี่ยนไปเป็นสถานะใดนั้นขึ้นอยู่กับสภาพการทำงานของระบบสถานะของโปรเซสและการทำงานของโปรเซสในขณะนั้น

การเปลี่ยนสถานะของโปรเซส
เมื่อผู้ใช้ต้องการส่งงานให้เครื่องคอมพิวเตอร์รัน โดยการสั่งให้โปรแกรมทำงานผ่านทางระบบปฏิบัติการ ระบบปฏิบัติการจะรับทราบความต้องการนี้ และเตรียมที่จะสร้างโปรเซสให้กับงานใหม่ที่ถูกส่งเข้ามานี้ แต่โปรเซสจะถูกสร้างขึ้นมาได้ จะต้องมีโค้ดคำสั่งของโปรแกรม(ซึ่งเก็บไว้ในไฟล์ที่ผู้ใช้สั่งรัน) ข้อมูลที่โปรแกรมต้องการใช้ และที่สำคัญที่สุดคือ ต้องมีเนื้อที่ในหน่วยความจำหลักเพียงพอสำหรับโปรเซสใหม่ที่กำลังจะเข้าไปในระบบ ถึงแม้ว่าเราจะมีโค้ดของโปรแกรมและข้อมูลเตรียมไว้พร้อมแล้ว แต่ถ้าในขณะนั้นมีโปรเซสอื่นๆ อยู่ในระบบและใช้หน่วยความจำจนเหลือเนื้อที่ในหน่วยความจำไม่เพียงพอ โปรเซสใหม่สำหรับโปรแกรมงานนี้ ก็ยังไม่ถูกสร้างขึ้นมา จะต้องรอไปจนกว่ามีโปรเซสอื่นจบลงและมีพื้นที่ในหน่วยความจำเหลือมากเพียงพอสำหรับโปรเซสใหม่ ถึงตอนนี้ระบบปฏิบัติการก็จะสร้างโปรเซสใหม่ขึ้นมารวมอยู่ในระบบ
เมื่อโปรเซสถูกสร้างขึ้นมาใหม่โปรเซสจะอยู่ในสถานะพร้อมก่อน ไม่สามารถเข้าไปใช้งานซีพียูได้ทันที เช่นสมมติว่าระบบคอมพิวเตอร์เป็นแบบระบบที่มีผู้ใช้หลายๆ คนในเวลาเดียวกัน แต่มีซีพียูอยู่เพียงตัวเดียว ดังนั้นในระบบจึงมีโปรเซสหลายๆ โปรเซสทำงานอยู่ซึ่งอาจเป็นโปรเซสของผู้ใช้เองหรือเป็นโปรเซสของระบบปฏิบัติการ โปรเซสเหล่านี้ต่างก็ต้องการใช้ซีพียูที่มีอยู่เพียงตัวเดียว ดังนั้นในขณะที่มีโปรเซสหนึ่งเข้าไปใช้ซีพียูโปรเซสอื่นจะต้องรออยู่ในสถานะพร้อมก่อน ในสถานะพร้อมมีคิวของโปรเซสต่างๆ ที่รอการใช้ซีพียู เมื่อโปรเซสใหม่ถูกสร้างขึ้น โปรเซสใหม่นี้จึงต้องเข้ามาต่อท้ายคิวในสถานะพร้อมเสียก่อน และเมื่อเวลาผ่านไปโปรเซสนี้จะค่อยๆ เคลื่อนไปอยู่ที่ต้นคิว
เมื่อซีพียูว่างลงอันเนื่องจากโปรเซสที่ครอบครองซีพียูปลดปล่อยซีพียู (ด้วยสาเหตุใดก็ตาม) ระบบปฏิบัติการ จะจัดการเอาโปรเซสที่อยู่ต้นคิวในสถานะพร้อมให้เข้ามาใช้ซีพียู โปรเซสนี้ก็จะรันไปได้ ตอนนี้โปรเซสเปลี่ยนจากสถานะพร้อมเป็นสถานะรัน ในขณะที่โปรเซสอยู่ในสถานะรันนี้เป็นช่วงเวลาที่โปรเซสได้ทำงานจริงๆ นั่นคือโค้ดคำสั่งของโปรแกรมถูกเอ็กซีคิ้วโดยซีพียู ซึ่งต่างกับตอนที่โปรเซสอยู่ในสถานะพร้อม ในสถานะพร้อมโปรเซสหยุดนิ่งเพียงแต่รอการใช้ซีพียูเท่านั้น การเปลี่ยนสถานะของโปรเซสขั้นพื้นฐาน

โปรเซสสามารถทำงานไปได้เมื่ออยู่ในสถานะรัน เมื่อการทำงานเสร็จสิ้นลง โปรเซสนั้นก็จะ "จบ" ออกจากระบบไปเป็นการสิ้นสุด (โปรแกรมจบแล้ว) การจบลงของโปรเซสอาจเกิดจากผู้ใช้สั่งหยุดหรือยกเลิกการทำงานของ โปรเซสของเขา โดยที่การทำงานของโปรเซสยังไม่เสร็จก็ได้
เนื่องจากมีโปรเซสอยู่หลายโปรเซสในระบบแต่มีซีพียูเพียงตัวเดียว ซึ่งระบบจะแบ่งการใช้งานซีพียูอย่างไรถึงจะเหมาะสม เมื่อโปรเซสเปลี่ยนจากสถานะพร้อมเข้าไปทำงานอยู่ในสถานะรัน ซีพียูจะว่างก็ต่อเมื่อโปรเซสที่อยู่ในสถานะรันจบออกไปเท่านั้น ในลักษณะนี้ถ้าโปรเซสต่างๆ ใช้เวลาทำงานสั้นๆ ก็ไม่เป็นไร แต่มีบางโปรเซสต้องการเวลาทำงานนานมาก ถ้าโปรเซสเหล่านี้เข้าไปอยู่ในสถานะรันมันจะครอบครองซีพียูเป็นเวลานาน โปรเซสต่างๆ ที่รออยู่ในสถานะพร้อมต้องเสียเวลารอนานเกินไป เพื่อแก้ปัญหานี้ระบบปฏิบัติการจึงกำหนดระยะเวลาของการอยู่ในสถานะรันของโปรเซสทุกโปรเซสเอาไว้ระยะเวลานี้เรียกว่า เวลาควอนตัม (quantum time) ถ้าโปรเซสใดก็ตามเข้ามาครอบครองซีพียูในสถานะรันเกินกว่าเวลาควอนตัม ระบบปฏิบัติการจะตัดโปรเซสจากการใช้ซีพียู แล้วทำการย้ายโปรเซสนั้น กลับไปอยู่ในสถานะพร้อมเพื่อไปต่อคิวใหม่ ลักษณะนี้เรียกว่า time out และนำเอาโปรเซสที่อยู่ต้นคิวในสถานะพร้อมเข้าไปใช้ซีพียูแทนการเปลี่ยนแปลงสถานะของโปรเซส โปรเซสที่ต้องการเวลาทำงานนานๆ ก็จะเปลี่ยนสถานะระหว่างสถานะพร้อมและรันหลายๆ ครั้งวนรอบไปเรื่อยๆ จนกระทั่งโปรเซสนั้นจบลง

ภายในระยะเวลาควอนตัม ถ้าโปรเซสจบลง (อาจเพราะโปรเซสสิ้นสุดการทำงานเอง หรือผู้ใช้ยุติ) โปรเซสก็จะออกจากระบบไป ทรัพยากรต่างๆ ที่โปรเซสครอบครองก็จะถูกส่งคืนให้กลับระบบ แต่ถ้าโปรเซสต้องการใช้อุปกรณ์นำข้อมูลเข้า/ออก (Input/Output) หรือเกิดสัญญาณอินเตอร์รัพต์ขึ้น (ขณะนี้โปรเซสไม่จำเป็นต้องใช้ซีพียู) ระบบปฏิบัติการจะย้ายโปรเซสที่อยู่ในสถานะรันนี้ไปอยู่ในสถานะติดขัด และดึงเอาโปรเซสที่รออยู่ในสถานะพร้อมเข้าไปอยู่ในสถานะรันแทน และจะอยู่ในสถานะติดขัดจนได้รับสัญญาณกระตุ้นหรือปลุก (wake up) ซึ่งแสดงว่าสิ่งที่รอคอยอยู่นั้นเรียบร้อยแล้ว โปรเซสนั้นก็จะเข้าสู่สถานะพร้อม เพื่อรอเข้าใช้ซีพียู แต่ต้องรอให้ซีพียูว่างและระบบปฏิบัติการเห็นควรให้เข้าใช้ซีพียูได้ (dispatch) การเปลี่ยนแปลงสถานะของโปรเซสส่วนใหญ่จะเป็นเช่นนี้

การเปลี่ยนแปลงสถานะทั้ง 3 ของโปรเซสเป็นการเปลี่ยนสถานะในสภาพธรรมดาทั่วไป แต่ถ้าเกิดเหตุการณ์ผิดปกติขึ้น ระบบปฏิบัติการอาจย้ายโปรเซสจากสถานะใดก็ได้ใน 3 สถานะไปอยู่ในสถานะพัก โปรเซสจะถูกย้ายไปในสถานะพักด้วยสาเหตุต่อไปนี้
0. เกิดการทำงานของระบบผิดพลาด กรณีนี้โปรเซสต่างๆ อาจถูกย้ายไปอยู่ในสถานะพักชั่วคราว เมื่อมีการแก้ไขระบบจนสามารถทำงานได้ตามปกติจึงย้ายโปรเซสต่างๆ กลับไป
1. ผู้ใช้ต้องการหยุดการทำงานของโปรเซสชั่วคราว เหตุการณ์นี้ต่างกับกรณีที่ผู้ใช้สั่งยุติโปรเซส ถ้าผู้ใช้โปรเซสหยุดชั่วคราว โปรเซสนั้นจะไม่จบและออกจากระบบไป แต่ระบบปฏิบัติการจะนำโปรเซสนั้นไปไว้ในสถานะพักชั่วคราวก่อนเท่านั้น เมื่อใดที่ผู้ใช้สั่งให้โปรเซสรันต่อไปได้ ระบบปฏิบัติการจึงย้ายโปรเซสนั้นกลับไปทำงานตามปกติ
2. ในระบบมีงานมากเกินไป ระบบปฏิบัติการไม่สามารถตอบสนองการทำงานของโปรเซสทั้งหมดได้ ระบบปฏิบัติการจึงนำเอาโปรเซสบางโปรเซสไปเก็บไว้ในสถานะพักชั่วคราวก่อน รอจนจำนวนโปรเซสในระบบ ลดลงมาอยู่ในระดับปกติ จึงค่อยย้อยโปรเซสเหล่านั้นกลับมาทำงาน

จาก 3 สาเหตุดังกล่าวจะเห็นว่าเราแบ่งแยกสถานะของโปรเซสออกเป็น 4 ส่วนคือ ส่วนของสถานะพร้อม สถานะรัน สถานะติดขัด และของสถานะพัก ทั้งนี้เป็นเพราะในสถานะพัก โปรเซสหยุดการทำงานทุกสิ่งจริงๆ ไม่มีการเคลื่อนไหว ไม่มีความคืบหน้าของการทำงานซึ่งต่างกับในอีกส่วนหนึ่ง ถึงแม้ว่าในสถานะพร้อมโปรเซสไม่ได้ทำงาน แต่โปรเซสก็กำลังเคลื่อนตัวเองไปเรื่อยๆ เพื่อจะไปอยู่ต้นคิว และในสถานะติดขัดโปรเซสกำลังรอผลของงานบางอย่าง ซึ่งงาน เหล่านั้นถือว่าเป็นงานของโปรเซสด้วย ดังนั้นจึงนับได้ว่าทั้งสถานะพร้อมและสถานะติดขัดโปรเซสไม่ได้หยุดนิ่ง
ถ้าโปรเซสถูกย้ายจากสถานะรันหรือสถานะพร้อมไปเป็นสถานะพัก เมื่อเหตุการณ์ผิดปกติสิ้นสุดลง ระบบปฏิบัติการจะนำโปรเซสเหล่านี้กลับไปเข้าคิวในสถานะพร้อม ไม่นำกลับเข้าไปในสถานะรัน เพราะในขณะที่โปรเซสเหล่านี้ไปอยู่ในสถานะพักอาจมีโปรเซสอื่นกำลังใช้ซีพียู จึงไม่สามารถนำเอาโปรเซสที่ออกจากสถานะรันถูกย้ายไปสถานะพักแล้วกลับเข้าไปในสถานะรันเหมือนเดิมได้ ถ้าโปรเซสถูกย้ายจากสถานะติดขัดไปอยู่ในสถานะพัก เมื่อย้ายโปรเซสนั้นออกจากสถานะพักโปรเซสก็จะถูกย้ายกลับมาอยู่ในสถานะติดขัดเหมือนเดิม แต่ก็มีโอกาสที่โปรเซสที่อยู่ในสถานะติดขัด ถูกย้ายไปสถานะพักแล้วกลับมาอยู่ในสถานะพร้อม แทนที่จะเป็นสถานะติดขัด ซึ่งเกิดขึ้นได้ เพราะในขณะที่โปรเซสนั้นอยู่ในสถานะพัก เหตุการณ์ที่โปรเซสนั้นรอ ไม่ได้หยุดการทำงานตามไปด้วย ถ้าเหตุการณ์ที่โปรเซสรอเกิดขึ้นในช่วงเวลานี้ หลังจากที่โปรเซสถูกย้ายออกมาจากสถานะพักโปรเซสนี้จะไปอยู่ในสถานะพร้อม

การจัดการโปรเซส
แนวคิดเรื่องโปรเซสทำให้เกิดความสะดวกในการจัดการการทำงานของระบบที่รันหลายโปรแกรมได้พร้อมกัน ในระบบที่สามารถทำงานได้เพียงครั้งละหนึ่งโปรแกรมการจัดการทำได้ง่าย ระบบปฏิบัติการจะดูแลเฉพาะการเริ่มต้นโปรแกรม การติดต่อกับอุปกรณ์นำข้อมูลเข้า/ออกและการจบโปรแกรม แต่ในระบบที่รันได้หลายโปรแกรม ระบบปฏิบัติการ มีหน้าที่เพิ่มขึ้น คือต้องจัดการการสับหลีกการทำงานของโปรแกรม ต้องดูแลการทำงานของแต่ละโปรแกรมเพื่อให้มีการทำงานที่เข้าจังหวะกัน ต้องดูแลการติดต่อระหว่างโปรแกรม (ถ้ามี) โดยปกติโปรเซสเหล่านั้นเป็นของผู้ใช้ต่างคนกัน เป็นอิสระไม่ขึ้นหรือไม่ทราบถึงโปรเซสอื่นใด โดยนึกว่ามีโปรเซสของตนอยู่เพียงตัวเดียวในระบบ ลักษณะของความเป็นอิสระจากกันของแต่ละโปรเซสเรียกว่า อะซิงโคนัส (asynchronous) ซึ่งหากมีโปรเซสที่ต้องใช้ทรัพยากรร่วมกัน (เช่นในหน่วยความจำหลักบางส่วน) จะมีโอกาสที่โปรเซสจะก้าวก่ายซึ่งกันและกันได้ ทำให้ได้ผลลัพธ์ผิดไปจากที่ต้องการ ซึ่งสิ่งเหล่านี้ทำให้ระบบปฏิบัติการมีความซับซ้อนขึ้นมากขึ้น การออกแบบระบบให้มีการทำงานเป็น แต่ละ โปรเซสจะช่วยให้การจัดการระบบทำได้สะดวกยิ่งขึ้น
ตัวระบบปฏิบัติการเองก็เป็นโปรเซสที่ทำงานอยู่บนระบบคอมพิวเตอร์ตลอดเวลา การจัดการต่างๆ เกี่ยวกับโปรเซสเป็นหน้าที่ของระบบปฏิบัติการ เช่น การเปลี่ยนสถานะของโปรเซส การแก้ไขข้อมูลใน PCB เป็นต้น ระบบปฏิบัติการ ประกอบไปด้วยโปรเซสหลายๆ โปรเซส ซึ่งทำหน้าที่แตกต่างกันออกไป
ลักษณะที่น่าสนใจประการหนึ่งในการจัดการโปรเซส คือ เวลาของแต่ละโปรเซสในขณะที่ไม่มีการทำงานจะหยุดนิ่งเป็นต้นว่าระบบหนึ่งมีช่วงเวลาควอนตัม 1 ms (mili second) โปรเซส A เข้าไปอยู่ในสถานะรัน 2 ครั้ง และเสียเวลารอการใช้ซีพียู 10 ms เวลาของโปรเซสจะมีเพียงแค่ 2 ms เท่านั้นไม่ใช่ 12 ms ช่วงเวลา t1 และ t2 เป็นช่วงเวลาที่โปรเซส A หยุดรอในคิวของสถานะพร้อม ซึ่งช่วงเวลานี้เวลาของโปรเซส A หยุดนิ่ง

ความสัมพันธ์ระหว่างโปรเซส
การทำงานของระบบคอมพิวเตอร์ ประกอบไปด้วยโปรเซสต่างๆ ทั้งโปรเซสของระบบและโปรเซสของผู้ใช้ เมื่อมีโปรเซสมากมายทำงานพร้อมกันอยู่ในระบบจะมีวิธีจัดการทำงานของโปรเซสได้อย่างไรเพื่อให้ประสานงานกันได้ดี โปรเซสแต่ละโปรเซสต่างก็ทำงานไปในส่วนของมันเอง ไม่ไดัรับรู้ความเป็นไปของโปรเซสอื่นๆ ยกเว้นจะมีกลไกพิเศษเพิ่มเติมเข้ามา นอกจากนี้ความเร็วในการทำงานของแต่ละโปรเซสก็อิสระจากกันด้วย

1 การติดต่อระหว่างโปรเซส  
โปรเซสหนึ่งอาจต้องการใช้ข้อมูลของโปรเซสอื่น โปรเซสที่ถูกร้องขอข้อมูลก็จะส่งข้อมูลไปให้ การที่โปรเซสต่างๆ มีการติดต่อเช่นนี้ เราเรียกว่า การติดต่อระหว่างโปรเซส (interprocess communication) โดยทั่วไป การติดต่อระหว่างโปรเซสจะติดต่อผ่านทางข้อมูล โดยนำข้อมูลนั้นไปวางลงในหน่วยความจำส่วนหนึ่งที่ถูกจองไว้ หน่วยความจำส่วนนี้จะมีไว้สำหรับการรับส่งข้อมูลระหว่างโปรเซส เราเรียกวิธีการติดต่อระหว่างโปรเซสแบบนี้ว่า การใช้หน่วยความจำร่วม (shared memory)

กลไกการรับส่งข้อมูลผ่านทางหน่วยความจำร่วมนี้ระบบปฏิบัติการจะไม่ช่วยจัดการให้ โปรเซสที่จะติดต่อกันจะต้องจัดการเอาเอง เช่น โปรเซส A ต้องการติดต่อกับโปรเซส B โปรเซส A และโปรเซส B จะต้องจองเนื้อที่ในหน่วยความจำในส่วนที่ว่างเอาไว้ เพื่อใช้ทำหน่วยความจำร่วมสำหรับรับส่งข้อมูล ทั้ง 2 โปรเซสต้องรู้ว่าหน่วยความจำร่วมนี้อยู่ที่ใด สมมติว่าโปรเซส A ส่งข้อมูลให้โปรเซส B โปรเซส A ส่งข้อมูลไว้ในหน่วยความจำร่วม โปรเซส B จะต้องตรวจสอบได้เองว่า โปรเซส A เอาข้อมูลไปวางไว้แล้วหรือยัง และมีข้อมูลเท่าใด ถ้าโปรเซส A ยังไม่ส่งข้อมูลมาโปรเซส B ต้องยังไม่ดึงเอาข้อมูลไป ในส่วนของโปรเซส A ก็เช่นกัน ถ้าต้องการส่งข้อมูลชุดถัดไปให้โปรเซส B โปรเซส A จะต้องตรวจสอบหน่วยความจำร่วม เพื่อป้องกันมิให้ข้อมูลชุดใหม่ที่จะส่งไปนี้ทับข้อมูลชุดเก่าก่อนที่โปรเซส B จะนำไปใช้เพราะถ้าไม่มีการตรวจสอบและโปรเซส B ก็ไม่เอาข้อมูลไปใช้ ข้อมูลชุดใหม่จากโปรเซส A ก็จะไปทับข้อมูลชุดเก่า ข้อมูลที่ B ได้รับก็จะขาดหายไป สำหรับโปรเซส B นอกจากจะตรวจสอบว่าข้อมูลถูกส่งมาที่หน่วยความจำหรือยัง โปรเซส B ยังต้องตรวจสอบด้วยถ้ามีข้อมูลถูกส่งมาแล้ว มันเอาข้อมูลชุดนี้ไปใช้แล้วหรือยัง ถ้าเป็นข้อมูลที่ยังไม่ถูกนำไปใช้ โปรเซส B ก็นำไปใช้ได้ แต่ถ้าเป็นข้อมูลชุดเก่า (มันนำไปใช้แล้วครั้งหนึ่ง) มันจะต้องรอข้อมูลชุดใหม่จากโปรเซส A กลไกการตรวจสอบและมีการรอการทำงานในลักษณะการรับส่งข้อมูลเช่นนี้ เป็นตัวอย่างหนึ่งของการทำให้โปรเซสทำงานเข้าจังหวะกัน (process synchronization)
นอกจากการใช้หน่วยความจำร่วมในการติดต่อระหว่างโปรเซสแล้ว ยังมีอีกวิธีหนึ่งซึ่งมีความสะดวกมากกว่าและการใช้งานก็เป็นมาตรฐานด้วย นั่นคือ การใช้ช่องทางข้อมูล หรือพอร์ท (port) พอร์ทคือพื้นที่ในหน่วยความจำส่วนหนึ่งที่ระบบปฏิบัติการจัดสรรไว้เพื่อให้โปรเซสต่างๆ ใช้ร่วมกันได้ โดยที่จัดทำเป็นโครงสร้างข้อมูลที่แน่นอนและจัดการควบคุมดูแลกลไกการรับส่งให้ด้วย โปรเซสที่ต้องการใช้พอร์ทก็เพียงแต่มารับข้อมูลไปหรือส่งข้อมูลมาที่พอร์ท โดยไม่ต้องตรวจด้วยตนเอง ระบบปฏิบัติการจะเป็นผู้ให้จังหวะการรับส่งให้ เช่นถ้ามีโปรเซสที่จะมารับข้อมูลไปจากพอร์ทที่ว่างเปล่า ระบบปฏิบัติการจะให้โปรเซสนั้นหยุดรอจนกว่าจะมีข้อมูลถูกส่งมาไว้ที่พอร์ท หรือถ้ามีโปรเซสต้องการส่ง ข้อมูลเข้ามาที่พอร์ทซึ่งมีข้อมูลอยู่เต็มแล้ว ระบบปฏิบัติการจะให้โปรเซสนั้นหยุดรอจนกระทั่งพอร์ทมีที่ว่างรับข้อมูล ชุดใหม่ได้ ดังนั้นพอร์ทจึงเป็นพื้นที่ในหน่วยความจำที่ใช้ร่วมกันโดยหลายโปรเซสเพื่อรับส่งข้อมูลให้กัน แต่ระบบปฏิบัติการ ควบคุมดูแลจังหวะการรับส่งข้อมูลให้แทนที่จะปล่อยให้โปรเซสจัดการเอง การจัดทำโครงสร้างของพอร์ทมีได้หลายแบบ แต่จะกล่าวถึงโครงสร้างที่พบเห็นทั่วไปคือ พอร์ทแบบคิว (queue) พอร์ทแบบไปป์ (pipe) และพอร์ทแบบสแต็ค (stack)

1. พอร์ทแบบคิว โครงสร้างของพอร์ทแบบนี้ข้อมูลที่จะถูกดึงออกจากพอร์ท จะเป็นไปตามลำดับก่อน-หลังของข้อมูลที่ถูกส่งเข้ามาในพอร์ท คือข้อมูลชุดใดที่ถูกส่งเข้าพอร์ทก่อน จะถูกดึงออกไปก่อน ข้อมูลที่ถูกส่งเข้าพอร์ททีหลัง ก็จะถูกดึงออกไปทีหลัง
2. พอร์ทแบบไปป์ โครงสร้างของพอร์ทแบบนี้มีการทำงานเหมือนกับพอร์ทแบบคิว คือข้อมูลที่ถูกส่งเข้าพอร์ทก่อนจะถูกดึงออกไปใช้ก่อน ข้อมูลที่ถูกส่งเข้าไปทีหลังจะถูกดึงออกไปใช้ทีหลังแต่พอร์ทแบบไปป์ต่างกับพอร์ทแบบคิวคือ พอร์ทแบบคิวจะมีความยาวของพอร์ทคงที่ ถ้าใส่ข้อมูลเข้าพอร์ทมากๆ พอร์ทจะเต็ม แต่ไปป์มีความยาวของพอร์ทไม่จำกัดสามารถใส่ข้อมูลเข้าพอร์ทได้มากเท่าที่ต้องการ พอร์ทจะขยายตัวออกไปตามขนาดของข้อมูลที่ถูกเก็บไว้ในพอร์ท
3 . พอร์ทแบบสแต็ค โครงสร้างแบบสแต็คจะตรงกับข้ามกับโครงสร้างของแบบคิว กล่าวคือข้อมูลชุดใดที่ถูกส่งเข้ามาก่อนจะถูกดึงออกทีหลัง ข้อมูลที่จะถูกดึงออกจากพอร์ทคือข้อมูลชุดหลังสุดที่ถูกส่งเข้ามาในพอร์ท
2 การเข้าจังหวะกันของโปรเซส
โปรเซสต่างๆ ในระบบ ส่วนใหญ่แล้วจะไม่มีความเกี่ยวข้องกัน ต่างคนต่างทำงาน แต่โปรเซสที่มีความสัมพันธ์กันนอกจากจะมีการติดต่อระหว่างโปรเซสแล้ว โปรเซสอาจต้องทำงานให้เข้าจังหวะกันด้วย เช่นการรับส่งข้อมูลที่กล่าวไว้ในหัวข้อที่แล้ว โปรเซส A และ B ต้องมีการรอบรับ-ส่งข้อมูลกัน ในรูปที่ 2.7 ก็เป็นอีกตัวอย่างหนึ่งของการทำงานให้เข้าจังหวะกัน เหตุการณ์ P จะเกิดขึ้นได้ก็ต่อเมื่อเหตุการณ์ N และ O เสร็จสิ้นลงเท่านั้น และ เหตุการณ์ N จะเกิดขึ้นได้ก็ต่อเมื่อเหตุการณ์ M เสร็จสิ้นแล้วเท่านั้น แต่การเกิดเหตุการณ์ O ไม่เกี่ยวข้องกับการเกิด เหตุการณ์ M และ N

comments (0) - post comment

ซ Last Page | (Page 4 of 6) | Next Page ป
About Me


Links
เจ้าหญิง

Categories

Recent Entries
Lecture 1
Lecture 2
Lecture 3
Lecture 4
Lecture 5
Lecture 6

Friends




Power By : BlogKa.com - Free Blog Hosting