How Computers Execute ProgramsPart 2 of 2
- 01CPU Architecture ও Program Execution: সহজভাবে ব্যাখ্যা
- 02CPU Bus Explained: The Hidden Highway Inside Your Computer
CPU Bus Explained: The Hidden Highway Inside Your Computer
On this page
কম্পিউটার কেনার সময় আমরা CPU-র স্পিড দেখি, RAM কত জিবি সেটা দেখি। কিন্তু এই দুটোর মাঝখানে যে জিনিসটা দিনরাত ডেটা টানাটানি করে, তার খবর কেউ রাখে না। অথচ CPU যত দ্রুতই হোক, ডেটা সময়মতো না পৌঁছালে সেই স্পিড কোনো কাজেই আসে না।
আগের লেখায় আমরা দেখেছি CPU-র ভেতরে একটা instruction কীভাবে fetch, decode আর execute হয়। সেখানে একটা জায়গা ইচ্ছা করেই এড়িয়ে গিয়েছিলাম: CPU আর RAM-এর মধ্যে ডেটা আসলে যাতায়াত করে কোন পথে। সেই ফাঁকটাই আজ পূরণ করব। পথটার নাম bus।
Bus আসলে কী
নামটা শুনে যানবাহনের কথা মনে হলেও এখানে bus মানে কতগুলো তারের একটা কমন কানেকশন, যেটা দিয়ে CPU, RAM আর অন্যান্য কম্পোনেন্ট নিজেদের মধ্যে ডেটা আদান-প্রদান করে। প্রতিটা তার একবারে একটা বিট বহন করে: ভোল্টেজ থাকলে ১, না থাকলে ০। ৬৪টা তার পাশাপাশি বসালে একসাথে ৬৪ বিট পাঠানো যায়।
তবে শুধু তার থাকলেই তো হবে না। ডেটা পাঠানোর সময় তিনটা প্রশ্নের উত্তর লাগে: কী পাঠাচ্ছি, কোথায় পাঠাচ্ছি, আর কখন পাঠাচ্ছি। এই তিন প্রশ্নের জন্যই bus-কে তিন ভাগে ভাগ করা হয়েছে।
একটা memory read আসলে কীভাবে ঘটে
ধরুন CPU-র দরকার মেমোরি অ্যাড্রেস 1024-এ রাখা ডেটাটা। পুরো ব্যাপারটা ঘটে এভাবে:
- CPU address bus-এ 1024 নম্বরটা বাইনারি আকারে বসিয়ে দেয়। এতেই জানা হয়ে যায় কোন ঘরের ডেটা চাওয়া হচ্ছে।
- সাথে সাথে control bus-এর read লাইনে সিগন্যাল যায়। মানে "এই অ্যাড্রেসে আমি লিখতে আসিনি, পড়তে এসেছি"।
- মেমোরি ওই অ্যাড্রেসের ডেটা বের করে data bus-এ তুলে দেয়, আর CPU সেখান থেকে পড়ে নেয়।
তিনটা bus-এর কাজের ভাগাভাগিটা এখানেই পরিষ্কার হয়ে যায়:
- Address bus একমুখী। অ্যাড্রেস সবসময় CPU থেকে বাইরে যায়, উল্টোদিকে কখনো না।
- Data bus দ্বিমুখী। পড়ার সময় ডেটা CPU-তে আসে, লেখার সময় CPU থেকে যায়।
- Control bus পুরো ব্যাপারটা সামলায়। কে কখন কথা বলবে, পড়া হবে নাকি লেখা হবে, কাজটা শেষ হয়েছে কি না।
Control bus মানে শুধু read আর write সিগন্যাল না। এর ভেতরে আলাদা আলাদা কাজের জন্য আলাদা তার থাকে, আর প্রতিটা তার একটা করে সিগন্যাল বহন করে। যেমন একটা তারে যায় clock সিগন্যাল, যেটার তালে তালে সবাই কাজ করে। আরেকটায় যায় interrupt, যেটা দিয়ে কিবোর্ড বা ডিস্কের মতো ডিভাইস CPU-কে বলে "আমার একটা কথা আছে"।
Address bus-এর width: 4GB রহস্যের সমাধান
Address bus-এ তার যতগুলো, ঠিক ততগুলো বিটের অ্যাড্রেস পাঠানো যায়। এই ছোট্ট হিসাবটার একটা বিখ্যাত ফলাফল আপনি হয়তো নিজেই দেখেছেন।
এ কারণেই পুরনো 32-bit উইন্ডোজে 8GB RAM লাগালেও সিস্টেম 4GB-র বেশি দেখাত না। আমি নিজে প্রথমবার এটা দেখে ভেবেছিলাম RAM-টাই বুঝি নষ্ট। আসলে মেশিনের কোনো দোষ ছিল না, অ্যাড্রেস করার মতো নম্বরই আর ছিল না। 64-bit সিস্টেমে এই সীমা তাত্ত্বিকভাবে এত বড় যে বাস্তবে ছোঁয়ার প্রশ্নই আসে না।
Data bus-এর width আবার অন্য জিনিস নির্ধারণ করে: এক ট্রিপে কতটুকু ডেটা যাবে। ৮ বিটের data bus দিয়ে এক বাইট আনতে এক ট্রিপ লাগে, ৬৪ বিটের bus দিয়ে একসাথে ৮ বাইট চলে আসে। রাস্তার লেনের মতো: লেন বাড়লে একই সময়ে বেশি গাড়ি যায়।
Bottleneck: যখন রাস্তাই সমস্যা
নব্বইয়ের দশক আর 2000 সালের শুরুর দিকে PC-র ডিজাইনটা ছিল এরকম: CPU একটা মাত্র front-side bus দিয়ে chipset-এর সাথে যুক্ত, আর মেমোরিসহ বাকি সবকিছুর সাথে যোগাযোগ ওই এক পথ দিয়েই। CPU-র স্পিড বছর বছর বাড়ছিল, কিন্তু bus সেই তালে বাড়তে পারছিল না। ফলাফল: প্রসেসর বসে বসে ডেটার জন্য অপেক্ষা করত। ৮ লেনের হাইওয়ের মাঝখানে ১ লেনের ব্রিজ যেমন।
সমাধানটা এল ডিজাইন বদলে। Memory controller-কে chipset থেকে সরিয়ে CPU-র ভেতরেই ঢুকিয়ে দেওয়া হলো, যাতে RAM-এর সাথে CPU সরাসরি কথা বলতে পারে। AMD এই কাজটা করে 2003 সালে Athlon 64 দিয়ে, Intel আসে 2008 সালে Nehalem architecture দিয়ে। Front-side bus-এর যুগ সেখানেই শেষ।
শেয়ার্ড bus থেকে point-to-point
আরেকটা বড় পরিবর্তন এসেছে bus-এর ধরনেই। পুরনো PCI বা IDE-র মতো bus ছিল parallel আর শেয়ার্ড: অনেকগুলো তার, অনেক ডিভাইস একই তারে ঝুলে আছে। সমস্যা হলো, স্পিড বাড়াতে গেলে পাশাপাশি তারগুলোর সিগন্যাল একসাথে পৌঁছানো কঠিন হয়ে পড়ে, আর এক bus-এ সবাই থাকায় ভাগাভাগি করে চলতে হয়।
আধুনিক সমাধান উল্টো পথে হাঁটে: তার কম, কিন্তু প্রতিটা ডিভাইসের জন্য আলাদা সরাসরি লিংক, আর প্রতিটা লিংকে অনেক বেশি স্পিড। এটাই point-to-point serial লিংক, যার সবচেয়ে পরিচিত উদাহরণ PCIe। আপনার গ্রাফিক্স কার্ড x16 স্লটে বসে মানে সে ১৬টা আলাদা lane পেয়েছে, একটা NVMe SSD সাধারণত চলে x4 lane-এ। কারো সাথে কাউকে রাস্তা ভাগ করতে হয় না।
নামে bus থাকলেও USB আর SATA-ও আসলে এই serial ঘরানার। আর সামনের দিকে তাকালে আছে CXL-এর মতো নতুন interconnect, যেটা PCIe-র ওপর দাঁড়িয়ে CPU আর মেমোরির সম্পর্কটাকেই নতুন করে ভাবছে। ভেতরের ধারণাগুলো কিন্তু একই আছে: অ্যাড্রেস লাগবে, ডেটা লাগবে, আর লাগবে সমন্বয়।
শেষ কথা
পরেরবার কোনো মাদারবোর্ডের ছবি দেখলে খেয়াল করবেন CPU সকেট থেকে RAM স্লটের দিকে চলে যাওয়া সরু সরু লাইনগুলো। ওগুলোই এই লেখার পুরো গল্প, তামার মধ্যে আঁকা।
এই সিরিজের পরের লেখায় আমরা আরও গভীরে যাব। কোথাও ভুল চোখে পড়লে বা কোনো অংশ আরও ভেঙে বলা দরকার মনে হলে জানাবেন, লেখাটা তাতে আরও ভালো হবে।