আমাদের কথা খুঁজে নিন

   

প্রোগ্রামাররা আসুন, সলভ করি : প্রসেস শিডিউলিং এর তৃতীয় এ্যালগোরিদম

তন্ময়-অন-রান.ব্লগস্পট.কম আমার ব্লগে পুরো প্রবলেমটা এক্সপ্লেইন করেছি। এখানে টেবিল-টুবিল লেখা কঠিন তাই পুরোটা এখানে লিখতে পারলাম না। একটু ব্রিফলি এক্সপ্লেইন করছি। প্রোগ্রামে আপনাকে প্রথমেই বলে দেওয়া হবে যে কতটি প্রসেস দেওয়া হবে। অতঃপর আপনি প্রতিটি প্রসেসর জন্য নিচের মতো করে ইনপুট নিবেন।

Arrival | Process | Burst Time | Priority 0--------|--- 1 -----| ----- 3 -------| ---- 2 1--------|--- 2 -----| ----- 2 -------| ---- 1 2--------|--- 3 -----| ----- 1 -------| ---- 3 টেস্ট ইনপুট এ বড়জোড় ৫-৬ টা প্রসেস দেওয়া হবে। বার্স্ট টাইম হলো টাইম ইউনিট, ধরতে পারেন সেকেন্ড। সেই হিসেবে এখানে প্রসেস-১ করবে ৩ সেকেন্ড কাজ , প্রসেস-২ করবে ২ সেকেন্ড কাজ, প্রসেস-৩ করবে ১ সেকেন্ড কাজ । প্রাইওরিটি যত কম হবে সেই কাজ এর গুরুত্ত্ব তত বেশি। এর মাণ সর্বনিম্ন ১ হবে।

একাধিক প্রসেসের এর প্রাওরিটি একই হবে না। যাই হোক নিচের বর্ণনা থেকেই বুঝতে পারবেন যে সিপিইউ কিভাবে কাজ করছে। ০ তম সেকেন্ড: এই সময় একটিই কাজ আছে। তা হলো প্রসেস-১ যার বার্স্ট টাইম ৩ সেকেন্ড ও প্রাওরিটি ২। সিপিইউ ১ সেকেন্ডের কাজ করবে প্রসেস-১ এর ।

তাহলের প্রসেস-১ এর কাজ বাকি থাকে ২ সেকেন্ড। ১ তম সেকেন্ড: এই সময় ২ টি কাজ হলো। প্রসেস-১ এসেছে ০ তম সেকেন্ডে, কাজ আছে ২ সেকেন্ডের ও প্রাওরিটি ২ প্রসেস-২ এসেছে ১ তম সেকেন্ডে, কাজ আছে ২ সেকেন্ডের ও প্রাওরিটি ১ যেহেতু প্র্রসেস-২ এর প্রাওরিটি বেশি (প্রাওরিটি ভ্যালু কম হওয়া মানেই সেটার প্রাওরিটি বেশী। যেমন রোল নাম্বার যার ১ তাকেই আমরা সবচেয়ে ভালো শিক্ষার্থী (!) হিসেবে জেনেরালী চিনি)। তাহলে প্রসেস-২ এর ১ সেকেন্ড কাজ করা হবে।

প্রসেস-২ এর বাকি থাকবে ১ সেকেন্ডের কাজ। ২ তম সেকেন্ডে: এই সময় ৩ টি কাজ হলো প্রসেস-১ এসেছে ০ তম সেকেন্ডে, কাজ আছে ২ সেকেন্ডের ও প্রাওরিটি ২ প্রসেস-২ এসেছে ১ তম সেকেন্ডে, কাজ আছে ১ সেকেন্ডের ও প্রাওরিটি ১ প্রসেস-৩ এসেছে ২ তম সেকেন্ডে, কাজ আছে ১ সেকেন্ডের ও প্রাওরিটি ৩ যেহেতু প্রসেস-১ এরই প্রাওরিটি বেশি তাই প্রসেস-১ এর কাজ হবে ১ সেকেন্ডের। অতএব প্রসেসর-১ এর বাকি থাকে ০ সেকেন্ড অর্থাৎ কাজ শেষ। ৩ তম সেকেন্ড: এই সময় কাজ হলো ২ টি। প্রসেস-১ এসেছে ০ তম সেকেন্ডে, কাজ আছে ২ সেকেন্ডের ও প্রাওরিটি ২ প্রসেস-৩ এসেছে ২ তম সেকেন্ডে, কাজ আছে ১ সেকেন্ডের ও প্রাওরিটি ৩ প্রসেস-১ এর কাজ হবে যেহেতু এর প্রাওরিটি বেশি।

অতএব প্রসেস-১ এর ১ সেকেন্ড কাজ হবে। প্রসেস-১ এর কাজ বাকি থাকলো ১ সেকেন্ডের। ৪ তম সেকেন্ড: এই সময় কাজ হলো ২ টি। প্রসেস-১ এসেছে ০ তম সেকেন্ডে, কাজ আছে ১ সেকেন্ডের ও প্রাওরিটি ২ প্রসেস-৩ এসেছে ২ তম সেকেন্ডে, কাজ আছে ১ সেকেন্ডের ও প্রাওরিটি ৩ প্রসেস-১ এর কাজ হবে যেহেতু এর প্রাওরিটি বেশি। অতএব প্রসেস-১ এর ১ সেকেন্ড কাজ হবে।

প্রসেস-১ এর কাজ বাকি থাকলো ০ সেকেন্ডের অর্থাৎ শেষ। ৫ম সেকেন্ড: এই সময় কাজ হলো ১ টি। প্রসেস-৩ এর। তাই প্রসেস-৩ এর ১ সেকেন্ডের কাজ হবে। প্রসেস-৩ এর বাকি থাকলো আর ০ সেকেন্ডের কাজ অর্থাৎ শেষ।

----------------------------------------সব কাজ শেষ। কিন্তু দেখা যাচ্ছে। প্রসেস-১ এসেছিলো ০ তম সেকেন্ডে ৩ সেকেন্ডের কাজ নিয়ে। অর্থাৎ তার কাজ ০তম, ১ম, ২য় এই ৩ সেকেন্ডে শেষ হওয়ার কথা। কিন্তু তা না হয়ে শেষ হলো ৪র্থ সেকেন্ডে।

তার সময়সীমা হলো তাহলে ০তম, ১ম, ২য়, ৩য়, ৪র্থ এই ৫ সেকেন্ড। কিন্তু তার কাজ ছিলো ৩ সেকেন্ডের। অর্থাৎ সে ২ সেকেন্ড ওয়েট করছে। প্রসেস-২ এসেছিলো ১ তম সেকেন্ডে ২ সেকেন্ডের কাজ নিয়ে। তার কাজ হওয়ার কথা ১ম ও ২য় সেকেন্ডে।

এবং হয়েছেও তাই। তাই প্রসেস-২ এর ওয়েটিং টাইম ০. প্রসেস-১ এসেছিলো ২ তম সেকেন্ডে ১ সেকেন্ডের কাজ নিয়ে। অর্থাৎ তার কাজ ২ তম সেকেন্ডেই শেষ হওয়ার কথা। কিন্তু তা না হয়ে শেষ হলো ৫ম সেকেন্ডে। তার সময়সীমা হলো তাহলে ২য়, ৩য়, ৪র্থ, ৫ম এই ৪ সেকেন্ড।

কিন্তু তার কাজ ছিলো ১ সেকেন্ডের। অর্থাৎ সে ৩ সেকেন্ড ওয়েট করছে। তাহলে দাঁড়ালো যে মোট ওয়েটিং টাইম = ২+০+৩ = ৫ গড় ওয়েটিং টাইম দাঁড়ালো = (৫/৩) = ১.৬৬ এই পুরো আউটপুট আপনাকে নিম্নরূপে দেখাতে হবে ব্যাতিক্রম: এ বার নিচের ইনপুট ধরুন, Arrival | Process | Burst Time | Priority 0--------|--- 1 -----| ----- 3 -------| ---- 2 55-------|--- 2 -----| ----- 2 -------| ---- 1 60-------|--- 3 -----| ----- 1 -------| ---- 3 দেখুন, প্রসেস-১ এর কাজ হবে ০তম, ১তম, ২ তম সেকেন্ডে। তারপর ৩ তম থেকে ৫৪ তম সেকেন্ড পর্যন্ত প্রসেসর এর কোন কাজ থাকবে না, অর্থাৎ আইডেল অবস্থায় থাকবে। এরপর আবার ৫৫তম, ৫৬তম সেকেন্ডে প্রসেস-২ এর কাজ করার পর ৫৭তম, ৫৮তম, ৫৯তম সেকেন্ড প্রসেসর আইডেল থাকবে।

৬০ তম সেকেন্ডে প্রসেস-৩ এর কাজ করবে। এখানে কোন প্রসেসকেই ওয়েট করতে হয় নাই তাই মোট ওয়েটিং টাইম ০, এভারেজ ওয়েটিং টাইমও ০. নীচের স্ক্রিনশটটি দেখুন। ওকে, বলে রাখি ইনপুট আউটপুট এক্সেসপশন নিয়ে মাথা ঘামানোর দরকার নাই, উল্টাপাল্টা ইনপুট দেওয়া হবে না। প্রসেসের নাম্বার সিরিয়ালি দেওয়া হবে, ১,২,৩...করে। একটি প্রসেসের এ্যারাইভাল টাইম তার আগের প্রসেসের এ্যারাইভাল টাইমের সমান বা তার চেয়ে বড় হতে পারে।

বার্স্ট টাইমও ১০-১৫ এরকমই দেওয়া হবে আরকি। দুইটা প্রাওরিটি কখনোই এক হবে না, হলেও আশা করি আপনাদের সমস্যা হবে না। যাদের একই তাদের মধ্যে যে আগে আসছে তার কাজটাই আগে করে নিবেন। আমার করা প্রোগ্রামটি এই লিংক থেকে ডাউনলোড করতে পারেন। পুরো এক্সপ্ল্যানাশেন এর জন্য এই লিংকে যান।

----------------------------এর আগের দুইটা প্রবেলেম এই লিংকে "ফার্স্ট কাম ফার্স্ট সার্ভড" - বাংলায় - ব্রিফ "ফার্স্ট কাম ফার্স্ট সার্ভড" - ইংরেজীতে - ডিটেইলস "শর্টেস্ট জব ফার্স্ট" - বাংলায় - ব্রিফ "শর্টেস্ট জব ফার্স্ট" - ইংরেজীতে - ডিটেইলস ।

অনলাইনে ছড়িয়ে ছিটিয়ে থাকা কথা গুলোকেই সহজে জানবার সুবিধার জন্য একত্রিত করে আমাদের কথা । এখানে সংগৃহিত কথা গুলোর সত্ব (copyright) সম্পূর্ণভাবে সোর্স সাইটের লেখকের এবং আমাদের কথাতে প্রতিটা কথাতেই সোর্স সাইটের রেফারেন্স লিংক উধৃত আছে ।