วันพฤหัสบดีที่ 6 ธันวาคม พ.ศ. 2550

โปรเซสสื่อประสาน (Cooperating Process)

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

การติดต่อระหว่างโปรเซส ( InterProcess Communication : IPC )

การติดต่อระหว่างโปรเซส ( InterProcess Communication : IPC ) มีดังนี้
1. โครงสร้างพื้นฐาน
IPC สนับสนุนกลไดเพื่อให้โปรเซสสามารถติดต่อซึ่งกันและกันได้อย่างมีประสิทธิภาพ IPC สนับสนุนอบ่างน้อย 2 ประการคือ กาส่งแมสเสจ และรับแมสเสจ ซึ่งการสนับสนุนจะต้องคำนึงถึงสิ่งเหล่านี้คือ
- จะสร้างลิงค์อย่างไร
- ลิงค์ที่สร้างนั้นสัมพันธ์กับโปรเซสมากกว่า 2 โปรเซสหรือไม่
- ระหว่างโปรเซสทั้งสองจะมีกี่ลิงค์
- ความจุของลิงค์เป็นเท่าไร
- ลิงค์นั้นมีบัฟเฟอร์หรือไม่
- ลิงค์เป็นแบบทางเดียวหรือสองทิศทาง โดยที่ลิงค์แบบทางเดียวจะให้มีการรับส่งแมสเสจให้ทางเดียว คือโปรเซสสามารถรับได้ หรือโปรเซสใดรับก็รับอย่างเดียวจะส่งไม่ได้ ส่วนการลิงค์แบบหลายโปรเซสจะต้องมีอย่างน้อย 1 โปรเซสที่ทำหน้าที่รับแมสเสจ

2.วิธีการติดต่อ มี 2 วิธีมีคุณสมบัติที่น่าสนใจดังนี้

Send (B, message) จะเป็นการส่งแมสเสจไปยังโปรเซส B
Reciece (A , message ) จะเป็นการรับแมสเสจจากโปรเสจ A

- การติดต่อทางตรง (direct communication)

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

- การติดต่อทางอ้อม (indirect communication )

การติดต่อแบบนี้โปรเซสทั้งสองที่ต้องการจะติดต่อกันจะติดต่อกันผ่านทางเมลล์บ็อกซ์ (Mailbox) หรืออาจเรียกว่าเป็นการติดต่อทางพอร์ต (port) และเมลล์บ็อกซ์ที่ใช้ในการติดต่อกันนี้จะต้องมีการแชร์เมลล์บ็อกซ์ไว้ก่อนด้วย รูปแบบคำสั่งการรับ - ส่งข้อมูลผ่านเมลล์บ็อกซ์เป็นเช่นนี้
Send(B, message) เป็นการส่งแมสเสจไปยังเมลล์บ็อกซ์ B
Receive(A, message) เป็นการรับแมสเซสจากเมลล์บ็อกซ์ A
ลิงค์แบบนี้จะมีคุณสมบัติดังนี้
w จะมีการสร้างลิงค์ระหว่างโปรเซสที่มีการแชร์เมลล์บ็อกซ์เท่านั้น
w ลิงค์หนึ่ง ๆ อาจจะมีความสำพันธ์มากกว่าสองโปรเซสก็ได้
w ระหว่างโปรเซสแต่ละคู่นั้นอาจมีหลายลิงค์ที่แตกต่างกันได้ แต่ละลิงค์จะมีเพียงเมลล์บ็อกซ์เดียว
w การลิงค์อาจเป็นทิศทางเดียว หรือสองทิศทางก็ได้
ตอนนี้เพื่อความเข้าใจมากยิ่งขึ้น สมมุติว่าทั้งโปรเซส p1, p2 และ p3 มีการแชร์เมลล์บ็อกซ์ A ไว้โปรเซส p1 จะส่งแมสเสจไปยัง A ในขณะที่โปรเซส P2 และ P3 ต้องการรัยแมสเสจจาก A คำถามก็คือว่าโปรเซสใดจะรับแมสเสจที่ส่งจาก A คำถามอาจแก้ได้หลายวิธีดังนี้
w ยอมให้มีการลิงค์ทั้งสองโปรเซส
w ยอมให้มีการรับแมสเสจได้เพียงครั้งละ 1 โปรเซส
w ยอมให้ระบบเลือกว่าโปรเซสใดที่จะเข้ารับแมสเสจ

- รูปแบบของเมลล์บ็อกซ์

- รูปแบบของเมลล์บ็อกซ์ รูปแบบการใช้เมลล์บ็อกซ์มี 3 แบบคือ
เมลล์บ็อกซ์แบบคิว (Queue Mailbox)
เมลล์บ็อกซ์แบบไปป์ (Pipe Mailbox)
เมลล์บ็อกซ์แบบแต็ก (Stack Mailbox)
เมลล์บ็อกซ์แบบคิว โครงสร้างของเมลล์บ็อกซ์แบบนี้เป็นโครงสร้างที่ดึงข้อมูลออกจากเมลล์บ็อกซ์ตามลำดับก่อน - หลังของข้อมูลที่ส่งมา นั่นคือข้อมูลใดที่ส่งเข้ามาในเมลล์บ็อกซ์ก่อนก็จะถูกดึงออกไปก่อน ส่วนข้อมูลใดส่งเข้ามาภายหลังก็จะถูกดึงออกไปภายหลัง อาจเรียกการทำงานแบบนี้ว่า FIFO (First In First Out) ลักษณะโครงสร้างเมลล์บ็อกซ์แบบคิว
เมลล์บ็อกซ์แบบไปป์ โครงสร้างของเมลล์บ็อกซ์แบบนี้เป็นโครงสร้างของโครงสร้างแบบคิว คือการดึงข้อมูลจะเป็นในลักษณะ ที่ข้อมูลส่งเข้ามาก่อนจะถูกดึงออกไปก่อน ข้อมูลใดส่งเข้ามาภายหลังก็จะถูกดึงออกไปใช้งารภายหลัง แต่ข้อแตกต่าง ระหว่างเมลล์บ็อกซ์แบบคิวกับเมลล์บ็อกซ์แบบไปป์คือเมลล์บ็อกซ์แบบคิวจะมีขนาดคงที่ เมลล์บ็อกซ์จะขยายตัวอัตโนมัติ ลักษณะโครงสร้างของเมลล์บ็อกซ์แบบไปป์
เมลล์บ็อกแบบสแต็ก โครงสร้างของเมลล์บ็อกซ์แบบนี้เป็นโครงสร้างตรงข้ามกับเมลล์บ็อกซ์แบบคิวในการดึงข้อมูล นั่นก็คือข้อมูลใดส่งเข้ามาเมลล์บ็อกซ์ก่อนจะถูกดึงออกไปใช้งานภายหลัง โดยจะนำข้อมูลที่ส่งเข้ามาภายหลังออกไปใช้การก่อน อาจเรียกการทำงานแบบนี้ว่า FILO(First In Last Out) ลักษโครงสร้างเมลล์บ็อกซ์ แบบสแตก

3 . การจัดบัฟเฟอร์

ในการสร้างลิงค์ นอกจากจะเป็นการกำหนดเส้นทางข้อมูลแล้ว ลิงค์ยังมีความจที่เป็นตัวเลขแสดงจำนวนแมสเสจที่สามารถเก็บไว้ ชั่วคราวได้ คุณสมบัตินี้อาจจะมองว่าเป็นคิวของแมสเสจที่ผูกติดกับลิงค์ก็ได้ โดยพื้นฐานมีความจุ 3 ลักษณะคือ
w ความจุศูนย์ (Zero capasity) ความจุแบบนี้จะทำให้มีคิวขนาดสูงสุดเป็น 0 ดังนั้นลิงค์จะไม่มีแมสเสจรออยู่เลย ในกรณีผู้ส่งจะต้อง รอจนกว่าผู้รับแมสเสจ โปรเซสทั้งสองจะต้องซินโครไนซ์เพื่อให้เกิดการถ่ายโอนแมสเสจ การซินโครไนซ์แบบนี้เรียกว่า rendezvous
w ความจุแบบมีขอบเขต (Bounded capasity) ความจุแบบนี้จะทำให้คิวมีขนาดคงที่เป็น n ดังนั้นจะมีแมจเสจสูงขึ้น n แมสเซสที่เก็บไว้ในคิว ถ้าคิวยังไม่เต็มเมื่อแมสเสจใหม่จะถูกส่งเข้ามาหลังจากนั้นจะเข้าไปอยู่ในคิว
w ความจุไม่มีขอบเขต (Unbounded capasity) ความจุแบบนี้ให้คิวมีขนาดไม่คงที่ทำให้แมสเสจถูกเก็บไว้เสมอ ผู้ส่งไม่ต้องรอเวลาเลย
ตัวอย่างเช่น ถ้าโปรเซส P ส่งแมสเสจไปยังโปรเซส Q และสามารถเอ็กซิคิวต์ ได้ต่อไปเฉพาะหลังจากที่แมสเสจได้รับไปแล้ว โปรเซส P
จะมีขั้นตอนดังนี้
Send (Q, message);
receive (Q, message);
โปรเซส Q จะเอ็กซิคิวคำสั่ง
receive (P, message);
send (P, acknowledgment);
การรับ - ส่งแมสเสจระหว่างโปรเซส P และโปรเซส Q ในลักษณะนี้เรียกว่า asynchroncus อย่างไรก็ตามยังมี 2-3 กรณี ที่ไม่เข้ากลุ่มใดตามที่กล่าวมา แล้วนี้
w การส่งแมสเสจจองโปรเซสได้โดยไม่ต้องคอย กรณีนี้ถ้าผู้รับยังไม่ได้รับแมสเสจก่อนที่จะส่งแมสเสจอื่น
w การส่งแมสเสจของโปรเซสจะล่าช้าออกไปจนกว่าโปรเซสจะได้รับคำตอบ วิธีการนี้นำมาใช้เป็นระบบปฏิบัติการที่ชื่อ Thoth โดยในระบบนี้จะมีขนาดที่แน่นอน