โครงสร้างการจัดลำดับของซีพียู CPU Scheduling Structure โครงสร้างระบบและสถาปัตยกรรมคอมพิวเตอร์ นงลักษณ์ พรมทอง วิเชษฐ์ พลายมาศ
Objectives เพื่อศึกษาแนวคิดเกี่ยวกับการจัดลำดับของซีพียูในสภาพแวดล้อมต่างๆ เพื่อให้รู้จักแนวคิดพื้นฐานเกี่ยวกับการจัดลำดับ เพื่อให้เข้าใจถึงขั้นตอนวิธีการจัดลำดับแบบต่างๆ เพื่อให้รู้ถึงการจัดลำดับซีพียูบนมัลติโปรเซสเซอร์ และระบบทำงานแบบทันที
Agenda Basic Concepts Scheduling Criteria Scheduling Algorithms Multiple-Processor Scheduling Real-Time Scheduling Algorithm Evaluation
แนวคิดพื้นฐาน Basic Concepts วัตถุประสงค์หลักของระบบมัลติโปรแกรม คือ พยายามให้มีกระบวนการใดกระบวนการหนึ่งดำเนินงานอยู่ตลอดเวลาเพื่อให้สามารถใช้งานซีพียูได้อย่างเต็มประสิทธิภาพ (maximum CPU utilization) การกระทำการของกระบวนการจะประกอบด้วยรอบซีพียู (CPU cycle) และรอบการรอไอ/โอ (I/O wait cycle) กระบวนการจะสลับไปมาระหว่างรอบทั้งสองนี้ ส่วนใหญ่สภาวะที่มีการเรียกใช้ไอ/โอจะมีสูงกว่าการใช้ซีพียู ในระบบมัลติโปรแกรมมิงจึงมีความพยายามใช้ประโยชน์จากซีพียูในช่วงจังหวะดังกล่าว
Alternating Sequence of CPU And I/O Bursts
Histogram of CPU-burst Times
ตัวจัดลำดับซีพียู CPU Scheduler จะเลือกกระบวนการที่อยู่ในหน่วยความจำที่พร้อมจะถูกกระทำการมาหนึ่งกระบวนการ แล้วจัดสรรให้ซีพียู การจัดลำดับซีพียูจะตัดสินใจภายใต้สถานการณ์ 4 ประการ เมื่อกระบวนการสลับจากสถานะกำลังดำเนินงานไปเป็นสถานะรอ (เช่น ร้องขอไอ/โอ หรือรอคอยการเสร็จสิ้นของกลุ่มกระบวนการลูก เป็นต้น) เมื่อกระบวนการสลับจากกำลังดำเนินงานไปเป็นสถานะพร้อม (เช่น เมื่อเกิดการขัดจังหวะ) เมื่อกระบวนการเปลี่ยนสถานะจากกำลังรอไปเป็นสถานะพร้อม (เช่น เมื่อไอ/โอเสร็จสิ้น) เมื่อกระบวนการเสร็จสิ้น วิธีการจัดลำดับในสถานการณ์แบบที่ 1 และ 4 นั้นเรียกว่า การจัดลำดับแบบไม่บังคับ (nonpreemptive) หรือแบบประสานงาน (cooperative) ส่วนสถานการณ์ที่ 2 และ 3 นั้นเรียกว่า แบบบังคับ (preemptive)
โปรแกรมเลือกจ่ายงาน Dispatcher เป็นมอดูล (module) ที่ยินยอมให้กระบวนการเข้าครอบครองซีพียูเมื่อมันถูกคัดเลือกโดยตัวจัดลำดับแบบระยะสั้น โดยมีหน้าที่ ทำการสลับบริบท (context switching) ทำการสลับไปยังโหมดผู้ใช้ (user mode) กระโดดไปยังตำแหน่งที่อยู่ที่ถูกต้องในโปรแกรมผู้ใช้เพื่อเริ่มต้นโปรแกรมใหม่ ระยะเวลาที่เกิดขึ้นตั้งแต่เมื่อโปรแกรมเลือกจ่ายงานหยุดกระบวนการหนึ่งแล้วให้กระบวนการอื่นเริ่มดำเนินการ เรียกว่า เวลาแฝงของการเลือกจ่ายงาน (Dispatch latency)
เงื่อนไขของการจัดลำดับ Scheduling Criteria เน้นที่ระบบเป็นหลักและเกี่ยวข้องกับประสิทธิภาพโดยตรง การใช้ประโยชน์จากซีพียู (CPU utilization) ปริมาณงาน (throughput) คำนึงถึงจำนวนกระบวนการทั้งหมดที่เสร็จสมบูรณ์ต่อหน่วยเวลา เน้นที่ผู้ใช้เป็นหลักและเกี่ยวข้องกับประสิทธิภาพโดยตรง เวลาครบวงงาน (turnaround time) เป็นช่วงเวลาตั้งแต่ส่งงานไปจนกระทั่งงานเสร็จสมบูรณ์ เวลารอคอย (waiting time) จำนวนเวลาที่กระบวนการรอคอยอยู่ในแถวคอยพร้อม เป็นนโยบายที่เน้นผู้ใช้เป็นหลัก เวลาตอบสนอง (response time) เป็นเวลาตั้งแต่เมื่อส่งคำร้องขอออกไปจนกระทั่งเริ่มได้รับการตอบสนองกลับมาเป็นครั้งแรก
เงื่อนไขของการหาค่าเหมาะที่สุด Optimization Criteria เพิ่มประโยชน์ใช้สอยซีพียู (Max CPU utilization) เพิ่มปริมาณงานเป็นหลัก (Max throughput) ลดเวลาครบวงงาน (Min turnaround time) ลดเวลารอคอย (Min waiting time) ลดเวลาตอบสนอง (Min response time)
การจัดลำดับแบบมาก่อนได้ก่อน First-Come, First-Served (FCFS) Scheduling Process Burst Time P1 24 P2 3 P3 3 Suppose that the processes arrive in the order: P1 , P2 , P3 The Gantt Chart for the schedule is: Waiting time for P1 = 0; P2 = 24; P3 = 27 Average waiting time: (0 + 24 + 27)/3 = 17 P1 P2 P3 24 27 30
FCFS Scheduling (Cont.) Suppose that the processes arrive in the order P2 , P3 , P1 . The Gantt chart for the schedule is: Waiting time for P1 = 6; P2 = 0; P3 = 3 Average waiting time: (6 + 0 + 3)/3 = 3 ดีกว่ากรณีแรก อาจเกิดปัญหา ผลกระทบของคุ้มกัน (Convoy effect) คือกระบวนการสั้นอยู่หลังกระบวนการยาว ต้องรอนาน P1 P3 P2 6 3 30
การจัดลำดับแบบงานสั้นสุดได้ก่อน Shortest-Job-First (SJF) Scheduling ใช้ขนาดของเวลาที่กระบวนการต้องการใช้ซีพียูในคราวถัดไปเป็นเกณฑ์ โดยจัดสรรเวลาให้แก่กระบวนการที่ต้องการใช้เวลาซีพียูน้อยที่สุดก่อน มี 2 แบบ แบบไม่บังคับ (nonpreemptive) เมื่อจัดสรรให้กระบวนการใดแล้ว จะให้ครอบครองซีพียูไปจนกระทั่งงานเสร็จ แบบบังคับ (preemptive) ถ้ามีกระบวนการใหม่เข้ามาพร้อมกับต้องการเวลาใช้ซีพียูสั้นกว่าเวลาที่ยังเหลืออยู่ของกระบวนการที่กำลังใช้ ก็จะสลับมาเลือกกระบวนการที่มาใหม่เข้าไปใช้ซีพียูแทน บางทีเรียกว่า เวลาเหลือน้อยสุดใช้ก่อน (SRTF: Shortest-Remaining-Time-First) SJF เป็นวิธีที่เหมาะที่สุด (optimal) ช่วยลดค่าเฉลี่ยของเวลารอคอยต่ำที่สุดสำหรับกระบวนการทั้งหมด
Example of Non-Preemptive SJF Process Arrival Time Burst Time P1 0.0 7 P2 2.0 4 P3 4.0 1 P4 5.0 4 SJF (non-preemptive) Average waiting time = (0 + 6 + 3 + 7)/4 - 4 P1 P3 P2 7 3 16 P4 8 12
Example of Preemptive SJF Process Arrival Time Burst Time P1 0.0 7 P2 2.0 4 P3 4.0 1 P4 5.0 4 SJF (preemptive) Average waiting time = (9 + 1 + 0 +2)/4 - 3 P1 P3 P2 4 2 11 P4 5 7 16
ข้อพึงพิจารณาการเลือกจากจำนวนเวลาของการใช้ซีพียูครั้งถัดไป ต้องสามารถรู้ได้ว่ากระบวนการจะใช้เวลาของซีพียูอีกเท่าไรจึงจะเสร็จในคราวหน้า จึงใช้วิธีการทำนายล่วงหน้าโดยการคำนวณจากเวลาที่กระบวนการใช้ครั้งสุดท้าย โดยหาค่าเฉลี่ยแบบเอ็กซ์โปแนนเชียล (exponential averaging)
Prediction of the Length of the Next CPU Burst
Examples of Exponential Averaging =0 n+1 = n Recent history does not count. =1 n+1 = tn Only the actual last CPU burst counts. If we expand the formula, we get: n+1 = tn+(1 - ) tn -1 + … +(1 - )j tn -1 + … +(1 - )n=1 tn 0 Since both and (1 - ) are less than or equal to 1, each successive term has less weight than its predecessor.
การจัดลำดับแบบตามลำดับความสำคัญ Priority Scheduling กำหนดให้แต่ละกระบวนการมีหมายเลขลำดับความสำคัญกำกับไว้ เช่น 0 ถึง 7 หรือ 0 ถึง 4095 การจัดสรรซีพียูจะยึดตามลำดับความสำคัญของแต่ละกระบวนการ กระบวนการที่มีหมายเลขลำดับความสำคัญมากกว่าจะถูกเลือกทำให้เสร็จก่อน แล้วค่อยทำกระบวนการที่มีความสำคัญลำดับรองๆ ลงไป ในกรณีที่มีลำดับความสำคัญเท่ากันอยู่หลายกระบวนการ ก็จะใช้วิธีมาก่อนได้ก่อนเข้ามาช่วย (FCFS) อาจเป็นแบบบังคับ (preemptive) หรือไม่บังคับ (non-preemptive) ก็ได้
การจัดลำดับแบบตามลำดับความสำคัญ Priority Scheduling ปัญหา เกิดการหยุดรอแบบไม่มีที่สิ้นสุด (indefinite blocking) -หรือ- ภาวะงูกินหาง (starvation) กระบวนการที่มีลำดับความสำคัญต่ำรอให้กระบวนการที่มีลำดับความสำคัญสูงเข้าใช้งานซีพียูนานเกินไป วิธีแก้ ใช้เทคนิคการปรับอายุ (aging) โดยเพิ่มค่าลำดับความสำคัญให้แก่กระบวนการที่มีลำดับความสำคัญต่ำในแต่ละหน่วยเวลา
การจัดลำดับแบบวิธีวนรอบ Round Robin (RR) วิธีนี้จะใช้การแบ่งเวลาออกเป็นช่วงสั้นๆ เรียกว่า หน่วยเล็กสุดของเวลา (time quantum) หรือเสี้ยวเวลา (time slice) มักมีค่าตั้งแต่ 10 ถึง 100 msec. กระบวนการทั้งหมดจะเข้าแถวรออยู่ในแถวคอยพร้อมแบบเข้าก่อนออกก่อน (FIFO) ซีพียูจะเลือกกระบวนการที่อยู่หัวแถวมาเพื่อเข้าใช้ซีพียูจนกระทั่งหมดช่วงเวลา ก็จะย้ายกระบวนการนี้ไปใส่ไว้ท้ายสุดของแถวคอยพร้อม แล้วเลือกกระบวนการที่อยู่หัวแถวไปกระทำการต่อ วนรอบเป็นเช่นนี้ไปเรื่อยๆ ประสิทธิภาพ ขึ้นอยู่กับขนาดของ q หรือการแบ่งหน่วยเวลา ถ้าค่าของ q มีขนาดยาว ประสิทธิภาพจะเท่ากับแบบมาก่อนได้ก่อน (FIFO) ค่าของ q มีขนาดสั้น ก็จะเสียเวลาในการทำสลับบริบทมากเกินไป
Example of RR with Time Quantum = 20 Process Burst Time P1 53 P2 17 P3 68 P4 24 The Gantt chart is: ค่าเฉลี่ยของเวลาครบวงงาน (turnaround time) สูงกว่าวิธีงานสั้นสุดได้ก่อน (SJF) แต่ให้เวลาตอบสนอง (response time) ดีกว่า P1 P2 P3 P4 20 37 57 77 97 117 121 134 154 162
Time Quantum and Context Switch Time
Turnaround Time Varies With The Time Quantum
จัดลำดับแบบแถวคอยหลายระดับ Multilevel Queue แบ่งกระบวนการทั้งหมดออกเป็นกลุ่มๆ แยกตามลำดับความสำคัญของงาน งานประเภทพื้นหน้า (foreground) หรืองานแบบโต้ตอบ (interactive) งานประเภทพื้นหลัง (background) หรืองานประเภทเชิงกลุ่ม (batch) แต่ละแถวคอยจะมีวิธีการจัดลำดับเป็นของตนเองที่อาจแตกต่างกันได้ แบบพื้นหน้า ใช้วิธีวนรอบ (RR) แบบพื้นหลัง ใช้วิธีมาก่อนได้ก่อน (FCFS) เสี้ยวเวลาที่แบ่งให้กับกระบวนการประเภทต่างๆ อาจแตกต่างกันได้ แบบพื้นหน้า ใช้ขั้นตอนวิธีแบบวนรอบ (RR) จำนวน 80 เปอร์เซ็นต์ แบบพื้นหลัง ใช้ขั้นตอนวิธีแบบมาก่อนได้ก่อน (FCFS) จำนวน 20 เปอร์เซ็นต์
Multilevel Queue Scheduling
การจัดลำดับแบบแถวคอยแบบป้อนกลับหลายระดับ Multilevel Feedback Queue ยอมให้มีการย้ายข้ามแถวได้ โดยจะมีการแบ่งกลุ่มของกระบวนการให้แตกต่างกันตามคุณลักษณะของการใช้เวลาซีพียูเป็นสำคัญ สามารถใช้การปรับอายุมาร่วมด้วยได้ กำหนดพารามิเตอร์ดังต่อไปนี้ จำนวนแถวคอย ขั้นตอนวิธีการจัดลำดับของแต่ละแถวคอย วิธีการเลือกในการปรับกระบวนการไปยังลำดับความสำคัญที่สูงขึ้น วิธีการเลือกในการปรับกระบวนการไปยังลำดับความสำคัญที่ต่ำลง วิธีการเลือกในการปรับกระบวนการในเวลาที่ต้องการรับบริการ
Example of Multilevel Feedback Queue Three queues: Q0 – time quantum 8 milliseconds Q1 – time quantum 16 milliseconds Q2 – FCFS Scheduling เมื่อมีกระบวนการเข้ามาจะเริ่มต้นในแถวที่ 0 แล้วเริ่มกระทำการไปจนหมดเวลา 8 มิลลิวินาที ถ้ายังไม่เสร็จ กระบวนการนี้จะถูกย้ายไปอยู่ในแถวที่ 1 ถ้าขณะนั้นยังไม่มีกระบวนการใดอยู่ในแถวที่ 0 เลย กระบวนการนี้ก็จะสามารถถูกกระทำการต่อไปจนหมดเวลาอีก 16 มิลลิวินาที ถ้ายังไม่เสร็จก็จะถูกย้ายออกไปอยู่ในแถวที่ 2 ซึ่งมีการจัดลำดับแบบมาก่อนได้ก่อน และจะกระทำการได้ก็ต่อเมื่อไม่มีกระบวนการใดๆ เหลืออยู่ในแถวคอยที่ 0 และ 1
Multilevel Feedback Queues
การจัดลำดับบนมัลติโปรเซสเซอร์ Multiple-Processor Scheduling การจัดลำดับซีพียูบนระบบมัลติโปรเซสเซอร์มีความซับซ้อนสูง จึงมุ่งไปเฉพาะกลุ่มของตัวประมวลผลแบบเอกพันธุ์ (homogeneous processors )-ตัวประมวลผลเหล่านั้นมีคุณลักษณะเดียวกันในแง่ของความสามารถในการใช้งาน วิธีการกระจายภาระ (Load sharing) การประมวลผลแบบอสมมาตร (Asymmetric multiprocessing)
การจัดลำดับแบบทำงานแบบทันที Real-Time Scheduling ระบบทำงานแบบทันทีแบบเข้มข้น (hard real-time) เป็นการรับประกันว่าภารกิจวิกฤติ (critical task) จะต้องเสร็จภายในเวลาที่กำหนด ระบบทำงานแบบทันทีแบบเบาบาง (soft real-time) ต้องการเพียงให้กระบวนการวิกฤติถูกจัดให้มีลำดับความสำคัญสูงกว่ากระบวนการทั่วไปเท่านั้น
เวลาแฝงของการเลือกจ่ายงาน Dispatch Latency
การวัดประสิทธิภาพของอัลกอริธึม Algorithm Evaluation แบบจำลองเชิงกำหนด (deterministic modeling) เป็นวิธีการพยากรณ์ภาระงานของแต่ละอัลกอริธึม แบบจำลองของแถวคอย (queueing models) วิธีการใช้งาน (implementation)
Evaluation of CPU Schedulers by Simulation
Solaris 2 Scheduling
Windows 2000 Priorities
Summary Basic Concepts Scheduling Criteria Scheduling Algorithms Multiple-Processor Scheduling Real-Time Scheduling Algorithm Evaluation