سیستم عامل جلسه چهارم

 

الگوریتم‌های زمانبدی (scheduling algorithms)

زمان‌بندی پردازنده با این مساًله سروکار دارد که پردازنده باید به کدام فرایند موجود در صف آماده تخصیص یابد.

 

زمان‌بندی ارائه خدمت به ترتیب ورود (First Come First Served - FCFS)

ساده‌ترین الگوریتم زمان‌بندی پردازنده، الگوریتم خدمت به ترتیب ورود (FCFS) نام دارد. در این الگوریتم فرایندی که زودتر پردازنده را درخواست کرده، زودتر آن را در اختیار می‌گیرد. پیاده‌سازی سیاست

 

FCFS با یک صف (FIFO - First in First Out) انجام می‌شود.

 

وقتی فرایندی وارد صف آماده می‌شود،  PCB (Process control block) آن در انتهای صف قرار می‌گیرد. وقتی پردازنده آزاد شد؛ به فرایند موجود در ابتدای صف تخصیص می‌یابد. سپس PCB فرایند در حال اجرا، از صف حذف می‌شود. نوشتن و درک برنامه‌ی زمانبندی FCFS ساده است

OPERATING SYSTEM: CPU SCHEDULINGProgram for FCFS CPU Scheduling | Set 1 - GeeksforGeeks

* هر فرایند در سیستم عامل به وسیله‌ی بلوک کنترل فرایند  (PCB)  نمایش داده می‌شود. نام دیگر PCB بلوک کنترل وظیفه است*

میانگین زمان انتظار تحت سیاست FCFS بسیار زیاد است. مجموعه فرایندهای زیر را به همراه انفجار پردازنده بر حسب میلی ثانیه، در نظر بگیرید

 

اگر هر فرایند  به ترتیب  p1,p2,p3 بیایند، و به ترتیب FCFS خدمات بگیرند. نتیجه در نمودار گانت (GANTT) زیر مشخص شده است.

نمودار گانت، یک نمودار میله ای است که زمان بندی خاص را نشان می‌دهد. از جمله زمان‌های شروع و پایان هر فرایند

زمان انتظار برای P1  برابر با صفر میلی ثانیه، برای P2  برابر با 24  میلی ثانیه و برای P3  برابر با 27  میلی ثانیه است

بنابراین، میانگین زمان انتظار برابر با (0+24+27)/ (3) = 17 میلی ثانیه است.

اگر فرایندها به ترتیب p1, p3 ,p2  باشد، نتیجه نمودار گانت به صورت زیر است:

اکنون میانگین زمان انتظار برابر با

(0+3+6) / 3  3 =~

میلی ثانیه است، این کاهش زمان قابل توجه است؛ بنابراین میانگین زمان انتظار تحت سیاست FCFS کمینه (حداقل) نیست و ممکن است با تغییرات زیادی که در انفجار پردازنده‌ی  فرایندها ایجاد می‌شود، تغییر کند

فرض می‌کنیم یک فرایند در تنگنای پردازنده و چند فرایند در تنگنای i/o داریم. وقتی فرایندها در صف‌های سیستم جا به جا می‌شوند. این وضعیت ممکن است پیش بیایید:

فرایندِ در تنگنای پردازنده، پردازنده را در اختیار می‌گیرد و آن را نگه می‌دارد. در این زمان، تمام فرایندهای دیگر، i/o  خود را تمام خواهند کرد و به صف آماده می‌روند و منتظر پردازنده می‌مانند. در حالی که فرایندها در صف آماده منتظر هستند. دستگاه‌های i/o بی کار می‌مانند. سرانجام فرایند در تنگنای پردازنده، انفجار پردازنده‌ی خود را به اتمام می‌رساند و به دستگاه i/o می‌رود. تمام فرایندهای در تنگنای i/o  که در زمان انفجار پردازنده‌ی آن‌ها کم است، سریعاً اجرا می‌شوند، و به صف‌های i/o  بر می‌گردند. در این نقطه، پردازنده بی کار می‌ماند. سپس فرایند در تنگنای پردازنده به صف آماده می‌رود و پردازنده به آن تخصیص می‌یابد. دوباره تمام فرایندهای i/o   به صف آماده می‌روند تا فرایند در تنگنای پردازنده اجرا شوند. در اینجا یک اثر اسکورت (Convoy Effect)  وجود دارد. به طوری که تمام فرایندها منتظر هستند. تا یک فرایند بزرگ، پردازنده را رها کند. این اثر نسبت به روشی که ابتدا به تمام فرایندهای کوتاه‌تر سرویس می‌دهد، منجر به بهره وروی اندک پردازنده و دستگاه‌ها می‌شود

 

https://media.geeksforgeeks.org/wp-content/uploads/222-2.png

 

Convoy Effect is phenomenon associated with the First Come First Serve (FCFS) algorithm, in which the whole Operating System slows down due to few slow processes.

 

الگوریتم زمانبندی FCFS بدون قبضه کردن (non preemptive) است. وقتی پردازنده به فرایندی تخصیص یافت، آن را در اختیار می‌گیرد تا آن را رها کند. رها کردن پردازنده ممکن است در اثر خاتمه یافتن فرایند یا درخواست i/o صورت بگیرد. الگوریتم FCFS برای سیستم عامل‌های اشتراک زمانی (Time Sharing)  مشکل زا است. زیرا در این  سیستم‌ها کاربر پردازنده را در فواضل زمانی منظمی (Quantum time) به دست می‌گیرد. این که یک فرایند اجازه داشته باشد پردازنده را به مدت زیادی در اختیارداشته باشد، برای کارایی سیستم خطرناک است.

زمانبندی بر حسب کوتاه‌ترین کار  SJF (Shortest Job First)

الگوریتم SJF به هر فرایند، طول انفجار پردازنده‌ی بعدی اش را نسبت می‌دهد، وقتی پردازنده مهیا باشد، به فرایندی نسبت داده می‌شود که انفجار پردازنده‌ی بعدی کوچک‌تری داشته باشد

اگر طول انفجار پردازنده‌ی بعدی در فرایند یکسان باشد. برای انتخاب یکی از آن‌ها، از زمان بعدی FCFS  استفاده می‌شود

توجه کنید که بهتر است نام این الگوریتم را کوتاه‌ترین انفجار پردازنده‌ی بعدی بنامیم. زیر زمانبندی با بررسی طول انفجار پردازنده‌ی بعدی فرایند انجام می‌شود (نه طول کلی آن).

فرایندهای زیر را به همراه طول زمان انفجار که بر حسب میلی ثانیه بیان شده است در نظر بگیرید

 

با استفاده از زمانبندی SJF این فرایندها بر اساس نمودار گانت (GANTT) زیر زمانبندی می‌شوند:

P2

P3

P1

   P4

 

زمان انتظار برای فرایند p1 برابر با 3 میلی ثانیه است، برای p2 برابر با 16 میلی ثانیه و برای p3 برابر با 9 میلی ثانیه و برای p4 برابر با 0 میلی ثانیه است؛ بنابراین میانگین زمان انتظار برابر با

 7 = 4 / (3+9+16+0)

میلی ثانیه است. اگر از الگوی زمانبندی FCFS استفاده می‌کردیم. میانگین زمان انتظار برابر با 10.25 میلی ثانیه بود

الگوریتم زمانبندی SJF احتمالاً بهینه است. زیرا برای این مجموعه از فرایندها میانگین زمان انتظار آن کمینه است. با انتقال فرایند کوتاه به قبل از فرایند بلند زمان انتظار مربوط به فرایند کوتاه، پیش از زمان انتظار مربوط به فرایند بلند، کاهش می‌یابد.

در نتیجه میانگین زمان انتظار کاهش پیدا می‌کند

مشکل عمده الگوریتم SJF این است که طول درخواست بعدی پردازنده باید مشخص باشد. برای زمانبند بلند مدت (زمان بند کار) در یک سیستم دسته ای (batch) ، می‌توان حد زمانی را که کاربر هنگام تحویل کار تعیین کرده است به عنوان طول فرایند در نظر گرفت؛ بنابراین، کاربران سعی می‌کنند حد زمانی فرایند را دقیقاً برآورد کنند؛ زیرا  اگر مقدار حد زمانی کمتر براورد شود؛ به معنای دریافت پاسخ سریع‌تر است (اگر خیلی کم باشد موجب بروز خطای حد زمانی می‌شود که مستلزم تحویل دوباره است)

زمانبندی SJF در زمانبندی بلند مدت کاربر زیادی دارد

گرچه الگوریتم SJF بهینه است اما نمی‌تواند در سطح زمانبندی کوتاه مدت پردازنده به کار گرفته شود. راهی وجود ندارد که از انفجار بعدی پردازنده آگاهی پیدا کنیم. می‌توانیم زمانبندی SJF را تخمین بزنیم . ممکن است طول انفجار بعدی پردازنده را ندانیم. اما می‌توانیم اندازه اش را پیش بینی کنیم. انتظار داریم که طول انفجار بعدی پردازنده، مشابه قبلی باشد.

بنابراین، با تخمین طول انفجار بعدی پردازنده می‌توانیم فرایندی را انتخاب کنیم که طول انفجار بعدی پردازنده‌ی کوتاه‌تر است/

الگوریتم  SJF ممکن است با قبضه کردن یا بدون قبضه کردن باشد

اگر فرایندی در حال اجرا باشد و فرایند جدیدی به صف آماده وارد شود، یکی از این دو فرایند باید انتخاب شود. اگر زمان انفجار بعدی پردازندة فرایند جدید، کمتر از انفجار باقی ماندة پردازنده در فرایند فعلی باشد در این صورت الگوریتم "با قبضه کردن Preemptive " . از اجرای فرایند در حال اجرا جلوگیری می‌کند و فرایند جدید اجرا می‌شود. در حالی که الگوریتم "بدون قبضه کردن non Preemptive" اجازه می‌دهد که فرایند در حال اجرا به اجرایش ادامه دهد تا انفجار پردازنده آن به اتمام برسد.

 

زمانبندی SJF با قبضه کردن را گاهی خدمات به کوتاه‌ترین زمان باقی مانده

(Shortest-remaining-time-first ) می‌نامند