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 OS Unit2

OS Unit2

Published by patiwat3, 2018-06-30 01:08:13

Description: OS Unit2

Search

Read the Text Version

บทที่ 2โปรเซส2.1 โปรเซส(Process) หน้าท่ีประการหน่ึงของ OS ก็คือการจัดสรรทรัพยากรของระบบ OS จะต้องแบ่งทรัพยากรที่มีอยจู่ าํ กดั ให้กบั ผูท้ ี่ตอ้ งการใชท้ รัพยากรเหล่าน้นั ผูท้ ี่นาํ ทรัพยากรไปใชก้ ็คือโปรเซส(process) โปรเซสเป็นองคป์ ระกองท่ีสาํ คญั ของการทาํ งานของระบบคอมพวิ เตอร์ เราจึงควรศึกษาวธิ ีการจดั การโปรเซสของ OS เสียก่อน การศึกษาเร่ืองโปรเซส เป็นหวั ใจของการทาํ ความเขา้ ใจระบบคอมพวิ เตอร์ที่มีผใู้ ชห้ ลายคน(multi-user computer system) คาํ ว่าโปรเซสถูกใชค้ ร้ังแรกโดยผอู้ อกแบบระบบมลั ติกส์ (Multics)ในทศวรรษ 1960 มีการใหค้ วามหมายของคาํ วา่ \"โปรเซส\" ไวห้ ลายความหมายเช่น - โปรแกรมท่ีกาํ ลงั ถูกเอก็ ซีคิ้ว - กิจกรรมที่มีการทาํ งานสมั พนั ธ์กนั - ส่ิงซ่ึงถูกมอบหมายไปใหโ้ พรเซสเซอร์ - หน่วยซ่ึงถกู ส่งต่อได้ (dispactchable) - ฯลฯ ยงั ไม่มีความหายใดที่เป็นท่ียอมรับทุกคนแต่ความหมายที่วา่ โปรเซส คือโปรแกรมที่กาํ ลงัถูกเอ็กซีคิ้ว น้ันถูกใช้บ่อยมากท่ีสุด ดังน้ันจึงถือเอาความหมายน้ีเป็ นความหมายของคาํ ว่าโปรเซส เราอาจเปรียบเทียบโปรแกรมเหมือนกบั รถยนตท์ ี่จอดน่ิงอยู่พร้อมท่ีจะวิ่งไป ในระบบหลายโปรแกรม (Multiprogramming) โปรเซสอาจเปรียบไดก้ บั รถยนตท์ ี่เร่ิมวิ่งออกจากจุดเร่ิมตน้ถา้ มีหลายโปรเซสอยใู่ นระบบกเ็ หมือนกบั การที่เรามีรถหลายคนั ท่ีจะตอ้ งออาวิ่งไปพร้อมๆ กนั ตวัซีพียูเปรียบไดก้ บั คนขบั รถ ถา้ มีซีพียูเพียบตวั เดียวก็คือมีคนขบั รถเพียบคนเดียว ดงั น้ันเม่ือรถหลายคนั ออกวิ่งการท่ีคนขบั รถคนเดียวจะพารถหลายๆ คนั วิ่งไปตอ้ งขบั รถทีละคนั ให้ว่ิงเดินหนา้ออกไปทีละนิด เวียนเปล่ียนไปจนครบทุกคนั จนถึงจุดหมายปลายทาง (โปรแกรมส้ินสุดลง)น้นั คือเราสามารถมีโปรเซสไดห้ ลายๆ โปรเซสทาํ งานไปพร้อมๆ กนั ไดโ้ ดยมีซีพยี เู พยี งตวั เดียว

56 ระบบปฏิบตั ิการ2.1.1 องค์ประกอบของโปรเซสโปรเซสท่ีสมบูรณ์จะตอ้ งมีส่วนประกอบต่างๆ ดงั น้ี 1. ชื่อและหมายเลขประจาํ ตวั (process ID) ของโปรเซส ซ่ึงตอ้ งไม่ซ้าํ กบั โปรเซสอ่ืน 2. โคด้ ของโปรแกรม (program code) เป็นคาํ สงั่ ที่สามารถเอก็ ซีคิ้วไดท้ นั ที (ภาษาเครื่อง) 3. ขอ้ มูล (data) ท่ีโปรแกรมตอ้ งการหรือจดั การ ขอ้ มูลน้ีอาจเป็นของโปรเซสใดโปรเซสหน่ึง หรืออาจใชไ้ ดร้ ่วมกนั กบั โปรเซสอื่นๆ กไ็ ด้ 4. บลอ็ กควบคุมโปรเซส (process control block) หรือ PCB OS กาํ หนดเน้ือที่บางส่วนในหน่วยความจาํ เพอ่ื ทาํ เป็น PCB PCB เป็นโครงสร้างขอ้ มูลชนิดหน่ึงซ่ึงเกบ็ ขอ้ มูลที่สาํ คญั ๆ ของโปรเซสน้นั ๆ เอาไว้ ขอ้ มูลเหล่าน้ีไดแ้ ก่ - สถานะของโปรเซสที่เป็นอยใู่ นปัจจุบนั - หมายเลขประจาํ ตวั ของโปรเซส - ลาํ ดบั ความสาํ คญั ของโปรเซส - พอยนเ์ ตอร์ช้ีไปยงั ตาํ แหน่งท่ีอยขู่ องโปรเซสในหน่วยความจาํ - พอยนเ์ ตอร์ช้ีไปยงั ทรัพยากรต่างๆ ท่ีโปรเซสครอบครอง - พ้นื ท่ีท่ีเกบ็ ค่าของรีจีสเตอร์ (register save area) PCB เป็นศูนยก์ ลางในการเกบ็ ขอ้ มูลสาํ คญั ท้งั หลายของโปรเซสท่ี OS ตอ้ งการ เมื่อ OSทาํ การมอบหมายซีพยี ใู หโ้ ปรเซสอื่นไดใ้ ชบ้ า้ ง OS จะเกบ็ ขอ้ มูลต่างๆ ของโปรเซสเดิมไวใ้ นPCB เพื่อที่จะนาํ มาใชอ้ ีกคร้ัง เมื่อโปรเซสน้ีไดก้ ลบั มาใชห้ รือครอบครองซีพียู 5. PSW (program status words) เป็นตวั ควบคุมลาํ ดบั การเอก็ ซีคิ้วคาํ สงั่ ของโปรเซสและยงั เกบ็ ขอ้ มูลเกี่ยวกบั สถานะของโปรเซส แอดเดรสของคาํ สงั่ ต่อไปท่ีจะถูกเอก็ ซีคิ้วจะถูกเกบ็ไวใ้ น PSW PSW น้ีจึงมีหนา้ ที่คลา้ ยๆ กบั โปรแกรมเคานเ์ ตอร์บนเคร่ืองไมโครคอมพิวเตอร์ 6. คุณสมบตั ิของโปรเซส ไดแ้ ก่ 6.1 ลาํ ดบั ความสาํ คญั (Priority) ของโปรเซส โปรเซสแต่ละตวั จะถูกกาํ หนดความสาํ คญัข้ึนขณะท่ีโปรเซสถูกสร้างข้ึน ความสาํ คญั น้ีอาจเปลี่ยนแปลงไดห้ รือไม่ไดส้ ุดแลว้ แต่ OSโปรเซสที่มีความสาํ คญั มาก OS กจ็ ะใหส้ ิทธิพเิ ศษมากกวา่ โปรเซสท่ีมีความสาํ คญั นอ้ ย เช่น ให้เวลาของซีพยี นู านกวา่ (ใหค้ รอบครองซีพยี ไู ดน้ านกวา่ ) 6.2 อาํ นาจหนา้ ท่ี (authority) เป็นสิ่งท่ีบ่งบอกวา่ โปรเซสน้นั ๆ สามารถทาํ อะไรไดบ้ า้ งใชอ้ ุปกรณ์ชิ้นไหนไดบ้ า้ งเป็นตน้ ตวั อยา่ งเช่นโปรเซส A หา้ มใชด้ ิสกใ์ ดๆ ท้งั สิ้นแต่สามารถรับขอ้ มูลจากทุกๆ โปรเซสในระบบได้ 6.3 คุณสมบตั ิอื่นๆ ที่ OS จะกาํ หนดใหม้ ี

โปรเซส 572.1.2 สถานะของโปรเซสโปรเซสต่างๆ ในระบบจะต้องมสี ถานะการทาํ งานสถานะในสถานหนึง่ ต่อไปนี้ 1. สถานะพร้อม (ready state) คือสถานะท่ีโปรเซสพร้อมท่ีจะใชซ้ ีพียทู นั ทีที่ OS มอบหมายให้ ในสถานะน้ีไม่มีการรันของโปรเซส (โปรเซสหยดุ นิ่ง) 2. สถานะรัน (running state) คือสถานะท่ีโปรเซสกาํ ลงั ครอบครองซีพียอู ยู่ มีการรันของโปรเซสจริงๆ เพราะโปรเซสใชซ้ ีพียเู อก็ ซีคิ้วคาํ สง่ั หรือโคด้ โปรแกรมของโปรเซสน้นั 3. สถานะติดขดั (waiting state) คือสถานะที่โปรเซสหยดุ รอสถานการณ์ใดเหตุการณ์หน่ึงใหเ้ กิดข้ึน โปรเซสไม่จาํ เป็นตอ้ งใชซ้ ีพยี แู ละยงั ไม่พร้อมท่ีจะครอบครองซีพียู จึงแยกสถานะน้ีออกมาต่างหาก 4. สถานะพกั (Terminate state) คือสถานะที่โปรเซสไม่มีการทาํ งานใด ๆ หยดุ นิ่งอยา่ งสมบูรณ์ไม่มีการรอการใชซ้ ีพยี หู รือเหตุการณ์ใดๆ ใหเ้ กิดข้ึน โปรเซสสามารถเปลี่ยนสถานะจากสถานะหน่ึงไปอีกสถานะหน่ึงได้ แต่จะเปล่ียนไปเป็นสถานะใดน้นั ข้ึนอยกู่ บั สภาพการทาํ งานของระบบสถานะของโปรเซสและการทาํ งานของโปรเซสในขณะน้นั2.1.2.1 การเปลยี่ นสถานะของโปรเซส เมื่อผใู้ ชต้ อ้ งการส่งงานใหเ้ ครื่องคอมพิวเตอร์รัน โดยการสง่ั ใหโ้ ปรแกรมทาํ งานผา่ นทางOS OS จะรับทราบความตอ้ งการน้ี และเตรียมที่จะสร้างโปรเซสใหก้ บั งานใหม่ท่ีถูกส่งเขา้ มาน้ีแต่โปรเซสจะถูกสร้างข้ึนมาไดจ้ ะตอ้ งมีโคด้ คาํ สง่ั ของโปรแกรม (ซ่ึงเกบ็ ไวใ้ นไฟลท์ ี่ผใู้ ชส้ นั่ รัน)ขอ้ มูลที่โปรแกรมตอ้ งการใช้ และที่สาํ คญั ที่สุดคือ ตอ้ งมีเน้ือที่ในหน่วยความจาํ หลกั เพยี งพอสาํ หรับโปรเซสใหม่ที่กาํ ลงั จะเขา้ ไปในระบบ ถึงแมว้ า่ จะมีโคด้ ของโปรแกรมและขอ้ มูลเตรียมไว้พร้อมแลว้ แต่ถา้ ในขณะน้นั น้ีโปรเซสอื่นๆ อยใู่ นระบบเม่ือโปรเซสถูกสร้างข้ึนมาใหม่โปรเซสจะอย่ใู นสถานะพร้อมก่อน ไม่สามารถเขา้ ไปใชง้ านซีพียูไดท้ นั ที เพื่อให้ผูอ้ ่านเขา้ ใจลกั ษณะการเปลี่ยนแปลงสถานะต่างๆ ของระบบไดด้ ีย่ิงข้ึนเราจะสมมุติว่าระบบคอมพิวเตอร์เป็ นระบบท่ีมีผูใ้ ช้หลายๆ คนในเวลาเดียวกนั แต่มีซีพียูอยู่เพียงตวัเดียว ดงั น้นั ในระบบจึงมีโปรเซสหลายๆ โปรเซสเหล่าน้ีต่างก็ตอ้ งการใชซ้ ีพียเู พ่ือให้ตวั ของมนัรันต่อไปแต่เน่ืองจากซีพียมู ีอยเู่ พียงตวั เดียว ดงั น้นั ในขณะที่มีโปรเซสหน่ึงเขา้ ไปใชซ้ ีพียโู ปรเซสอื่นจะตอ้ งรออยู่ในสถานะพร้อมอยู่เพียงตวั เดียว ดงั น้ันในขณะที่มีโปรเซสหน่ึงเขา้ ไปใช้ซีพียูโปรเซสอ่ืนจะตอ้ งรออยใู่ นสถานะพร้อมก่อน ในสถานะพร้อมมีคิวของโปรเซสต่างๆ ท่ีรอการใช้ซีพียู เม่ือโปรเซสใหม่ถูกสร้างข้ึน โปรเซสใหม่น้ีจึงต้องเขา้ มาต่อท้ายคิวในสถานะพร้อมเสียก่อน และเมื่อเวลาผา่ นไปโปรเซสน้ีจะค่อยๆ เคล่ือนไปอยทู่ ่ีตน้ คิว

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

โปรเซส 59start en read run รูปท่ี 2.2 การเปลยี่ นสถานะของโปรเซสระหว่างสถานะพร้อมและสถานะรัน ภายในระยะเวลาควอนตมั ถา้ โปรเซสจบลง (อาจเพราะโปรเซสสิ้นสุดการทาํ งานเองหรือผูใ้ ชย้ ตุ ิ) โปรเซสกจ็ ะออกจากระบบไป ทรัพยากรต่างๆ ท่ีโปรเซสครองครองก็จะถูก ส่งคืนให้กลบั ระบบ แต่ถา้ โปรเซสตอ้ งการใชอ้ ุปกรณ์อินพุต-เอาตพ์ ุต หรือเกิดอินเตอร์รัพข้ึน OS จะยา้ ยโปรเซสท่ีอยใู่ นสถานะรันน้ีไปอยใู่ นสถานะติดขดั และดึงเอาโปรเซสที่รออยใู่ นสถานะพร้อมให้เขา้ ไปอยใู่ นสถานะรันแทน รูป 2.3 เป็นการแสดงการเปล่ียนแปลงสถานะของโปรเซสในลกั ษณะดงั กล่าวซ่ึงส่วนใหญ่จะเป็นเช่นน้ี รูปท่ี 2.3 การเปลย่ี นแปลงสถานะโดยทวั่ ไปของโปรเซส โปรเซสที่เขา้ มาอยใู่ นสถานะติดขดั คือโปรเซสท่ีตอ้ งการใชง้ านอุปกรณ์อินพตุ -เอาตพ์ ตุหรือเกิดสญั ญาณอินเตอร์รัพข้ึน ในช่วงเวลาน้ีโปรเซสไม่จาํ เป็นตอ้ งใชซ้ ีพยี แู ต่กาํ ลงั รอเหตุการณ์

60 ระบบปฏิบตั ิการบางอยา่ งใหเ้ กิดข้ึนเช่น รอเหตุการณ์ที่อุปกรณ์อินพตุ -เอาตพ์ ตุ ทาํ งานที่โปรเซสตอ้ งการเสร็จ หรือรอใหโ้ ปรเซสที่จดั การกบั อินเตอร์รัพท่ีเกิดข้ึนเสร็จสิ้น ถา้ เราใหโ้ ปรเซสที่กาํ ลงั รอใชซ้ ีพียอู ยใู่ นคิวของสถานะพร้อม เราจึงกาํ หนดสถานะติดขดั ข้ึนมาเพอื่ ยา้ ยเอาโปรเซสท่ียงั ไม่ตอ้ งการใชง้ านซีพียูออกมาต่างหากและเม่ือใดท่ีเหตุการณ์ที่โปรเซสน้นั รออยเู่ กิดข้ึนแสดงว่าโปรเซสตอ้ งการรันต่อไปOS จะยา้ ยโปรเซสน้ีกลบั ไปต่อคิวในสถานะพร้อมใหม่ เพื่อรอการใชซ้ ีพียตู ่อไป (ดูรูป 2.3) การเปลี่ยนแปลงสถานะท้งั 3 ของโปรเซสเป็นการเปล่ียนสถานะในสภาพธรรมดาทว่ั ไปแต่ถา้ เกิดเหตุการณ์ผดิ ปกติข้ึน OS อาจยา้ ยโปรเซสไปในสถานะพกั ดว้ ยสาเหตุต่อไปน้ี1. เกิดการทาํ งานของระบบผดิ พลาด กรณีน้ีโปรเซสต่างๆ อาจถูกยา้ ยไปอยใู่ นสถานะพกั ชวั่ คราวเม่ือมีการแกไ้ ขระบบจนสามารถทาํ งานไดต้ ามปกติจึงยา้ ยโปรเซสต่างๆ กลบั ไป2. ผใู้ ชต้ อ้ งการหยดุ การทาํ งานของโปรเซสชวั่ คราว เหตุการณ์น้ีต่างกบั กรณีท่ีผใู้ ชส้ งั่ ยตุ ิโปรเซสถา้ ผใู้ ชส้ งั่ ใหโ้ ปรเซสหยดุ ชวั่ คราว โปรเซสน้นั จะไม่จบและออกจากระบบไป แต่ OS จะนาํโปรเซสน้นั ไปไวใ้ นสถานะพกั ชวั่ คราวก่อนเท่าน้นั เม่ือใดท่ีผใู้ ชส้ งั่ ใหโ้ ปรเซสรันต่อไปได้ OSจึงยา้ ยโปรเซสน้นั กลบั ไปทาํ งานตามปกติ3. ในระบบมีงานมากเกินไป OS ไม่สามารถตอบสนองการทาํ งานของโปรเซสท้งั หมดได้ OS จึงนาํ เอาโปรเซสบางโปรเซสไปเกบ็ ไวใ้ นสถานะพกั ชวั่ คราวก่อน รอจนจาํ นวนโปรเซสในระบบลดลงมาอยใู่ นระดบั ปกติ จึงค่อยยา้ ยโปรเซสเหล่าน้นั กลบั มาทาํ งาน end read run Jam รูปท่ี 2.4 การเปลย่ี นสถานะพกั ของโปรเซสจากรูป 2.4 จะเห็นว่าเราแบ่งแยกสถานะของโปรเซสออกเป็น 2 ส่วนคือ ส่วนของสถานะพร้อมสถานะรัน สถานะติดขดั และส่วนของสถานะพกั ท้งั น้ีเป็นเพราะในสถานะพกั โปรเซสหยดุ การทาํ งานทุกสิ่งจริง ๆ ไม่มีการเคลื่อนไหว ไม่มีความคืบหน้าของการทาํ งานซ่ึงตรงกบั ในอีกส่วนหน่ึงถึงแมว้ ่าในสถานะพร้อมโปรเซสไม่ไดท้ าํ งาน แต่โปรเซสมีกาํ ลงั เคล่ือนตวั ไปเรื่อยๆ เพ่ือ

โปรเซส 61จะไปอยู่ตน้ คิว และในสถานะติดขดั โปรเซสกาํ ลงั รอผลของ บางอย่าง ซ่ึงงานเหล่าน้นั ถือเป็ นงานของโปรเซสดว้ ย ดงั น้นั จึงนบั ไดว้ า่ ท้งั สถานะพร้อมและสถานะติดขดั โปรเซสไม่ไดห้ ยดุ นิ่ง ถา้ โปรเซสถูกยา้ ยจากสถานะรันหรือสถานะพร้อมไปเป็นสถานะพกั เมื่อเหตุการณ์ผดิ ปกติสิ้นสุดลง OS จะนาํ โปรเซสเหลา่ น้ีกลบั ไปเขา้ คิวในสถานะพร้อม ไม่นาํ กลบั เขา้ ไปในสถานะรันเพราะในขณะท่ีโปรเซสเหล่าน้ีไปอยใู่ นสถานะพกั อาจมีโปรเซสอื่นๆ กาํ ลงั ใชซ้ ีพยี จู ึงไม่สามารถนาํ เอาโปรเซสท่ีออกจากสถานะรันถูกยา้ ยไปสถานะพกั แลว้ กลบั เขา้ ไปสถานะรันเหมือนเดิมได้ ถา้โปรเซสถูกยา้ ยจากสถานะติดขดั ไปอยใู่ นสถานะพกัเม่ือยา้ ยโปรเซสน้นั ออกจากสถานะพกั โปรเซสกจ็ ะถูกยา้ ยจากสถานะติดขดั ไปอยสู่ ถานะพกั เมื่อยา้ ยโปรเซสน้นั ออกจากสถานะพกั โปรเซสกจ็ ะถูกยา้ ยกลบั มาอยใู่ นสถานะติดขดั เหมือนเดิม แต่ก็มีโอกาสที่โปรเซสที่อยใู่ นสถานะติดขดั ถูกยา้ ยไปสถานะพกั แลว้ กลบั มาอยใู่ นสถานะพร้อมแทนท่ีจะเป็นสถานะติดขดั ซ่ึงเกิดข้นึ ไดเ้ พราะในขณะที่โปรเซสน้นั อยใู่ นสถานะพกั เหตกุ ารณ์ท่ีโปรเซสน้นั รอไม่ไดห้ ยดุ การทาํ งานตามไปดว้ ย ถา้ เหตกุ ารณ์ที่โปรเซสรอเกิดข้ึนในช่วงเวลาน้ีหลงั จากท่ีโปรเซสถูกยา้ ยออกมาจากสถานะพกั โปรเซสน้ีจะไปอยใู่ นสถานะพร้อม2.1.3 การจดั การโปรเซส แนวความคิดเร่ืองโปรเซสทาํ ใหเ้ กิดความสะดวกในการจดั การการทาํ งานของระบบที่รันหลายโปรแกรมไดพ้ ร้อมกนั ในระบบที่สามารถทาํ งานไดเ้ พยี งคร้ังละหน่ึงโปรแกรมการจดั การทาํไดง้ ่าย OS จะดูแลเฉพาะการเร่ิมตน้ ไดห้ ลายโปรแกรม OS มีหนา้ ที่เพมิ่ ข้ึน ตอ้ งจดั การการสบัหลีกการทาํ งานของโปรแกรม ตอ้ งดูแลการทาํ งานของแต่ละโปรแกรมเพ่อื ใหม้ ีการทาํ งานที่เขา้จงั หวะกนั ตอ้ งดูแลการติดต่อระหว่างโปรแกรม (ถา้ มี) ส่ิงเหล่าน้ีทาํ ให้ OS ตอ้ งมีความซบั ซอ้ นเพม่ิ ข้ึนอีกมาก การออกแบบระบบใหม้ ีการทาํ งานเป็นโปรเซสช่วยใหก้ ารจดั การระบบทาํ ได้สะดวกยงิ่ ข้ึน ตวั OS เองก็เป็ นโปรเซสที่ทาํ งานอยู่บนระบบคอมพิวเตอร์ตลอดเวลา การจดั การต่างๆเก่ียวกบั โปรเซสเป็ นหน้าที่ของ OS เช่น การเปลี่ยนสถานะของโปรเซส การแกไ้ ขขอ้ มูลในPCB เป็นตน้ OS ประกอบไปดว้ ยโปรเซสหลายๆ โปรเซส ซ่ึงทาํ หนา้ ที่แตกต่างกนั ออกไป ลกั ษณะที่น่าสนใจประการหน่ึงในการจดั การโปรเซส คือ เวลาของแต่ละโปรเซสในขณะท่ีไม่มีการทาํ งานจะหยดุ น่ิงเป็ นตน้ ว่าระบบหน่ึงมีช่วงเวลาควอนตมั 1 มิลิวินาที (ms) โปรเซส Aเขา้ ไปอยใู่ นสถานะรัน 2 คร้ัง และเสียเวลารอการใชซ้ ีพียู 10 ms เวลาของโปรเซสจะมีเพียง แค่2 ms ไม่ใช่ 12 ms ดงั แสดงในรูป 2.5 ช่วงเวลา และ 12 เป็นช่วงเวลาที่โปรเซส A หยดุ รอในคิวของสถานะพร้อม ซ่ึงช่วงเวลาน้ีเวลาของโปรเซส A หยดุ นิ่ง

62 ระบบปฏิบตั ิการ รูปที่ 2.5 เวลาของโปรเซส A2.1.3.1 ลาํ ดบั ช้ันของโปรเซส (Process Hierarchy) ดงั ท่ีกล่าวแลว้ OS เองกป็ ระกอบดว้ ยโปรเซสหลายๆ โปรเซส เมื่อผใู้ ชง้ านส่งงานหรือโปรแกรมใหร้ ะบบรัน OS จะสร้างโปรเซสสาํ หรับงานน้นั ข้ึนมา โปรเซสของผใู้ ชน้ ้ีเป็นโปรเซสยอ่ ยของโปรเซสของ OS และเนื่องจากโปรเซสของ OS มีคุณสมบตั ิเหมือนกบั โปรเซสอ่ืนๆโปรเซส ดงั น้นั โปรเซสอื่นๆ (รวมท้งั โปรเซสของผใู้ ชด้ ว้ ย) กส็ ามารถมีโปรเซสยอ่ ยของมนั ได้การที่โปรเซสมีโปรเซสยอ่ ยข้ึนมาเรียกวา่ การใหก้ าํ เนิด (spawn) โปรเซสผใู้ หก้ าํ เนิดน้นั จะเรียกว่า โปรเซสแม่ (parent process) และโปรเซสยอ่ ยท่ีเกิดข้ึนเรียกวา่ โปรเซสลกู (childprocess) โปรเซสลูกท่ีถูกสร้างข้ึนกเ็ ป็นโปรเซสโดยสมบูรณ์เช่นกนั ดงั น้นั มนั จึงสามารถทาํ ใหก้ าํ เนิดโปรเซสลูกต่อไปไดเ้ ร่ือยๆ เกิดเป็นลาํ ดบั ช้นั ของโปรเซส(process hierarchy) ข้ึน มีลกั ษณะเป็นโครงสร้างแบบตน้ ไม้ (tree structure) โปรเซสหน่ึงๆ จะมีโปรเซสแม่ไดเ้ พียงโปรเซสเดียว แต่สามารถใหก้ าํ เนิดโปรเซสลูกไดห้ ลายโปรเซส A BC DE F รูปที่ 2.6 ตวั อย่างลกั ษณะลาํ ดบั ช้ันของโปรเซส

โปรเซส 63 ตวั อยา่ งในรูป 2.6 โปรเซส A มีโปรเซสลูก 2 โปรเซสคือ โปรเซส B และ C โปรเซสC ใหก้ าํ เนิดโปรเซสลูกออกมา 3 โปรเซสคอื D E และ F โปรเซสต่างๆ ของผใู้ ชจ้ ะเป็นโปรเซสลูกของ OS เพราะถูกสร้างข้ึนโดย OS ขอ้ สาํ คญั ประการหน่ึงเก่ียวกบั การใหก้ าํ เนิดโปรเซส คือ โปรเซสไม่ไดเ้ ป็นผสู้ ร้างโปรเซสลูก แต่เป็นผใู้ หก้ าํ เนิดเท่าน้นั OS จะมีโปรเซสหน่ึงทาํ หนา้ ท่ีสร้างและยตุ ิโปรเซสโดยเฉพาะ มีชื่อวา่ ตวั จดั คิวในระยะยาว ซ่ึงจะกล่าวในบทต่อไป โดยทวั่ ไป เมื่อโปรเซสแม่จบลง โปรเซสต่างๆ ท่ีอยภู่ ายใตต้ วั มนั (โปรเซสลูกและโปรเซสท่ีถูกกาํ เนิดข้ึนภายใตโ้ ปรเซสลูก) กจ็ ะจบลงตามไปดว้ ย ตวั อยา่ งเช่น ลาํ ดบั ช้นั ของโปรเซสในรูป2.7 ถา้ โปรเซส H จบลง โปรเซส J K L และ M จะจบลงดว้ ย และถา้ โปรเซส A จบลง ทุกโปรเซส ในรูป 2.7 จะตอ้ งจบลงตามไปดว้ ย อยา่ งไรกต็ าม OS บางตวั ยนิ ยอมใหโ้ ปรเซสแม่จบลง แต่โปรเซสลูกไมต่ อ้ งจบลงตามกไ็ ด้ ยงั คงสามารถทาํ งานต่อไปไดจ้ นกระทง่ั เสร็จสิ้นในกรณีน้ีโปรเซสลูกกไ็ ม่มีโปรเซสแม่ A BCDE FG HI JK LM รูปที่ 2.7 ตวั อย่างลาํ ดบั ช้ันของโปรเซส2.1.3.2 ตารางข้อมูลการประมวลผล (Process Control Block – PCB) ระบบปฏิบตั ิการ แทนโปรเซสต่าง ๆ ดว้ ยตารางขอ้ มูลของโปรเซส (PCB) หรืออาจเรียกวา่Task Control Block ซ่ึงกเ็ ป็นระเบียน หรือ ตารางขอ้ มูลที่ใชเ้ กบ็ ขอ้ มูลต่างๆ ที่เกี่ยวขอ้ งกบั แต่ละโปรเซสโดยเฉพาะ ดงั รูป

64 ระบบปฏิบตั ิการ รูปท่ี 2.8 ตารางข้อมูลการประมวลผลขอ้ มูลต่าง ๆ ที่ปรากฏใน PCB มีดงั ต่อไปน้ี- สถานะของโปรเซส (Process State) จะเกบ็ สถานะต่าง ๆ ไดแ้ ก่ new , running , waiting , ready หรือ terminate- ตวั ช้ีโปรแกรม (program counter) จะเป็นตวั บอกตาํ แหน่งบรรทดั คาํ สง่ั ในโปรแกรมที่โปรเซส จะทาํ งานเป็นอนั ดบั ถดั ไป- รีจีสเตอร์ของหน่วยประมวลผล (CPU Register) จาํ นวนและชนิดของ Register น้ี ข้ึนอยกู่ บั ฮาร์ดแวร์ของเครื่องน้นั ไดแ้ ก่ Accumulator Register, Index Register, Stack Pointer , General- purpose Register , Condition-Code Information เมื่อมีสญั ญาณมาขดั จงั หวะการทาํ งานของหน่วย ประมวลผล ระบบตอ้ งเกบ็ ค่าต่าง ๆ ใน รีจีสเตอร์ เหล่าน้ีรวมท้งั ตวั ช้ีโปรแกรมไว้ เพ่ือใหก้ ระบวน การสามารถกลบั มาทาํ งานต่อ ณ จุดเดิมท่ีถูกขดั จงั หวะได้

โปรเซส 65 รูปท่ี 2.9 ซีพยี ูสามารถสลบั การทาํ งานจากโปรเซสหน่ึงไปอกี โปรเซสหน่ึง- ขอ้ มูลในการจดั ตารางทาํ งานของหน่วยประมวลผลกลาง (CPU Scheduling Information) คือ ขอ้ มูลเกี่ยวกบั ศกั ด์ิ (Priority) ของโปรเซส , ตวั ช้ีแถวคอย , หรือตวั แปรอื่นใดในการจดั ตาราง การทาํ งาน- สารสนเทศเก่ียวกบั การจดั การหน่วยความจาํ (Memory – Management Information) ไดแ้ ก่ รีจีส เตอร์ฐาน (base register) และ รีจีสเตอร์ขอบเขต (limit register) หรือตารางแบ่งหนา้ (page tables) หรือตารางส่วน (segment tables)- ขอ้ มูลทางการบญั ชี (Accounting Information) ไดแ้ ก่ จาํ นวนหน่วยประมวลผลกลาง และเวลา จริงท่ีถูกใชไ้ ป , ขอ้ จาํ กดั ดา้ นเวลา , เลขที่บญั ชี , หมายเลขงานหรือโปรเซส- ขอ้ มูลสถานะการรับ-ส่งขอ้ มูล (I/O Status Information) ไดแ้ ก่ คาํ ร้องขอรับ – ส่งขอ้ มูลท่ียงั คา้ ง อยู่ , อุปกรณ์รับ-ส่งขอ้ มูลที่โปรเซสน้นั ๆ กาํ ลงั ถือครองอยู่ , รายช่ือของแฟ้มขอ้ มูลท่ีกาํ ลงั ถือครองอยู่ , รายช่ือของแฟ้มขอ้ มูลที่กาํ ลงั ใชอ้ ยู่ เป็นตน้PCB เปรียบเสมือนที่เกบ็ สารสนเทศต่าง ๆ ของแต่ละโปรเซส

66 ระบบปฏิบตั ิการ2.1.3.3 การจดั ตารางโปรเซส (Process Scheduling) จุดประสงค์ของการทํางานแบบ multiprogramming คือ การพยายามที่จะทําให้หน่วยประมวลผลกลางทาํ งานอย่างมีประสิทธิผลสูงสุด โดยจดั ให้มีโปรเซสเขา้ ไปทาํ งานในหน่วยประมวลผลตลอดเวลา แต่สําหรับระบบท่ีมีหน่วยประมวลผลเดียว (Uniprocessor system) จะมีเพียง 1 โปรเซสเท่าน้ันที่สามารถใช้หน่วยประมวลผลกลางได้ และในกรณีท่ีมีหลายโปรเซสตอ้ งการเขา้ ใชห้ น่วยประมวลผลกลาง งานเหล่าน้นั ตอ้ งรอจนกว่าหน่วยประมวลผลกลางจะว่างลงแลว้ จึงมีการจดั ตารางการใชห้ น่วยประมวลผลกลางใหม่อีกคร้ัง2.1.3.4. การจดั ตารางแถวคอย (Scheduling Queue) เมื่อโปรเซสเขา้ สู่ระบบ โปรเซสจะถูกจดั ใหอ้ ยใู่ นแถวคอย (Job Queue) ในหน่วยเกบ็ ขอ้ มูลขนาดใหญ่ (เช่น จานบนั ทึก) เมื่อโปรเซสไดเ้ ขา้ สู่หน่วยความจาํ หลกั แลว้ โปรเซสน้นั จะถูกเกบ็ ในรายการแบบเชื่องโยง (Link List) ท่ีเรียกวา่ แถวพร้อม (Ready Queue) ซ่ึงโปรเซสภายในแถวพร้อมน้ีเป็นโปรเซสที่อยใู่ นหน่วยความจาํ หลกั และพร้อมที่จะทาํ งาน เพยี งแค่กาํ ลงั รอคอยเพ่ือท่ีจะเขา้ ใช้หน่วยประมวลผลกลางเพอื่ ทาํ งานต่อไป โดยที่แถวพร้อมจะเกบ็ ตวั ช้ี (Pointer) ที่ช้ีไปยงัตารางขอ้ มูลของโปรเซส (PCB) ของโปรเซสแรกและโปรเซสสุดทา้ ยในแถวพร้อม และในแต่ละPCB กจ็ ะมีตวั ช้ีไปยงั PCB ที่อยถู่ ดั ไปดว้ ย เมื่อโปรเซสไดใ้ ชห้ น่วยประมวลผลกลาง และทาํ งานไปไดร้ ะยะเวลาหน่ึง โปรเซสน้นั อาจตอ้ งหยดุ ทาํ งานเพราะงานเสร็จหรือ หยดุ รอเหตุการณ์บางอยา่ งใหเ้ กิดข้ึน เช่น รออุปกรณ์รับ-ส่งขอ้ มูล เน่ืองจากมีโปรเซสหลายโปรเซสทาํ งานอยใู่ นระบบ ดงั น้นั โปรเซสท้งั หลายอาจตอ้ งเขา้แถวคอยเพอ่ื ท่ีจะใชอ้ ปุ กรณ์รับ-ส่งขอ้ มูลต่าง ๆซ่ึงแถวคอย อุปกรณ์ดงั กล่าว เรียกว่า “แถวอุปกรณ์”(Device Queue) โดยอุปกรณ์แต่ละตวั จะมีแถวคอยเป็นของตวั เอง ดงั รูป

โปรเซส 67 รูปที่ 2.10 ความพร้อมของตารางแถวคอยและตารางแถวคอยของอุปกรณ์ I/O ในกรณีท่ีอุปกรณ์ตวั น้นั เป็นอุปกรณ์ที่ใชเ้ ฉพาะงานใดงานหน่ึง เช่น เคร่ืองขบั เทป แถวคอยของอุปกรณ์ตวั น้นั กจ็ ะมีเพียง 1 โปรเซสเท่าน้นั แต่ถา้ เป็นอุปกรณ์ที่สามารถใชร้ ่วมกนั ได้ เช่น จานบนั ทึกภายในแถวคอยของอุปกรณ์ตวั น้นั กอ็ าจมีหลายโปรเซสคอยอยไู่ ด้ รูปถดั ไป แสดง“แผนภาพของแถวคอย” (Queuing Diagram) รูปส่ีเหลี่ยมผนื ผา้ แทน แถวคอย 2 แบบ คือ แถวพร้อมและแถวอุปกรณ์ วงกลมแทนทรัพยากรซ่ึงเป็นเจา้ ของแถวคอยน้นั ๆ เส้นลูกศรแสดงทิศทางการไหลของโปรเซสในระบบ รูปท่ี 2.11 แผนภาพของแถวคอย

68 ระบบปฏิบตั ิการ เมื่อมีโปรเซสใดโปรเซสหน่ึงเขา้ สู่แถวพร้อม โปรเซสน้นั จะรออยู่ในแถวพร้อม จนกระทง่ัถูกเลือกให้เป็ นผูใ้ ช้หน่วยประมวลผลกลาง และหลงั จากที่โปรเซสได้ถูกจัดให้เข้าใช้หน่วยประมวลผลกลาง แลว้ ขณะที่โปรเซสกาํ ลงั ทาํ งานอยู่ อาจมีเหตุการณ์หน่ึงเหตุการณ์ใดเกิดข้ึนดงั น้ีคือ- โปรเซสร้องขออุปกรณ์รับ-ส่งขอ้ มูล ดงั น้นั จึงถูกจดั ใหร้ อในแถวอุปกรณ์– โปรเซสสร้าง (fork) โปรเซสยอ่ ย และรอจนโปรเซสยอ่ ยทาํ งานเสร็จ– โปรเซสถูกขดั จงั หวะโดยระบบ ทาํ ใหต้ อ้ งหยดุ การทาํ งาน และถูกยา้ ยไปไวใ้ นแถวพร้อมอีก คร้ัง2.1.3.5 ตวั จดั ตารางการทาํ งาน (Schedulers) โปรเซสหน่ึงๆจะถูกยา้ ยจากแถวคอยหน่ึงไปยงั อีกแถวคอยหน่ึงอยตู่ ลอดเวลาท่ีโปรเซสน้นัทาํ งานอยู่ ซ่ึงระบบปฏิบตั ิการจะเป็นผเู้ ลือกโปรเซสจากแถวคอยแต่ละแถวออกมา โดยการเลือกโปรเซสออกมาน้นั จะกระทาํ โดยตวั จดั ตาราง (Scheduler) ที่เหมาะสม- ตวั จดั ตารางระยะยาว (Long-term Scheduler) ทาํ หนา้ ท่ีเลือกโปรเซสจากหน่วยเกบ็ ขอ้ มูลเพ่ือนาํ เขา้ สู่หน่วยความจาํ หลกั- ตวั จดั ตารางระยะส้นั (Short-term Scheduler หรือ CPU Scheduler) ทาํ หนา้ ท่ีเลือกโปรเซสที่รออยใู่ นแถวพร้อมข้ึนมาเพ่ือเขา้ ใชห้ น่วยประมวลผลกลางต่อไปตวั จดั ตารางการทาํ งานท้งั สองแบบมีขอ้ แตกต่างหลกั ๆ คือ ความถ่ีในการทาํ งาน ตวั จดัตารางระยะส้นั จะตอ้ งทาํ งานเลือกโปรเซสค่อนขา้ งบ่อย เพราะโปรเซสอาจทาํ งานในหน่วยประมวลผลกลางเพยี ง 2-3 มิลลิวินาที แลว้ หยดุ ค่อยการรับส่งขอ้ มูล โดยปกติตวั จดั ตารางระยะส้นัน้ีจะทาํ งานอยา่ งนอ้ ยทุก ๆ 10 มิลลิวินาที ซ่ึงนบั วา่ บ่อยมาก ดงั น้นั ตวั จดั ตารางระยะส้ันตอ้ งสามารถทาํ งานไดเ้ ร็วมากในส่วนของตวั จดั ตารางระยะยาว จะมีความถี่ในการทาํ งานน้อยมาก ท่ีเป็ นเช่นน้ีเพราะว่าการสร้างโปรเซสใหม่ให้แก่ระบบอาจใชเ้ วลาเป็ นนาที และเน่ืองจากตวั จดั ตารางระยะยาวเป็นตวัควบคุมจาํ นวนกระบลวนการที่เขา้ สู่ระบบ ดงั น้นั ถา้ จาํ นวนโปรเซสที่ทาํ งานขนานกนั ในระบบมีเป็นจาํ นวนคงท่ีนน่ั หมายความว่า ค่าเฉล่ียในการสร้างโปรเซสหรือนาํ โปรเซสเขา้ สู่หน่วยความจาํหลกั ของระบบจะเท่ากบั ค่าเฉล่ียของงานที่ออกจากระบบดว้ ยเหตุน้ีตวั จดั การทาํ งานจะทาํ งานก็ต่อเม่ือมีโปรเซสออกจากระบบ ซ่ึงนับเป็ นช่วงเวลาที่ยาวนาน ดงั น้ันตวั จดั ตารางระยะยาวก็จะมีเวลาในการตดั สินใจเลือกโปรเซสเป็นเวลานานดว้ ย

โปรเซส 69 ขอ้ สาํ คญั ที่สุดของตวั จดั ตารางระยะยาวกค็ ือ จะเป็นผทู้ ีเลือกโปรเซสใหเ้ ขา้ สู่ระบบ โดยการเลือกดงั กล่าวจะตอ้ งก่อให้เกิดการทาํ งานอยา่ งสมดุลข้ึนในระบบ หมายความว่า ในระบบจะตอ้ งมีจาํ นวนโปรเซสที่ใชเ้ วลาส่วนใหญ่ทาํ งานกบั หน่วยประมวลผลกลาง (CPU-Bound Job) และจาํ นวนโปรเซสท่ีใชเ้ วลาส่วนใหญ่ทาํ งานกบั อุปกรณ์รับ-ส่งขอ้ มูล (I/O-bound job) เป็นไปอยา่ งเหมาะสมระบบปฏิบัติการบางระบบ (เช่น time-sharing) อาจจะมีการจดั ตารางการทาํ งานในระดบั กลางเพ่มิ ข้ึนอีกเรียกว่า ตวั จดั ตารางระยะกลาง (Medium-term scheduler) ดงั แสดงไดด้ งั ภาพ รูปที่ 2.12 Medium-term schedulerตวั จดั ตารางระยะกลาง จะทาํ หนา้ ที่ยา้ ยโปรเซสออกจากหน่วยความจาํ หลกั เพื่อที่จะลดจาํ นวนโปรเซสที่มีมากเกินไปในหน่วยความจาํ (ลด Degree of Multiprogramming) ทาํ ใหห้ น่วยประมวลผลทาํ งานไดด้ ีข้ึน สาํ หรับโปรเซสท่ีถูกยา้ ยออกไปน้ีจะถูกนาํ กลบั เขา้ มาในหน่วยความจาํใหมอ่ ีก เม่ือถึงเวลาที่เหมาะสม โดยจะเริ่มทาํ งานต่อจากจุดที่ออกไปจากระบบ วธิ ีการเคลื่อนยา้ ยโปรเซสดงั กล่าวน้ีเรียกว่า วธิ ีการยา้ ยท่ี (swapping) ช่วยใหร้ ะบบสามารถปรับสดั ส่วนของโปรเซสแต่ละแบบใหเ้ หมาะสม (Process mix) หรือช่วยลดความตอ้ งการใชห้ น่วยความจาํ หลกั ลงบา้ ง2.1.3.6. การเปลยี่ นงาน (Context Switch) การเปล่ียนโปรเซสท่ีทาํ งานในหน่วยประมวลผล จากโปรเซสหน่ึงไปเป็นอีกโปรเซสหน่ึงจาํ เป็นตอ้ งเกบ็ ค่าสถานะของโปรเซสเดิม และนาํ เอาคา่ สถานะของโปรเซสใหม่มาลง (มกั เป็นregister)การทาํ เช่นน้ีเรียกวา่ การเปล่ียนงาน(Context Switch) ระบบของการเปลี่ยนงานน้ีตอ้ งเสียค่าใชจ้ ่ายสูง และยงั ใชเ้ วลาส่วนใหญไ่ ปกบั การ switch ซ่ึงเวลาที่ใชจ้ ะข้นึ อยกู่ บั ฮาร์ดแวร์ที่ใช้

70 ระบบปฏิบตั ิการ2.1.3.7 การดาํ เนินงานของโปรเซส (Operations on Process)1 การสร้างโปรเซส (Process Creation) โปรเซสหน่ึง ๆ อาจสร้างโปรเซสใหม่เกิดข้ึน โดยการใชค้ าํ สงั่ เรียกระบบสร้างโปรเซส และโปรเซสใหม่ ๆ ที่เกิดข้ึนมาน้นั อาจจะสร้างโปรเซสใหม่ ๆ ต่อไปไดอ้ ีก ดงั รูป รูปที่ 2.13 รูปแบบการสร้างโปรเซส โปรเซสท่ีเป็ นผูส้ ร้าง เรียกว่า โปรเซสแม่ (Parent Process) โปรเซสใหม่ท่ีถูกสร้างข้ึนมาเรียกว่า โปรเซสลูก (Children Process) โดยทวั่ ไป โปรเซสหน่ึง ๆ จะตอ้ งการทรัพยากร เช่น เวลาท่ีใช้ในหน่วยประมวลผลกลาง , หน่วยความจาํ , แฟ้มขอ้ มูล ,อุปกรณ์รับ-ส่งขอ้ มูล เป็ นจาํ นวนที่แน่นอน เพ่ือที่จะทาํ งานไดจ้ นเสร็จสมบูรณ์ และเมื่อมีโปรเซสยอ่ ยเกิดข้ึน โปรเซสยอ่ ยน้นั อาจร้องขอทรัพยากร ที่ตอ้ งการจากระบบปฏิบตั ิการไดโ้ ดยตรง หรือ ถูกจาํ กดั ให้ใชไ้ ดเ้ ฉพาะทรัพยากรส่วนของทรัพยากรแม่เท่าน้นั ดงั น้นั โปรเซสแม่ตอ้ งแบ่งทรัพยากรให้โปรเซสยอ่ ยแต่ละตวั หรือให้โปรเซสย่อยเหล่าน้ัน ใช้ทรัพยากรร่วมกนั (เช่น แฟ้มข้อมูล หรือ หน่วยความจาํ ) หรือ ให้โปรเซสยอ่ ยใชท้ รัพยากรส่วนเฉพาะของแม่ (ซ่ึงเป็ นการป้องกนั ไม่ให้ระบบถูกแยง่ ทรัพยากรไปท้งั หมด เนื่องจากมีบางโปรเซสสร้างโปรเซสยอ่ ยจาํ นวนมากเกินไป)หลงั จากสร้างโปรเซสยอ่ ยแลว้ โปรเซสแม่อาจทาํ งาน (execute) ได้ 2 วิธี คือ– โปรเซสแม่ ทาํ งานพร้อม ๆ กนั (concurrent) ไปกบั โปรเซสลูก– โปรเซสแมค่ อยจนกระทง่ั โปรเซสลูกท้งั หมด สิ้นสุดการทาํ งาน ในการระบุพ้นื ท่ีวา่ งของโปรเซสใหม่ทาํ ได้ 2 วธิ ี คือ

โปรเซส 71– โปรเซสลูกทาํ สาํ เนา (duplicate) มาจากโปรเซสแม่ (จาํ ลองมา)– โปรเซสลูกมีโปรแกรมที่ถูก load เขา้ มาเอง (สร้างเอง) ในระบบปฏิบตั ิการ UNIX แต่ละโปรเซสจะมีเลขประจาํ ตวั เฉพาะ (Process Identifier) เป็นเลขจาํ นวนเตม็ (Integer) โปรเซสจะสร้างโปรเซสยอ่ ย โดยคาํ สง่ั เรียกระบบ fork โปรเซสใหม่ที่เกิดข้ึน จะมีตาํ แหน่งโปรแกรมของโปรเซสเดิม ซ่ึงช่วยใหโ้ ปรเซสแม่(เดิม) สามารถติดต่อสื่อสารกบั โปรเซสลูก (ใหม่) ไดส้ ะดวก โปรเซสท้งั สอง (แม่และลกู ) จะทาํ งานจากคาํ สง่ั (ในโปรแกรมเดียวกนั ) จากคาํ สงั่ fork โดยท่ีโปรเซสลูกจะไดร้ หสั ส่งคืนจากคาํ สงั่ forkเป็นศูนยแ์ ต่โปรเซสแม่จะไดร้ หสั ส่งคืนเป็นตวั เลขแสดงหมายเลขของโปรเซสลูก โดยปกติ คาํ สงั่ หลกั จากคาํ สงั่ fork จะเป็นคาํ สงั่ เรียกระบบ execve ทาํ หนา้ ที่นาํ โปรแกรมจากจานบนั ทึกมาลงในหน่วยความจาํ ทบั โปรแกรมเดิมของโปรเซสที่ใชค้ าํ ส่ังน้ี แลว้ ทาํ งานต่อในโปรแกรมใหม่โปรเซสแม่สามารถสร้างลูกไดเ้ ร่ือยๆหรือถา้ ไม่มีอะไรทาํ ในขณะลูกกาํ ลงั ทาํ งาน มนั จะใชค้ าํ สง่ั เรียกระบบ wait เพอื่ ยา้ ยตวั เองไปท่ีแถวพร้อมจนกระท้งั ลูกเสร็จสิ้นการทาํ งาน2. การเสร็จสิ้นโปรเซส (Process Termination)โปรเซสจะสิ้นสุดหรือถูกยกเลิก เม่ือทาํ งานเสร็จในข้นั สุดทา้ ย แลว้ ร้องขอใหร้ ะบบปฏิบตั ิการลบโปรเซสทิ้งไป โดยใชค้ าํ ส่ังเรียกระบบ exit ซ่ึงโปรเซสสามารถส่งขอ้ มูล (output) กลบั ไปให้โปรเซสแม่ได้ โดยคาํ สัง่ เรียกระบบ wait โปรเซสหน่ึงอาจยกเลิกโปรเซสอื่นได้ โดยใชค้ าํ สงั่ เรียกระบบ เช่น คาํ สง่ั ยกเลิก (abort) การใชค้ าํ สง่ั น้ีโดยปกติ ตอ้ งเป็นโปรเซสแม่ใชก้ บั โปรเซสลูกเท่าน้นั(เพราะโปรเซสแม่ทราบหมายเลขของโปรเซสลูกจากเมื่อตอนที่สร้างโปรเซสลูก)โปรเซสแม่อาจตอ้ งการยกเลิกโปรเซสลูกตวั หน่ึงเพราะ- โปรเซสลกู ใชท้ รัพยากรท่ีโปรเซสแม่แบ่งใหจ้ นหมดแลว้ ทรัพยากรไม่พอใช้- โปรเซสแม่ไม่ตอ้ งการใชโ้ ปรเซสลูกตวั น้ี อีกต่อไป- โปรเซสแม่เสร็จสิ้นและระบบปฏิบตั ิการไม่ตอ้ งการใหโ้ ปรเซสลูกทาํ งานต่อ ระบบส่วนใหญ่ เม่ือโปรเซสแม่สิ้นสุด โปรเซสลูกตอ้ งสิ้นสุดดว้ ย เราเรียกวา่ การยกเลิกแบบลูกโซ่ (Cascading Termination) ซ่ึงระบบมกั จะเป็นผจู้ ดั การ ตวั อยา่ ง ในระบบ UNIX โปรเซสลูกจะสิ้นสุดหรือถูกยกเลิก โดยใชค้ าํ สง่ั เรียกระบบ exit ซ่ึงโปรเซสแม่จะรอเหตุการณ์น้ี โดยใชค้ าํ สงั่เรียกระบบ wait ซ่ึงจะใหค้ า่ กลบั คืนมาเป็นหมายเลขของโปรเซสลูกที่ถูกยกเลิกไป ในระบบ UNIXโปรเซสแม่ไม่จาํ เป็นตอ้ งแบ่งทรัพยากรใหโ้ ปรเซสลูกเลย ระบบจะจดั การใหโ้ ดยใหศ้ กั ด์ิเท่า ๆ กนัทุกโปรเซสในการใชท้ รัพยากรในระบบ (เช่น หน่วยความจาํ หลกั , จานบนั ทึก)

72 ระบบปฏิบตั ิการ3. การทาํ งานร่วมกนั ของโปรเซส (Cooperating Processes) โปรเซสที่ทาํ งานในระบบปฏิบตั ิการอาจจะเป็นโปรเซสอิสระ(independent processes) หรือโปรเซสท่ีตอ้ งทาํ งานร่วมกนั (cooperation processes)- โปรเซสอิสระ คือ โปรเซสท่ีไม่มีผลกระทบต่อโปรเซสอ่ืนในระบบ เช่น กระบวน การซ่ึงไม่แบ่งขอ้ มูล (ชวั่ คราวหรือถาวร) ใหก้ บั โปรเซสอ่ืน– โปรเซสท่ีตอ้ งทาํ งานร่วมกนั คือ โปรเซสท่ีมีผลกระทบต่อโปรเซสอื่นในระบบ เช่น โปรเซสท่ีตอ้ งแบ่งขอ้ มูลใหก้ บั โปรเซสอื่นที่เป็นโปรเซสร่วมเหตุผลต่าง ๆ ท่ีทาํ ใหต้ อ้ งจดั เตรียมสิ่งแวดลอ้ มใหก้ บั โปรเซสท่ีตอ้ งทาํ งานร่วมกนั คือ1. การร่วมกนั ใชข้ อ้ มูลข่าวสาร (Information sharing) เมื่อผใู้ ชห้ ลายคนสนใจขา่ วสารชิ้นเดียวกนั (เช่น ไฟลท์ ่ีถูก shared) เราตอ้ งจดั เตรียมสิ่งแวดลอ้ มโดยอนุญาตใหเ้ ขา้ ถึงทรัพยากรเหล่าน้ี ร่วมกนั ได้2. การคาํ นวณรวดเร็วข้ึน (Computation Speedup) ถา้ เราตอ้ งการให้งานปกติสามารถทาํ งานได้ เร็วข้ึน เราจะตอ้ งแตกงานน้นั เป็นส่วนยอ่ ยๆ แลว้ ใหแ้ ต่ละส่วนทาํ งานขนานกนั ไปแต่ความเร็ว ในการคาํ นวณจะสูงข้ึนไดก้ ต็ ่อเมื่อ ระบบมีอุปกรณ์ท่ีใชค้ าํ นวณหลาย ๆ ตวั เช่น มี CPU หลาย ๆ ตวั หรือ มีหน่วยคาํ นวณหลาย ๆ ตั3. ระบบยอ่ ย (Modularity) เราอาจตอ้ งการที่จะสร้างระบบใหอ้ ยใู่ นรูปของระบบยอ่ ยหรือโมดูล โดย อาจแบ่งหนา้ ที่งานต่าง ๆ ของระบบไปเป็นหนา้ ที่ละ 1 โปรเซส4. ความสะดวกสบาย (Convenience) ผใู้ ชแ้ ต่ละคนอาจจะมีงานหลาย ๆ งานท่ีตอ้ งทาํ งานในเวลา เดียวกนั เช่น ตอ้ งการแกไ้ ขขอ้ มูล พิมพข์ อ้ มูล และแปลภาษาไปพร้อม ๆ กนั ซ่ึงสามารถทาํ ได้ เพื่อให้เห็นถึงแนวคิดของการทาํ งานร่วมกนั ของโปรเซส ลองพิจารณาปัญหา ผูผ้ ลิต-ผูใ้ ช้(producer – consumer) โปรเซสผูผ้ ลิตจะผลิตหรือสร้างข้อมูลให้โปรเซสผู้ใช้ได้ใช้งาน เช่นโปรแกรมสาํ หรับพิมพข์ อ้ มูล จะส่งขอ้ มูลไปยงั เครื่องพิมพ์ (นบั เป็นโปรเซสผูผ้ ลิต) ส่วนผใู้ ช้ ก็คือตวั ควบคุมเคร่ืองพิมพ์ (Printer driver) ซ่ึงจะเป็ นผูพ้ ิมพต์ วั อกั ขระท่ีส่งมา ออกทางเคร่ืองพิมพอ์ ีกทอดหน่ึง หรือ ตวั แปลภาษาช้นั สูง จะผลิตโปรแกรมภาษา assembly ให้ compiler นาํ ไปใชต้ ่อในการผลิตโปรแกรมภาษาเครื่อง ซ่ึงจะถูกตวั นาํ โปรแกรมลงหน่วยความจาํ (Loader) บรรจุโปรแกรมน้ีลงในหน่วยความจาํ อีกต่อหน่ึงเพ่ือที่จะให้โปรเซสผูผ้ ลิต-ผูใ้ ช้ สามารถทาํ งานขนานกนั ไปได้จาํ เป็นตอ้ งมีท่ีพกั ขอ้ มูล (Buffer) ซ่ึงผผู้ ลิตจะนาํ ขอ้ มูลไปใส่และผใู้ ชจ้ ะดึงขอ้ มูลไปใช้ ขณะที่ผผู้ ลิตจะผลิตขอ้ มูลใส่ลงในช่องว่างหน่ึงของที่พกั ขอ้ มูล ผูใ้ ชก้ ส็ ามารถดึงขอ้ มูล จากอีกช่องหน่ึงในท่ีพกัขอ้ มูลน้ีไปใชไ้ ด้ (ในเวลาเหล่ือมกนั ) ดงั น้นั จึงตอ้ งมีการประสานงานระหว่างผูใ้ ชแ้ ละผูผ้ ลิต เพ่ือ

โปรเซส 73ป้องกนั ผผู้ ลิตใส่ขอ้ มูล ลงในท่ีพกั ขอ้ มูลท่ีเตม็ แลว้ หรือผใู้ ชพ้ ยายามดึงขอ้ มูลจากท่ีพกั ท้งั ๆที่ยงั ไม่มีขอ้ มูลอยู่ท้งั สองกรณีน้ีผูผ้ ลิตหรือผูใ้ ชจ้ ะตอ้ งรอคอยถา้ ท่ีพกั ขอ้ มูลมีขนาดไม่จาํ กดั (Unbounded-buffer) ผใู้ ชอ้ าจตอ้ งคอย ถา้ ท่ีพกั วา่ ง แต่ผผู้ ลิตสามารถผลิตขอ้ มูลไดต้ ลอดเวลา(ไม่มีวนั เตม็ ) แต่ถา้ ท่ีพกั ขอ้ มูลมีขนาดจาํ กดั (Bounded-buffer) ผผู้ ลิตอาจตอ้ งรอบา้ ง ถา้ ท่ีพกั ขอ้ มูลเตม็ ในการแกป้ ัญหาดงั กล่าว ควรใชว้ ิธีแบ่งกนั ใชห้ น่วยความจาํ (share memory) โดยโปรเซสของผผู้ ลิตและผใู้ ช้ share ตวั แปรเหล่าน้ีร่วมกนัvar n;type item = … ;var buffer: array [0..n-1] of item;in,out: 0..n-1;- เริ่มตน้ ตวั แปร in และ out มีคา่ เป็น 0 in , out มีค่าต้งั แต่ 0 ถึง n – 1- ท่ีพกั ขอ้ มูลน้ีเป็นแบบแถวลาํ ดบั วงกลม (Circular array)- มีตวั ช้ี in ช้ีช่องวา่ งต่อจากหางแถวของที่พกั ขอ้ มูล- out เป็นตวั ช้ีช่องที่มีขอ้ มูลส่วนหวั แถวของที่พกั ขอ้ มูลดงั น้นั ท่ีพกั น้ีจะวา่ งเมื่อ in = out และจะเตม็ เม่ือ (in + 1) MOD n = outRepeat… แสดงว่าเตม็produce an item in nextp…while (in + 1) mod n = out do no-op; // ไม่ทาํ อะไรbuffer[in] := nextp;in := (in + 1) mod n; // แสดงวา่ วา่ งuntil false;

74 ระบบปฏิบตั ิการโปรแกรมขา้ งตน้ เป็นของผผู้ ลิต มี nextp เป็นตวั แปรภายใน (local variable) ใชเ้ กบ็ ขอ้ มูลที่ผลิตได้ก่ อน ที่ จะนําลงท่ี พักข้อมู ลต่ อไป no-op (No-operation) คือป ระโยคว่างไม่ ได้ทําอะไรโปรแกรมต่อไปน้ี เป็ นของผูใ้ ช้ มี nextc เป็ นตวั แปรภายใน ใชเ้ ก็บขอ้ มูลท่ีไดจ้ ากท่ีพกั ขอ้ มูลร่วมก่อนนาํ ไปใชง้ านจริงที่พกั ขอ้ มูลวา่ งrepeatwhile in = out do no-op;nextc := buffer[out];out := (out + 1) mod n; // ขณะที่เตม็…consume the item in nextc…until false;สงั เกตวา่ โปรแกรมน้ีสามารถเกบ็ ขอ้ มูลในท่ีพกั ไดม้ ากท่ีสุด n – 1 เท่าน้นั2.1.4 ความสัมพนั ธ์ระหว่างโปรเซส การทาํ งานของระบบคอมพวิ เตอร์ ประกอบไปดว้ ยโปรเซสต่างๆ ท้งั โปรเซสต่างๆ ท้งัโปรเซสของระบบและโปรเซสของผใู้ ช้ เม่ือมีโปรเซสมากมายทาํ งานพร้อมกนั อยใู่ นระบบจะมีวิธีจดั การทาํ งานของโปรเซสไดอ้ ยา่ งไรเพอ่ื ใหป้ ระสานงานกนั ได้ โปรเซสแต่ละโปรเซสต่างกท็ าํ งานไปในส่วนของมนั เอง ไม่ไดร้ ับรู้ความเป็นไปของโปรเซสอื่น ยกเวน้ จะมีกลไกพเิ ศษเพิ่มเติมเขา้ มานอกจากน้ีความเร็วในการทาํ งานของแต่ละโปรเซสกอ็ ิสระจากกนั ดว้ ย2.1.4.1 การตดิ ต่อระหว่างโปรเซส โปรเซสหน่ึงอาจตอ้ งการใชข้ อ้ มูลของโปรเซสอ่ืน โปรเซสท่ีถกู ร้องขอขอ้ มูลกจ็ ะส่งขอ้มูลไปให้ การท่ีโปรเซสต่างๆ มีการติดต่อกนั เช่นน้ี เราเรียกวา่ การติดต่อระหวา่ งโปรเซส (interprocess communication) โดยทวั่ ไปการติดต่อระหวา่ งโปรเซสจะติดต่อกนั ผา่ นทางขอ้ มูลโดยนาํขอ้ มูลน้นั ไปวางลงในหน่วยความจาํ ส่วนหน่ึงที่ถูกจองไว้ หน่วยความจาํ ส่วนน้ีจะมีไวส้ าํ หรับการรับส่งขอ้ มูลระหวา่ งโปรเซส เราเรียกวิธีการติดต่อระหวา่ งโปรเซสแบบน้ีวา่ การใชห้ น่วยความจาํร่วม (shared memory) ดงั แสดงในรูป 2.14

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

76 ระบบปฏิบตั ิการโปรเซสที่ตอ้ งการใชพ้ อร์ตกเ็ พยี งแต่วา่ มารับขอ้ มูลไปหรือส่งขอ้ มูลมาท่ีพอร์ตโดยไม่ตอ้ งตรวจดว้ ยตนเอง OS จะเป็นผใู้ หจ้ งั หวะการรับส่งใหเ้ ช่นถา้ มีโปรเซสที่จะรับขอ้ มูลไปจากพอร์ตท่ีวา่ งเปล่าOS จะใหโ้ ปรเซสน้นั หยดุ รอจนกวา่ จะมีขอ้ มูลถูกส่งมาไวท้ ่ีพอร์ต หรือถา้ มีโปรเซสตอ้ งการส่งขอ้ มูลเขา้ มาที่พอร์ตซ่ึงมีขอ้ มูลอยเู่ ตม็ แลว้ OS จะใหโ้ ปรเซสน้นั หยดุ รอจนกระทงั่ พอร์ตมีที่วา่ งที่รับขอ้ มูลชุดใหม่ได้ดงั น้นั พอร์ตกเ็ ป็นพ้ืนท่ีในหน่วยความจาํ ท่ีใชร้ ่วมกนั โดยหลายโปรเซสเพื่อรับส่งขอ้ มูลใหก้ นั แต่OS ควบคุมดูแลจงั หวะการรับส่งขอ้ มูลใหแ้ ทนท่ีจะปลอ่ ยใหโ้ ปรเซสจดั การเอง การจดั ทาํ โครงสร้างของพอร์ตมีหลายแบบ แต่จะกลา่ วถึงโครงสร้างท่ีพบเห็นทว่ั ไปคือพอร์ตแบบคิว (queue) พอร์ตแบบไปป์ (pipe) และพอร์ตแบบสแตค็ (stack) 1. พอร์ตแบบคิว โครงสร้างของพอร์ตแบบน้ีขอ้ มูลท่ีจะถูกดึงออกจากพอร์ต จะเป็นไปตามลาํ ดบั ก่อน-หลงั ของขอ้ มูลท่ีถูกส่งเขา้ มาในพอร์ต คือขอ้ มูลชุดใดที่ถูกส่งเขา้ พอร์ตก่อน จะถูกดึงออกไปก่อน ขอ้ มูลที่ถูกส่งเขา้ พอร์ตทีหลงั กจ็ ะถูกดึงออกไปทีหลงั (ดูรูป 2.15)ข้อมูลออกจาก ส่ งข้ อมูลเข้า รูปที่ 2.15 พอร์ตแบบควิ 2. พอร์ตแบบไปป์ โครงสร้างของพอร์ตแบบน้ีมีการทาํ งานเหมือนกบั พอร์ตแบบคิว คือขอ้ มูลท่ีถูกส่งเขา้ พอร์ตก่อนจะถูกดึงออกไปใชก้ ่อน ขอ้ มูลที่ถูกส่งเขา้ พอร์ตทีหลงั จะถูกดึงออกไปใชท้ ีหลงั แต่พอร์ตแบบไปป์ ต่างกบั พอร์ตแบบคิวคือ พอร์ตแบบคิวจะมีความยาวของพอร์ตคงท่ีถา้ใส่ขอ้ มูลเขา้ พอร์ตมากๆ พอร์ตจะเติม แต่ไปป์ มีความยาวของพอร์ตไม่จาํ กดั สามารถใส่ขอ้ มูลเขา้พอร์ตไดม้ ากเท่าที่ตอ้ งการ พอร์ตจะขยายตวั ออกไปตามขนาดของขอ้ มูลที่ถกู เกบ็ ไวใ้ นพอร์ตดึงขอ้ มูลออกจากพอร์ต ส่งขอ้ มูลเขา้ รูปที่ 2.16 พอร์ตแบบไปป์

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

78 ระบบปฏิบตั ิการโปรเซสท่ี 1 เพิ่มค่า X จากเดิม 10 โปรเซสที่ 2 ลบคา่ X ลง 10 ในขณะท่ีโปรเซสท้งั 2 ยงัไม่เริ่มทาํ งาน X มีค่าเป็น 10 ดงั น้นั เมื่อโปรเซสท้งั 2 ทาํ งานเสร็จค่า X กจ็ ะคงเป็น 10เหมือนเดิม (10+10-10 = 10) โปรเซสท่ี 1 X - 10 X X + 10 X - 20X X10 0 หรอื 20 X - 10 X-0 X X - 10รูปท่ี 2.19 ปัญโหปารขเอซงสกทารี่ใ2ชท้ รัพยากรร่วมกนั รูปท่ี 2.19 แสดงเหตุการณ์ท่ีอาจเกิดข้ึนไดข้ องโปรเซสท้งั 2 รูป 2.19 ก และ ข มีการทาํ งานที่ถูกตอ้ ง ในรูป 2.19 โปรเซสที่ 1 เริ่มการทาํ งานก่อนโปรเซสที่ 2 มนั อ่านค่า X มามีคา่เป็น 10 และบวกเขา้ ไปอีก 10 เป็น 20 จากน้นั จึงเกบ็ กลบั เขา้ ไปท่ีเดิม เมื่อโปรเซส 2 เริ่มการทาํ งานอา่ นคา่ มามีค่าเป็น 20 ลบออก 10 คงเหลือ 10 เกบ็ กลบั เขา้ ไปท่ี X ผลการทาํ งานถูกตอ้ งส่วนในรูป 2.19 ข. กม็ ีการทาํ งานเหมือนกนั แต่โปรเซสที่ 2 ทาํ งานก่อนไดผ้ ลลพั ธ์เป็น 10เท่ากนั ส่วนในรูป 2.19 ค.โปรเซสท่ี 1 และ โปรเซสที่ 2 อ่านค่า X ไปพร้อมๆ กนั (x=10) ท้งั2 โปรเซสทาํ งานไดผ้ ลลพั ธ์ของ X ต่างกนั โปรเซสท่ี 1 ไดค้ ่า X เป็น 20 โปรเซสท่ี 2 ไดค้ ่าX เป็น 0 ถา้ โปรเซสท่ี 1 ทาํ งานเสร็จก่อนโปรเซสที่ 1 จะเขียนค่า X กลบั ลงไปเป็น 20 และต่อมาเมื่อโปรเซสท่ี 2 ทาํ งานเสร็จโปรเซสท่ี 2 กจ็ ะเขียนค่า X ลงไปเป็น 0 ผลลพั ธท์ ี่ได้หลงั จาก 2 โปรเซสน้ีทาํ งานเสร็จคือ X มีค่าเป็น 0 ในทางกลบั กนั ถา้ โปรเซสท่ี 2 ทาํ งานเสร็จก่อนโปรเซสที่ 1 ผลลพั ธ์ท่ีไดก้ ค็ ือ x จะมีค่าเป็น 20 แต่ไม่วา่ โปรเซสไหนจะเสร็จสิ้นก่อนผลลพั ธ์ท่ีไดก้ ผ็ ดิ พลาดท้งั น้นั ความผดิ พลาดท่ีเกิดข้ึนในการทาํ งานของโปรเซสที่ 1 และโปรเซสท่ี 2 เกิดข้ึน เพราะในขณะท่ีโปรเซสแรกเขา้ ไปใชข้ อ้ มูล x โปรเซสอีกโปรเซสหน่ึงกย็ งั สามารถเขา้ ไปใชโ้ ปรเซส xได้ แต่ถา้ โปรเซสหลงั น้ีหยดุ รอใหโ้ ปรเซสอ่ืนๆ เขา้ มาใชท้ รัพยากรซ่ึงมีโปรเซสหน่ึงครองครอง

โปรเซส 79ทรัพยากรน้นั อยแู่ ลว้ เรียกว่า การไม่เกิดร่วม (mutual exclusion) ในช่วงเวลาท่ีโปรเซสเขา้ ไปครอบครองทรัพยากรแบบไม่เกิดร่วมน้ีเรียกวา่ โปรเซสน้นั อยใู่ นยา่ นวิกฤต (critical region หรือcritical section)2.4.1.3 ปัญหาการทาํ งานของโปรเซส เม่ือมีโปรเซสหลายๆ โปรเซสทาํ งานอยรู่ ะบบเดียวกนั มีการใชท้ รัพยากรร่วมกนั ยอ่ มเกิดปัญหาของการแยง่ ใชท้ รัพยากร ถึงแมว้ า่ OS จะพยายามจดั สรรทรัพยากรใชก้ บั โปรเซสต่างๆแลว้ กต็ าม ปัญหาบางอยา่ งท่ีเกิดข้ึนในขณะโปรเซสทาํ งานกย็ งั อาจเกิดข้ึนได้ เราจะมาพจิ ารณาปัญหาต่างๆ ท่ีเกิดข้ึนเนื่องจากการทาํ งานของโปรเซส เมื่อ OS จดั สรรทรัพยากรชิ้นหน่ึงใหก้ บั โปรเซสหน่ึง โปรเซสน้ีใชท้ รัพยากรที่ OSจดั สรรใหเ้ พือ่ ทาํ งานของตนไป แต่ในบางคร้ังมีโปรเซสที่มีลาํ ดบั ความสาํ คญั (priority) สูงกวา่โปรเซสแรกน้ีตอ้ งการใชท้ รัพยากรชิ้นเดียวกนั OS อาจจดั การใหโ้ ปรเซสหลงั เขา้ ไปแยง่ การให้ทรัพยากรของโปรเซสแรก โปรเซสแรกตอ้ งปลดปล่อยทรัพยากรใหโ้ ปรเซสที่ 2 เขา้ ไปครอบครองแทน ลกั ษณะน้ีเรียกวา่ การตดั รอน (preemptive) หมายความวา่ ถา้ มีโปรเซสอ่ืนมาแยง่ การครอบครองทรัพยากรของโปรเซสแรก โปรเซสแรกตอ้ งหยดุ การครองลงชวั่ คราวและปลดปล่อยทรัพยากรน้นั การปล่อยใหเ้ กิดการแยง่ ทรัพยากรของโปรเซสที่มีลาํ ดบั ความสาํ คญั สูงกว่า อาจทาํ ให้เกิดผลเสียต่อโปรเซสท่ีมีลาํ ดบั ความสาํ คญั ต่าํ ๆ ได้ เช่นโปรเซส A ไดค้ รอบครองแชนเนล aของระบบโปรเซส B ที่มีลาํ ดบั ความสาํ คญั สูงกวา่ A ตอ้ งการใชแ้ ชนเนล a เช่นเดียวกนั OS ก็จะจดั การให้ A ปลดปล่อย a และให้ B เขา้ ไปครอบครองแทน โปรเซส A จะตอ้ งรอจนกวา่โปรเซส B ปลดปล่อยแชนเนล a มนั จึงทาํ งานต่อไปได้ แต่ถา้ ในระหวา่ งที่โปรเซส Bครอบครองแชนเนลน้ีอยู่ โปรเซส C ซ่ึงมีลาํ ดบั ความสาํ คญั สูงกว่าโปรเซส A ตอ้ งการใช้แชนเนล a ดว้ ยเช่นกนั โปรเซส A จะตอ้ งรอจนกระทงั่ ท้งั โปรเซส B และ โปรเซส Cปลดปล่อยแชนเนลมนั จึงทาํ งานต่อได้ และถา้ มีโปรเซสอ่ืนๆ ที่มีลาํ ดบั ความสาํ คญั สูงกวา่โปรเซส A ตอ้ งการใชแ้ ชนเนล a อยตู่ ลอดเวลา โปรเซส A ตอ้ งรอไปอยา่ งไม่มีวนั สิ้นสุดเราเรียกเหตุการณ์เช่นน้ีวา่ การรอดตาย (starvation) หรือการเลื่อนไปอยา่ งไม่มีวนั สิ้นสุด (infinitepostponement) ทรัพยากรบางประเภทไม่อาจปล่อยใหเ้ กิดการตดั รอนได้ การครอบครองทรัพยากรประเภทน้ีจึงเป็นแบบตดั ตอนไม่ได้ (non-preemptive) นนั่ คือถา้ มีโปรเซสอื่นมาแยง่ การครอบครองทรัพยากรของโปรเซสหน่ึง โปรเซสน้ีไม่ตอ้ งปลดปล่อยทรัพยากรที่มนั ครองอยู่ มนั ยงั คงครอบครองทรัพยากรน้ีต่อไปจนมนั ใชเ้ สร็จ ตวั อยา่ งของทรัพยากรประเภทน้ีไดแ้ ก่ เคร่ืองพมิ พ์

80 ระบบปฏิบตั ิการการทาํ งานของเครื่องพมิ พจ์ ะตอ้ งพิมพจ์ ะตอ้ งพิมพง์ านชิ้นใดชิ้นหน่ึงอยา่ งต่อเน่ืองจนกวา่ งานชิ้นน้นั จะเสร็จสิ้น ถา้ เราปล่อยใหม้ ีการตดั ตอนเกิดข้ึนได้ งานท่ีถูกพิมพอ์ อกมาจากเครื่องพมิ พค์ งเป็นงานท่ีผสมผสานปนกนั จากงานของโปรเซสต่างๆ และไม่สามารถนาํ มาใชง้ านได้ เช่นพิมพ์ขอ้ มูลของโปรเซส A 5 ตวั อกั ษร พิมพข์ อ้ มูลของโปรเซส B 3 บรรทดั กลบั ไปพมิ พง์ านของขอ้ มูล A ต่อจากเดิม 2 บรรทดั และไปพมิ พง์ านของโปรเซส C 5 ตวั อกั ษร ลองนึกดูวา่ งานท่ีถูกพิมพอ์ อกมาเป็นอยา่ งไร แต่ถา้ การครอบครองเครื่องพมิ พเ์ ป็นแบบตดั ตอนไม่ได้ งานที่ถูกพมิ พอ์ อกมากจ็ ะเป็นของโปรเซส A ต่อดว้ ยงานของโปรเซส B และของโปรเซส C เรียงตามลาํ ดบั การร้องขอ นอกจากปัญหาเรื่องการอดตายหรือการเลื่อนไปอยา่ งไม่มีกาํ หนดแลว้ ยงั มีปัญหาของการทาํ งานของโปรเซสอีกประเภทหน่ึงคือ เดตลอ็ ก (deadlock) ซ่ึงมีลกั ษณะเป็นดงั น้ีครอบครอง ทรัพยากร a ตอ้ งการโปรเซส A โปรเซส Bตอ้ งการ ทรพั ยากร b ครอบครองรูปท่ี 2.20 ลกั ษณะของการเกดิ เดตลอ็ ก(deadlock) พจิ ารณารูป 2.20 โปรเซส A กาํ ลงั ครอบครองทรัพยากร a ในลกั ษณะการไม่เกิดร่วมและเป็นแบบตดั ตอนไม่ได้ โปรเซส B กาํ ลงั ครอบครองทรัพยากร b ในลกั ษณะการไม่เกิดร่วมและเป็นแบบตดั ตอนไม่ได้ โปรเซส A ตอ้ งการใชท้ รัพยากร b เพ่ือใหง้ านรันไปจนเสร็จ แต่โปรเซสA ไม่สามารถเขา้ ไปครอบครอง b ไดจ้ นกว่าโปรเซส B จะปลดปล่อย b โปรเซส A จึงตอ้ งคอยจนกระท่ังโปรเซส B ปลดปล่อยทรัพยากร b แต่โปรเซส A จะไม่ยอมปลดปล่อย aจนกว่ามนั จะทาํ งานเสร็จในขณะเดียวกนั โปรเซส B ก็ตอ้ งการใชท้ รัพยากร a ดว้ ยเช่นกนั แต่โปรเซส B ไม่สามารถเขา้ ไปครอบครอง a ได้ จนกว่าโปรเซส A จะปลอดปล่อยโปรเซส aและโปรเซส B จะไม่ยอมปลดปล่อย b จนกว่ามนั จะทาํ งานเสร็จ จะเห็นว่าท้งั โปรเซส A และB ต่างก็รอคอยทรัพยากรซ่ึงอีกโปรเซสหน่ึงครองครองอยแู่ ละต่างกไ็ ม่ยอมปลดปล่อยทรัพยากรที่ตนครอบครอง จนกว่าจะไดใ้ ช้ทรัพยากรของอีกฝ่ ายหน่ึง ดงั น้ันโปรเซสท้งั 2 จึงไม่มีความคืบหนา้ (เพราะรอการใชท้ รัพยากร) และกไ็ ม่มีวนั จะคืบหนา้ ต่อไปได้ ลกั ษณะน้ีเรียกว่าเดตลอ็ ก

โปรเซส 81 เดตลอ็ กไม่จาํ เป็นที่จะเกิดกบั โปรเซสเพียง 2 โปรเซส แต่อาจเกิดกบั โปรเซสกี่โปรเซสก็ไดต้ ้งั แต่ 2 โปรเซสข้ึนไป โดยเงื่อนไขการเกิดเป็นดงั น้ี 1. การครอบครองทรัพยากรเป็นแบบตดั ตอนไม่ได้ 2. การครอบครองทรัพยากรเป็นแบบการไม่เกิดร่วมคือ โปรเซสเขา้ ไปครอบครอง ทรัพยากรไดค้ ร้ังละ 1 โปรเซส 3. มีการรอการใชท้ รัพยากรและการรอจนตอ้ งเป็นการรอที่ต่อกนั ไปเรื่อยๆ เป็นวงรอบ (ดูรูป 2.21) ตอ้ งการ โปรเซส P2 ครอบครอง ทรพั ยากร R1 ทรพั ยากร R2 ครอบครอง ตอ้ งการโปรเซส P1 โปรเซส P3 ตอ้ งการ ครอบครอง ทรพั ยากร R0 ทรพั ยากร R3ครอบครอง โปรเวส P0 รูปท่ี 2.21 เดตลอ็ ก(deadlock) เดตลอ็ กเป็นปัญหาที่ควรป้องกนั ไม่ใหเ้ กิดข้ึน เพราะจะส่งผลเสียต่อระบบ น้นั คือโปรเซสที่ติดอยู่ในวงรอบของเดตล็อกจะหยุดคา้ งการทาํ งานอยู่อย่างน้ันเรื่อยไปไม่มีวนั จบสิ้นวิธีป้องกนัเดตลอ็ กกค็ ือพยายามอยา่ ใหเ้ งื่อนไขท้งั 3 ขอ้ ที่กล่าวมาเกิดข้ึนพร้อมกนั แต่ถา้ มีเดตลอ็ กเกิดข้ึนในระบบการแก้ที่ดีท่ีสุดคือ ให้โปรเซสใดโปรเซสหน่ึงในวงรอบปลดปล่อยทรัพยากรท่ีมันครอบครองอยู่ ซ่ึงอาจทาํ ไดโ้ ดยทาํ ลาย (ยุติ) โปรเซสน้ันทิ้งไปเลย โปรเซสท่ีเหลือก็จะทาํ งานต่อไปไดเ้ อง2.1.5 เธรด

82 ระบบปฏิบตั ิการ ใน OS รุ่นใหม่ๆ บางตวั แนวความคิดเร่ืองโปรเซสไดถ้ ูกพฒั นาข้ึนเพ่ือใหม้ ีประสิทธิภาพการทาํ งานท่ีดียง่ิ ข้ึนไปอีกล่าวคือ โปรเซสจะถูกแบ่งยอ่ ยออกไปอีกเรียกวา่ เธรค (thread) ถา้ เราจะเปรียบโปรแกรมคือรถคนั หน่ึง โปรเซสกจ็ อาจจะเปรียบไดเ้ ป็นรถท่ีเริ่มว่ิงออกไป จากจุดเร่ิมตน้ ไปสู่จุดมุ่งหมายปลายทาง เธรดกอ็ าจจะเปรียบไดก้ บั ลอ้ ของรถ คือเป็นส่วนที่ทาํ ใหร้ ถวิง่ ไปได้ ส่วนประกอบของเธรดจะมีเพยี งโคด้ โปรแกรมเท่าน้นั เธรดท่ีเป็นของโปรเซสเดียวกนั จะอยู่ในสิ่งแวดลอ้ ม (environment) เดียวกนั ใชข้ อ้ มูลชุดเดียวกนั (ขอ้ มูลของโปรเซส) แต่ถา้ เป็นเธรดของต่างโปรเซสกนั กอ็ ยใู่ นสิ่งแวดลอ้ มต่างกนั โปรเซสหน่ึงจะประกอบดว้ ยเธรดจาํ นวนเท่าไรกไ็ ด้ แต่ตอ้ งมีอยา่ งนอ้ ย 1 เธรด ในรูป 2.22 เป็นการเปรียบเทียบลกั ษณะของโปรเซสแบบธรรมดาและโปรเซสท่ีทาํ งานโดยมีเธรดเป็นส่วนประกอบ การแบ่งโปรเซสออกเป็นเธรดทาํ ใหโ้ ปรเซสทาํ งานไดเ้ ร็วข้ึน เธรดแต่ละเธรดจะทาํ งานอยา่ งอิสระกนั โดยอยใู่ นส่ิงแวดลอ้ มเดียวกนั โดยเธรดทุกเธรดในโปรเซสสามารถแยกกนั ทาํ งานไปพร้อมกนั ได้ จึงลดเวลาในการทาํ งานของโปรเซสลงไดม้ าก รูปที่ 2.22 โปรเซสประกอบด้วยเธรด2.2 การจดั การโพรเซสเซอร์ โพรเซสเซอร์เป็นทรัพยากรประเภทหน่ึงของระบบ ในบางระบบมีโพรเซสเซอร์อยเู่ พยี งตวัเดียวคือซีพยี ู แต่ในบางระบบกม็ ีโพรเซสเซอร์หลายตวั ช่วยซีพยี ทู าํ งานเช่น โพรเซสเซอร์ช่วยงานคาํ นวณ (math-coprocessor) และโพรเซสเซอร์ควบคุมอินพตุ -เอาตพ์ ุต เป็นตน้ เน่ืองจากโปรเซสเซอร์มีราคาแพงมากเราจึงควรจดั การใหม้ ีการใชง้ านโปรเซสเซอร์ใหค้ ุม้ ค่าที่สุด โดยพยายามใหม้ นั ทาํ งานอยตู่ ลอดเวลา ในบทน้ีจะเป็นการเนน้ การจดั การซีพียโู ดยเฉพาะ เพราะซีพียูเป็นส่วนที่สาํ คญั ที่สุดในระบบ

โปรเซส 832.2.1 หลกั การจดั สรรโพรเซสเซอร์ พิจารณาการเล่ียนสถานะของโปรเซส ดงั ในรูปที่ 2.23 ready run jam รูปที่ 2.23 การเปลยี่ นสถานะของโปรเซสมีโปรเซสหลายโปรเซสอยใู่ นสถานะพร้อมเพ่อื รอใหซ้ ีพยี ู เมื่อซีพียวู า่ งโปรเซสที่อยตู่ น้ คิวในสถานะพร้อมจะไดค้ รอบครองซีพียเู ขา้ ไปอยใู่ นสถานะรัน โปรเซสอยใู่ นสถานะรันไดน้ านไม่เกินเวลาควอนตมั ถา้ โปรเซสตอ้ งรอเหตุการณ์บางอยา่ งโดยไม่มีความจาํ เป็นตอ้ งใชซ้ ีพียู โปรเซสน้นัจะถกู ยา้ ยไปอยใู่ นสถานะติดขดั แต่ถา้ โปรเซสอยใู่ นสถานะรันจนครบกาํ หนดเวลาควอนตมัโปรเซสน้นั จะตอ้ งออกไปรอใชง้ านซีพยี ใู นสถานะรันเพื่อเปิ ดโอกาสใหโ้ ปรเซสไดค้ รอบครองซีพียบู า้ ง ไม่วา่ โปรเซสจะปลดปล่อยซีพียเู นื่องจากหมดเวลาควอนตมั หรือมีการรอเหตุการณ์บางเหตุการณ์ซีพยี จู ะตอ้ งเปลี่ยนจากการทาํ งานหน่ึงไปเป็นอีกงานหน่ึง เราเรียกเหตุการณ์น้ีวา่ การเปล่ียนสถานะ (context switching) ของซีพยี ู การเปลี่ยนสถานะของซีพยี ถู ือไดว้ า่ เป็น \"ค่าใชจ้ ่าย\" (overhead) ของระบบ ค่าใชจ้ ่ายในท่ีน้ีหมายถึง งานที่ระบบจาํ เป็นตอ้ งกระทาํ เพอื่ จุดประสงคบ์ างอยา่ ง ระบบตอ้ งใชเ้ วลาในการทาํ งานเหล่าน้ี ทาํ ใหเ้ สียเวลาในการทาํ งานของโปรเซสของผใู้ ชไ้ ปดว้ ย ดงั น้นั ถา้ ระบบมีคา่ ใชจ้ ่ายมากระบบกจ็ ะเสียเวลาไปมาก สาํ หรับการเปล่ียนสถานะของซีพยี จู ะมีการสูญเสียเวลาสาํ หรับงานหลกั ๆ 3 งานคือ

84 ระบบปฏิบตั ิการ 1. เกบ็ ค่ารีจีสเตอร์และสถานะของเครื่องไวใ้ น PCB ของโปรเซสท่ีกาํ ลงั จะปลดปล่อย ซีพียู 2. คดั เลือกโปรเซสในสถานะพร้อม เพอื่ ใหม้ าครอบครองซีพียู 3. โหลดค่ารีจีสเตอร์และสถานะของเครื่องจาก PCB ของโปรเซสใหม่ การคดั เลือกหาโปรเซสท่ีจะเขา้ ไปอยใู่ นสถานะรันเม่ือซีพียวู ่างน้นั ถือไดว้ า่ เป็นการจดัสรรซีพยี ใู หก้ บั โปรเซสต่างๆ ซ่ึงเป็นหนา้ ที่ของ OS ส่วนของ OS ที่มีหนา้ ท่ีจดั สรรซีพียู เรียกวา่ตวั จดั คิวในระยะส้นั (short-term scheduler)2.2.2 การจดั ควิ การใช้โพรเซสเซอร์ตวั เดยี ว หนา้ ท่ีของตวั จดั คิวการใชโ้ พรเซสเซอร์ในระยะส้นั คือ คดั เลือกโปรเซสซ่ึงรออยใู่ นสถานะพร้อมท่ีเหมาะสมที่สุดเขา้ ไปอยใู่ นสถานะรัน (ไดค้ รอบครองซีพยี )ู โดยแทจ้ ริงแลว้ การส่งโปรเซสที่ถูกเลือกแลว้ ใหเ้ ขา้ ไปอยใู่ นสถานะรัน เป็นหนา้ ที่ของโปรเซสของ OS ที่ช่ือตวั ส่ง (dispatcher)ในแง่การทาํ งานแลว้ ตวั จดั คิวระยะส้นั เป็นผคู้ ดั เลือกโปรเซส และเรียกใหส้ ่งโปรเซสท่ีถูกเลือกแลว้เขา้ ไปอยใู่ นสถานะรัน แต่ในแง่ของหนา้ ที่การทาํ งานแลว้ การคดั เลือกโปรเซสและส่งโปรเซสเขา้ไปในสถานะรันเป็นความรับผดิ ชอบของตวั จดั คิวในระยะส้นั กลไกการคดั เลือกโปรเซสในคิวของสถานะพร้อมมีหลายวิธี แลว้ แต่วา่ ผอู้ อกแบบ OSจะเลือกใชว้ ิธีการใด ซ่ึงแต่ละวธิ ีกม็ ีขอ้ ดีขอ้ เสียในตวั มนั เอง วธิ ีที่ใชใ้ นการคดั เลือกโปรเซสในคิวท่ีใชอ้ ยใู่ นปัจจุบนั ไดแ้ ก่2.2.2.1 การจดั ควิ แบบ FCFS (first-come -first -served) วิธีการคดั เลือกแบบ FCFS น้ีเป็นวิธีท่ีง่ายท่ีสุด คือ โปรเซสไหนเขา้ มารอในคิวก่อนจะได้ครอบครองซีพียกู ่อน ตามลาํ ดบั เวลาของการเขา้ มาอยใู่ นคิว กล่าวอยา่ งง่ายๆ คือ \"มาก่อนได้ก่อน\" โปรเซสท่ีไดค้ รอบครองซีพียจู ะทาํ งานไปจนเสร็จ ไม่มีระยะเวลาควอนตมั ซ่ึงจาํ กดั เวลาการครอบครองซีพียู แต่ถา้ โปรเซสมีการเรียกใชง้ านอุปกรณ์อินพตุ -เอาตพ์ ตุ หรือรอเหตุการณ์บางอยา่ ง โปรเซสน้นั ตอ้ งปลดปล่อยซีพียแู ละออกจากสถานะรันไปอยใู่ นสถานะติดขดั เม่ือใดที่งานเสร็จสิ้นลงหรือเหตุการณ์ท่ีกาํ ลงั รออยู่ โปรเซสน้นั จึงคอ่ ยกลบั เขา้ ไปอยตู่ ่อทา้ ยคิวของสถานะพร้อมใหม่อีกคร้ังจากท่ีกล่าวมา เราอาจแสดงการเปล่ียนสถานะของโปรเซสโดยใชก้ ารจดั คิวแบบ FCFS ไดด้ งั ในรูปที่ 2.24 ซ่ึงจะเห็นวา่ แตกต่างกบั รูปที่แสดงการเปล่ียนสถานะของโปรเซสที่เคยกล่าวมานนั่ คือไม่มีการเปลี่ยนสถานะของโปรเซสจากสถานะรันมายงั สถานะพร้อมโดยตรง

โปรเซส 85start end read run jam รูปที่ 2.24 การเปลย่ี นสถานะของโปรเซสเม่ือใช้การจดั ควิ ระบบ FCFS ขอ้ ดีของการใชก้ ารจดั คิวแบบ FCFS กค็ ือ การจดั คิวทาํ ไดง้ ่ายไม่ยงุ่ ยากซบั ซอ้ น แต่เราลองพจิ ารณาเหตุการณ์เช่นน้ีดู สมมติวา่ มีโปรเซส 3 โปรเซสคือ A B และ C เขา้ มาอยใู่ นสถานะพร้อมในเวลาใกลเ้ คียงกนั มาก ท้งั 3 โปรเซสไม่ตอ้ งการใชอ้ ปุ กรณ์อินพตุ - เอาตพ์ ตุ ใดๆ ท้งั สิ้นเป็นโปรเซสท่ีตอ้ งการใชซ้ ีพยี ทู าํ งานเพยี งอยา่ งเดียว โปรเซส A ตอ้ งการใชซ้ ีพยี เู ป็นเวลานาน 15นาทีโปรเซส B ตอ้ งการใชซ้ ีพียเู ป็นเวลานาน 1 วนิ าที โปรเซส C ตอ้ งการใชซ้ ีพียเู ป็นเวลานาน10 นาที โดยลาํ ดบั การเขา้ มาในคิวคือ A B และ C ตามลาํ ดบั รูปที่ 2.25 จะเป็นการแสดงลาํ ดบัการเขา้ คิวและผลที่เกิดข้ึน

86 ระบบปฏิบตั ิการ รูปท่ี 2.25 ผลของการจดั ควิ แบบ FCFSในลกั ษณะน้ีจะเห็นวา่ การจดั คิวแบบ FCFS เป็นผลเสียอยา่ งมากต่อโปรเซส B กล่าวคือ โปรเซสB ตอ้ งการเวลาในการทาํ งานเพียง 1 วนิ าที แต่ตอ้ งรอใหโ้ ปรเซส A ซ่ึงเขา้ มาก่อนทาํ งานเสร็จทาํ ใหก้ ารทาํ งานของโปรเซสเสร็จสิ้นลงไดต้ อ้ งใชเ้ วลาถึง 16 นาที เทียบเวลาทาํ งานจริงกบั เวลาที่ทาํ งานเสร็จไดเ้ ท่ากบั (1/16) X 100 = 6 % สาํ หรับโปรเซส C ใชเ้ วลาในการทาํ งานท้งั หมด 16วนิ าที แต่เวลาในการทาํ งานจริงคือ 10 วินาที คิดเป็น (10/26) x 100 =38% จะเห็นว่าเมื่อเทียบเวลาที่ทาํ งานจริงกบั เวลาที่ทาํ งานเสร็จ โปรเซส B เสียเวลารอนานมาก2.2.2.2 การจดั ควิ แบบ RR (round-robin)การจดั คิวแบบ RR อาจเรียกวา่ เป็นการจดั คิวแบบมีการรวบรวม ลกั ษณะการคดั เลือกโปรเซสในคิวจะเป็นแบบ FCFS คือ \"มาก่อนไดก้ ่อน\" แต่ต่างกนั นิดหน่อยตรงท่ีการครอบครองซีพียูของโปรเซสในสถานะรันจะถกู จาํ กดั เวลาไวด้ ว้ ยระยะเวลาควอนตมั ทาํ ใหโ้ ปรเซสที่ตอ้ งการเวลาในการทาํ งานนานจะตอ้ งเปลี่ยนสถานะหมุนวนระหว่างสถานะพร้อมและสถานะรันการเปลี่ยนสถานะต่างๆ ของโปรเซสจะตรงกบั ที่กล่าวไวใ้ น รูปท่ี 2.26 เป็นแผนภาพของการเปลี่ยนสถานะของโปรเซสท่ีมีการจดั คิวแบบ RR endstart read run jam

โปรเซส 87 รูปที่ 2.26 การเปลยี่ นสถานะโปรเซสเม่ือมีการจดั ควิ แบบ RRการจดั คิวแบบ RR สามารถแกป้ ัญหาการรอคอยนานของโปรเซสท่ีตอ้ งการเวลาทาํ งานนอ้ ยๆ ได้ลองกลบั ไปพิจารณาเหตุการณ์สมมติซ่ึงกล่าวไวใ้ นหัวขอ้ ที่แลว้ ถา้ ระบบกาํ หนดเวลา ควอนตมัเป็ น 1 วินาที โปรเซส A ตอ้ งมีการวนรอบเปลี่ยนสถานะระหว่างสถานะรันและสถานะพร้อม15 คร้ัง โปรเซส B 1 คร้ัง โปรเซส C 10 คร้ัง เมื่อโปรเซส A เขา้ ไปอยใู่ นสถานะรันคร้ังแรกและกลบั ออกมา โปรเซส B จะไดค้ รอบครองซีพียูไดแ้ ละทาํ งานเสร็จโปรเซส B จบและออกจากระบบไปเลยเหลือเพียง 2 โปรเซสที่อยู่ในคิวของสถานะพร้อม โปรเซสถดั ไปที่จัดได้ครอบครองซีพยี คู ือ C และโปรเซส C และ A จะสลบั กนั ครอบครองซีพียูกนั โปรเซสละ 1วินาที จนกระทั่งโปรเซส C ไป เหลือโปรเซส A เพียงโปรเซสเดียว ในรูปที่ 2.27 เป็ นแผนภาพแสดงการสลบั กนั ทาํ งานของโปรเซสทงั่ 3 และรูปที่ 2.28 เป็นผลที่เกิดข้ึนจากากรจดั คิวแบบ RR O = โปรเซสไดค้ รอบครองซีพียู X = โปรเซสรออยใู่ นสถานะพร้อม รูปที่ 2.27 แผนภาพแสดงการทาํ งานของโปรเซส A B C

88 ระบบปฏิบตั ิการ รูปที่ 2.28 ผลของการจดั ควิ แบบ RR จากรูปที่ 2.28 จะเห็นว่าสาํ หรับโปรเซส B และ C เทียบเวลาการทาํ งานจริงและเวลาท่ีทาํ งานเสร็จไดป้ ระมาณ 50 % ซ่ึงดีกว่าผลท่ีไดใ้ นการจดั คิวแบบ FCFS แต่ลองพิจารณาโปรเซสA จะไดผ้ ลท่ีแย่ลงเพราะในการจดั คิวแบบ FCFS อตั ราเวลาของการทาํ งานจริงกบั เวลาทาํ งานเสร็จเป็น 100% แต่เมื่อใชก้ ารจดั คิวแบบ RR ลดลงเป็น (15/36) x 100 = 42 %เราอาจสรุปไดก้ ารจดั คิวแบบ FCFS จะเป็นผลเสียต่อโปรเซสที่ตอ้ งการเวลาในการทาํ งานนอ้ ยและเขา้ คิวมากหลงั ส่วนการทาํ งานนาน เพราะตอ้ งวนกลบั มาอยใู่ นคิวของสถานะพร้อมหลายรอบ ถา้ ในคิวมีโปรเซสมาก เวลาท่ีใชใ้ นการรอแต่ละคร้ังที่เขา้ มาในคิวกจ็ ะเพมิ่ ข้ึนอีก ในการจดั คิวแบบ RR น้ีโปรเซสต่างๆ จะดาํ เนินไปพร้อมๆ กนั ถา้ เรากาํ หนดให้ระยะเวลาควอนตมั มีค่านอ้ ยๆ โปรเซสต่างๆ กจ็ ะไดก้ ลบั เขา้ มาอยใู่ นสถานะรันไดเ้ ร็วเสมือนวา่ ทุกโปรเซสทาํ งานไปพร้อมกนั การที่เราแบ่งใหท้ ุกๆ โปรเซสไดม้ ีโอกาสเขา้ มาครอบครองซีพียแู มจ้ ะเป็นช่วงเวลานอ้ ยนิดน้นั เป็นจุดเร่ิมตน้ ของระบบการแบ่งกนั ใชเ้ วลาหรือไทมแ์ ชริ่ง (time sharingsystem) ซ่ึงหมายถึงการแบ่งเวลาของซีพียใู หก้ บั ทุกๆ โปรเซสไดใ้ ชท้ วั่ กนั2.2.2.3 การจดั ควิ แบบลาํ ดบั ความสําคญั (priority queue) คิวแบบลาํ ดบั ความสาํ คญั มีลกั ษณะแตกต่างกบั คิวธรรมดา ภายในคิวจะมีการจดั เรียงลาํ ดบัของโปรเซสต่างๆ ตามลาํ ดบั ความสาํ คญั ของโปรเซสน้นั โปรเซสท่ีอยตู่ น้ ควิ จะมีลาํ ดบัความสาํ คญั มากที่สุด และลดลงเร่ือยๆ โปรเซสที่อยทู่ า้ ยคิวคือโปรเซสที่มีลาํ ดบั ความสาํ คญั ต่าํ สุดการคดั เลือกโปรเซสจะเอาโปรเซสที่อยตู่ น้ คิว (มีลาํ ดบั ความสาํ คญั สูงสุด) เขา้ ไปครอบครองซีพียูก่อนดงั น้นั ถึงแมว้ า่ โปรเซสท่ีเขา้ คิวทีหลงั แต่มีลาํ ดบั ความสาํ คญั สูงกวา่ กอ็ าจไดเ้ ขา้ ไปครอบครองซีพียกู ่อน ดงั ตวั อยา่ งในรูปที่ 2.29 โปรเซสที่เขา้ คิวเป็นโปรเซสหลงั สุดแต่จะไดค้ รอบครองซีพียูก่อนโปรเซส C และ Dโปรเซส ลาํ ดบั ความสาํ คญั ทา้ ยคิว ตน้ คิว A 10 B 8 DCB A C 5 D 4 ข. ก่อนโปรเซส E เขา้ คิว ตน้ คิว E 6 ทา้ ยคิว BAก.ลาํ ดบั ความสาํ คญั ของโปรเซสต่างๆ DCE ค. หลงั โปรเซส E เขา้ คิว

โปรเซส 89รูปที่ 2.29 การจดั ควิ แบบลาํ ดบั ความสําคญั วิธีการพิจารณากาํ หนดลาํ ดบั ความสาํ คญั ของโปรเซสต่างๆ อาจพจิ ารณาไดจ้ ากองคป์ ระกอบต่างๆ เช่น 1. ผใู้ ชเ้ ป็นเจา้ ของโปรเซส ลาํ ดบั ความสาํ คญั ของโปรเซสมกั ข้ึนอยกู่ บั ผใู้ ชท้ ่ีเป็นเจา้ ของโปรเซส เช่น โปรเซสของผใู้ ชธ้ รรมดาจะมีลาํ ดบั ความสาํ คญั ต่าํ กวา่ ผใู้ ชท้ ี่เป็นผคู้ วบคุมดูแลระบบ 2. ของโปรเซส เช่นถา้ เป็นโปรเซสของงานในโหมดมกั มีลาํ ดบั ความสาํ คญั ต่าํ กวา่ โปรเซสของงานในโหมดโตต้ อบ (Interactive mode) ท้งั น้ีเพราะในระบบโตต้ อบตอ้ งตอบสนองใหก้ บัผใู้ ชใ้ หเ้ ร็วท่ีสุดเท่าที่จะทาํ ได้ แต่สาํ หรับในโหมดแบตชเ์ ราส่งงานใหร้ ะบบทาํ แลว้ รอรับผลลพั ธ์จากระบบเม่ืองานน้นั เสร็จ ไม่มีการโตต้ อบระหวา่ งผใู้ ชก้ บั ระบบในระหวา่ งที่กาํ ลงั ทาํ งานน้นั อยู่ 3. ผใู้ ชท้ ี่ยอมจ่ายเงินเพม่ิ เราอาจจะเพิ่มลาํ ดบั ความสาํ คญั ของโปรเซสของผใู้ ชท้ ี่ยอมจ่ายเงินคา่ ใชร้ ะบบในอตั ราสูงกวา่ ปกติ น้นั คือผใู้ ชค้ นน้นั ยอ่ มจ่ายเงินเพ่ิม เพอื่ ใหง้ านของเขาเสร็จเร็วข้ึน 4. ระยะเวลาท่ีโปรเซสเขา้ มาอยใู่ นระบบ โปรเซสของผใู้ ชท้ ี่ถูกสร้างข้ึนและเขา้ มาอยใู่ นระบบนานแลว้ จะไดร้ ับลาํ ดบั ความสาํ คญั เพมิ่ ข้ึน ท้งั น้ีเพราะเราเห็นว่าโปรเซสเหล่าน้นั ทาํ งานอยู่ในระบบนานแลว้ ควรจะจบออกไปเสียที แต่ในบางระบบเราอาจลดลาํ ดบั ความสาํ คญั ของโปรเซสที่อยใู่ นระบบนานแลว้ กไ็ ด้ เพราะเราเห็นวา่ โปรเซสเหล่าน้นั เป็นโปรเซสใหญ่ทาํ งานนานถา้ ใหท้ าํ งานนานเพมิ่ ข้ึนอีกหน่อยคงไม่กระทบกระเทือนต่อการทาํ งานโปรเซสน้นั มากเท่าไหร่2.2.2.4 การจดั ตารางการทาํ งานแบบงานส้ันทส่ี ุดได้ก่อน (Shortest–Job-First Scheduling / SJF) วธิ ีน้ีใชค้ ่าคาํ นวณเวลา ที่กระบวนการจะตอ้ งทาํ งาน (CPU burst) เป็นเกณฑ์ เมื่อหน่วยประมวลผลกลางวา่ งลง กจ็ ะเลือกกระบวนการที่จะตอ้ งทาํ งานส้ันที่สุด (ใชเ้ วลานอ้ ยท่ีสุด) มาทาํ งานต่อไป ถา้ มีหลายกระบวนการมีเวลาเท่ากนั ใหเ้ ลือกกระบวนการที่มาก่อน (FCFS)ตวั อยา่ งเช่นมีกระบวนการ 4 กระบวนการและเวลาท่ีกระบวนการจะตอ้ งทาํ งาน เป็น มิลลิวนิ าทีกระบวนการ (Process) เวลาทาํ งาน (Burst Time) 6 P1 8 P2 7 P3 3 P4โดยใชว้ ธิ ี SJF เราสามารถจดั ตารางการทาํ งานไดด้ งั แสดงโดย Gantt chart ดงั น้ี

90 ระบบปฏิบตั ิการ P4 P1 P3 P20 3 9 16 24เวลาการรอคอยของ P1 = 3 ms , P2 = 16 ms , P3 = 9 ms , P4 = 0 ms ดงั น้นั การรอคอยเฉล่ีย = (3 + 16+ 9 + 0) / 4 = 7 ms ถา้ เราใช้ FCFS เวลาการรอคอยเฉลี่ยจะ = [ (0) + (6) + (8 + 6) + (7 + 8 + 6) ] / 4= 10.25 ms จะเห็นไดว้ า่ SJF อาจเป็นวิธีการที่ดีที่สุด (optimal) เมื่อใชเ้ วลารอคอยเฉล่ียต่าํ สุดเป็นเกณฑ์ จะเห็นไดว้ า่ เมื่อสลบั ท่ีกระบวนการที่ทาํ งานยาวกวา่ กบั กระบวนการที่ทาํ งานส้นั กวา่ จะทาํใหเ้ วลารอคอยของกระบวนการท่ีส้นั กวา่ ลดลงมากกวา่ กระบวนการท่ียาวกวา่ เพม่ิ ข้ึน นนั่ คือ เวลารอคอยเฉล่ียจะลดลง ปัญหาของวิธี SJF ในทางปฏิบัติคือ ข้อมูลในด้านเวลาท่ีจะต้องใช้ทํางานของแต่ละกระบวนการ สําหรับการจดั ตารางการทาํ งานในระยะยาว (Long-term scheduling) ในระบบการทาํ งานแบบกลุ่ม เราสามารถใช้ขอ้ จาํ กดั เวลาที่ผูใ้ ช้บอกเป็ นเกณฑ์ได้ ซ่ึงผูใ้ ช้ก็จะถูกบงั คบั โดยอตั โนมตั ิ ใหป้ ระมาณการขอ้ จาํ กดั เวลาน้ี อยา่ งใกลเ้ คียงท่ีสุด เพราะยงิ่ ส้นั ยง่ิ มีโอกาสเขา้ ทาํ งานก่อน(แต่ถา้ ส้นั เกินไป ระบบจะแจง้ ขอ้ ผดิ พลาด “ใชเ้ วลาเกินขอ้ จาํ กดั ” ซ่ึงผใู้ ชต้ อ้ งวนกลบั ไปเริ่มส่งงานมาใหม่) โดยปกติแลว้ จึงนิยมใช้ SJF ในการจดั ตารางการทาํ งานในระยะยาว แมว้ ่า SJF จะดีที่สุดแต่กไ็ ม่สามารถนาํ ไปใชก้ บั การจดั ตารางการทาํ งานในระยะส้ัน (Short-term scheduling) เพราะเราไม่มีทางรู้เวลาที่แต่ละกระบวนการ จะตอ้ งทาํ งานจริง ๆ ทางออกกค็ ือ พยายามประมาณวธิ ี SJF โดยการพยากรณ์ค่าว่าเวลาที่กระบวนการจะตอ้ งทาํ งานจากค่าในอดีต แลว้ จดั ตารางการทาํ งาน ดว้ ยค่าพยากรณ์น้ีแทน วิธี SJF น้ีอาจทาํ เป็นแบบใหแ้ ทรกกลางคนั (preemptive) หรือ หา้ มแทรกกลางคนั(nonpreemptive) กไ็ ด้ เมื่อกระบวนการใหม่เขา้ มาในแถวคอย ขณะท่ีกระบวนการหน่ึงกาํ ลงั ทาํ งานอยู่ ถา้ กระบวนการใหม่มีเวลาที่จะตอ้ งทาํ งานส้นั กวา่ เวลาท่ีเหลือ ของกระบวนการที่กาํ ลงั ทาํ งาน  ในกรณีใหแ้ ทรกกลางคนั ได้ กระบวนการใหม่สามารถแทรกเขา้ ไปทาํ งานแทน (กระบวนการท่ีกาํ ลงั ทาํ งานอย)ู่ ได้  แต่ถา้ หา้ มแทรกกลางคนั กระบวนการใหม่ จะตอ้ งรอจนกว่ากระบวนการเดิมเสร็จเสียก่อนการจดั ตารางการทาํ งานแบบส้นั ท่ีสุดไดก้ ่อน โดยใหแ้ ทรกกลางคนั ได้ บางคร้ังเรียกวา่ แบบเวลาที่เหลือส้นั ท่ีสุดก่อน (shortest-remaining-time-first)ตวั อยา่ งเช่น กระบวนการ (process) เวลามาถึง (Arrival Time) เวลาทาํ งาน (Burst Time) P1 0 8 P2 1 4 P3 2 9 P4 3 5

โปรเซส 91ถา้ ใชว้ ิธี SJF แบบใหแ้ ทรกกลางคนั ได้ ผลจะเป็นดงั ตาราง Gantt chart ดงั น้ีP1 P2 P4 P1 P30 1 5 10 17 26กระบวนการ P1 เริ่มท่ีเวลา 0 เพราะมีเพียงกระบวนการเดียว P2 มาถึงที่เวลา 1, P1 ยงั เหลือเวลาอีก 7มิลลิวินาที มากกว่าเวลาของ P2 (4 มิลลิวินาที) ดงั น้นั P2 แทรกกลางคนั P1 เวลารอคอยเฉล่ีย = ((10-1) + (1-1) +(17-2) + (5-3)) / 4 = 26 / 4 = 6.5 มิลลิวินาที ถา้ ห้ามแทรกกลางคนั เวลารอคอยเฉลี่ยจะเป็น ((0) + (8-1) + (17-2) + (12-3)) / 4 = 7.75 มิลลิวนิ าที2.2.2.5 การจดั ควิ แบบ SJN (shortest job next)การจดั คดั เลือกโปรเซสดว้ ยวิธีน้ี จะคดั เลือกเอาโปรเซสท่ีตอ้ งการเวลาในการทาํ งานนอ้ ยที่สุด ทาํใหโ้ ปรเซสท่ีตอ้ งการเวลาในการทาํ งานนอ้ ยจบออกไปไดเ้ ร็วข้ึน จาํ นวนโปรเซสในระบบที่รออยู่ในคิวกจ็ ะมีจาํ นวนลดลง และทาํ ใหเ้ วลาโดยเฉลี่ยในการทาํ งาน 1 งานเสร็จหรือเวลาครบวงงาน(turnaround time) นอ้ ยลงแต่การจดั คิวแบบน้ีเป็นผลเสียต่อโปรเซสท่ีตอ้ งการเวลาในการทาํ งานนาน2.2.2.6 การจดั ควิ แบบ SRT (shortest remaining time)การคดั เลือกโปรเซสดว้ ยวิธีน้ีคลายๆ กบั แบบ SJN การจดั คิวแบบ SRT จะเลือกเอาโปรเซส \"เหลือเวลาในการทาํ งานนอ้ ยที่สุด\" เขา้ ไปครอบครองซีพียู ซ่ึงทาํ ใหโ้ ปรเซสท่ีตอ้ งการเวลาในการทาํ งานนาน แต่ใกลจ้ ะจบแลว้ สามารถจบออกไประบบไดเ้ ร็วข้ึน (เทียบกบั แบบ SJN) แต่สาํ หรับโปรเซสท่ีตอ้ งการเวลาในการทาํ งานนอ้ ย กย็ งั คงจบออกไปจากระบบไดเ้ ร็วเหมือนกบั การจดั แบบSJN ท้งั การจดั คิวแบบ SJN และ SRT จะตอ้ งมีการประมาณเวลาการทาํ งานของโปรเซสไว้ล่วงหนา้ แต่วิธีการจดั คิวแบบ SRT จะตอ้ งมีการบนั ทึกเวลาท่ีโปรเซสทาํ งานไปแลว้ ไวด้ ว้ ยเพอ่ื ท่ีจะทราบไดว้ า่ เหลือเวลาในการทาํ งานอีกเท่าใด2.2.2.7 การจดั ควิ แบบหลายระดับ

92 ระบบปฏิบตั ิการการจดั คิวแบบต่างๆ ที่กล่าวมาแลว้ ท้งั หมดเป็นเพียงตวั อยา่ งของวิธีการคดั เลือกโปรเซสในคิวของสถานะพร้อมเท่าน้นั ยงั มีวิธีการต่างๆ อีกหลายรูปที่แบบ แต่ไม่วา่ จะเป็นการจดั คิวดว้ ยวธิ ีใดกต็ ามลว้ นแลว้ แต่เป็นการจดั คิวภายในคิวเพียง 1 คิวเท่าน้นั เรียกวา่ เป็นการจดั คิวแบบ 1ระดบั ดงั แสดงในรูปที่ 2.30 CPU ABCD คิวของโปรเซส รูปท่ี 2.30 การจัดควิ แบบ 1 ระดบั เพือ่ ใหก้ ารจดั คิวเป็นไปอยา่ งมีประสิทธิภาพมากข้ึน เราจึงจดั ใหม้ ีคิวหลายๆ ควิ แทนที่จะมีเพียงคิวเดียวเรียกว่าเป็นการจดั คิวแบบหลายระดบั ดงั แสดงในรูปที่ 2.30 ซ่ึงวิธีการจดั คิวในแต่ละคิวไม่จาํ เป็นตอ้ งเป็นประเภทเดียวกนั เช่น ในคิวท่ี 1 อาจเป็นคิวแบบลาํ ดบั ความสาํ คญั คิวท่ี 2อาจเป็นแบบ FCFS เป็นตน้ การคดั เลือกโปรเซสในการจดั คิวแบบหลายระดบั จะคดั เลือกจากคิวท่ี 1 ก่อนจนกระทงั่โปรเซสในการจดั คิวแบบหลายระดบั จะคดั เลือกจากคิวท่ี 1 ก่อนจนกระทงั่ โปรเซสภายในคิวที่ 1ทาํ งานเสร็จท้ังหมด (คิวว่าง) แลว้ จึงค่อยคดั เลือกโปรเซสในคิวระดับถัดข้ึนไปตามลาํ ดบั ถ้าโปรเซสในคิวตอ้ งกลบั เขา้ มาต่อคิวใหม่โปรเซสน้นั จะตอ้ งกลบั มากอยใู่ นคิวระดบั เดิมที่เคยอยู่ จะเปลี่ยนไปเข้าคิวที่ระดับอื่นไม่ได้ โดยท่ัวไปโปรเซสในคิวหน่ึงๆ จะแบ่งแยกประเภทกันโปรเซสประเภทเดียวกนั มกั อยใู่ นคิวระดบั เดียวกนั และโปรเซสที่มีความสาํ คญั มากๆ มกั อยใู่ นคิวระดบั แรก โปรเซสที่มีลาํ ดบั ความสาํ คญั นอ้ ยลงไปกจ็ ะอยใู่ นคิวระดบั หลงั ต่อไปCPU An Bn Cn Dn คิวท่ี n AA2 BB2 CC2 DD2 คิวท่ี 2

โปรเซส 93 รูปที่ 2.31 การจดั ควิ แบบหลายระดบั2.2.2.8 การจดั ควิ การใช้โพรเซสเซอร์ในระยะยาว เมื่อกล่าวถึงตวั จดั คิวการใชโ้ พรเซสเซอร์ในระยะส้ัน กค็ งตอ้ งกล่าวถึงตวั จดั คิวในระยะยาวด้วย (long term scheduler) การทาํ งานของตวั จดั คิวการใช้โพรเซสเซอร์ในระยะยาวมีความแตกต่างกบั ตวั จดั คิวการใชโ้ พรเซสเซอร์ในระยะส้ันอยใู่ นบางส่วน การจดั คิวการใชโ้ พรเซสเซอร์ในระยะส้ันเป็ นการจดั คิวในระดบั โปรเซสและทาํ หนา้ ท่ีคดั เลือกโปรเซสในสถานะพร้อมและส่งเขา้ ไปอย่ใู นสถานรัน ส่วนการจดั คิวการใชโ้ พรเซสเซอร์ในระยะยาวจะเป็ นการจดั คิวในระดบั \"งาน\" ไม่ใช่ระดบั \"โปรเซส\" เม่ือผูใ้ ชส้ ่งงานเขา้ มาในระบบ งานเหล่าน้ีจะเขา้ ไปรออยใู่ นคิวงานเมื่อระบบอยใู่ นสภาพพร้อมที่จะรับโปรเซสใหม่ได้ เช่น มีหน่วยความจาํ เหลือมากพอ และไฟล์งานที่ผใู้ ชส้ ่งเขา้ มามีอยจู่ ริงตวั จดั คิวการใชโ้ พรเซสเซอร์ในระยะยาวจะคดั เลือกเอางานท่ีอยใู่ นคิวงานข้ึนมา และสร้างโปรเซสใหม่ใหส้ าํ หรับงานน้นั นอกจากน้นั ตวั คิวการใชโ้ พรเซสเซอร์ในระยะยาวมีหนา้ ท่ียตุ ิโปรเซสท่ีจบการทาํ งานลงอีกดว้ ย การคดั เลือกงานเพอื่ สร้างโปรเซสใหม่สาํ หรับงานน้นั มีวธิ ีการที่เหนือกบั การคดั เลือกโปรเซสในคิวของสถานะพร้อม คืออาจใชก้ ารจดั คิวแบบ FCFS SJN หรือแบบ SRT แต่การจดัคิวงานต่างกบั การจดั คิวของโปรเซสเลก็ นอ้ ยคอื งานท่ีถูกคดั เลือกข้ึนมาและสร้างโปรเซสใหม่ให้จะไม่มีการวนกลบั มาเขา้ คิวใหม่เหมือนกบั กรณีของโปรเซส เม่ือโปรเซสออกจากคิวแลว้ อาจกลบัเขา้ มาต่อทา้ ยคิวใหมไ่ ด้ ดงั น้นั การเขา้ คิวของงานจะไม่มีการวนกลบั มา การจดั คิวที่มีการวนรอบกลบั มาในคิวใหม่ เช่น การจดั คิวแบบ RR จึงใชไ้ ม่ไดก้ บั คิวของงาน2.2.3 ระบบหลายโพรเซสเซอร์ ระบบหลายโพรเซสเซอร์ (multi - processor system) หมายถึงระบบคอมพวิ เตอร์ที่มีซีพียูหลายตวั ช่วยกนั ทาํ งาน คาํ วา่ โพรเซสเซอร์ จึงหมายถึงซีพยี เู ท่าน้นั มิไดห้ มายถึงโพรเซสเซอร์

94 ระบบปฏิบตั ิการอื่นๆ เช่น โปรเซสควบคุมอินพตุ -เอาตพ์ ุต เป็นตน้ โดยทว่ั ไปถา้ เราแบ่งแยกระบบคอมพวิ เตอร์ตามการทาํ งานของโพรเซสเซอร์ เราสามารถแบ่งได้ 4 ประเภทคือ SISD (single instructionsingle - data stream) , MISD (multiple instruction single data stream) , SIMD (singleinstruction-multiple data stream) และ MIMD (multiple instruction multiple data stream)2.2.3.1 ระบบคอมพวิ เตอร์ประเภท SISD คอมพวิ เตอร์ที่ใชง้ านกนั ทว่ั ๆ ไปจะเป็นประเภท SISD ในระบบการทาํ งานของคอมพิวเตอร์ประเภทน้ีมีโปรเซสอยเู่ พยี งตวั เดียว โดยการทาํ งานของซีพยี ตู อ้ งการคาํ สงั่ สาํ หรับเอก็ซีคิ้ว 1 คาํ สง่ั และขอ้ มูล 1 ชุด ดงั แสดงในรูปที่ 5.10 สญั ลกั ษณ์ P แทนโพรเซสเซอร์ I แทนคาํ ส่ัง D แทนขอ้ มูล และ O แทนผลลพั ธ์ท่ีไดร้ ับเมื่อ P เอก็ ซีคิ้วคาํ สงั่ I โดยใชข้ อ้ มูล D I P DO รูปท่ี 2.32 ระบบคอมพวิ เตอร์ประเภท SISD2.2.3.2 ระบบคอมพวิ เตอร์ประเภท MISD ระบบคอมพวิ เตอร์ประเภท MISD เป็นระบบท่ีมีโพรเซสเซอร์หลายตวั ทาํ งานพร้อมกนัหรือท่ีเรียกวา่ ทาํ งานขนานกนั (parallel processing) โพรเซสเซอร์แต่ละตวั จะมีคาํ สง่ั ที่ใชเ้ อก็ ซีคิ้วของตนเอง แต่ท้งั หมดจะใชข้ อ้ มูลชุดเดียว (ดูรูปที่ 2.33 ประกอบ) เมื่อโปรเซสเซอร์ตวั แรกเอก็ ซีคิ้วคาํ สง่ั เสร็จผลลพั ธ์ที่ไดจ้ ะเป็นขอ้ มูลของโปรเซสเซอร์ตวั ต่อไป ในรูปที่ 2.33 01 จะเป็นขอ้ มูลสาํ หรับ P2 O2 จะเป็นขอ้ มูลสาํ หรับ P3 และเป็นเช่นน้ีเร่ือยไป ขอ้ ดีของระบบประเภทน้ีคือการทาํ งานของระบบทาํ งานไดเ้ ร็วข้ึน เพราะมีหลายโพรเซสเซอร์ช่วยกนั ทาํ งานไปพร้อมๆ กนั รูปที่ 2.33 ระบบคอมพวิ เตอร์ประเภท SISD เพอ่ื ใหผ้ อู้ า่ นเขา้ ใจและเห็นประโยชนข์ องการทาํ งานแบบ MISD จะขอยกตวั อยา่ งง่ายๆ

โปรเซส 95ของการคาํ นวณฟังกช์ นั f(x) = 2 x2  4 ในการทาํ งานของระบบประเภท SISD การหาคา่ f(x) จะตอ้ งกระทาํ ทีละช้นั ตอนดงั น้ี 1. หาค่า x2 2. คูณผลลพั ธ์จากขอ้ 1 ดว้ ย 2 3. เพิม่ ค่าผลลพั ธ์ท่ีไดจ้ ากขอ้ 2 ดว้ ย 4 แต่ถา้ เป็นการทาํ งานของระบบประเภท MISD เราใชโ้ พรเซสเซอร์ 3 ตวั ตวั ที่ 1 ทาํ คาํสงั่ ยกกาํ ลงั 2 ตวั ที่ 2 ทาํ คาํ สง่ั คูณ 2 และตวั ที่ 3 ทาํ คาํ สงั่ บวก 4 ดงั แสดงในรูปที่ 2.34 รูปที่ 2.34 ตวั อย่างการทาํ งานของระบบประเภท MISD เม่ือ P1 เอ็กซีคิ้วคาํ ส่ังเสร็จและส่งผลลพั ธ์ให้ P2 ในช่วงท่ี P2 เอ็กซีคิ้วคาํ ส่ังโดยใช้ผลลพั ธ์จาก P1 P1 สามารถรับขอ้ มูลชุดพดั ไปเพื่อเอก็ ซีคิ้วคาํ สั่งของตนต่อไดท้ นั ที เมื่อ P1 และP2 เอ็กซีคิ้วคาํ ส่ังเสร็จผลลพั ธ์ของ P2 ถูกส่งให้ P3 เอ็กซีคิ้วคาํ สั่งโดยใชผ้ ลลพั ธ์จาก P2 P2 ก็จะรับขอ้ มูลซ่ึงเป็นผลลพั ธจ์ าก P1 ใชเ้ อก็ ซีคิ้วใบพร้อมกนั และ P1 กจ็ ะรับขอ้ มูลชุดถดั ไป มาเอก็ซีคิ้วไปพร้อมกบั P2 และ P3 ด้วย และก็จะเป็ นเช่นน้ีเร่ือยไป จะเห็นว่าโพรเซสเซอร์ท้งั 3ทาํ งานไปพร้อมกนั แต่ละโพรเซสเซอร์ทาํ งานในส่วนยอ่ ยของฟังกช์ น่ั f(x) เสร็จสิ้นโดยสมบูรณ์มนั สามารถรับขอ้ มูลชุดใหม่และเอก็ ซีคิว้ คาํ สง่ั ต่อไปไดท้ าํ ใหก้ ารทาํ งานของระบบเร็วข้ึน2.2.3.3 ระบบคอมพวิ เตอร์ประเภท SIMD การทาํ งานของระบบคอมพวิ เตอร์ประเภท SIMD เป็นการทาํ งานของโพรเซสเซอร์หลายตวั พร้อมกนั โดยโพรเซสเซอร์ทุกตวั ใชค้ าํ สงั่ เดียวกนั หมดแต่มีขอ้ มูลเป็นของตนเอง ดงั น้นัผลลพั ธท์ ่ีไดจ้ ึงมีหลายชุดเช่นกนั ดงั แสดงในรูปท่ี 2.35

96 ระบบปฏิบตั ิการ รูปท่ี 2.35 ระบบคอมพวิ เตอร์ประเภท SIMD ระบบประเภท SIMD มีประโยชนต์ ่อการคาํ นวณงานดา้ นเมตริกซ์ การคาํ นวณ ทางดา้ นเมตริกซม์ กั จะทาํ การคาํ นวณแบบเดียวกนั กบั ขอ้ มูลหลายๆ ชุด เช่นการบวกเมตริกซ์ต่อไปน้ี X1 Y1 X1 + Y1 X2 Y2 X2 + Y2 X3 Y3 X3 + Y3 จะเห็นวา่ ในการบวกเมตริกซต์ ามตวั อยา่ งขา้ งบนเราถือไดว้ า่ มีขอ้ มูล 3 ชุดที่ตอ้ งนาํ มาบวกกนั เราตอ้ งมีการคาํ นวณการบวกกบั ขอ้ มูล 3 ชุด คือ X1+Y1 X2+Y2 และ X3 +Y3 เพ่อื ใหไ้ ด้ผลลพั ธอ์ อกมาถา้ เป็นระบบประเภท SISD ตอ้ งเสียเวลาในการบวกถึง 3 คร้ัง แต่ถา้ เป็นระบบประเภท SIMD จะเสียเวลาในการบวกเพียงคร้ังเดียว เพราะไป ทุกตวั เอก็ ซีคิ้วคาํ สง่ั บวกพร้อมกนั หมดโดยมีขอ้ มูลต่างกนั ดงั แสดงในรูปที่ 2.36X1 P1 X2 P2 X3 P3Y1 Y3 Y2 X1 + Y1 X2 + Y2 X3 + Y3 รูปท่ี 2.36 ตวั อย่างการทํางานของระบบประเภท SIMD

โปรเซส 972.2.3.4 ระบบคอมพวิ เตอร์ประเภท MIMDเป็นการทาํ งานของโปรเซสเซอร์หลายตวั ช่วยกนั ทาํ งานแต่ละตวั มีคาํ สง่ั และขอ้ มูลเป็นของตนเองการเอก็ ซีคิ้วงานคาํ สงั่ ของแต่ละโพรเซสเซอร์จึงเป็นอิสระจากกนั ดงั แสดงในรูปที่ 2.37 I1 I2 I3 In DnD1 P1 D2 P2 D3 P3 PnO1 O2 O3 On รูปที่ 2.37 ระบบคอมพวิ เตอร์ประเภท MIMD ตวั อยา่ งของระบบคอมพวิ เตอร์ประเภท MIMD ที่เห็นไดช้ ดั กค็ ือระบบเครือข่ายคอมพิวเตอร์ (computer network) ซ่ึงเป็นระบบท่ีเราใชค้ อมพวิ เตอร์หลายๆ ตวั ต่อเช่ือมโยงทนัเพอื่ ช่วยกนั ทาํ งาน คอมพิวเตอร์แต่ละตวั จะเป็นแบบธรรมดาราคาไม่แพง แต่อาศยั การประสานการทาํ งานที่ดี เราจึงไดร้ ะบบคอมพวิ เตอร์ท่ีมีความสามารถสูงข้ึน แต่มีราคาถูกวา่ เครื่องคอมพวิ เตอร์ท่ีเป็นระบบใหญ่ซ่ึงมีราคาแพง2.2.3.5 การทาํ งานของระบบหลายโพรเซสเซอร์ จุดประสงคข์ องการสร้างระบบหลายโพรเซสเซอร์กค็ ือ ใหโ้ พรเซสเซอร์ต่างๆ ช่วยกนัทาํ งานขนานกนั ไป เพอื่ ลดเวลาการทาํ งาน แต่เม่ือมีโปรเซสเซอร์หลายตวั ช่วยกนั ทาํ งานก็จาํ เป็นตอ้ งมีกลไกบางอยา่ งควบคุมการทาํ งานโปรเซสเซอร์เหล่าน้นั ระบบประเภท SIMD และMISD มีกลไกการควบคุมการทาํ งานของมีเองตามโครงสร้างของระบบอยแู่ ลว้ แต่สาํ หรับระบบประเภท MIMD โพรเซสเซอร์แต่ละตวั ทาํ งานอิสระกนั มีขอ้ มูลและคาํ สง่ั เป็นของตนเอง เราจึงตอ้ งสร้างกลไกควบคุมการทาํ งาน เพ่อื ใหโ้ ปรเซสเซอร์ท้งั หมดสามารถทาํ งานประสานกนั ไดโ้ ดยประการแรกตอ้ งใหโ้ ปรเซสเซอร์ต่างๆ สามารถติดต่อกนั ไดเ้ สียก่อน ซ่ึงเป็นการติดต่อโดยส่งขอ้ มูลใหก้ นั เราเรียกการติดต่อน้ีว่า การเช่ือมโยง (coupling) การเชื่อมโยงระหวา่ งโพรเซสเซอร์ แบ่งไดเ้ ป็น 2 ประเภท ประเภทแรกเรียกวา่ การเชื่อมโยงอยา่ งหลวม (loosely coupling) มีลกั ษณะการเชื่อมโยงดงั น้ี โพรเซสเซอร์แต่ละตวั จะมีหน่วยความจาํ หลกั และหน่วยความจาํ รองเป็นของตนเอง และติดต่อรับส่งขอ้ มูลผา่ นทางช่องทางส่ือสารร่วม (shared communication path) ดงั ตวั อยา่ ง แสดงในรูปท่ี 5.16 การติดต่อส่วนใหญ่จะเป็นการส่งขอ้ มูลเท่าน้นั ช่องทางสื่อสารโพรเซสเซอร์ 1 โพรเซสเซอร์ 2 โพรเซสเซอร์ 3

98 ระบบปฏิบตั ิการ รูปท่ี 2.38 ระบบหลายโพรเซสเซอร์แบบการเช่ือมโยงอย่างหลวมการเช่ือมโยงประเภทท่ี 2 เรียกวา่ การเช่ือมโยงอยา่ งแน่น (tightly coupling) มีโครงสร้างท่ีสาํ คญัคือ โพรเซสเซอร์จะมีการใชห้ น่วยความจาํ ร่วมกนั โดยเฉพาะอยา่ งยง่ิ หน่วยความจาํ หลกัโพรเซสเซอร์แต่ละตวั อาจมีหน่วยความจาํ เป็นของตวั เองหรือไม่กไ็ ด้ ดงั ตวั อยา่ งแสดงในรูปท่ี 2.38 หน่วยความจาํ ร่วม ( Global Storage ) ช่องทางส่ือสาร โพรเซสเซอร์ 1 โพรเซสเซอร์ 2 โพรเซสเซอร์ 3 หน่วยความจาํ 1 หน่วยความจาํ 2 หน่วยความจาํ 3 (Local Storage) (Local Storage) (Local Storage)

โปรเซส 99รูปที่ 2.38 โพรเซสเซอร์แต่ละตัวมหี น่วยความจาํ ของตนเอง2.2.4 การจดั ควิ การใช้โพรเซสเซอร์แบบเรียวไทม์( Real time)แบ่งเป็น 2 ประเภท คือ  Hard Real-Time System ตอ้ งการเวลาที่คงที่แน่นอน ตายตวั โดยทว่ั ไป กระบวนการจะไดร้ ับเวลาจาํ นวนหน่ึงเพอ่ื นาํ ไปทาํ งานใหเ้ สร็จ ตวั จดั ตารางการ ทาํ งานจะใหส้ ิทธิกระบวนการเพื่อรับประกนั วา่ กระบวนการจะทาํ งานเสร็จตาม เวลา หรือไม่กป็ ฏิเสธการร้องขอของกระบวนการน้นั ถา้ มนั่ ใจวา่ จะทาํ งานไม่ เสร็จไดต้ ามเวลา การทาํ งานแบบน้ีถกู เรียกวา่ การจองทรัพยากร (resource reservation)  Soft Real-Time System เป็นระบบที่ทาํ งานโดยไม่ตอ้ งมีเวลามาจาํ กดั นนั่ หมายถึงจะมีกระบวนการอยกู่ ระบวนการหน่ึงมีศกั ด์ิสูงกวา่ กระบวนการอื่น การ ทาํ งานแบบ Soft Real-Time System อาจจะไม่เหมาะกบั Time-Sharing เพราะเกิด การล่าชา้ (delay) หรือปัญหาการแช่เยน็ (starvation) แต่เหมาะกบั ระบบทว่ั ๆ ไป ที่สนบั สนุน multimedia กราฟฟิ ก ฯลฯเพ่ือท่ีจะลดเวลาในการหยดุ กระบวนการหน่ึงเพ่ือใหอ้ ีกกระบวนการหน่ึงทาํ งาน (dispatch latency)เราตอ้ งอนุญาตให้โปรแกรมเรียกระบบสามารถแทรกกลางคนั ได้ วิธีหน่ึงท่ีใช้ไดค้ ือ การแทรกโปรแกรมเรียกระบบระยะยาวที่เรียกว่า preemption point (จุดแทรกกลางคนั ) เพื่อตรวจสอบว่ากระบวนการท่ีมีศกั ด์ิสูงตอ้ งไดท้ าํ งานก่อน เมื่อกระบวนการดงั กล่าวเสร็จงาน กระบวนการที่ถูกขดั จังหวะจึงจะได้ทาํ งานต่อ อะไรจะเกิดข้ึนถ้ากระบวนการที่มีศกั ด์ิสูงกว่าต้องการอ่านหรือปรับปรุงขอ้ มูลใน kernel ในขณะท่ีกระบวนการท่ีมีศกั ด์ิต่าํ กวา่ กาํ ลงั ทาํ งาน กระบวนการท่ีมีศกั ด์ิสูงกว่าควรจะรอให้กระบวนการที่มีศกั ด์ิต่าํ กว่าทาํ งานเสร็จก่อน สถานการณ์น้ีถูกเรียกว่า การกลบัสิทธิ (priority inversion) ปัญหาน้ีแก้ได้โดย สนธิสัญญาการสืบทอดศักด์ิ (priority-inheritanceprotocol) ซ่ึงกระบวนการเหล่าน้ี (กระบวนการซ่ึงกาํ ลงั เขา้ ถึงทรัพยากรที่กระบวนการท่ีมีศกั ด์ิสูงตอ้ งการ) สืบทอดศกั ด์ิสูงจนกระทง่ั ทาํ งานเสร็จศกั ด์ิจะถูกกลบั (revert) ไปเป็นดงั เดิม (original)รูปต่อไปน้ีแสดงส่วนเพม่ิ ของ dispatch latency ระยะที่เกิดการขดั แยง้ กนั (conflict phase) ของdispatch latency มี 2 องคป์ ระกอบดงั น้ี1. เกิดการแทรกกลางคนั ของกระบวนการท่ีกาํ ลงั ทาํ งานใน kernel2. กระบวนการท่ีมีศกั ด์ิต่าํ ปลดปล่อยทรัพยากรใหก้ ระบวนการที่มีศกั ด์ิสูง

100 ระบบปฏิบตั ิการ2.3 การซิงโครไนซ์โปรเซสความเป็ นมา (Background)ในบทน้ีในเรื่องของการแกป้ ัญหาหน่วยความร่วม ซ่ึงมีท่ีพกั ขอ้ มูลแบบมีขอบเขต (bounded-buffer)ซ่ึงเราพดู ไปแลว้ ในหวั ขอ้ ที่ 2.1.3 จะเห็นว่าโปรแกรมดงั กล่าวสามารถเกบ็ ขอ้ มูลในที่พกั ไดม้ ากท่ีสุด n – 1 ตวั เท่าน้นั ถา้ เราปรับปรุงอลั กอริทึมโดยเพ่ิมตวั แปร counter ซ่ึงเป็นตวั แปรชนิดตวั เลข(integer) เร่ิมจาก 0 counter จะถกู เพม่ิ ค่าทุกคร้ังท่ีเราเพม่ิ ขอ้ มูลใหม่เขา้ ไปในท่ีพกั ขอ้ มูล และลดคร้ังทุกคร้ังท่ีนาํ ขอ้ มูลออกจากที่พกั ขอ้ มูล โปรแกรมผผู้ ลิตจะกลายเป็นดงั น้ีrepeat…produce an item in nextp…while counter = n do no-op;buffer[in] := netxp;in := (in + 1) mod n;counter := counter + 1;until false;โปรแกรมผใู้ ช้ กลายเป็นดงั น้ีrepeatwhile counter = 0 do no-op;

โปรเซส101netxc := buffer[out];out := (out + 1) mod n;counter := counter - 1;…consume the item in nextc…until false;ถึงแมว้ า่ โปรแกรมขา้ งตน้ จะดูถูกตอ้ ง แต่อาจมีการผดิ พลาดได้ ในสภาวะท่ีมีการทาํ งานขนานกนั(concurrent)สมมติว่าขณะน้ี counter = 5  ผผู้ ลิตกาํ ลงั จะทาํ งานในประโยค counter := counter + 1; และ  ผใู้ ชก้ าํ ลงั จะทาํ งานในประโยค counter := counter – 1; ในเวลาเดียวกนัผลกค็ ือ counter อาจจะกลายเป็น 4, 5 หรือ 6 กไ็ ด้ โดยค่าท่ีถูกตอ้ งกค็ ือ 5 (ถา้ ทาํ งานแบบตามลาํ ดบั )ทาํ ไมจึงเป็นเช่นน้ี ดูประโยค counter := counter + 1; ในความเป็นจริงในภาษาเครื่องแยกการทาํ งานเป็น 3 ข้นั ตอน ดงั ต่อไปน้ีคือregister1 := counter;register1 := register1 + 1;counter := register1;ในทาํ นองเดียวกนั ประโยค counter := counter – 1; แยกไดเ้ ป็นregister2 := counter;register2 := register2 - 1;counter := register2;แมว้ า่ ในทางปฏิบตั ิ register1 และ register2 อาจเป็น register ตวั เดียวกนั (เช่น accumulator register(register ที่ใชใ้ นการเกบ็ ผลลพั ธ์) แต่คา่ ของ register ของแต่ละโปรเซสจะถูกเกบ็ ไวแ้ ยกกนั เมื่อมีการขดั จงั หวะการทาํ งาน การทาํ งานแบบขนาน (concurrent) ของประโยค counter := counter + 1;และ counter := counter - 1; กค็ ือ การทาํ งานในระดบั เครื่อง แยกเป็น 6 คาํ สง่ั ขา้ งตน้ เรียงลาํ ดบั กนั(อาจมีการสลบั กนั ระหวา่ งคาํ สง่ั 2 โปรเซส) การทาํ งานจริงอาจมีลาํ ดบั ดงั น้ีT0 : producer execute register1 := counter [register1 = 5]

102 ระบบปฏิบตั ิการT1 : producer execute register1 := register1 + 1 [register1 = 6]T2 : consumer execute register2 := counter [register2 = 5]T3 : consumer execute register2 := register2 - 1 [register2 = 4]T4 : producer execute counter := register1 [counter = 6]T5 : consumer execute counter := register2 [counter = 4]จะเห็นไดว้ า่ ผลลพั ธ์สุดทา้ ย counter = 4 ซ่ึงไม่ถูกตอ้ ง (ที่จริงควรเป็น 5) ถา้ เวลา T4 กบั T5 กลบั กนัผลลพั ธ์กจ็ ะกลายเป็น counter = 6 ซ่ึงกไ็ ม่ถูกตอ้ งเช่นกนั ที่เป็นเช่นน้ีเพราะโปรเซส 2โปรเซส อ่านและเขียนขอ้ มูลตวั เดียวกนั (คือ counter) ในเวลาขนานกนั สถานการณ์เช่นน้ีซ่ึงหมายถึงโปรเซสหลาย ๆ โปรเซสเขา้ ถึง (access) และจดั การ (manipulate) ขอ้ มูลเดียวกนั ในเวลาขนานกนั แลว้ผลลพั ธข์ องการทาํ งานข้ึนอยกู่ บั คาํ สงั่ ที่กาํ ลงั เขา้ ถึงขอ้ มูลอยู่ ถูกเรียกวา่ เง่ือนไขแข่งขนั (racecondition) เพื่อป้องกนั เง่ือนไขการแข่งขนั เราตอ้ งทาํ ใหแ้ น่ใจว่ามีเพยี งโปรเซสเดียวเท่าน้นั ที่สามารถจดั การกบั ตวั แปร counter ไดใ้ นขณะน้นั เพ่ือเป็นการรับประกนั เราตอ้ งทาํ การประสานงานของโปรเซส2.3.1 ปัญหาเขตวกิ ฤต (The Critical-Section Problem) ลองพจิ ารณาระบบที่มี n โปรเซส(P0 , P1 , … , Pn – 1) แต่ละโปรเซสมีส่วนของรหสั (code)เรียกว่า เขตวกิ ฤต เอาไวใ้ หโ้ ปรเซสทาํ การเปลี่ยนคา่ ของตวั แปร , ปรับปรุง (update) ตาราง , เขียนแฟ้มขอ้ มูล ฯลฯ วตั ถุประสงคห์ ลกั ของระบบกค็ ือ เมื่อโปรเซสหน่ึงกาํ ลงั ทาํ งานในเขตวิกฤต หา้ มมีโปรเซส อื่นเขา้ มาทาํ งานในเขตวิกฤตน้นั ดงั น้นั การที่โปรเซส ทาํ งานในเขตวิกฤต คือ การห้ามอยู่พร้อมกนั (mutually exclusive) ปัญหาเขตวกิ ฤตตอ้ งออกแบบโพรโตคอลใหโ้ ปรเซสต่าง ๆ สามารถทาํ งานร่วมกนั ได้ แต่ละโปรเซสตอ้ งร้องขอการอนุญาตเขา้ เขตวกิ ฤต เขตท่ีใชจ้ ริง ๆ มี 3 เขต คือ  ช่วงร้องขอเขา้ เรียกวา่ entry section  ถา้ อยใู่ นเขตวกิ ฤตแลว้ ตอ้ งการออก เรียกวา่ exit section  ช่วงหลงั เขตวิกฤต เรียกวา่ remainder section วิธีแกป้ ัญหาเขตวิกฤตตอ้ งแก้ 3 ขอ้ ดงั น้ี 1. การห้ามอยู่พร้อมกนั (Mutual Exclusion) ถา้ โปรเซส P1 ทาํ งานอยใู่ นเขตวิกฤต หา้ ม โปรเซส อื่นทาํ งานในเขตน้นั 2. ความก้าวหน้า (Progress) ถา้ ยงั ไม่มีโปรเซสใดทาํ งานในเขตวิกฤต และมีบางโปรเซส ตอ้ งการเขา้ ไปในเขตน้นั โปรเซสเหลา่ น้นั กจ็ ะถูกนาํ มาตดั สินวา่ ใครจะไดเ้ ขา้ ไปในเขต วกิ ฤตเป็นลาํ ดบั ถดั ไป การคดั เลือกน้ีตอ้ งชดั เจน เลื่อนสลบั ที่กนั ไม่ได้

โปรเซส103 3. การรอคอยอย่างมขี อบเขต (Bounded Waiting) ตอ้ งมีขอบเขตของเวลาใหโ้ ปรเซสอ่ืนได้ เขา้ ไปในเขตวกิ ฤตของตนเอง หลงั จากโปรเซสไดร้ ้องขอเขา้ เขตวิกฤต และก่อนหนา้ น้นั การร้องขอดงั กล่าวตอ้ งไดร้ ับอนุญาตก่อนแลว้ ถา้ มีคาํ สงั่ 2 คาํ สง่ั ทาํ งานพร้อมกนั เช่น มีการอ่าน (load) และ บนั ทึก (store) ขอ้ มูลพร้อมกนั การอ่านอาจไดร้ ับค่าใหม่หรือค่าเก่ากไ็ ด้ repeat entry section critical section exit section remainder section until false;อลั กอริทึมขา้ งบนน้ี มีข้ึนเพื่อจุดประสงคใ์ นดา้ นการประสานงานกนั ซ่ึงเป็นโครงสร้างโดยทว่ั ไปของโปรเซส PI2.3.2 วธิ ีการแก้ปัญหาสภาวะวกิ ฤต1. วธิ ีแก้ปัญหา 2 โปรเซส (Two-Process Solution) ในหวั ขอ้ น้ีมุ่งประเดน็ ไปท่ีในช่วงเวลาหน่ึงมีโปรเซสแค่ 2 โปรเซสเท่าน้นั คือ P0 และ P1เพอ่ื ความสะดวก เราใช้ Pi และ Pj ซ่ึง j = 1 – I1.1 Algorithm 1ข้นั แรกใหท้ ้งั 2 โปรเซสร่วมกนั ใชต้ วั แปร turn ซ่ึงเร่ิมจาก 0 (หรือ 1) ถา้ turn = I โปรเซส Pi จะได้ทาํ งานในเขตวิกฤตของมนั โครงสร้างของ Pi แสดงไดด้ งั น้ี repeat while turn  I do no-op; critical section turn := j; remainder section until false;

104 ระบบปฏิบตั ิการวิธีน้ีสามารถประกันได้ว่า จะมีเพียงโปรเซสเดียวเท่าน้ัน ในเขตวิกฤต แต่ไม่ผ่านคุณสมบัติความก้าวหน้า (Progress) เพราะโปรเซสท้งั สอง ตอ้ งสลบั กนั เขา้ ใชเ้ ขตวกิ ฤต คนละคร้ังเป็นวงกลมเช่น ถา้ turn = 0 และ P1 พร้อมที่จะเขา้ เขตวิกฤต กจ็ ะไม่สามารถเขา้ ได้ แมว้ ่า P0 จะอยหู่ ลงั เขตวิกฤต(remainder section) กต็ าม1.2 Algorithm 2 ปัญหาของ Algorithm 1 คือ ไม่มีการจดั เกบ็ สถานะของแต่ละโปรเซสไว้ มีเพยี งตวั แปรเกบ็ค่า วา่ ขณะน้ีเป็นคราวของโปรเซสใด เราจึงอาจใช้ flag แทน turn ดงั น้ีซ่ึง var flag: array [0..1] of boolean;ให้ flag[0] := false;flag[1] := false; เม่ือเริ่มตน้เม่ือ Pi ตอ้ งการจะเขา้ เขตวิกฤต flag[I] = true พจิ ารณารูปถดั ไปrepeatflag[i] = true;while flag[j] do no-op;critical sectionflag[i] := false;remainder sectionuntil false;ในข้นั ตอน algorithm น้ี Pi ให้ flag[i] = true เพอ่ื ท่ีแสดงวา่ ตอ้ งการจะเขา้ เขตวิกฤต แลว้ ตรวจดูวา่Pj ไม่ไดต้ อ้ งการจะเขา้ เขตวกิ ฤตดว้ ย โดยดู flag[j] ถา้ Pj ตอ้ งการเขา้ เขตวิกฤต (flag[j] = true) Pi ก็จะรอ (ทาํ คาํ สง่ั no-op) จนกระทงั่ Pj ออกจากเขตวิกฤต แลว้ เปล่ียน flag[j] = false Pi จึงจะเขา้ เขตวิกฤตได้วิธีน้ี ผา่ นคุณสมบตั ิ การหา้ มอยพู่ ร้อมกนั (mutually exclusion) แต่ไม่ผา่ นคุณสมบตั ิ ความกา้ วหนา้(Progress) ดงั ตวั อยา่ งเช่นณ เวลา T0: P0 ทาํ คาํ สง่ั flag[0] = trueณ เวลา T1: P1 ทาํ คาํ สง่ั flag[1] = trueถา้ เป็นเช่นน้ีแลว้ ท้งั P0 และ P1 จะติดอยใู่ นวงจรรอบของ while ตลอดไปเหตุการณ์น้ีอาจเกิดข้ึนได้ ในระบบท่ีมีการทาํ งานแบบขนาน เม่ือมีการขดั จงั หวะ หลงั จากเวลาท่ี T0และ สลบั ไปใหอ้ ีกโปรเซสหน่ึงทาํ งานในเวลา T1 ถึงแมว้ า่ เราจะสลบั บรรทดั คาํ สงั่ ในข้นั ตอนalgorithm 2 น้ี โดยใหม้ ีการทดสอบ flag[j] ก่อนที่จะค่าให้ flag[i] แต่ผลลพั ธก์ ลบั ยงิ่ แยล่ งกวา่ เดิม


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