Processes & Threads
অপারেটিং সিস্টেমে Process এবং Thread হলো এক্সিকিউশনের মূল একক। কম্পিউটার যখন কোনো প্রোগ্রাম চালায়, তখন আসলে সে একটি প্রসেস বা থ্রেড রান করে।
1. Process States & Lifecycle
একটি প্রসেস তৈরি হওয়া থেকে শেষ হওয়া পর্যন্ত বিভিন্ন স্টেটের মধ্য দিয়ে যায়। একে Process Lifecycle বলা হয়।
- New: প্রসেসটি তৈরি হচ্ছে।
- Ready: প্রসেসটি তৈরি এবং CPU পাওয়ার জন্য অপেক্ষা করছে (RAM-এ লোড করা আছে)।
- Running: প্রসেসটি বর্তমানে CPU দ্বারা এক্সিকিউট হচ্ছে।
- Waiting (Blocked): প্রসেসটি কোনো I/O অপারেশন (যেমন ফাইল রিড, ইউজার ইনপুট) এর জন্য অপেক্ষা করছে।
- Terminated: প্রসেসের কাজ শেষ এবং এটি মেমোরি থেকে রিমুভ হয়ে যাচ্ছে।
2. Process Control Block (PCB)
প্রতিটি প্রসেস মেইনটেইন করার জন্য OS একটি ডেটা স্ট্রাকচার ব্যবহার করে, যাকে PCB বলে। এটি প্রসেসের "আইডি কার্ড" এর মতো। এতে থাকে:
- Process ID (PID): প্রসেসের ইউনিক আইডেন্টিফায়ার।
- Process State: বর্তমান অবস্থা (Running, Ready, etc.)।
- Program Counter: পরবর্তী কোন ইনস্ট্রাকশনটি এক্সিকিউট হবে তার অ্যাড্রেস।
- CPU Registers: প্রসেস চলাকালীন রেজিস্টারের ভ্যালু।
3. Context Switching
যখন CPU একটি প্রসেস থেকে অন্য প্রসেসে সুইচ করে, তখন তাকে আগের প্রসেসের স্টেট (PCB) সেভ করতে হয় এবং নতুন প্রসেসের স্টেট লোড করতে হয়। এই প্রক্রিয়াকে Context Switching বলে। এটি একটি ওভারহেড কারণ এই সময়ে কোনো পজিটিভ কাজ হয় না।
4. Threads vs Processes
- Process: একটি প্রোগ্রামের রানিং ইনস্ট্যান্স। একটি প্রসেস ক্র্যাশ করলে অন্য প্রসেস এফেক্টেড নাও হতে পারে। এদের নিজস্ব মেমোরি স্পেস থাকে।
- Thread: একটি প্রসেসের সাব-ইউনিট। একে "Lightweight Process" ও বলা হয়। একই প্রসেসের থ্রেডরা মেমোরি এবং রিসোর্স শেয়ার করে। একটি থ্রেড ক্র্যাশ করলে পুরো প্রসেস ক্র্যাশ করতে পারে।
5. Scheduling Algorithms
OS ডিসাইড করে কোন প্রসেসটি এরপর CPU পাবে। এর জন্য বিভিন্ন অ্যালগরিদম ব্যবহার করা হয়:
- FCFS (First-Come, First-Served): যে আগে আসবে, সে আগে সার্ভিস পাবে। (সহজ কিন্তু ওয়েটিং টাইম বেশি হতে পারে)।
- SJF (Shortest Job First): যার কাজ শেষ করতে কম সময় লাগবে, সে আগে সুযোগ পাবে। (অপ্টিমাল কিন্তু ভবিষ্যৎ জানা কঠিন)।
- Round Robin: প্রতিটি প্রসেসকে নির্দিষ্ট সময়ের (Time Quantum) জন্য CPU দেওয়া হয়। সময় শেষ হলে পরের জন সুযোগ পায়। (টাইম শেয়ারিং সিস্টেমের জন্য সেরা)।
- Priority Scheduling: প্রায়োরিটি অনুযায়ী প্রসেস সিলেক্ট করা হয়।
6. Inter-Process Communication (IPC)
আলাদা প্রসেসদের মধ্যে ডেটা আদান-প্রদান করার উপায় হলো IPC।
- Pipes: এক প্রসেসের আউটপুট অন্য প্রসেসের ইনপুট হিসেবে যায় (যেমন লিনাক্সে
|)। - Message Queues: মেসেজ বক্সের মতো, যেখানে প্রসেস মেসেজ রাখতে এবং পড়তে পারে।
- Shared Memory: মেমোরির একটি নির্দিষ্ট অংশ যা একাধিক প্রসেস এক্সেস করতে পারে (সবচেয়ে ফাস্ট IPC)।