Important Announcement
PubHTML5 Scheduled Server Maintenance on (GMT) Sunday, June 26th, 2:00 am - 8:00 am.
PubHTML5 site will be inoperative during the times indicated!

Home Explore บทที่ 2 การจัดการโพรเซส

บทที่ 2 การจัดการโพรเซส

Published by จันทนา ลัยวรรณา, 2020-08-31 00:25:46

Description: บทที่ 2 การจัดการโพรเซส

Search

Read the Text Version

บทท่ี 2 การจัดการโพรเซส 2.1 แนวคดิ เรื่องโพรเซส ระบบคอมพิวเตอร์ในสมัยยุคแรก ๆ มีการทางานในลักษณะแบบโมโนโปรแกรมม่ิง (Mono programming) คือ ในขณะเวลาใดเวลาหนึ่งจะมีเพียงโพรเซสเดียวเท่านั้นที่ทางานได้ ข้อเสียคือ ระบบไม่ สามารถใช้ทรัพยากรไดอ้ ย่างเต็มประสทิ ธิภาพ เน่ืองจากมีบางช่วงที่ทรัพยากรของระบบวา่ ง แตไ่ มส่ ามารถ ใช้ทรัพยากรเหล่าน้ันได้ ต่อมามีการพัฒนาระบบคอมพิวเตอร์ที่สามารถทาได้หลายงานพร้อมกัน และ สามารถใช้ทรัพยากรร่วมกัน โดยมีการแบ่งงานหรือโปรแกรมออกเป็นส่วนย่อย และทางานแตกต่างกัน เรยี กโปรแกรมสว่ นย่อยเหล่านี้ว่า กระบวนการ หรอื เรียกทบั ศพั ท์ว่า โพรเซส (Process) (ยรรยง เต็งอานวย, 2533: 24) นิยามโดยท่ัวไปของคาว่าโพรเซสคือ โปรแกรมท่ีกาลังดาเนินการ อยู่ ถ้ากาหนดให้ชัดเจนกว่าน้ีต้องบอกว่าโพรเซสคือ กลุ่มของช่องหน่วยความจา (Memory cells) ซ่ึง เปล่ียนไปตามกฎเกณฑ์หนึ่ง โดยที่กฎเกณฑ์เหล่านี้เรียกว่า โปรแกรม และอุปกรณ์ท่ีตีความโปรแกรม เหล่านี้คือ หน่วยประมวลผล (Processor) โพรเซสหมายถึง โปรแกรมที่อยู่ระหว่างการทางาน ซึ่งในการ ทางานจาเป็นต้องใช้ทรัพยากรต่าง ๆ ของระบบ เช่น ซีพียู อุปกรณ์รับ/ส่งข้อมูล หน่วยความจาหลัก ใน ระบบคอมพิวเตอร์อาจมีโพรเซสมากกว่าหนึ่งโพรเซส และแต่ละโพรเซสอาจมีสถานะการทางานท่ีแตกต่าง กนั ระบบปฏบิ ัติการจึงตอ้ งเขา้ มาจัดการเก่ียวกบั โพรเซส และจดั การทรัพยากรของระบบท่ีมอี ยู่อย่างจากัด ให้แก่โพรเซส หน้าที่สาคัญของระบบปฏิบัติการ คือ การจัดการโพรเซส ตั้งแต่การสร้างโพรเซส การ จัดลาดับการใชซ้ พี ียขู องแตล่ ะโพรเซส และการทาลายโพรเซส เปน็ ต้น ดังน้ันโปรแกรมจะกลายเป็นโพรเซสเม่ือเรารันไฟล์นั้นขึ้นมาและถูกโหลดข้ึนสู่หน่วยความจา โดย หน่วยความจา Stack เป็นพื้นที่ที่ถูกจองไว้ให้โปรแกรมท่ีถูกเรียกใช้งานสาหรับเก็บฟังก์ชัน ตัวแปร และ พารามิเตอร์ต่าง ๆ ของโปรแกรม ส่วนพื้นที่ Heap เป็นหน่วยความจาทส่ี งวนไว้ให้โปรแกรมใช้งานสาหรับ เป็นหน่วยความจาช่ัวคราว ซ่ึงขนาดของหน่วยความจาท่ีถูกร้องขอในระหว่างท่ีโปรแกรมกาลังทางานอยู่ จะไม่สามารถทราบได้จนกว่าจะมีการทางานของโปรแกรม โปรแกรมท่ีถูกเรียกใช้งานสามารถขอจอง หนว่ ยความจาทว่ี า่ งอยไู่ ด้ หลงั จากใช้งานเสร็จแลว้ ก็สามารถของยกเลกิ หน่วยความจาส่วนน้ันได้ แม้ว่าเราจะทางานโปรแกรมเดียวกันในระบบคอมพิวเตอร์ โพรเซสจะถูกแยกออกมาสองโพรเซส และมีการสลับสับเปลี่ยนโพรเซสในการทางาน และในบางกรณีโพรเซสอาจจะทางานอยู่บน Virtual Machine เช่น โปรแกรมของภาษาจาวาที่เมื่อคอมไพล์ตัวโค้ดของภาษาจาวาแล้ว จะได้ไฟล์ช่ือโปรแกรม นามสกุล.class และเม่ือรันโปรแกรมน้ีข้ึนมา โพรเซสจะทางานอยู่บนตัว Java Virtual Machine (ซ่ึงจะ แปลงคาสง่ั ต่าง ๆ เปน็ ภาษาเครอ่ื ง) เพ่ือการทางานของโพรเซสตอ่ ไป

20 บทที่ 2 การจดั การโพรเซส ภาพที่ 2.1 แสดงการจัดเก็บข้อมูลในหน่วยความจา 2.2 คุณสมบัติของโพรเซส โพรเซสแต่ละตัวจะถูกกาหนดความสาคัญข้ึน (Priority) ขณะท่ีโพรเซสถูกสร้างข้ึนความสาคัญ น้ีอาจเปล่ียนแปลงได้หรือไม่ได้ขึ้นอยู่กับระบบปฏิบัติการ โพรเซสที่มีความสาคัญมากระบบปฏิบัติการจะ ให้สทิ ธิพิเศษมากกว่าโพรเซสท่ีมีความสาคัญน้อย เช่น ให้เวลาในการครอบครองซีพียู ได้นานกว่าอานาจ หน้าที่ (Authority) เป็นสิ่งที่บง่ บอกว่าโพรเซสน้นั ๆ สามารถทาอะไรได้บ้าง ใช้อปุ กรณ์ช้ินไหนได้บ้าง เป็น ต้น ตัวอย่างเช่นโพรเซส A ไม่สามารถเข้าใช้ดิสก์ใด ๆ ท้ังสิ้น แต่สามารถรับข้อมูลจากทุก ๆ โพรเซสใน ระบบได้คุณสมบตั อิ น่ื ๆ ท่ีระบบปฏบิ ตั กิ ารกาหนดให้มี 2.3 สภาวะของโพรเซส (Process State) ในขณะที่แต่ละโพรเซสกาลังทางานอยู่ จะมีการเปลี่ยนแปลงสถานะของโพรเซสเกิดขึ้น โดย สถานะของโพรเซส (Process state) ทีส่ าคญั มี 5 สถานะ คอื 1. สถานะสรา้ ง (New state) หมายถงึ โพรเซสใหม่กาลังถกู สรา้ งข้ึน 2. สถานะพรอ้ ม (Ready state) หมายถึง สถานะท่ีโพรเซสพรอ้ มจะทางาน หากได้รับการจัดสรร ซพี ยี ู 3. สถานะการทางาน (Running state) หมายถงึ สถานะท่ีโพรเซสได้ครอบครองซพี ียู และทาการ ประมวลผล 4. สถานะรอ (Waiting state) หมายถึง สถานะท่ีโพรเซสรอเหตกุ ารณ์บางอย่าง 5. สถานะเสร็จสนิ้ (Terminate state) หมายถึง สถานะที่โพรเซสเสรจ็ ส้ินการทางาน

ระบบปฏิบัตกิ ารคอมพวิ เตอร์ (Operating Systems) 21 ภาพที่ 2.2 แผนภาพสถานะของโพรเซส ทีม่ า: Abraham, S. Peter, B. G., & Greg, G. Operating system concepts 9th ed. (2013, p.108) 2.4 ตารางขอ้ มลู การประมวลผล (Process Control Block) โพรเซส เป็นการทางานของคาส่ังหรือกลุ่มคาส่ังของโปรแกรม และอาจมีการสลับการทางาน ระหว่างโพรเซสในระบบ จึงต้องมีการบันทึกรายละเอียดของโพรเซสแต่ละโพรเซส รวมถึงข้อมูลต่าง ๆ ที่ จาเป็นต้องใช้ในการทางาน จึงใช้โครงสร้างข้อมูลพิเศษท่ีเรียกว่า Process Control Block (PCB) หรือ อาจเรยี กวา่ Task Control Block โดยมีรายละเอยี ดของโครงสรา้ งข้อมูลดงั น้ี ภาพที่ 2.3 โครงสร้างขอ้ มูลของตารางขอ้ มลู การประมวลผล 1. ตัวช้ี (Pointer) เปน็ ตวั ช้ไี ปยงั หน่วยความจาหลักที่กนั ไวส้ าหรบั โพรเซสนน้ั ๆ 2. สถานะของกระบวนการ (Process state) จะเก็บสถานะของโพรเซส ซง่ึ จะแสดง สถานะปจั จบุ ันของโพรเซส 3. ชอ่ื และหมายเลขประจาตวั (Process number) ของโพรเซสตอ้ งไมซ่ ้ากับโพรเซสอนื่ 4. ตัวชี้โปรแกรม (Program counter) เก็บตาแหน่งที่อยู่ของคาสั่งโปรแกรมต่อไปที่จะถูก ประมวลผล

22 บทท่ี 2 การจัดการโพรเซส 5. รีจิสเตอร์ของหน่วยประมวลผล (CPU registers) หน่วยความจาภายในซีพียูทาหน้าที่เก็บ สถานะของระบบเม่ือมีอินเทอร์รัพเกิดข้ึน ซึ่งรีจีสเตอร์จะมีข้อมูลที่ถูกเก็บอยู่ในรีจีสเตอร์ภายใน โพรเซสเซอร์ ซ่งึ ถูกนามาใช้ในขณะที่โพรเซสเซอร์กาลงั ประมวลผล 6. ข้อมูลในการจัดตารางทางานของประมวลผลกลาง (CPU scheduling information) เก็บ ข้อมูลการจัดตารางเวลาของซีพียู เป็นข้อมูลแสดงลาดับความสาคัญของโพรเซสท่ีถูกกาหนดโดย ระบบปฏบิ ตั ิการ 7. สารสนเทศเกยี่ วกับการจัดการหนว่ ยความจา (Memory management information) เกบ็ ข้อมลู การจดั การหน่วยความจา เปน็ ข้อมูลเก่ยี วกับหนว่ ยความจาท่ีระบบปฏิบัติการกาหนดไว้ เช่น ขนาด ของหนว่ ยความจา คา่ ของรจี ีสเตอร์ ตารางหนว่ ยความจาเพจเทเบิล (Page table) ตารางเซกเมน้ ท์ (Segment table) 8. ข้อมูลทางการบัญชี (Accounting information) หมายถึงการเก็บข้อมูลการใช้ทรัพยากร ประกอบด้วย จานวนเวลาที่ซีพยี ูใชใ้ นการทางาน หมายเลขบญั ชี หมายเลขงานหรือหมายเลขโพรเซส และ อน่ื ๆ 9. ข้อมูลสถานะการรบั ส่งข้อมูล (I/O status information) เก็บข้อมูลสถานะของ I/O อปุ กรณ์ท่ี โพรเซสปัจจบุ นั ใช้งานอยู่ รายการแฟม้ ทีถ่ ูกเปิดอ่าน-เขยี นหรือถูกใช้งาน และอ่นื ๆ แตล่ ะโพรเซสจะมีบล็อกควบคมุ เพ่อื เก็บสถานะการทางานของตนเองเรยี กวา่ PCB โดยโพรเซสแต่ ละโพรเซสจะมีหมายเลขเฉพาะเพื่อใช้ในการแสดงตน PCB เป็นพื้นท่ีหน่วยความจาท่ีระบบปฏิบัติการ กาหนดไว้เพ่ือเกบ็ ข้อมลู ทส่ี าคัญของโพรเซส ดังน้ันเมื่อระบบปฏิบตั ิการมอบเวลาของซพี ียูให้กับโพรเซสอื่น ครอบครองเพื่อประมวลผล ถ้าโพรเซสน้ันได้สลับกลับมาครอบครองเวลาของซีพียูใหม่อีกคร้ัง โพรเซสจะ นาขอ้ มลู ท่ีอยูใ่ น PCB ของตัวมนั เองมาใช้เพ่อื ใหท้ ราบสถานะการทางานเดิมของตน ภาพที่ 2.4 แผนภาพแสดงการสับเปลย่ี นซีพียู จากโพรเซสหนึง่ ไปสอู่ ีกโพรเซสหนงึ่ ท่ีมา: Abraham, S. Peter, B. G., & Greg, G. Operating system concepts 9th ed. (2013, p.109)

ระบบปฏิบตั กิ ารคอมพวิ เตอร์ (Operating Systems) 23 จากภาพท่ี 2.4 สามารถอธบิ ายการทางานของโพรเซส P0 และ P1 ทต่ี อ้ งการทางานพร้อมกัน จงึ จาเปน็ ต้องสลับการเขา้ ใช้ซีพียู สามารถอธบิ ายลาดบั การทางานไดด้ งั น้ี 1. เม่ือโพรเซส P0 ทางานได้ระยะเวลาหนึง่ ระบบปฏบิ ตั ิการจะตอ้ งสลบั การทางานจาก โพรเซส P0 ไปยงั โพรเซส P1 (เน่ืองจากเกิดการขดั จังหวะดว้ ยสาเหตใุ ด ๆ) 2. ระบบปฏิบัติการจะทาการเก็บสถานะของโพรเซส P0 ไว้ใน PCB0 3. สลับการทางานของซีพยี ไู ปทางานในโพรเซส P1 โดยใชข้ อ้ มลู ของโพรเซส P1 ที่เก็บไวใ้ น PCB1 4. เมอื่ โพรเซส P1 ทางานไปแลว้ ชว่ งระยะเวลาหนง่ึ และถูกขัดจังหวะ ระบบปฏบิ ัติการจะตอ้ ง บันทึกขอ้ มลู ของโพรเซส P1 เก็บไว้ใน PCB1 และสลบั ไปทางานในโพรเซสอ่ืนตอ่ ไป 2.5 การจัดตารางของโพรเซส โดยปกตกิ ารทางานของระบบคอมพิวเตอร์แบบโมโนโปรแกรมม่ิงจะมีเพียง 1 โพรเซสเท่านั้นที่ สามารถใช้งานซีพียูได้ ในปัจจุบันการทางานของระบบคอมพิวเตอร์แบบมัลติโปรแกรมมิ่ง ท่ีมีหลาย ๆ โพรเซสสามารถทางานพร้อมกันได้ ถ้ามีซีพียูเพียงตัวเดียว ระบบจาเป็นต้องให้แต่ละโพรเซสสลับกันใช้ ซีพียู จุดประสงค์ของการทางานแบบน้ีคือ การพยายามที่จะทาให้หน่วยประมวลผลกลางทางานอย่างมี ประสิทธิผลสูงสุด โดยจัดให้มีโพรเซสเข้าไปทางานในหน่วยประมวลผลตลอดเวลา แต่สาหรับระบบที่มี หน่วยประมวลผลเดียว จะมีเพียงหน่ึงโพรเซสเท่าน้ันที่สามารถเข้าใช้หน่วยประมวลผลกลางได้ และใน กรณีท่ีมีหลายโพรเซสต้องการเข้าใช้หน่วยประมวลผลกลาง งานเหล่านั้นต้องรอจนกว่าหน่วยประมวลผล กลางจะวา่ งลง แลว้ จึงมีการจดั ตารางการใช้หนว่ ยประมวลผลกลางใหมอ่ ีกคร้ัง 2.5.1 การจดั ตารางแถวคอย (Scheduling Queue) (พิเชษฐ์ ศิริรัตนไพศาลกุล, 2548: 75) เมื่อโพรเซสเข้าสู่ระบบจะถูกจัดให้อยู่ในแถวคอย (Job queue) ในหนว่ ยเก็บข้อมลู ขนาดใหญ่ เมื่อโพรเซสได้เขา้ สู่หน่วยความจาหลักแลว้ โพรเซสนั้นจะถูกเก็บใน รายการแบบเชื่องโยง (Link list) ท่ีเรียกว่าแถวพร้อม (Ready queue) ซ่ึงโพรเซสภายในแถวพร้อมน้ีเป็น โพรเซสท่ีอยู่ในหน่วยความจาหลัก และพร้อมที่จะทางาน ท้ังนี้เพียงแค่กาลังรอคอยที่จะเข้าใช้หน่วย ประมวลผลกลางเพื่อทางานต่อไป โดยท่ีแถวพร้อมจะเก็บตัวช้ีที่ช้ีไปยังตารางข้อมูลของโพรเซสแรกและ โพรเซสสุดท้ายในแถวพร้อม และในแต่ละ PCB ก็จะมีตัวชี้ไปยัง PCB ที่อยู่ถัดไปด้วย เม่ือโพรเซสได้เข้าใช้ หน่วยประมวลผลกลางและทางานไปได้ระยะเวลาหนึ่ง โพรเซสน้ันอาจต้องหยุดทางาน เป็นเพราะงาน เสร็จหรือหยุดรอเหตุการณ์บางอย่างให้เกิดขึ้น เช่น รออุปกรณ์รับ-ส่งข้อมูล เน่ืองจากมีหลายโพรเซส ทางานอยู่ในระบบ ดังนั้นโพรเซสทั้งหลายอาจต้องเข้าแถวคอยเพื่อที่จะใช้อุปกรณ์รับ-ส่งข้อมูลต่าง ๆ ซึ่ง แถวคอยอุปกรณ์ดังกล่าว เรียกว่า “แถวอุปกรณ์” (Device queue) โดยอุปกรณ์แต่ละตัวจะมีแถวคอย เปน็ ของตวั เอง ดงั ภาพที่ 2.5

24 บทที่ 2 การจัดการโพรเซส ภาพท่ี 2.5 แสดงลาดบั งานที่พร้อมทางานและลาดับงานของอุปกรณป์ ระเภทต่าง ๆ ทมี่ า: Abraham, S. Peter, B. G., & Greg, G. Operating system concepts 9th ed. (2013, p.111) ในกรณีที่อุปกรณ์ตัวน้ันเป็นอุปกรณ์ที่ใช้เฉพาะงานใดงานหน่ึง เช่น เครื่องขับเทป แถวคอยของ อุปกรณ์ตัวน้ันก็จะมีเพียง 1 โพรเซสเท่าน้ัน แต่ถ้าเป็นอุปกรณ์ที่สามารถใช้ร่วมกันได้ เช่น จานบันทึก ภายในแถวคอยของอุปกรณ์ตัวน้ันก็อาจมีหลายโพรเซสคอยอยู่ได้ ภาพถัดไป แสดง “แผนภาพของ แถวคอย” (Queuing diagram) รูปสี่เหลี่ยมผืนผ้าแทนแถวคอย 2 แบบ คือ แถวพร้อมและแถวอุปกรณ์ วงกลมแทนทรัพยากรซึง่ เป็นเจ้าของแถวคอยนั้น ๆ เสน้ ลกู ศรแสดงทิศทางการไหลของโพรเซสในระบบ ภาพที่ 2.6 แผนภาพแสดงแถวลาดบั ทค่ี อยใชแ้ ทนการจัดลาดบั โพรเซส ทีม่ า: Abraham, S. Peter, B. G., & Greg, G. Operating system concepts 9th ed. (2013, p.112) เมื่อมีโพรเซสใดโพรเซสหน่ึงเข้าสู่แถวพร้อม โพรเซสน้ันจะรออยู่ในแถวพร้อม จนกระทั่งถูกเลือก ให้เป็นผู้ใช้หน่วยประมวลผลกลาง และหลังจากที่โพรเซสได้ถูกจัดให้เข้าใช้หน่วยประมวลผลกลางแล้ว ขณะทโ่ี พรเซสกาลังทางานอยู่ อาจมีเหตุการณ์หนง่ึ เหตกุ ารณใ์ ดเกดิ ขนึ้ ดังนค้ี อื

ระบบปฏิบัติการคอมพวิ เตอร์ (Operating Systems) 25 1. โพรเซสร้องขออุปกรณ์รบั -สง่ ข้อมลู ดงั น้นั จึงถกู จดั ให้รอในแถวอปุ กรณ์ 2. โพรเซสสรา้ งโพรเซสย่อยขึ้นมา และรอจนโพรเซสย่อยทางานเสร็จ 3. โพรเซสถูกขดั จงั หวะโดยระบบ ทาให้ต้องหยุดการทางาน และถูกย้ายไปไวใ้ นแถวพร้อมอีกครั้ง แมใ้ น 2 กรณีแรก เม่ืออปุ กรณ์ทางานเสร็จหรือโพรเซสยอ่ ยทางานเสรจ็ โพรเซสกส็ ามารถเปลยี่ น จากสถานะรอคอยไปเปน็ สถานะพร้อม และถูกย้ายไปไว้ในแถวพร้อมในทส่ี ดุ โพรเซสหนง่ึ ๆ จะทางาน สลบั กนั ไปเชน่ นี้เร่ือย ๆ จนกว่าจะส้ินสุดการทางานและออกไปจากระบบ 2.5.2 การจดั ตารางการทางาน (Schedulers) การนาโพรเซสไปต่อท้ายคิว หรือนาเอาโพรเซสออกจากควิ จะต้องมโี ปรแกรมท่ีช่วยกาหนด และ จดั ลาดบั ของโพรเซส เรยี กว่า กาหนดการ (Scheduler) โดยแบง่ ออกได้เป็น 3 ประเภท คือ 1. กาหนดการระยะยาว (Long-term Scheduler) กาหนดการระยะยาวหรือเรยี กอีกชื่อหน่ึงว่า Job Scheduler ทาหน้าที่เลือกโพรเซสทร่ี ออยู่ท่ี หน่วยความจาสารอง และต้องการเขา้ ไปทางานท่ีซีพยี ู ให้เข้าไปอย่ใู นหน่วยความจาหลักท่ีคิวพรอ้ มเพ่ือรอ จนกว่าซีพียวู า่ ง 2. กาหนดการระยะส้นั (Short-term Scheduler) กาหนดการระยะสั้นหรือเรียกอีกช่ือหนึ่งว่า CPU Scheduler ทาหน้าท่ีเลือกโพรเซสจากคิว พร้อมในหน่วยความจาหลัก และมอบหมายซีพียูให้กับโพรเซสแต่ละโพรเซส เป็นผลให้โพรเซสเปลี่ยน สถานะจากพรอ้ มเปน็ ทางาน 3. กาหนดการระยะกลาง (Medium-term Scheduler) สามารถถูกนามาใช้เพิ่มเติม ในกรณีถ้ามีความจาเป็นใช้โพรเซสในระบบมัลติโปรแกรมม่ิง เพื่อ ลดโพรเซสท่ีอยู่ในหน่วยความจา โดยการย้ายโพรเซสออกจากหน่วยความจาและ Swap ลงดิสก์ และนา โพรเซสนั้นกลับมาใชห้ น่วยความจาอกี คร้งั เมื่อตอ้ งการให้โพรเซสนน้ั ทางานต่อไป ข้อแตกต่างระหว่างกาหนดการระยะยาวและกาหนดการระยะสั้น คือ ความถี่ของการถูกเรียกใช้ งาน กาหนดการระยะสั้นจะถูกเรียกใช้งานมากกว่ากาหนดการระยะยาว เนื่องจากซีพียูทางานด้วย ความเรว็ สูง ทาให้โพรเซสถูกทางานในระยะเวลาสัน้ มาก (2-3 มิลลิวินาที) จากนั้นโพรเซสจะถูกขัดจังหวะ เพื่อไปทางานด้านการรับส่งข้อมูล หรืองานอาจจะเสร็จเรียบร้อยทาให้ซีพียูว่าง กาหนดการระยะส้ัน จะ เลือกโพรเซสตอ่ ไปจากคิวพรอ้ ม และมอบหมายซีพียใู ห้โพรเซสท่ีเลอื กเขา้ มา โดยปกติกาหนดการระยะส้ันจะทางานอยา่ งนอ้ ยทุก ๆ 10 มิลลวิ ินาที ส่วนกาหนดการระยะยาวมี ความถี่ในการทางานน้อยมาก เนื่องจากการสร้างโพรเซสใหม่จาเป็นต้องใช้เวลาเป็นนาที ในการเลือกโพ รเซสของกาหนดการระยะยาวจาเป็นต้องพิจารณาว่าเป็นโพรเซสท่ีเน้นการรับส่งข้อมูล หรือโพรเซสท่ีเน้น ซีพียู เพ่ือให้ระบบมีสัดส่วนการทางานท่ีพอดี ถ้าเลือกโพรเซสท่ีเน้นการรับส่งข้อมูล จะทาให้คิวพร้อมว่าง และกาหนดการระยะสั้นถูกเรียกใช้งานน้อยมาก ถ้าเลือกโพรเซสที่เน้นงานด้านซีพียู จะทาให้คิวรอว่าง อปุ กรณร์ ับส่งข้อมูลไม่ถกู ใชง้ าน

26 บทท่ี 2 การจัดการโพรเซส ภาพที่ 2.7 การเพ่มิ ตัวจัดลาดบั ระยะกลาง ทม่ี า: Abraham, S. Peter, B. G., & Greg, G. Operating system concepts 9th ed. (2013, p.114) ในปัจจุบนั ระบบมัลติทาสกง้ิ (Multitasking) หมายถึง ระบบที่สมรรถภาพของเครื่องคอมพิวเตอร์ สามารถทางานสองโปรแกรมขึ้นไปได้ในเวลาเดียวกัน ตอนเริ่มต้นของระบบมัลติทาสกิ้งบนมือถือ จะยอม ใหท้ างานเพยี งหนงึ่ โพรเซสเทา่ นนั้ นอกนัน้ จะให้หยุดรอไว้กอ่ นโดยตวั อย่างเช่น 1. ในระบบปฏิบตั กิ ารไอโอเอส ในสว่ นของการดาเนนิ การโพรเซสสว่ นหน้า (Single foreground processes) ยอมให้ทางานเพยี งหน่ึงโพรเซส โดยควบคุมผา่ นส่วนท่ีตดิ ตอ่ ผู้ใช้งาน ในสว่ น ของโพรเซสทที่ างานอยเู่ บ้ืองหลงั (Multiple background processes) จะทางานอยบู่ น หนว่ ยความจา โดยไมแ่ สดงออกมาและมขี ้อจากดั ในการทางาน 2. ระบบปฏบิ ตั ิการแอนดรอยด์ โพรเซสท่ที างานอยู่เบื้องหลงั ถกู ใชเ้ พ่อื ปฏบิ ตั งิ านดา้ นตา่ ง ๆ การ บริการยังคงดาเนนิ การได้ แมว้ ่าโพรเซสทที่ างานเบอ้ื งหลังจะถูกระงับการทางาน โพรเซสใน การบริการไม่มีในสว่ นของการติดต่อกับผ้ใู ช้ จึงใชห้ นว่ ยความจานอ้ ย 2.5.3 การสลับการทางานของซีพยี ู (Context Switch) การสลับการทางานของซีพียูหมายถึง การท่ีซีพียูสลับไปประมวลผลโพรเซสอื่น โดยจะทาการ บันทึกสถานะของโพรเซสปัจจุบันเอาไว้ จากน้ันจะเรียกสถานะของโพรเซสท่ีถูกบันทึกไว้กลับข้ึนมา ประมวลผลต่ออีกครั้ง เม่ือย้อนกลับมาทางานเดิมซีพียูจะทาการประมวลผลโพรเซสจนเสรจ็ จากน้ันก็จะ สลบั ไปยังโพรเซสอื่นถัดไปท่ีอยู่ในคิว ระหวา่ งท่ีซีพียูสลับการประมวลผลน้ันซพี ียูจะว่างและไม่มกี ารทางาน เวลาระหว่างนี้จะสูญเปล่า เวลาที่ใช้ในการสลับจะเปลี่ยนไปตามเคร่ือง ซึ่งข้ึนอยู่กับความเร็วของ หนว่ ยความจา จานวนรีจีสเตอร์ท่ถี กู คดั ลอก และคาสงั่ พเิ ศษทม่ี อี ยู่ในระบบ ดงั น้ันการสลับการทางานของซีพียูจึงข้ึนอยู่กับการสนับสนุนของฮาร์ดแวร์ด้วย เช่น ซีพียูบางตัวมี รีจีสเตอร์อยูห่ ลายชุดก็จะเปล่ียนตัวชไ้ี ปยังชุดของรีจีสเตอร์ แต่ถา้ หากมีจานวนโพรเซสมากกว่า ชุดของรีจี สเตอร์ ระบบจะคัดลอกข้อมลู ระหว่างรีจสี เตอร์กบั หนว่ ยความจา การสลับการทางานนี้จะเข้ามาแก้ปัญหาคอขวดของระบบ (Performance bottleneck) ซึ่งการ ใช้ Context switch กลายเป็นส่ิงที่เพ่ิมประสิทธิภาพให้กับระบบเกิดเป็นโครงสร้างใหม่ที่เรียกว่า เธรด (Threads) ทน่ี ามาใช้เพือ่ หลกี เลีย่ งปัญหาคอขวด ในเรื่องของเธรดจะอธบิ ายในบทที่ 4 ตอ่ ไป

ระบบปฏิบตั กิ ารคอมพวิ เตอร์ (Operating Systems) 27 2.6 การดาเนินการของโพรเซส ในระบบปฏิบัตกิ ารมโี พรเซสมากมาย สามารถทางานได้พร้อมกนั และระบบปฏิบัตกิ ารจะมวี ธิ กี าร ในการสร้างหรือทาลายโพรเซสเป็นปกติอยู่เสมอ กลไกในการสร้างและทาลายโพรเซสสามารถอธิบาย ลาดบั ช้ันของโพรเซส (Process hierarchy) ไดด้ ังนี้ 1. เมื่อผู้ใช้ส่งงานให้กับระบบเพื่อทางาน ระบบปฏิบัติการจะทาการสร้างโพรเซสสาหรับงานน้ัน ขนึ้ มา 2. การทางานของระบบปฏิบัติการก็ถือว่าเป็นงานของระบบ ดังน้ันจะมีการสร้างโพรเซสข้ึน เหมือนกัน 3. นอกจากนั้นโพรเซสท่ีถกู สร้างขน้ึ ก็สามารถสรา้ งโพรเซสยอ่ ยได้ 4. โพรเซสทีใ่ หก้ าเนดิ เราเรียกวา่ โพรเซสแม่ (Parent process) 5. โพรเซสย่อยทเี่ กดิ ขนึ้ เราเรียกว่า โพรเซสลกู (Child process) 6. โดยทั่วไป เม่ือโพรเซสแม่จบลง โพรเซสต่าง ๆ ทอี่ ยู่ภายใตต้ วั มันกจ็ ะจบลงตามไปดว้ ย 7. ระบบปฏิบัติการบางตัวยอมให้โพรเซสแม่จบลง โดยที่โพรเซสลูกไม่ต้องจบลงตามไปด้วย ใน กรณนี โ้ี พรเซสลูกกจ็ ะไมม่ ีโพรเซสแม่ A BCD E EEE ภาพที่ 2.8 แสดงลาดับช้นั ของโพรเซส จากตัวอย่างในภาพท่ี 2.8 โพรเซส A จะมีโพรเซสลูก 3 โพรเซส คือ B, C และ D ถึงแม้ว่า โพ รเซส A เป็นโพรเซสแม่ของโพรเซส B, C และ D แตโ่ พรเซส A ไม่ไดเ้ ป็นผ้ทู ่ีสรา้ งโพรเซส B, C และ D ผู้ท่ี สร้างโพรเซสทั้งหมดได้แก่ระบบปฏิบัติการ ซึ่งระบบปฏิบัติการจะมีโพรเซสหน่ึงทาหน้าที่สร้างและยุติโพ รเซส คือ ตัวจดั ควิ ระยะยาว 2.6.1 การสรา้ งโพรเซส (Process Creation) โพรเซสใด ๆ สามารถสรา้ งโพรเซสใหม่ได้ด้วยการเรียกใชค้ าส่ังระบบ (System command) ของ ระบบปฏิบัติการ หรือผ่านทาง System call ท่ีชื่อ Fork (ในระบบปฏิบัติการ Unix) โพรเซสที่สร้าง โพ รเซสอืน่ เรยี กว่า โพรเซสแม่ เม่อื สรา้ งโพรเซสลูกแล้วสามารถทางานต่อไปพร้อมกับโพรเซสลูก หรอื หยุดรอ จนกว่าโพรเซสลูกจะทางานเสร็จ โพรเซสที่ถูกสร้างเรียกว่า โพรเซสลูก สามารถร้องขอทรัพยากรจาก ระบบปฏิบัติการ หรือถูกจากัดให้ใช้ได้เฉพาะทรัพยากรของโพรเซสแม่เท่าน้ัน ท้ังนี้โพรเซสแม่จาเป็นต้อง ทราบหมายเลขโพรเซสลูกทง้ั หมด

28 บทท่ี 2 การจดั การโพรเซส #include <sys/types.h> #include <stdio.h> #include <unistd.h> int main() { pid_t pid; /* fork a child process */ pid = fork(); if (pid < 0) { /* child process */ fprintf(stderr, “Fork Failed”); return 1; } else if (pid ==0) { /*child process */ execlp (“/bin/ls”, “ls, NULL); } else { /* parent process */ /* parent will wait for the child to complete */ wait (NULL); printf(“Child Complete”); } return 0; } ภาพท่ี 2.9 ตัวอย่างโค้ดภาษาซใี นการสร้างโพรเซส โคด้ ภาษาซีท่ีแสดงในภาพท่ี 2.9 เป็นตวั อย่างของข้นั ตอนการสรา้ งโพรเซสและการดาเนนิ การของ โพรเซส จะเห็นว่ามีโปสเซสท่ีแตกต่างกันรันอยู่บนโปรแกรมเดียวกัน (ในบรรทัด pid = fork()) เมื่อค่า pid เป็นศูนย์ ระบบจะมีคาส่ัง System call คือคาส่ัง execlp() ซึ่งในส่วนของโปรแกรมจะเป็นการแสดง รายการไดเรกทอรี (ls เป็นคาสั่งในระบบ Unix) โพรเซสแม่จะรอจนโพรเซสลูกทางานจนเสร็จ (คาส่ัง wait()) และระบบจะคืนข้อมูลหรือผลลัพธ์ของโพรเซสลูกไปให้โพรเซสแม่ผ่านทาง System call ท่ีชื่อ Wait (Unix) และเมอื่ โพรเซสลกู ทางานจนเสรจ็ ส้นิ โพรเซสแม่จะกลับมาทางานตอ่ ไป parent ภาพท่ี 2.10 การสรา้ งโพรเซสโดยระบบเรียกฟังกช์ ั่น fork( ) ทม่ี า: Abraham, S. Peter, B. G., & Greg, G. Operating system concepts 9th ed. (2013, p.119) 2.6.2 การส้ินสดุ ของโพรเซส (Process Termination) ในการทาลายโพรเซส โพรเซสจะสิ้นสุดลงเม่ือสิ้นสุดการทางานในคาส่ังสุดท้าย และแจ้งให้ ระบบปฏิบัติการลบมันออกไปโดยใช้ System call ที่ช่ือ Exit (ในระบบปฏิบัติการ Unix) หรือยกเลิก

ระบบปฏิบตั ิการคอมพวิ เตอร์ (Operating Systems) 29 โพรเซสเม่ือทางานเสร็จสิน้ เมอื่ โพรเซสแม่ทางานเสร็จสิ้น โพรเซสลูกและโพรเซสท่ถี ูกสร้างโดยโพรเซสลูก จะต้องส้ินสุดตามไปด้วย เม่ือโพรเซสแม่สิ้นสุดไปแล้วโพรเซสลูกท้ังหมดก็จะสิ้นสุดไปด้วย สิ่งท่ีเกิดข้ึนใน ลักษณะนี้เรียกว่า การส้ินสุดเป็นข้ัน ๆ (Cascading termination) นอกจากนี้โพรเซสใดโพรเซสหนึ่ง สามารถเป็นสาเหตุให้โพรเซสอ่ืนสิ้นสุดการทางาน โดยผ่านทาง System call ท่ีเหมาะสมเช่น Abort (ใช้ในระบบปฏบิ ตั ิการ Unix) โดยโพรเซสแมส่ ามารถยกเลกิ โพรเซสลูกได้ ในกรณที โี่ พรเซสลูกใช้ทรพั ยากร ของโพรเซสแม่จนหมด ทาให้ทรัพยากรไม่พอใช้ โพรเซสแมไ่ ม่ต้องการใช้โพรเซสลูกอีกตอ่ ไป โพรเซสแม่ ทางานเสรจ็ สน้ิ แลว้ และระบบปฏิบัตกิ ารไม่ตอ้ งการให้โพรเซสลูกทางานตอ่ ไป 2.7 การสื่อสารระหวา่ งโพรเซส โพรเซสที่ทางานในระบบปฏบิ ัตกิ ารอาจจะเป็นโพรเซสอิสระ (Independent processes) หรอื โพรเซสท่ตี อ้ งทางานร่วมกัน (Cooperation processes) โพรเซสอสิ ระ คือ โพรเซสที่ไม่มีผลกระทบต่อโพ รเซสอน่ื ในระบบเชน่ โพรเซสซ่งึ ไม่แบง่ ข้อมูล (ชว่ั คราวหรือถาวร) ใหก้ ับโพรเซสอ่ืน โพรเซสทต่ี อ้ งทางาน รว่ มกนั คือ โพรเซสที่มีผลกระทบต่อโพรเซสอ่ืนในระบบ เช่น โพรเซสท่ีตอ้ งแบง่ ข้อมูลให้กับโพรเซสอืน่ ที่ เป็นโพรเซสรว่ ม มเี หตุผลต่าง ๆ มากมายที่ทาใหต้ ้องจดั เตรยี มส่งิ แวดล้อมให้กับโพรเซสทตี่ อ้ งทางาน รว่ มกันดังนี้ 1. การรว่ มกนั ใชข้ ้อมูลข่าวสาร (Information Sharing) เม่อื ผู้ใช้หลายคนสนใจข้อมูลข่าวสาร ช้ินเดยี วกนั (ตวั อย่างเช่น แฟ้มข้อมูลทีถ่ ูกแชร์) จาเป็นตอ้ งจัดเตรยี มสง่ิ แวดลอ้ ม โดยอนุญาตใหเ้ ขา้ ถึง ทรัพยากรเหล่าน้ีรว่ มกันได้ 2. การคานวณรวดเร็วขึน้ (Computation Speedup) ถ้าต้องการใหง้ านปกตสิ ามารถทางาน ไดเ้ ร็วขึน้ จาเป็นจะตอ้ งแตกงานเหล่าน้ันเปน็ สว่ นยอ่ ย ๆ แลว้ ให้แตล่ ะสว่ นทางานขนานกนั ไป แตค่ วามเรว็ ในการคานวณจะสูงข้ึนได้กต็ ่อเมื่อ ระบบมีอุปกรณท์ ่ใี ชค้ านวณหลาย ๆ ตัว เช่น มีซพี ียูหลาย ๆ ตัว หรือมี หนว่ ยคานวณหลาย ๆ ตวั 3. ระบบยอ่ ย (Modularity) บางทีระบบอาจต้องการที่จะสร้างระบบให้อยู่ในรูปแบบของระบบ ย่ อ ย ห รือ โม ดู ล โด ย อ าจ แ บ่ งห น้ าท่ี งาน ต่ าง ๆ ข อ งระบ บ ไป เป็ น ห น้ าท่ี ล ะ ห น่ึ งโพ รเซ ส 4. ความสะดวกสบาย (Convenience) ผู้ใช้แต่ละคนอาจจะมีงานหลาย ๆ งานที่ต้องทางานใน เวลาเดียวกัน เช่น ต้องการแก้ไขข้อมูล พิมพ์ข้อมูล และแปลภาษาไปพร้อม ๆ กัน ซึ่งสามารถกระทาได้ใน เวลาเดียวกัน กลไกท่ีสนับสนุนให้โพรเซสสามารถประสานกันได้ คือ การสื่อสารระหว่างโพรเซส (Inter Process Communication : IPC) และการประสานโพรเซส (Synchronize process) การทางานของ โพรเซสท่ีมีการประสานกับโพรเซสอ่ืน จาเป็นต้องใช้บัฟเฟอร์ โดยระบบปฏิบัติการจะต้องทาการแชร์ หน่วยความจาไว้ใช้งาน และจะต้องมีกลไกท่ีสนับสนุนให้สามารถประสานได้ กลไกที่ว่าคือการติดต่อ ระหว่างโพรเซส ดังน้ันวิธีการสื่อสารระหว่างโพรเซสที่ยอมโพรเซสเหล่านั้นให้มีการแลกเปล่ียนข้อมูลหรือ สารสนเทศ พนื้ ฐานของ IPC มีอยู่ 2 แบบคือ แบบ Share Memory และแบบ Message Passing

30 บทที่ 2 การจัดการโพรเซส ภาพท่ี 2.11 แสดงรปู แบบการส่ือสาร (a) Message passing. (b) Shared memory ท่มี า: Abraham, S. Peter, B. G., & Greg, G. Operating system concepts 9th ed. (2013, p.124) 2.7.1 Shared-Memory Systems ระบบ Share memory เปน็ เทคนิคการสอ่ื สารข้อมูลในกระบวนการท่ีมหี ลาย ๆ โพรเซสเข้ามาใช้ หน่วยความจาท่ีเดียวกัน โดยจะสามารถทาได้ในระบบปฏิบัติการแบบ Multitasking การใช้งาน หน่วยความจาร่วมกันเป็นปัจจัยหนึ่งที่จะทาให้โพรเซส 2 โพรเซส หรือมากกว่าใช้ข้อมูลในหน่วยความจา รว่ มกันได้โดยตรง ไม่ผ่านเคอร์เนล (ออบเจ็ก IPC ท่ีผ่านมาเช่น PIPE ,FIFO จะทางานผ่านเคอรเ์ นล) โดย โพรเซสเหล่านั้นจะตอ้ งจัดการการทางานร่วมกนั ดว้ ยตวั เอง หลักการทางานของระบบ Shared Memory หน่วยความจาที่ถูกกาหนดให้ใช้งานร่วมกัน ปกติ แลว้ ก็คือ ตาแหน่งแอดเดรสท่ีวา่ งของหน่วยความจา เพอ่ื กาหนดเป็นพ้ืนที่ใช้หนว่ ยความจาร่วมกัน โพรเซส สามารถเข้ามาใช้ข้อมูลในหน่วยความจา เพือ่ การส่ือสารขอ้ มูลหรือแลกเปลี่ยนข้อมูลเหล่านั้น เสมอื นกับว่า พื้นที่ของโพรเซสเอง การเปล่ียนแปลงใด ๆ ที่เกิดข้ึนไม่ว่ามาจากโพรเซสใด จะมีผลต่อโพรเซสท้ังหมดที่ กาลังใช้หนว่ ยความจาในขณะนน้ั หน่วยความจาท่ีถูกใช้งานร่วมกันไม่มีหน้าท่ีกาหนดจังหวะการทางานร่วมกันของโพรเซสต่าง ๆ เช่น การอ่านข้อมูลขณะที่โพรเซสอื่นกาลังเขียนข้อมูลอยู่ รวมทั้งไม่มีฟังก์ชันอ่ืนใดท่ีจะมาทาหน้าท่ีนี้ ดังน้นั โปรแกรมเมอร์จะตอ้ งการทางานนด้ี ว้ ยตนเอง AB ภาพที่ 2.12 แสดงการส่งผ่านข้อมลู ระหวา่ งไคลเอนท์และเซิร์ฟเวอรเ์ ม่ือใช้งานหน่วยความจาท่ใี ชร้ ว่ มกัน

ระบบปฏิบัติการคอมพวิ เตอร์ (Operating Systems) 31 ดังนั้นจึงต้องมีการประสานงานระหว่างโพรเซสเพ่ือป้องกันไม่ให้มีโพรเซสใดใส่ข้อมูลลงใน บัฟเฟอร์ที่เต็มแล้ว หรือโพรเซสใดพยายามดึงข้อมูลจากบัฟเฟอร์ทั้ง ๆ ที่ยังไม่มีข้อมูลอยู่ ตัวอย่างของ แนวทาง การทางานร่วมกันของโพรเซสนี้ สามารถพิจารณาจากกรณีปัญหาผู้ผลิตและผู้บริโภค (Producer Consumer Problem) ซึ่งเป็นหลักการพ้ืนฐานของการใช้หน่วยความจาร่วมกันระหว่าง โพรเซส เช่น มีการแชร์บัพเฟอร์เป็นส่วนความจาที่คั่นระหว่างงานสองงาน ซึ่งต้องส่งผ่านข้อมูลระหว่าง กัน แต่มีความเร็วในการรับส่งข้อมูลไม่เท่ากัน งานทั้งสองจะต้องทางานร่วมกันในลักษณะผู้ผลิตและ ผู้บริโภค (Producer-consumer) การทางานร่วมกันคือ ผู้ผลิตจะต้องสามารถผลิตข้อมูลเข้าสู่บัฟเฟอร์ได้ และผู้บริโภคก็สามารถบริโภคข้อมูลต่าง ๆ เหล่าน้ันได้ ดังน้ันผู้ผลิตจะมีหน้าที่ใส่ข้อมูลลงในส่วนของ บัฟเฟอร์และผู้บริโภคจะนาข้อมูลออกจากบัฟเฟอร์ โดยผู้ผลิตจะไม่มีการใส่ข้อมูลทับข้อมูลเก่า และ ผู้บริโภคจะไม่พยายามนาข้อมูลที่ยังผลิตไม่เสร็จออกไปใช้ บัฟเฟอร์น้ีจะว่างก็ต่อเม่ือไม่มีการผลิตและ ผ้บู รโิ ภคได้บรโิ ภคข้อมลู จนหมดแลว้ ประเภทของบัฟเฟอรท์ ส่ี ามารถถกู นามาใชม้ ี 2 ประเภทคือ 1. บฟั เฟอร์ขอ้ มลู มขี นาดไม่จากดั (Unbounded-buffer) โพรเซสทตี่ ้องการบริโภคข้อมูลอาจ ตอ้ งคอยจากผผู้ ลิต แตโ่ พรเซสผผู้ ลติ ข้อมูลสามารถผลิตข้อมูลไดต้ ลอดเวลา (ไมม่ วี ันเตม็ ) 2. บัฟเฟอร์มีขนาดจากดั (Bounded-buffer) โพรเซสผู้ผลติ อาจตอ้ งรอถา้ บฟั เฟอร์เต็ม และ โพรเซสที่ต้องการบรโิ ภคข้อมลู อาจตอ้ งรอถ้าบัฟเฟอร์ว่าง เพื่อให้เกิดความเข้าใจมีตัวอย่างของโคด้ โปรแกรมภาษาซี ในการใช้ลักษณะของบัฟเฟอรท์ ี่มีขนาด จากัด ในรูปแบบ Circular buffer หรือเรียกเทคนิคน้ีว่า Circular queue โดยประกาศตัวแปรที่อยู่ใน หนว่ ยความจาเพือ่ ใชง้ านร่วมกัน (ตัวแปรแบบ Structure) ทงั้ ผผู้ ลิตและผู้บรโิ ภคดงั นี้ #define BUFFER_SIZE 10 typedef struct { ... } item; item buffer[BUFFER_SIZE]; int in = 0; int out = 0; ภาพท่ี 2.13 แสดงโคด้ โปรแกรมการประกาศโครงสร้างข้อมูล การแชร์บัฟเฟอร์ คือ ส่วนความจาท่ีคั่นระหว่างงานสองงาน ซ่ึงต้องส่งผ่านข้อมูลระหว่างกัน ถูก ประกาศเป็นอาร์เรย์แบบวงกลม และตัวแปรที่กาหนดเป็นตัวชี้ตาแหน่งของอาร์เรย์คือ in และ out โดย บัฟเฟอร์ว่างก็ต่อเม่ือค่า in ช้ีในตาแหน่งอาร์เรย์เดียวกันกับ out และ บัฟเฟอร์เต็มเม่ือตรวจสอบพบว่า ((in + 1) % BUFFER SIZE) == out หมายความว่าเมื่อข้อมูลในช่องถัดไปของค่าที่ชี้ตาแหน่งข้อมูลเข้า in มีคา่ เทา่ กับคา่ ชตี้ าแหน่งออก out

32 บทท่ี 2 การจัดการโพรเซส while (true) { /* produce an item in next produced */ while (((in + 1) % BUFFER_SIZE) == out) ; /* do nothing */ buffer[in] = next_produced; in = (in + 1) % BUFFER_SIZE; } ภาพที่ 2.14 แสดงโค้ดโปรแกรมของโพรเซสผ้ผู ลิต item next_consumed; while (true) { while (in == out) ; /* do nothing */ next_consumed = buffer[out]; out = (out + 1) % BUFFER_SIZE; /* consume the item in next consumed */ } ภาพที่ 2.15 แสดงโค้ดโปรแกรมของโพรเซสผบู้ ริโภค ตัวแปรเป็นโลคอล next_produced เป็นการสรา้ งขอ้ มลู เพอื่ นาไปใส่ใหก้ บั อาร์เรย์ และ next_consumed เป็นการนาขอ้ มูลจากอาร์เรย์ไปใช้ 2.7.2 Message-Passing Systems ฟังก์ช่ันระบบข่าวสารจะอนุญาตให้โพรเซสสามารถสื่อสารกับกระบวนการอ่ืนได้ โดยไม่ จาเป็นต้องมีการใช้ทรพั ยากรหรอื ขอ้ มลู รว่ มกัน โดยไอพซี ีจะจัดเตรียมการดาเนนิ งานอย่างนอ้ ย 2 ข้ันตอน คือ Send / Receive Message สาหรับการส่ือสาร โดยอาศัยช่องทางท่ีเรียกว่า การเชื่อมโยงการส่ือสาร Communication Link กระบวนการท่ีทาการส่งจะต้องสร้างการเชื่อมโยงกับโพรเซสที่ทาหน้าท่ีรับ เสียก่อน ส่วนการเชื่อมโยงการสื่อสารน้ันสามารถทาได้หลายวิธี โดยอาจเป็นแบบกายภาพ (Physical) เช่น ใช้หน่วยความจาร่วมกนั ระบบฮารด์ แวร์บสั ระบบเครือข่ายรว่ มกนั หรอื แบบตรรกะ Logical ก็ได้ ถ้าใช้แบบตรรกะกส็ ามารถทาได้หลายวิธี โดยอาศัยการเชื่อมโยงและการดาเนนิ การแบบ Send / Receive เข้ามาช่วย ได้แก่ 1. การส่ือสารทางตรงและทางออ้ ม (Direct / Indirect communication) 2. การสื่อสารแบบสมมาตรและแบบอสมมาตร (Symmetric / Asymmetric) 3. การปรบั อตั รา (Buffering) แบบอตั โนมตั ิหรือแบบชัดเจนขา่ วสารแบบขนาดคงท่ีหรอื แปรผัน

ระบบปฏิบตั ิการคอมพิวเตอร์ (Operating Systems) 33 ในการใช้งานการเช่ือมโยง (Link) เสน้ ทางการสื่อสารระหว่างโพรเซสนนั้ จาเปน็ ต้องพิจารณา ประเดน็ คาถามดังต่อไปน้ี  จะทาการตดิ ตง้ั สายการเชือ่ มโยงไดอ้ ย่างไร  สายการเช่ือมโยงหนึ่งเสน้ สามารถใชส้ ื่อสารได้มากกว่าหน่ึงโพรเซสหรือไม่  ตอ้ งมจี านวนสายการเช่อื มโยงกระบวนการก่ีเสน้  ความจุของสายควรมขี นาดเท่าใด  ขนาดของข่าวสารที่ใช้ส่ือสารกันจะมรี ูปแบบคงทห่ี รอื แปรผนั  สายการเช่ือมโยงจะเป็นแบบเดย่ี ว (Unidirectional) หรือแบบคู่ (Bi-directional) การตั้งช่ือ (Naming) กระบวนการท่ีต้องการสื่อสารกับโพรเซสอื่นจะต้องมีวิธีในการอ้างอิงถึงซ่ึง สามารถส่ือสารกันได้ทัง้ ทางตรงและทางอ้อม โดยการสื่อสารทางตรง (Direct communication) โพ รเซสทตี่ ้องการสอ่ื จะต้องใชช้ อ่ื ทชี่ ดั เจนท้งั ฝง่ั รับ และฝงั่ สง่ ในรปู แบบดังนี้  send (P, message) ส่งข่าวสารไปยงั โพรเซส P  receive (Q, message) รบั ข่าวสารจากโพรเซส Q การเชือ่ มโยงการส่อื สารจะต้องมีคุณสมบตั ิ ดงั นี้  ทัง้ ฝงั่ รับและฝัง่ ส่งจะต้องติดต้ังการเชื่อมโยงระหวา่ งกันโดยอัตโนมัติ  การเชอ่ื มโยงจะทาเฉพาะคู่ของฝงั่ รบั และฝ่ังส่งเท่านน้ั  ฝัง่ รับและฝัง่ สง่ จะมีการเช่ือมโยงเพยี งเสน้ เดยี วเทา่ นนั้  สายการเชื่อมโยงสามารถใชไ้ ดท้ ั้งแบบทางเดีย่ วและทางคู่ แตโ่ ดยทว่ั ไปใช้แบบทางคู่ ในการกาหนดตาแหน่งที่อยู่แบบสมมาตร ทั้งผู้รับและผู้ส่งจะต้องมีชื่อสาหรับการสื่อสารกัน ในขณะที่ตาแหน่งท่ีอยู่แบบอสมมาตรนั้น ผู้ส่งระบุเพียงชื่อของผู้รับเท่าน้ัน แต่ผู้รับไม่จาเป็นต้องระบุชื่อผู้ สง่ ตามรปู แบบขา้ งลา่ ง ดังนี้  send (P, message) สง่ ขา่ วสารไปยังกระบวนการ P  receive (id, message) รับข่าวสารทีถ่ ูกส่งมาจากกระบวนการใด ๆ ก็ได้ โดยตัวแปร id จะแทนกลุ่มของชอ่ื กระบวนการท่สี อื่ สารกนั ข้อดอ้ ยของวิธแี บบสมมาตรและแบบอสมมาตรก็คือ มขี ้อจากดั เกยี่ วกบั ชือ่ มากเกินไป ถา้ มกี าร เปล่ียนชอ่ื ของกระบวนการจะตอ้ งแจ้งไปยงั สมาชิกทั้งหมด เวลาจะแกไ้ ขช่อื ใหมจ่ ะต้องหาช่อื เดมิ ท่ีอา้ งอิง เสียกอ่ น ซ่งึ ถอื วา่ ไม่ยืดหยนุ่

34 บทที่ 2 การจัดการโพรเซส 2.7.3 การติดต่อทางตรง (Direct Communication) การตดิ ต่อแบบน้แี ต่ละโพรเซสทีต่ ้องการตดิ ต่อกนั จะต้องกาหนดช่อื เฉพาะท่ใี ช้ในการติดตอ่ ท้งั ผู้รบั และผสู้ ง่ ยกตัวอย่างเช่น ถ้าต้องการสง่ เมสเสจจาก A ไป B จะมีการกาหนดรปู แบบคอื  send (B, message) จะเป็นการสง่ เมสเสจไปยังโพรเซส B  receive (A, message) จะเปน็ การรบั เมสเสจจากโพรเซส A ลิงค์แบบนีจ้ ะมคี ุณสมบัติดังนี้ 1. การสร้างลงิ คจ์ ะเป็นแบบอัตโนมตั ิระหวา่ งคู่ของโพรเซสที่ต้องการตดิ ต่อ (ในที่น้คี ือ A กับ B) โพรเซสจะทราบหมายเลขโพรเซสทีจ่ ะติดต่อดว้ ย 2. ลงิ ค์หน่ึง ๆ จะมีความสัมพันธ์เฉพาะโพรเซสสองโพรเซสเท่าน้นั 3. ระหว่างโพรเซสแต่ละคนู่ ัน้ จะมเี พยี งลิงค์เดียวเท่านนั้ 4. ลิงค์นเ้ี ป็นได้ทงั้ ทิศทางเดยี ว และสองทศิ ทาง แตป่ กติจะเปน็ แบบสองทิศทาง วิธีการรับ-ส่งเมสเสจแบบนี้ ระบบปฏิบัติการจะไม่ดาเนินการติดต่อให้กับโพรเซสทั้งสอง โดบทั้ง สองโพรเซสจะต้องจัดการเอง ตัวอย่างการส่งเมสเสจจากโพรเซส A ไปโพรเซส B หลังจากสร้างลิงค์ เรียบร้อยแล้ว ท้ังโพรเซส A และโพรเซส B จะจองหน่วยความจาท่ีมีการกาหนดให้สามารถใช้ร่วมกัน (โพรเซสท้ังสองจะทราบว่าหน่วยความจานั้นอยู่ตาแหน่งใด) โพรเซส A จะนาข้อมูลไปวางบนตาแหน่ง หน่วยความจาที่จองไว้ โพรเซส B จะตอ้ งคอยตรวจสอบว่าโพรเซส A วางขอ้ มลู หรือยัง ถ้ายังไม่มกี ารวางก็ จะยงั ไมด่ ึงข้อมูล รอจนกระท่ังโพรเซส A วางเรียบรอ้ ยแลว้ จึงจะดึงขอ้ มูลนั้นไปใช้งาน สว่ นโพรเซส A ก็ จะต้องตรวจสอบเช่นกันว่าข้อมูลที่ตนเองวางน้ันโพรเซส B ดึงไปใช้งานหรือยัง ถ้ายังไม่ดึง โพรเซส A จะต้องรอก่อน ยังไม่มีการวางข้อมูลใหม่ เพื่อป้องกันการวางข้อมูลใหม่ทับข้อมูลเดิมซึ่งจะมีผลให้การ ทางานไม่สมบูรณ์ (ข้อมูลหายไป) รอจนกระท่ังการดึงข้อมูลเรียบร้อยจึงวางข้อมูลใหม่ได้ ทาเช่นน้ีเร่ือยไป จนกว่าข้อมูลจะหมด กลไกท่ีใช้ในการตรวจสอบเวลาท่ีเหมาะสมในการรับ-ส่งข้อมูลน้ีเรียกว่า Process synchronization 2.7.4 การส่ือสารทางออ้ ม (Indirect Communication) ด้วยการสื่อสารทางอ้อมข่าวสารจะถูกส่งและรับผ่านทางตู้ไปรษณีย์ หรือเรียกทับศัพท์ว่า เมลล์บ็อกซ์ (Mail box) หรือพอร์ต (Port) โดยเมลล์บ็อกซ์จะมีเลขที่ซึ่งไม่ซ้ากันกากับไว้ ทุกโพรเซส สามารถติดต่อสื่อสารถึงกันโดยอาศัยเมลล์บ็อกซ์ดังกล่าวน้ี ในบางกรณีอาจมีมากกว่าหนึ่งโพรเซสท่ี สามารถใช้เมลล์บ็อกซ์รว่ มกนั ได้ การปฏิบัตงิ านเกี่ยวกับเมลลบ์ อ็ กซ์ทส่ี ามารถทาไดม้ ดี ังน้ี 1. การสรา้ งเมลล์บอ็ กซ์ใหม่ 2. การสง่ ข่าวสารผา่ นเมลลบ์ ็อกซ์ 3. การลบเมลล์บ็อกซ์ การส่ง / รบั ทส่ี ามารถทาได้มีดงั น้ี

ระบบปฏิบตั ิการคอมพวิ เตอร์ (Operating Systems) 35  send (A, message) ส่งขา่ วสารไปยงั เมลล์บ็อกซ์ A  receive (A, message) รบั ขา่ วสารจากเมลลบ์ ็อกซ์ A การเชื่อมโยงการสื่อสารด้วยวิธีดังกล่าว จะต้องมีการสร้างความเช่ือมโยงไว้ระหว่างกันทั้งสองโพ รเซสที่ใช้เมลล์บ็อกซ์ร่วมกัน สายเชือ่ มโยงหนึ่งเส้นสามารถรองรับการเชื่อมโยงของโพรเซสได้มากกวา่ สอง โพรเซส โพรเซสแต่ละคู่สามารถใช้สายเช่ือมโยงเพื่อติดต่อกันได้หลายเส้นทาง สายการเช่ือมโยงอาจใช้ได้ ทั้งแบบทางเด่ียวและทางคู่ แต่เนื่องจากเมลล์บ็อกซ์มีการใช้งานร่วมกันมากกว่าหนึ่งโพรเซส จึงอาจเกิดปัญหาในการสื่อสาร ขึ้นมาได้ สมมติว่ากระบวนการ P1, P2 และ P3 ต่างใช้ตู้ไปรษณีย์ A ร่วมกัน เมื่อ P1 ส่งข่าวสารไปยังตู้ ไปรษณีย์ A | P2 หรือ P3 จะเปน็ ผู้ได้รบั ข่าวสารจาก P1 เพอ่ื แกป้ ญั หาดงั กลา่ ว ระบบจะตอ้ งมี ข้อกาหนดต่าง ๆ ดังนี้ 1. อนุญาตใหส้ ายการเช่ือมโยงหนึ่งเส้นรองรบั กระบวนการได้มากทสี่ ุดเพียงสองโพรเซสเทา่ นัน้ 2. อนญุ าตให้มีเพยี งกระบวนการเดียวท่ีสามารถรบั ข่าวสารจากเมลลบ์ ็อกซ์ ณ ขณะใดขณะหนึง่ ใหร้ ะบบเป็นผูตดั สินใจชข้ี าดวา่ จะเลือกให้กระบวนการใดเปน็ ผู้รบั ข่าวสารนนั้ และแจง้ ว่าใคร เป็นผู้รับไปให้ผู้สง่ ทราบ 3. อนญุ าตใหร้ ะบบเลือกว่าโพรเซสใดท่ีจะเขา้ รับเมสเสจ (ในที่นอ้ี าจจะเป็นโพรเซส 2 หรือ โพรเซส 3 กไ็ ด้ แต่ไม่ใชค้ รัง้ ละสองโพรเซสพร้อมกนั ) โดยระบบจะกาหนดผรู้ ับไปยังผูส้ ง่ ก่อน การส่ง โครงสร้างของเมลล์บ็อกซ์แบบคิว เป็นโครงสร้างที่ดึงข้อมูลออกจากเมลล์บ็อกซ์ตามลาดับก่อน- หลังของข้อมูลที่ส่งเข้ามา น่ันคือข้อมูลใดส่งเข้ามาในเมลล์บ็อกซ์ก่อนก็จะถูกดึงออกไปก่อน ส่วนข้อมูลใด ส่งเข้ามาภายหลังก็จะถูกดึงออกไปภายหลัง อาจเรียกการทางานแบบน้ีว่า FIFO (First In First Out) ลักษณะโครงสร้างเมลล์บอ็ กซแ์ บบคิวเป็นดงั ภาพท่ี 2.16 ขอ้ มลู เขา้ เมลล์บอกซ์ ข้อมลู ออกจากเมลลบ์ อกซ์ ภาพที่ 2.16 เมลล์บอ็ กซแ์ บบควิ เมลล์บ็อกซ์แบบไปป์ โครงสร้างของเมลล์บ็อกซ์แบบน้ีเป็นโครงสร้างท่ีคล้ายกับโครงสร้างแบบคิว คือ การดึงข้อมูลจะเป็นในลักษณะที่ข้อมูลใดส่งเข้ามาก่อนก็จะถูกดึงออกไปก่อน ข้อมูลใดส่งเข้ามา ภายหลังจะถูกดึงออกไปใช้งานภายหลัง ข้อแตกต่างระหว่างเมลล์บ็อกซ์แบบคิวกับเมลล์บ็อกซ์แบบไปป์ คือ เมลล์บ็อกซ์แบบคิวจะมีขนาดบ็อกซ์คงท่ี ถ้าใส่ข้อมูลมากเกินไปเมลล์บ็อกซ์จะเต็ม แต่ถ้าเป็นเมลล์ บ็อกซ์แบบไปป์ขนาดของบ็อกซ์จะยืดหยุ่นได้ ทาให้สามารถใส่ข้อมูลในเมลล์บ็อกซ์ได้มากเท่าที่ต้องการ เมลล์บอ็ กซจ์ ะขยายตวั โดยอตั โนมัติ ลกั ษณะโครงสร้างเมลล์บอ็ กซแ์ บบไปป์เปน็ ดังภาพท่ี 2.17

36 บทที่ 2 การจัดการโพรเซส ขอ้ มูลเข้าเมลล์บอกซ์ ขอ้ มลู ออกจากเมลลบ์ อกซ์ ภาพท่ี 2.17 เมลล์บ็อกซแ์ บบไปป์ เมลล์บ็อกซแ์ บบสแตก็ โครงสร้างของเมลล์บ็อกซ์แบบนีเ้ ป็นโครงสร้างตรงข้ามกับเมลลบ์ ็อกซ์แบบ คิวในการดึงข้อมูล น่ันก็คือข้อมูลใดส่งเข้าเมลล์บ็อกซ์ก่อนจะถกู ดึงออกไปใช้งานภายหลัง โดยจะนาข้อมูล ที่ส่งเข้ามาภายหลังออกไปใช้ก่อน อาจเรียกการทางานแบบนี้ว่า LIFO (Last In First Out) ลักษณะ โครงสร้างเมลล์บ็อกซแ์ บบสแต็กเป็นภาพท่ี 2.18 ข้อมลู เข้าเมลล์บอกซ์ ข้อมลู ออกจากเมลล์บอกซ์ ภาพที่ 2.18 เมลล์บ็อกซแ์ บบสแตก์ 2.8 การปรับอัตรา การจัดบัฟเฟอร์ในการสร้างลิงค์ นอกจากจะเป็นการกาหนดเส้นทางข้อมูลแล้ว ลงิ ค์ยังมีความจุที่ เป็นตัวเลขแสดงจานวนเมสเสจท่ีสามารถเก็บไว้ชั่วคราวได้ คุณสมบัตินี้อาจจะมองว่าเป็นคิวของเมสเสจที่ ผูกติดลิงค์ก็ได้ การสื่อสารระหว่างโพรเซสนั้นอาจเป็นแบบทางตรงหรือทางอ้อมก็ได้ ข่าวสารจะถูก แลกเปลีย่ นโดยกระบวนการสือ่ สาร ซึ่งอย่ใู นกองซ้อนชวั่ คราว (Temporary queue) โดยพืน้ ฐานแลว้ เรา จะมีวธิ ใี ชง้ านกองซอ้ นชว่ั คราวได้ วิธีใดวธิ ีหนึง่ สามวิธดี ังนี้ ความจุค่าศูนย์ (Zero capacity) ขนาดสูงสุดของกองซ้อนมีค่าเป็นศูนย์ หมายความว่า จะมี ข่าวสารอยู่ในกองซ้อนได้เพียงชุดเดียวเท่าน้ัน ในกรณีน้ีผู้ส่งจะต้องบล็อกรอจนกระทั่งผู้รับได้รับข่าวสาร เรยี บรอ้ ยแลว้ จึงจะทาอย่างอื่นได้ ความจุค่าจากัด (Bounded capacity) ขนาดความจุของกองซ้อนมีค่าจากัดเท่ากับ n ดังนั้นจึง รองรับข่าวสารได้มากถึง n จานวนเท่าความจุถ้ามีข่าวสารใหม่เข้ามาและกองซ้อนยังไม่เต็ม ก็จะเก็บไว้ใน กองซ้อน ฝั่งท่ีส่งก็ไม่จาเป็นต้องหยุดรอ แต่ถ้ากองซ้อนหรือสายการเชื่อมโยงเต็ม ท่ีส่งจาเป็นต้องหยุดรอ จนกระทง่ั มพี ้ืนที่ว่างในกองซ้อนจงึ จะสามารถวางข่าวสารได้ ความจุค่าไม่จากัด (Unbounded capacity) ขนาดของกองซ้อนมีคา่ เป็นอนันต์ ดังน้นั จึงสามารถ รองรบั ขา่ วสารไดท้ ั้งหมดโดยผู้ส่งไม่จาเปน็ ต้องหยดุ รอ

ระบบปฏิบัตกิ ารคอมพวิ เตอร์ (Operating Systems) 37 ในกรณีของความจุค่าศูนย์ บางทีหมายถึง ระบบข่าวสารที่ไม่มีการปรับอัตราส่วนอีก 2 กรณีหลัง เรยี กว่า การปรับอัตราแบบอตั โนมัติ อาจกล่าวไดว้ ่าความจุศูนย์เป็นระบบท่ีไม่มีบฟั เฟอร์กไ็ ด้ สว่ นกรณีอ่ืน มีการจัดบัฟเฟอร์ให้อัตโนมัติ สาหรับในกรณีที่ไม่ใช่ศูนย์ โพรเซสจะไม่รู้เลยว่าเมสเสจถึงปลายทางหรือไม่ หลังจากการสง่ เสร็จสนิ้ ไปแล้ว ถ้าขอ้ มูลน้ีมคี วามสาคัญในการคานวณ ผู้สง่ จะต้องติดต่อกับผรู้ ับเพ่ือหาเมส เสจท่ีส่งมาครั้งหลังสุด ตัวอย่างเช่น ถ้าโพรเซส P ส่งเมสเสจไปยังโพรเซส Q และสามารถทางานได้ต่อไป เฉพาะหลงั จากที่เมสเสจไดร้ บั ไปแลว้ โพรเซส P จะมีข้นั ตอนดงั น้ี send (Q, message); receive (Q, message); โพรเซส Q จะเอก็ ซิคิวต์คาสง่ั receive (P, message); send (P, “acknowledgment”); การรับส่งเมสเสจระหว่างโพรเซส P และโพรเซส Q ในลักษณะนี้เรียกว่า Asynchronous อยา่ งไรก็ตามยังมี 2-3 กรณที ่ไี มเ่ ขา้ กลุม่ ใดตามทก่ี ล่าวมาแล้วนี้ โดยสามารถอธิบายได้ดงั ต่อไปนี้ 1. การส่งเมสเสจของโพรเซสได้โดยไม่ต้องคอย กรณีนี้ถา้ ผูร้ ับยังได้รับเมสเสจก่อนที่ผู้ส่งจะส่งเมส เสจอ่ืน เมสเสจแรกจะหายไป ข้อได้เปรียบของกรณีน้ีก็คือ เมสเสจขนาดใหญ่ไม่จาเป็นต้องสาเนาไว้หลาย คร้ังส่วนข้อเสียเปรียบ คือ การเขียนโปรแกรมของงานจะมีความยุ่งยาก โพรเซสเหล่าน้ีจาเป็นต้องมีการ ซินโครไนซ์แบบพิเศษเพื่อให้ม่ันใจว่าเมสเสจไม่สูญหายไปไหน ท้ังผู้รับและผูส้ ่งไม่ต้องคานวณบัฟเฟอร์ของ เมสเสจ 2. การส่งเมสเสจของโพรเซสจะล่าช้าออกไปจนกว่าโพรเซสจะได้รับคาตอบ วิธีการนี้นามาใช้ใน ระบบปฏิบัติการท่ีช่ือว่า Thoth โดยในระบบนี้เมสเสจจะมีขนาดแน่นอน (8 word) โพรเซส P ที่เมสเสจ จะถูกบล็อกจนกว่าโพรเซสที่ทาหน้าที่รับเมสเสจแล้วส่งคาตอบกลับมา 8 word ในรูปแบบคาสั่ง reply(P,message) เมสเสจที่ตอบมานี้จะเขียนทับบัฟเฟอร์ด้ังเดิมของเมสเสจ ข้อแตกต่างระหว่าง send คอื คาสั่ง send จะทาให้โพรเซสที่ส่งเมสเสจเกิดการบลอ็ ก ในขณะท่ีมีการตอบกลับจะยอมให้ทง้ั โพรเซสท่ี ส่งเมสเสจ และโพรเซสทร่ี ับเมสเสจสามารถทางานต่อไปไดเ้ ลยโดยไมม่ ีการบล็อก 2.9 เง่อื นไขข้อยกเว้น ระบบเมสเสจมปี ระโยชน์บนสภาพแวดล้อมระบบแบบกระจาย ซ่ึงโพรเซสอาจจะอยู่บนเครื่องอื่น ๆ ในสภาพแวดล้อมที่กล่าวถึง ความน่าจะเป็นท่ีจะเกิดข้อผิดพลาดระหว่างการติดต่อส่ือสารระหว่าง โพ รเซสจะมากกว่าในสภาพแวดลอ้ มทเ่ี ป็นเครื่องเดียว สาหรับสภาพแวดล้อมทีเ่ ป็นเคร่อื งเดียว เมสเสจจะอยู่ ในหน่วยความจาทใ่ี ช้แชร์ข้อมลู รว่ มกัน ถ้าเกิดข้อผิดพลาดขึ้นระบบโดยรวมจะลม่ แต่สาหรับในระบบแบบ กระจายเมสเสจจะถูกถ่ายโอนไปตามสาย การเกิดข้อผิดพลาดที่เคร่ืองใดเคร่ืองหน่ึงไม่จาเป็นที่ระบบ โดยรวมจะล่ม ทั้งระบบที่เป็นศูนย์กลางหรือระบบแบบกระจายข้อผิดพลาดอาจจะได้รับการแก้ไข ตอนนี้ มาพจิ ารณาเง่อื นไขยกเวน้ ที่ระบบตอ้ งดแู ลเมสเสจ

38 บทที่ 2 การจัดการโพรเซส 2.9.1 การสนิ้ สดุ ของโพรเซส ถ้าผู้รับหรือผู้ส่งเมสเสจสิ้นสุดก่อนเมสเสจจะเอกซิคิวต์ ในสภาวะแบบนี้ทาให้เมสเสจจะถูกกาจัด ทาใหผ้ รู้ บั ไมไ่ ดร้ บั เมสเสจ หรอื ผู้สง่ ไม่ไดส้ ่งเมสเสจ ลองพิจารณา 2 กรณดี ังน้ี 1. ผรู้ บั โพรเซส P อาจจะรอเมสเสจจากโพรเซส Q ทสี่ ้ินสดุ ไปแลว้ ถา้ ไม่มีการกระทาใด ๆ เกดิ ขึ้น โพรเซส P จะถูกบลอ็ กตลอดไป ในกรณีน้ีระบบอาจจะสัง่ ให้โพรเซส P สิน้ สุด หรอื อาจจะแจ้งให้ โพรเซส P ทราบว่าโพรเซส Q สิน้ สดุ ไปแลว้ กไ็ ด้ 2. โพรเซส P อาจจะส่งเมสเสจไปยังโพรเซส Q ที่ส้ินสุดไปแล้ว รูปแบบการจัดบัฟเฟอร์แบบ อัตโนมตั ิจะไม่เกิดอันตรายใด ๆ โดย P ยงั คงเอ็กซคิ ิวต์ต่อไป ถ้าโพรเซส P ต้องการทราบว่าเมสเสจของตน นน้ั โพรเซส Q เอ็กซิคิวตห์ รอื ไม่ จะตอ้ งมีโปรแกรมพเิ ศษสาหรบั การแจ้งให้ทราบ แต่ในกรณที ี่ไม่มีบัฟเฟอร์ โพรเซส P จะถูกบล็อกตลอดไปเช่นเดียวกับข้อ 1 ระบบอาจจะสั่งให้ P สิ้นสุด หรืออาจจะแจ้งให้ P ทราบวา่ Q ส้ินสุดไปแลว้ กไ็ ด้ 2.9.2 การสูญหายของเมสเสจ เมสเสจจากโพรเซส P ทสี่ ง่ ไปยังโพรเซส Q อาจจะสูญหายระหว่างทางของการสอื่ สารกไ็ ด้ ซึ่ง อาจจะเปน็ ขอ้ ผดิ พลาดดา้ นฮาร์ดแวรห์ รือสายสอ่ื สาร มี 3 วธิ ีพ้ืนฐานในการจัดการเหตุการณ์น้ี 1. ระบบปฏิบัติการมีหน้าที่รับผิดชอบในการตรวจสอบการสูญหายนี้ เพ่ือส่งเมสเสจไปใหม่ 2. โพรเซสท่ีทาหน้าท่ีส่งเมสเสจ มีหน้าที่รับผิดชอบในการตรวจสอบการสูญหายเพ่ือส่งเมสเสจ ใหม่ถา้ ตอ้ งการอีก 3. ระบบปฏิบัติการมีหน้าท่ีรับผิดชอบในการตรวจสอบการสูญหายน้ี หลังจากน้ันจะแจ้งให้ โพรเซสทีท่ าหน้าทสี่ ่งเมสเสจที่เกดิ การสูญหาย เพือ่ ให้ส่งเมสเสจไปใหม่ จะทาการตรวจสอบได้อย่างไรวา่ เมสเสจเกดิ การสญู หายไปจากระบบ วิธกี ารตรวจสอบทีง่ ่ายท่ีสุด คือใช้การกาหนดช่วงเวลา Timeout เม่ือเมสเสจถูกส่งออกไปจะมีสัญญาณตอบกลับมา ระบบปฏิบัติการ หรือโพรเซสอาจจะกาหนดช่วงเวลาที่แน่นอน โดยคาดการณจ์ ากสัญญาณการตอบรับที่ มาถงึ ถ้าช่วงเวลา เกิดการเหลื่อมก่อนท่ีสัญญาณการตอบรับจะมาถึง ระบบปฏิบัติการอาจจะกาหนดว่า เมสเสจน้ันสูญ หายไปและจะต้องส่งเมสเสจใหม่ อย่างไรก็ตามถ้าเมสเสจไม่ได้สญู หายไปจากระบบจริงแต่เกิดการใชเ้ วลา ในการเดินทางในเครือข่ายมาก ในกรณีนี้ระบบอาจจะตอ้ งทาสาเนาเมสเสจท่ีส่งไปยังเครือข่ายและจะต้อง มีกลไกเพือ่ แบ่งแยกประเภทของเมสเสจเหล่านัน้ ด้วย 2.10 สรปุ ปัญหาหน่ึงในการอธิบายเก่ียวกับระบบปฏิบัติการ คือ เราจะเรียกกิจกรรมของซีพียูว่าอย่างไรดี ในระบบการทางานแบบกลุ่มเรียกว่า Job ในระบบแบ่งปันส่วนเรียกว่า โปรแกรมผู้ใช้หรือ Task แม้แต่ ระบบผู้ใช้คนเดียวอย่าง MS-DOS และ Macintosh ผู้ใช้เครื่องอาจให้หลาย ๆ โปรแกรมทางานพร้อมกัน ไดโ้ ดยโปรแกรมหนึง่ เป็นโปรแกรมโต้ตอบและที่เหลอื เป็นแบบกลุ่ม

ระบบปฏิบตั ิการคอมพวิ เตอร์ (Operating Systems) 39 ท้ังน้ีอาจเรียกโปรแกรมท่ีกาลังทางานอยู่ว่าโพรเซส การทางานของโพรเซสต้องเป็นแบบลาดับ หรืออีกนัยหน่ึงคือ ณ เวลาใดเวลาหน่ึง จะต้องมีหนึ่งคาส่ังท่ีกาลังดาเนินการอยู่ในนามของโพรเซสน้ี โพรเซสไม่ได้หมายความเพียงโปรแกรมและการทางานเท่าน้ัน แต่รวมถึง Program counter (พวก รีจิสเตอร์ในซีพียู ), Stack (ข้อมูลชั่วคราว), Data section (ใช้เก็บตัวแปรแบบ Global) โปรแกรมที่เป็น กระบวนการเหมือนส่ิงไม่มีชีวิต (Passive entity) เช่น คาส่ังท่ีเก็บไว้ในจานบันทึก ส่วนกระบวนการ เสมือนส่ิงมีชีวิต (Active entity) มี Program counter ทาหน้าท่ีช้ีบรรทัดคาส่ังที่จะทางานต่อไป และ กลุม่ ของทรพั ยากรทเี่ ก่ยี วขอ้ ง ถึงแม้ว่าอาจมีโพรเซสสองโพรเซสทางานอยู่บนโปรแกรมเดียวกัน ต้องนับว่าเป็นการทางาน ตามลาดับแยกจากกัน เป็นเรื่องปกติที่โพรเซสหลักจะสร้างโพรเซสย่อยหลาย ๆ โพรเซสในขณะทางาน การสอ่ื สารระหว่างโพรเซสจะอยู่ในรูปแบบที่เรียกว่า การส่งและการรบั ซึ่งสามารถออกแบบในการรับ-ส่ง ข่าวสารเป็นแบบบล็อกเรียกว่า การประสานเวลา หรือแบบ Non-Blocking บางทีเรยี กว่าแบบไม่ประสาน เวลากไ็ ด้ การส่งแบบบล็อกฝ่ังผู้ส่งจะต้องหยุดรอจนกว่าข่าวสารที่ถูกส่งไปถึงที่รับแล้ว ซึ่งรับโดยโพรเซส หรือตู้ไปรษณีย์ก็ได้ แล้วมีการตอบรับจากผู้รับ การส่งแบบ Non-Blocking send ผู้ส่งไม่จาเป็นต้องการ การตอบรับจากผู้รับ การรับแบบ Blocking receive ฝั่งผู้รับจะต้องหยุดรอจนกว่าจะได้รับข่าวสารอย่าง ครบถ้วน การรับแบบ Non-Blocking receive ฝ่ังผู้รับไม่ต้องรอจนกระทั่งส่งเสร็จ สามารถเรียกใช้ ข่าวสาร ซงึ่ อาจไดข้ ่าวสารท่ีถูกต้องหรือเป็นคา่ ว่าง (null) กไ็ ด้ การประสานเวลาของโพรเซสจะได้ศึกษาใน บทตอ่ ไป แบบฝึกหดั ท้ายบทท่ี 2 1. จงอธบิ ายและเขยี นแผนภาพสถานะของโพรเซสในแต่ละสถานะมาโดยสังเขป 2. จงอธิบายแตล่ ะองคป์ ระกอบของ PCB (Process Control Block) มาอย่างน้อย 5 องคป์ ระกอบ พรอ้ ม ยกตัวอย่างการทางาน 3. จงอธบิ ายการสลบั การทางานระหวา่ งโพรเซส 4. จงบอกความแตกตา่ งของ Job queue, Ready queue และ Device queue 5. จงอธบิ ายเหตผุ ลอะไรบ้างโพรเซสทตี่ ้องแบ่งข้อมลู ใหก้ บั โพรเซสอน่ื ทเ่ี ป็นโพรเซสรว่ ม ทท่ี าใหต้ ้อง จดั เตรียมสง่ิ แวดลอ้ มใหก้ ับโพรเซสท่ีต้องทางานร่วมกัน 6. จงใช้แผนภาพน้ีอธิบายการทางานของโพรเซสร่วมกับสถานะของโพรเซส

40 บทที่ 2 การจัดการโพรเซส 7. จงเขยี นแผนภาพพรอ้ มอธิบายการสอื่ สารกันของโพรเซสแบบส่งผ่านขอ้ ความ และการใช้หน่วยความจา รว่ มกัน 8. ในการปรับอตั ราในการสือ่ สารระหว่างโพรเซส จงอธิบายวา่ มปี ระโยชน์อย่างไร 9. จงอธิบายการพิจารณาเงือ่ นไขข้อยกเวน้ ท่ีระบบต้องดูแลเมสเสจ มเี หตผุ ลอะไรบ้าง บรรณานกุ รมประจาบทท่ี 2 พเิ ชษฐ์ ศิรริ ัตนไพศาลกลุ . (2548). ระบบปฏิบัติการ. กรุงเทพฯ : ซเี อด็ ยเู คชั่น. ยรรยง เต็งอานวย. (2533). ระบบปฏิบตั ิการ. กรงุ เทพฯ : ซีเอด็ ยเู คช่ัน. สุจติ รา อดลุ ย์เกษม. (2552). ทฤษฎี ระบบปฏบิ ตั ิการ Operating Systems. กรุงเทพฯ : โปรวิช่นั . Abraham Silberschatz, Peter Baer Galvin, Greg Gagne. (2013). Operating System Concepts. 9th ed. Wiley & Sons, Inc. Andrew S. Tanenbaum, Maarten van Steen. (2002). Distributed Systems Principles and Paradigms. Prentice Hall, Pearson Education International. M.Sc TU. Blog. Retrieved April 2, 2014 from http://msctu.blogspot.com/2010/03/


Like this book? You can publish your book online for free in a few minutes!
Create your own flipbook