550 likes | 559 Views
فصل 5: زمانبندی پردازنده ( CPU Scheduling ). فصل 5: زمانبندی پردازنده ( CPU Scheduling ). Basic Concepts Scheduling Criteria Scheduling Algorithms Thread Scheduling Multiple-Processor Scheduling Operating Systems Examples Algorithm Evaluation. اهداف.
E N D
فصل 5: زمانبندی پردازنده (CPU Scheduling) • Basic Concepts • Scheduling Criteria • Scheduling Algorithms • Thread Scheduling • Multiple-Processor Scheduling • Operating Systems Examples • Algorithm Evaluation
اهداف • آشنایی با زمانبندی پردازنده ها به عنوان پایه اصلی سیستم عامل های چندبرنامگی (multiprogrammed) • توصیف الگوریتم های مختلف زمانبندی CPU • بحث در مورد انتخاب یک الگوریتم زمانبندی CPU مناسب برای یک سیستم خاص
مفاهیم پایه ای • حداکثر بهره وری (utilization) از CPU به کمک چندبرنامگی • CPU–I/O Burst Cycle – اجرای یک پردازه شامل یک دور از اجراهای CPU و انتظار برای I/O است • در حقیقت ما می خواهیم CPU burst را توزیع و مدیریت کنیم
هیستوگرام از زمان هر اجرا برای CPUHistogram of CPU-burst Times
زمانبند (Scheduler) CPU • از میان پردازه های موجود در سیستم یکی را انتخاب می کند و CPU را در اختیار آن قرار دهد • تصمیمات زمانبند CPU در یکی از حالات زیر اعمال می گردد. وقتی که یک پردازه : • از حالت اجرا به حالت انتظار سوئیچ کند (درخواست I/O، دستور wait و ...) • از حالت اجرا به حالت آماده سوئیچ کند (وقوع وقفه) • از حالت انتظار به حالت آماده سوئیچ کند (اتمام I/O) • به اتمام برسد • به حالتی که زمانبندی در شرایط 1 و 4 اعمال گردد حالت بدون غیر قابل پس گرفتنی (nonpreemptive) می گویند • به حالت دیگر پس گرفتنی (preemptive) می گویند
اعزام کننده (Dispatcher) • پیمانه اعزام کننده (Dispatcher module) کنترل CPU را به پردازه ای می دهد که توسط زمانبند کوتاه مدت (short-term scheduler) انتخاب شده است. شامل: • سوئیچ زمینه (switching context) • سوئیچ به مد کاربر (switching to user mode) • مقدار دهی Program Counter به مکان مناسب برای ازسرگیری اجرای برنامه • تاخیر اعزام (Dispatch latency) – مدت زمانی که یک پردازه متوقف و پردازه بعدی توسط اعزام کننده شروع به اجرا می کند
مقوله زمانبندی (Scheduling Criteria) • بهره وری پردازنده (CPU utilization) – پردازه را تا حد امکان مشغول نگه داریم • بازده (Throughput) – تعداد پردازه هایی که در یک واحد زمانی اجرای آنها به اتمام می رسد • زمان گردش (Turnaround time) – مدت زمان مورد نیاز برای اجرای کامل یک پردازه • زمان انتظار (Waiting time) – مدت زمانی که یک پردازه در مدت اجرای کامل خود در صف آماده منتظر تخصیص CPU می ماند • زمان پاسخ (Response time) – مدت زمان که طول می کشد تا از زمان ارسال یک درخواست اولین پاسخ دریافت گردد. (برای سیستم های اشتراک زمانی منظور یک خروجی معین نیست)
Scheduling Algorithm Optimization Criteria • Max CPU utilization • Max throughput • Min turnaround time • Min waiting time • Min response time
P1 P2 P3 0 24 27 30 First-Come, First-Served (FCFS) Scheduling ProcessBurst 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
P2 P3 P1 0 3 6 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 • Much better than previous case • Convoy effect short process behind long process
Shortest-Job-First (SJF) Scheduling • برای هر پردازه یک عدد به عنوان زمان اجرای (CPU Burst) بعدی مورد نیاز در نظر گرفته می شود. از این عدد برای زمانبندی پردازه ها استفاده می شود. • ابتدا پردازه های با CPU Burst کمتر اجرا خواهند شد. • SJF بهینه است – یعنی برای یک مجموعه از پردازه ها کمترین متوسط زمان انتظار را خواهیم داشت • اما یک مشکل بزرگ داریم: زمان مورد نیاز برای CPU در درخواست بعدی را نمی دانیم
P3 P2 P4 P1 3 9 16 24 0 Example of SJF Process Arrival TimeBurst Time P10.0 6 P2 2.0 8 P34.0 7 P45.0 3 • SJF scheduling chart • Average waiting time = (3 + 16 + 9 + 0) / 4 = 7
مشخص نمودن اندازه CPU Burst بعدی • می توانیم تنها طول اجرا را تخمین بزنیم • می توانیم با دانستن زمان CPU Burst قبلی و به کمک میانگیری نمایی (exponential averaging) تخمینی از زمان بعدی داشت
Examples of Exponential Averaging • =0 • n+1 = n • فقط همان تخمین اولیه مهم است و زمان آخر واقعی هیچ ارزشی ندارد • =1 • n+1 = tn • همان زمان آخر واقعی اجرا برای مرحله بعد در نظر گرفته می شود • اگر فرمول را بست دهیم به عبارت زیر می رسیم: n+1 = tn+(1 - ) tn-1+ … +(1 - )j tn-j+ … +(1 - )n +1 0
زمانبندی اولویتی (Priority Scheduling) • یک عدد اولویت برای هر پردازه در نظر گرفته می شود • CPU ابتدا در اختیار پردازه ای قرار می گیرد که اولویت بیشتری (عدد اولویت کمتری) دارد • پس گرفتنی (Preemptive) • غیر قابل پس گرفتنی (nonpreemptive) • SJF یک حالتی از زمانبندی اولویتی که در آن عدد اولویت معادل زمان اجرای بعدی مورد نیاز است • مشکل روش اولویتی: قحطی (Starvation): CPU هیچگاه در اختیار پردازه های با اولویت کمتر قرار نمی گیرد. • راه حل: سالخوردگی (Aging): با گذشت زمان اولویت را افزایش می دهیم.
Round Robin (RR) • هر پردازه یک واحد کوچک زمانی (time quantum) CPU را در اختیار می گیرد. این زمان معمولا بین بین 10 الی 100 میلی ثانیه است. بعد از اینکه این زمان سپری شد ، CPU از پردازه گرفته شده و پردازه به انتهای صف آماده اضافه می گردد. • وقتی ما n پردازه در صف آماده داریم و کوانتوم زمانی را q در نظر بگیریم. در این حالت در یک دوره زمانی کامل از اجرای صف به هر پردازه در 1/n زمان cpu را در اختیار خواهد داشت. و هیچ پردازه ای بیشتر از (n-1)q منتظر نمی ماند. • کارآیی (Performance) • q (بزرگ) FIFO • q (کوچک) q > context switch • در حالتی که q کوچک باشد حتما باید این مقدار از زمان context switch بزرگتر باشد. اگر نباشد سربارهای بی مورد cpu بالا می رود
P1 P2 P3 P1 P1 P1 P1 P1 0 10 14 18 22 26 30 4 7 Example of RR with Time Quantum = 4 ProcessBurst Time P1 24 P2 3 P3 3 • The Gantt chart is: • Typically, higher average turnaround than SJF, but better response
صف چندسطحی (Multilevel Queue) • صف اماده به دو صف مجزا تبدیل می شود • پیش زمینه -foreground (interactive) • پس زمینه -background (batch) • هر صف الگوریتم زمانبندی خود را دارد • foreground – RR • background – FCFS • باید یک زمانبندی بین صف ها نیز داشته باشیم • Fixed priority scheduling; (i.e., serve all from foreground then from background). Possibility of starvation. • Time slice – each queue gets a certain amount of CPU time which it can schedule amongst its processes; i.e., 80% to foreground in RR 20% to background in FCFS
صف بازخورد چندسطحی (Multilevel Feedback Queue) • یک پردازه می تواند بین صف های مختلف جابجا گردد (می توان از ایده سالخوردگی استفاده کرد) • زمانبند صف بازخورد چندسطحی با پارامترهای زیر تعریف شده است: • تعداد صف ها • الگوریتم های زمانبندی ها برای هر صف • روش مشخص نمودن زمان ارتقاع پردازه در صف ها • روش مشخص نمودن زمان پایین آوردن پردازه در صف ها • روش انتخاب صف اولیه برای یک پردازه در زمان ورود آن به حافظه
Example of Multilevel Feedback Queue • Three queues: • Q0 – RR with time quantum 8 milliseconds • Q1 – RR time quantum 16 milliseconds • Q2 – FCFS • Scheduling • A new job enters queue Q0which is servedFCFS. When it gains CPU, job receives 8 milliseconds. If it does not finish in 8 milliseconds, job is moved to queue Q1. • At Q1 job is again served FCFS and receives 16 additional milliseconds. If it still does not complete, it is preempted and moved to queue Q2.
Thread Scheduling • Distinction between user-level and kernel-level threads • Many-to-one and many-to-many models, thread library schedules user-level threads to run on LWP • Known as process-contention scope (PCS) since scheduling competition is within the process • Kernel thread scheduled onto available CPU is system-contention scope (SCS) – competition among all threads in system
Pthread Scheduling • API allows specifying either PCS or SCS during thread creation • PTHREAD SCOPE PROCESS schedules threads using PCS scheduling • PTHREAD SCOPE SYSTEM schedules threads using SCS scheduling.
Pthread Scheduling API #include <pthread.h> #include <stdio.h> #define NUM THREADS 5 int main(int argc, char *argv[]) { int i; pthread t tid[NUM THREADS]; pthread attr t attr; /* get the default attributes */ pthread attr init(&attr); /* set the scheduling algorithm to PROCESS or SYSTEM */ pthread attr setscope(&attr, PTHREAD SCOPE SYSTEM); /* set the scheduling policy - FIFO, RT, or OTHER */ pthread attr setschedpolicy(&attr, SCHED OTHER); /* create the threads */ for (i = 0; i < NUM THREADS; i++) pthread create(&tid[i],&attr,runner,NULL);
Pthread Scheduling API /* now join on each thread */ for (i = 0; i < NUM THREADS; i++) pthread join(tid[i], NULL); } /* Each thread will begin control in this function */ void *runner(void *param) { printf("I am a thread\n"); pthread exit(0); }
Multiple-Processor Scheduling • CPU scheduling more complex when multiple CPUs are available • Homogeneous processors within a multiprocessor • Asymmetric multiprocessing – only one processor accesses the system data structures, alleviating the need for data sharing • Symmetric multiprocessing (SMP) – each processor is self-scheduling, all processes in common ready queue, or each has its own private queue of ready processes • Processor affinity – process has affinity for processor on which it is currently running • soft affinity • hard affinity
Multicore Processors • Recent trend to place multiple processor cores on same physical chip • Faster and consume less power • Multiple threads per core also growing • Takes advantage of memory stall to make progress on another thread while memory retrieve happens
Operating System Examples • Solaris scheduling • Windows XP scheduling • Linux scheduling
Linux Scheduling • Constant order O(1) scheduling time • Two priority ranges: time-sharing and real-time • Real-time range from 0 to 99 and nice value from 100 to 140 • (figure 5.15)
Algorithm Evaluation • Deterministic modeling – takes a particular predetermined workload and defines the performance of each algorithm for that workload • Queueing models • Implementation (simulation)