การทำให้ Process สามารถติดต่อสื่อสารกันได้ มีอยู่หลายวิธีด้วยกัน เช่น Pipe, Shared Memory, Message Queue, etc สำหรับโปรแกรมที่เขียนขึ้นนี้ แบ่งออกเป็น 2 แบบ (ทำไว้ 2 วิธี) ในการทำให้ Process ติดต่อสื่อสารกันได้
ส่วนที่ทำเสร็จ
- list (พิมพ์ slave ทั้งหมด)
- list-files
- delete-member (ตัดการเชื่อมต่อแล้วลบออกจากกลุ่ม)
- run-code (2-phase, เช็คโค๊ดว่ารันได้ไหม, ถ้ารันได้ สั่งให้รันทุก slave, ถ้าไม่ได้ ให้ยกเลิกหมด)
- put-file (master ส่งไฟล์ให้ slave)
- get-file (master ขอไฟล์จาก slave)
- list-files (สั่งให้ slave list ไฟล์)
- stage-code
คำสั่งที่อาจจะไม่ได้ทำ คือ
- close-conn
- check-all-file
ขั้นแรก
ทำให้ Process ติดต่อสื่อสารกันได้ ระหว่าง Parent กับ Child Process (ของ Master)
โดยใช้ Message Queue มีการเรียกใช้งานอยู่หลักๆ 4 ฟังก์ชัน
- msgget() เริ่ม
- msgsnd() ส่ง
- msgrcv() รับ
- msgctl() ลบ ตอนจบการทำงาน
- ipcs -q
- ipcrm -Q [หมายเลข key]
- ปกติเราจะคุ้นเคยกับ เขียนโปรแกรมแบบ synchronous คือ ถามไปต้องตอบมา ขอไปต้องได้รับผล แต่ Message Queue ในที่นี้ เป็นลักษณะของการเขียน Message ลงไปใน Queue คนที่รับก็รอรับในส่วนของการติดต่อระหว่าง Master กับ Slave ใช้ Socket ธรรมดา
Program description
รูปที่1
1.โครงสร้าง Master กับ Slave ตามในรูปที่ 1 ใช้ Virtual Machine (VM) สำหรับการติดตั้ง VM โดยใช้ Xen สามารถเข้าไปศึกษาได้ที่ http://www.lsr.nectec.or.th/index.php/Howto_Install_and_Setup_Xen_Virtualization_on_CentOS_Linux
รูปที่ 2
2. การติดต่อสื่อสารกันระหว่าง Master กับ Slave อยู่ในรูปแบบ Socket โดยที่ Master จะทำการ Fork Process ขึ้นมาหลาย ๆ Child Process เพื่อให้รองรับหลาย ๆ Slave ได้ การติดต่อสื่อสารระหว่าง Parent กับ Child ใช้ Message Queue การติดต่อสื่อสารระหว่าง Master กับ User ผ่าน Command Prompt
รูปที่ 3
3. การติดต่อสื่อสารระหว่าง User กับเครื่อง Master ผ่าน Prompt "twophase>"
รูปที่ 4
4. หลังจากที่ได้รับคำสั่งจาก User ตัว Parent ก็จะสั่งงานไปยัง Child ในรูปแบบ Message Queue มีโครงสร้างข้อความตามรูป (ทำนองเดียวกันเมื่อ Child ทำงานเสร็จแล้ว จะส่งผลให้ Parent ในรูปแบบ Message Queue เหมือนกัน)
รูปที่ 5
5. เราใช้ Key เป็นตัวแยกแยะว่า Message ไหน ใช้ติดต่อกับ Child ตัวไหน (โปรแกรมที่เขียนขึ้นมานี้ กำหนด Key ตาม Rank)
รูปที่ 6
6. เหมือนมีหลาย ๆ Message ถูกส่งไปยัง Child
จากแนวคิดการเขียนโปรแกรม
น่าจะช่วยเพิ่มความเข้าใจให้กับตัวโปรแกรมมากยิ่งขึ้นนะครับ ^^
credit:
cs.bong.nine
ไม่มีความคิดเห็น:
แสดงความคิดเห็น