Why OS?

অপারেটিং সিস্টেম নিয়ে কখনো এমন প্রশ্ন এসেছে মাথায়, এটা আসলে কি? এটা ছাড়া আমরা কেন কোন সফটওয়্যার চালাতে পারি না? এটা কেন এতো জরুরী? এইগুলো বুঝার আগে কিছু সার্ফেস লেয়ার থেকে Low Level আলাপ সালাপ করা দরকার।
আমরা যখন কোন অ্যাপ্লিকেশান রান করি সেই অ্যাপ্লিকেশান প্রথমে আমাদের মেমরিতে (RAM) লোড হয়ে যায়। আরো স্পেসিফিক ভাবে বললে ইন্সট্রাকশন গুলো লোড হয়। আর CPU সেই ইন্সট্রাকশন গুলো ধারাবাহিক ভাবে এক্সিকিউট করে। খুবি ব্যাসিক আলাপ। এখন CPU দুইটা Mode-এ ইন্সট্রাকশন এক্সিকিউট করে।
১। Kernel Mode (Privileged Mode) - এই মোডে যেই ইন্সট্রাকশন গুলো রান হবে এইগুলোকে আমরা প্রিভিলেজড ইন্সট্রাকশন বলতে পারি। এখানে বিশেষ ধরনের কিছু ইন্সট্রাকশন এক্সিকিউট হয় যেইগুলো সরাসরি hardware এর অ্যাক্সেস করতে পারে। যেমনঃ Network Request NIC এর অ্যাক্সেস করা, File Read Write SSD/HDD অ্যাক্সেস করা ইত্যাদি। মেশিন কোডে বিশেষ কিছু সেট অফ ইন্সট্রাকশন Privileged থাকে অর্থাৎ ওইগুলো রান করার জন্য আপনার Privileged Access লাগবে। যেটা শুধু মাত্র Kernel Mode-এই রান করা সম্ভব।
২। User Mode (Non-Privileged Mode) - এই মোডে যেই ইন্সট্রাকশন গুলো রান হবে এইগুলোকে আমরা রেগুলার ইন্সট্রাকশন বলতে পারি। এখানে রেগুলার ইন্সট্রাকশন গুলো রান হয় যেমন ধরেন বিভিন্ন রকম mathmatical operation, loops, ইত্যাদি
CPU কিভাবে তার এই মোড চেঞ্জ করে। এইটা নিয়ে পরে একদিন আলোচনা করবো ইনশাআল্লাহ আর পড়াশুনা দরকার।
CPU এই দুই মোডের ইন্সট্রাকশনগুলো মেমরি থেকে থেকেই নেয়। তার মানে মেমরিতে কিছু space allocate করা থাকে প্রিভিলেজড ইন্সট্রাকশনের জন্য আর এই অ্যালোকেটেড স্থান কে আমরা কার্নাল স্পেস বলতে পারি আর বাকি সব রেগুলার ইন্সট্রাকশন এর জন্য যাকে আমরা ইউজার স্পেস বলতে পারি।
আমরা যত অ্যাপ্লিকেশান চালাই (যেমন, Chrome, Microsoft Office ইত্যাদি) সব গুলো মেমরির ইউজার স্পেস লোড হয়। তার মানে CPU এখানে User Mode এ ইন্সট্রাকশন এক্সিকিউট করে। [এখানে একটা নুকতা দিয়ে রাখি সামনে এখান থেকে আবার শুরু করবো]
একই ভাবে তো Kernel Space-এও অ্যাপ্লিকেশান লোড হতে পারে। তারমানে ওইখানে যেই অ্যাপ্লিকেশান লোড হবে তার কাছে প্রিভিলেজড অ্যাক্সেস থাকবে রাইট? এখন বলেন তো এখানে কার থাকা উচিত? এই মেমরি স্পেস এ যদি যেকোনো অ্যাপ্লিকেশান লোড হয়ে যায় তাহলে তো চরম সিকিউরিটি ইস্যু থেকে যায়। যে কোন অ্যাপ্লিকেশান আপনার কম্পিউটার এর যেকোনো হার্ডওয়্যার কে মিশ ইউজ করতে পারবে রাইট? এখানে এমন একজন দরকার যে হবে অন্য সব অ্যাপ্লিকেশানের সুপারভাইজার। হ্যাঁ সেই অ্যাপ্লিকেশানই হচ্ছে আমাদের অপারেটিং সিস্টেম। (Windows, Linux, etc) তার কাছে ওই Kernel Mode এর ইন্সট্রাকশন গুলোর অ্যাক্সেস আছে। OS সেই সকল প্রিভিলেজড ইন্সট্রাকশন গুলো ব্যাবহার করতে পারে হার্ডওয়্যার অ্যাক্সেস করার জন্য। সে নিজে সরাসরি হার্ডওয়্যার এর সাথে কথা বলবে আপনাকে বলতে দিবে না। OS আপনাকে যেই সুন্দর ফোল্ডার, ফাইল দেখাচ্ছে সেটা আসলে এক একটা মেমোরি ব্লক। আপনি যে ইন্টারনেট চালাতে পারছেন NIC কে অ্যাক্সেস করেছে এই OS. আমরা সিস্টেম কার্নাল বলতে যাকে চিনি সে হছে এই OS এর হার্ট। যে মুলুত প্রিভিলেজড ইন্সট্রাকশন গুলো ব্যাবহার করে হার্ডওয়্যার অ্যাক্সেস করছে।
তার মানে আমাদের সকল সফটওয়্যার যেইগুলো মূলত OS এর উপড়ে চলছে অর্থাৎ User Space এ, তাদের ডিরেক্ট হার্ডওয়্যার অ্যাক্সেস নেই। তাহলে একটা প্রশ্ন নিশ্চয়ই মাথায় আসছে আমরা যে ব্রাউজার চালাচ্ছি এটা তো User Space এ লোড হয়েছে হার্ডওয়্যার অ্যাক্সেস তার কাছে নেই তারপরেও সে কিভাবে নেটওয়ার্ক ব্যাবহার করতে পারছে? অথবা মাইক্রোসফট অফিসের কাছে তো ডিরেক্ট হার্ডওয়্যার অ্যাক্সেস নেই তাহলে কিভাবে সে বিভিন্ন ফাইল তৈরি করতে পারছে বা পড়তে পারছে? এটাই হচ্ছে সেই নুকতা দেওয়া জায়গা।
আমরা যারা প্রোগ্রামিং করি আমরা কম বেশি প্রত্যেকেই API টার্ম এর সাথে পরিচিত। এই API মূলত কি?
Application Programming Interface. সোজা বাংলায় বললে দুইটা ডিভাইসের মধ্যে সেতু বন্ধনের কাজ করে। আর একটু ভেঙ্গে বললে, ডিভাইস “A” তার কিছু রিসোর্স অন্য ডিভাইসের জন্য এক্সপোজ করে ডিভাইস “B” সেটা কনজিউম করে। এখানে এক্সপোজড রিসোর্স গুলো হচ্ছে API.
এখানে আরেকটা বিষয় লক্ষণীয়। ডিভাইস "A" শুধু কিছু API এক্সপোজ এর মাধ্যমে একটা Abstruction লেয়ার তৈরি করেছে। ডিভাইস “A” কিভাবে রিসোর্স গুলোকে ফেচ করছে মডিফাই করছে সেটা Abstruct থেকে যাচ্ছে. ডিভাইস "B" কে ওই সব রিসোর্স পাওয়ার জন্য বিশেষ কোন কমপ্লেক্সিটি ফেস করতে হচ্ছে না। সে শুধু API কে কল দিচ্ছে আর রেজাল্ট পাচ্ছে। API নিয়ে বিস্তারিত অন্যকোনদিন আলাপ করা যাবে ইনশাআল্লাহ।
এই OS Kernel ও আমাদের কিছু API এক্সপোজ করে যা দিয়ে আমরা হার্ডওয়্যার অ্যাক্সেস এর কাজ গুলো করতে পারবো। OS আমাদের জন্য সিম্পল কিছু ফাংশন এক্সপোজ করে। এইগুলো এক্সিকিউট করার মাধ্যমে আমরা লিমিটেড হার্ডওয়ার অ্যাক্সেস করতে পারবো। এখানেও কিন্তু সেই Abstraction এর বিষয়টা লক্ষণীয়। Kernel আমাদের কিছু সেট অফ ফাংশন দেয়। আমরা এটাকে কল করার সময় জাস্ট প্যারামিটার দিতে পারি। কল হওয়ার পর সে কিভাবে হার্ডওয়্যার পর্যন্ত যাবে সেটা আমাদের অ্যাপ্লিকেশান এর চিন্তার বিষয় না এটা Kernel আর CPU এর কাজ। তবে একটা ইন্টারেস্টিং জিনিস হচ্ছে এই SYSCALL এর মাধ্যমেই
আমি এতক্ষণ যেই API বা ফাংশন এর কথা বলছিলাম এইগুলোই মূলত System Call। যেমনঃ
ফাইল অপেন করার জন্য
open()
ফাইল রিড রাইট করার জন্য
read() and write()
TCP কানেকশন একসেপ্ট করার জন্য
accept()
বাsys_accept()
ইত্যাদি
এই System Call গুলো ভিন্ন ভিন্ন OS এ ভিন্ন ভিন্ন হতে পারে। ব্রাউজার বা অফিস অ্যাপ্লিকেশান User Mode এ চলার পরেও হার্ডওয়্যারর অ্যাক্সেস করতে পারে এই সকল SYSCALL ব্যাবহার করে।
এইগুলো হচ্ছে ওয়েলনন কিছু Syscall:
Everything comes with costs. Yes, Syscall is not exceptional in this case. Syscall এরও কিছু ওভারহেড আছে। সেইগুলো কি কি? আরো অনেক প্রশ্ন মাথায় ঘুরছে, Kernel Space এ কি শুধু OS থাকতে পারে অন্য কেউ কা থাকতে পারে না? অন্য কোন অ্যাপ্লিকেশান? CPU কিভাবে তার এই Mode Switch করে? কে করে? আর কিছু নতুন টার্ম লাইক ABI (Application Binary Interface), Interrupts এইগুলো সম্পর্কেও কথা হবে ইনশাআল্লাহ্।
Posted on:
Last Updated: 2 days ago
📬 Let's keep in touch
Join our mailing list for the latest updates
Something went wrong!
Please try again.