~/writing/whats-inside-a-bit $
    01/08
    intro ⏻
    LEVEL 1 — THE ATOMSপর্ব ০১/০৮~১২ মিনিট

    বিটের ভেতরে কী থাকে?

    Transistor, voltage, আর memory-র শুরু

    ধরুন, কোডে লিখলাম:

    x = 5

    কোডটা রান হলো। ভালো কথা।

    কিন্তু একটা প্রশ্ন — এই ৫ সংখ্যাটা আসলে কম্পিউটারের কোথায় গেল? এর কি কোনো ফিজিক্যাল রূপ আছে?

    আক্ষরিক অর্থে — কম্পিউটারের ভেতরে কোথাও না কোথাও এই ৫ সংখ্যাটা এখন জমা হয়ে আছে। এই series-এ আমি সেই physical state থেকে screen পর্যন্ত পুরো যাত্রাটা দেখানোর চেষ্টা করবো। আপাতত লক্ষ্য একটা — একটা bit কীভাবে physically মেমোরিতে অবস্থান করে?

    একটা কথা আগে বলে রাখি — এখানে কোনো নির্দিষ্ট প্রোগ্রামিং ল্যাংগুয়েজ নিয়ে কথা বলবো না। সব software layer বাদ দিয়ে আলোচনা করবো একেবারে হার্ডওয়্যার লেভেলে — শুধু কিছু তার, কিছু transistor, আর voltage।

    01

    Binary কেন?

    কম্পিউটারের ভেতরে data মানে কী? voltage। Electrical signal-এর মাত্রা। ০ মানে "কম voltage" (প্রায় ০ ভোল্ট), ১ মানে "বেশি voltage" (প্রায় ৫ ভোল্ট বা ১.৮ ভোল্ট — chip-এর design-এর উপর নির্ভর করে)। অর্থাৎ, যেহেতু কম্পিউটার মূলত ইলেক্ট্রনিক ডিভাইস, এখানে আমরা যেমন কাগজে লিখে রাখি বা অন্য কোনো বস্তু গণনার কাজে ব্যবহার করি, সেরকমটা সম্ভব না। এখানে কোনো তথ্য সংরক্ষণ করতে চাইলে সেটাকে বিদ্যুতে রুপান্তর করে তারপরই সংরক্ষণ করা যাবে। এজন্যই যেকোনো ডিজিট্যাল ইলেকট্রনিকস এ data মানেই voltage।

    স্বাভাবিক প্রশ্ন — কম্পিউটার base-10 use করলে কী হতো? মানুষের ১০টা আঙুল আছে বলে আমরা ০ থেকে ৯ পর্যন্ত ব্যবহার করি। কম্পিউটারেও তো ১০টা আলাদা voltage level রাখা যেত।

    ঝামেলাটা math-এ না। ঝামেলাটা physics-এ। আর ঝামেলাটার নাম — noise

    বাস্তব circuit-এ voltage কখনো একদম একইরকম থাকে না। তাপমাত্রার ওঠানামা, পাশের তারের electromagnetic interference — সবকিছু voltage-কে একটু এদিক-ওদিক করে দেয়। নিচের যন্ত্রে noise বাড়িয়ে নিজেই দেখুন:

    NOISE VS BANDS
    পড়ছে
    ভুল পড়া: ০
    ±০.৩V
    একই noise, দুই ভাগ্য — base-10-এর সরু band ভাঙে, binary-র নিষিদ্ধ অঞ্চল টেকে।

    Base-10-এ ১.১ ভোল্ট মানে "২", আর ০.৯ ভোল্ট মানে "১"। মাত্র ০.২ ভোল্টের এই পার্থক্য noise সহজে ভেঙে ফেলে।

    Binary-তে? ০ মানে "কম voltage-এর যেকোনো ভ্যালু" (ধরুন ০ থেকে ০.৮ ভোল্ট), ১ মানে "বেশি voltage-এর যেকোনো ভ্যালু" (ধরুন ২ থেকে ৫ ভোল্ট)। মাঝখানে একটা noise margin — একটা "নিষিদ্ধ অঞ্চল"।

    এটাই বাইনারির আসল কারণ। ০ আর ১ দিয়ে data represent করা সহজ, তা না — ০ আর ১ নির্ভরযোগ্য। বাকিসব সেখান থেকে বানানো।

    এর মানে এই না যে কম্পিউটার ৫, ২৫ বা ১০০০ বোঝে না। বরং প্রতিটা সংখ্যাকে সে অসংখ্য ০ আর ১-এর combination-এ ভেঙে ফেলে। সেই গল্পটা পরের article-এ।

    পরের প্রশ্ন: এই voltage-গুলো কে তৈরি করে? কে switch করে?

    02

    Transistor — সবচেয়ে ছোট সুইচ

    এখন পর্যন্ত একটা জিনিস পরিষ্কার — কম্পিউটার শেষ পর্যন্ত ভোল্টেজ নিয়েই কাজ করে। কিন্তু প্রশ্ন হলো, এই ভোল্টেজ কে নিয়ন্ত্রণ করে? কারণ কম্পিউটারকে তো মাঝে মাঝে কারেন্ট যেতে দিতে হবে, আবার মাঝে মাঝে আটকে দিতেও হবে। মানে, কম্পিউটারের এমন একটা জিনিস দরকার যেটা ইচ্ছে হলে বিদ্যুতের রাস্তা খুলে দেবে, আর ইচ্ছে হলে বন্ধ করে দেবে।

    অর্থাৎ একটা switch।

    কিন্তু এখানে একটা সমস্যা আছে। বাড়ির লাইটের সুইচ তো আপনি হাত দিয়ে চাপেন। কম্পিউটারের ভেতরে যদি ১০০ বিলিয়ন সুইচ থাকে, তাহলে সেগুলো কে চাপবে?

    সেখানেই আসে transistor।

    Transistor-কে সবচেয়ে সহজভাবে ভাবা যায় একটা অতি ক্ষুদ্র ইলেকট্রনিক কল হিসেবে। বাসার পানির কল যেমন খুললে পানি যায়, বন্ধ করলে পানি থেমে যায় — transistor-ও ঠিক তেমন। এই কলটা মানুষ ঘোরায় না। আরেকটা ছোট্ট electrical signal-ই কলটা খুলে বা বন্ধ করে দেয়।

    TRANSISTOR, দ্য সুইচ
    signalthe tapVddDSGNDGaten-MOSFET
    রাস্তা বন্ধ — off
    কল আর MOSFET, একই গল্প: Gate-এ ছোট্ট voltage দিলে channel তৈরি হয় — Drain থেকে Source-এ current যায়, bulb জ্বলে। signal সরান, channel মিলিয়ে যায়, রাস্তা বন্ধ।

    এখানে গুরুত্বপূর্ণ ব্যাপার হলো — একটা ছোট electrical signal আরেকটা electrical signal-কে নিয়ন্ত্রণ করতে পারে।

    ব্যস, এইটুকুই। এই ছোট্ট আইডিয়াটার ওপরই দাঁড়িয়ে আছে পুরো আধুনিক কম্পিউটার।

    আপনি এই লেখাটা যতক্ষণ পড়ছেন, আপনার ফোন বা ল্যাপটপের ভেতরে কয়েক বিলিয়ন transistor প্রতি সেকেন্ডে অসংখ্যবার on-off হচ্ছে। কিন্তু এত কিছুর পরও প্রতিটা transistor একই কাজ করে — বিদ্যুৎ যেতে দেবে, অথবা দেবে না। এই দুইটাই।

    03

    Switch জোড়া দিলে কী হয়?

    একটা transistor দিয়ে বেশি কিছু হয় না। ঠিক যেমন একটা LEGO block দিয়ে ঘর বানানো যায় না।

    কিন্তু হাজার হাজার transistor একসাথে জোড়া লাগালে ধীরে ধীরে এমন circuit তৈরি হয়, যেগুলো decision নিতে পারে, হিসাব করতে পারে, এমনকি memory-ও বানাতে পারে।

    দুইটা transistor যদি এক লাইনে (series) জোড়া দেন, তাহলে current যেতে হলে দুইটাকেই একসাথে on হতে হবে। এভাবেই তৈরি হয় AND gate। আবার পাশাপাশি (parallel) জোড়া দিলে, যেকোনো একটা on থাকলেই current যেতে পারে। এভাবেই তৈরি হয় OR gate। আরেকটা transistor-এর wiring-এ ছোট্ট একটা পরিবর্তন করে বানানো যায় NOT gate — input ১ হলে output ০, input ০ হলে output ১।

    GATE PLAYGROUND
    V+ABout = ০
    ABout
    ·
    ·
    ·
    Physical circuit → abstract symbol। series মানে AND, parallel মানে OR।

    এই তিনটা gate — AND, OR, NOT — দিয়ে যেকোনো logical operation বানানো যায়। যেকোনো decision, যেকোনো comparison, যেকোনো গাণিতিক হিসাব। XOR, NAND, NOR gate — সব এই তিনটা মৌলিক gate-এর combination।

    Arithmetic-ও এভাবেই। দুইটা bit যোগ করার circuit ("full adder") বানানো যায় শুধু AND, OR, XOR দিয়ে। ৬৪টা full adder পাশাপাশি রেখে ৬৪-bit integer যোগ করার circuit তৈরি করা যায় — যা CPU-র ভেতরের ALU-র একটি গুরুত্বপূর্ণ অংশ।

    কিন্তু arithmetic-এর গল্প পরের article-এ। এখানে এখনো একটা সমস্যা আছে।

    04

    Switch কীভাবে "মনে রাখে"?

    এতক্ষণের সব gate-এর একটা বড় সমস্যা আছে। Input সরিয়ে নিলে output-ও চলে যায়।

    মানে ধরুন, AND gate-কে দিলাম (১, ১)। Output ১ হলো। এখন input সরিয়ে নিন। Output কী? ০। Gate কিছু মনে রাখে না।

    এটা memory না। কিন্তু কম্পিউটারের memory দরকার। আপনার x = 5 মানে ৫-কে কোথাও রাখতে হবে, যেন পরে read করা যায়। কীভাবে?

    আমার সবচেয়ে বড় বিভ্রান্তিটা এখানেই ছিল। বিশ্ববিদ্যালয়ে ডিজিটাল লজিক ডিজাইন কোর্সে SR Latch, JK Flip-Flop, truth table, register — সবই ছিলো। প্রত্যেকটা কম্পোনেন্ট কেন লাগে, কিভাবেই আসলেই “ধরে রাখে” — বুঝতাম না। কোডিং করার সময় যখন x = 5 লিখতাম, এই দুই পৃথিবীর মধ্যে কোনো সম্পর্ক খুঁজে পেতাম না। Memory কি এক ফালি magnetic ধাতু? নাকি charge-এর কোনো চৌবাচ্চা? দুঃখজনকভাবে, আমাদেরকে কোর্সের পর কোর্স করানো হয়, যেখানে কোনোকিছু গোড়া থেকে না বুঝেই কেবল স্লাইড মুখস্থ করে আর বিগত প্রশ্নপত্রগুলো একটু স্টাডি করেই পার পাওয়া যায়।

    যাই হোক, bit ধরে রাখার সমাধানটা চমৎকার এবং সহজ। Feedback loop।

    দুইটা NOT gate নিন। প্রথমটার output-কে দ্বিতীয়টার input-এ connect করুন। দ্বিতীয়টার output-কে প্রথমটার input-এ connect করুন।

    FEEDBACK LATCH
    state ধরে রাখছে: ০
    NOTNOTQ = ০Q̄ = ১
    দুটো NOT gate feedback loop-এ আটকে থাকে। power off মানে সব তথ্য মুছে যায় — power on করলে random state।

    এখন কী হবে? ধরুন, প্রথম gate-এর output ১। সেটা দ্বিতীয় gate-এর input-এ যাচ্ছে। NOT gate, তাই দ্বিতীয় gate-এর output হবে ০। সেটা প্রথম gate-এর input, তাই প্রথম gate-এর output হবে ১। Loop। Stable। প্রথম gate সবসময় ১, দ্বিতীয় সবসময় ০।

    এখন input সরিয়ে নিলে কী হবে? কিছুই না। State loop-এ আটকে আছে।

    আরেকভাবে ভাবুন — একটা marble দুইটা পাহাড়ের মাঝে দুইটা গর্তের একটায় বসে আছে। ওটা নিজে নিজে আর নড়বে না। কিন্তু আপনি যদি যথেষ্ট জোরে ধাক্কা দেন, তাহলে অন্য গর্তে চলে যাবে। সেখানেও আবার স্থির হয়ে থাকবে। একটা latch-ও তেমনই। দুইটা stable state — ০ আর ১।

    আর এই state যতক্ষণ থাকবে? যতক্ষণ current থাকবে। Power চলে গেলে loop ভেঙে যায়, state হারিয়ে যায়। এজন্যই RAM volatile — একবার unplug করলে সব ভুলে যায়। এটা নিয়ে আমরা পরবর্তীতে আরও জানবো।

    05

    পুরো গল্পটা একবার

    এবার পুরো গল্পটা একবার চোখের সামনে চালাই। আপনি লিখলেন: x = 5

    Python অবশ্যই সরাসরি transistor on-off করছে না। মাঝখানে compiler/interpreter, operating system, CPU — আরও অনেক ধাপ আছে। সেগুলো আমরা পরে দেখব। কিন্তু একেবারে hardware-এ পৌঁছানোর পর ঘটনাটা মোটামুটি এমন:

    • ৫ সংখ্যাটা binary-তে রূপ নেয় — 101
    • তিনটা bit-এর জন্য তিনটা memory cell বরাদ্দ হয়
    • প্রতিটা cell আসলে কয়েকটা transistor দিয়ে বানানো একটা flip-flop
    • সেই flip-flop-এ voltage set হয় (high, low, high — ১, ০, ১)
    • Feedback loop সেই voltage ধরে রাখে
    • পরে CPU x read করতে চাইলে তিনটা bit পেয়ে ৫ বের করে
    THREE BITS
    ১×৪ + ০×২ + ১×১ = ৫
    x = পাঁচ ✓
    ১০১ = ৫ — প্রোগ্রাম যা দেখে, তাই!
    ৩টা bit, ২³ = ৮টা সম্ভাব্য state। ১০১ মানে ৫ — কম্পিউটার ঠিক এভাবেই গোনে।

    মজার ব্যাপার — এই pattern (transistor → gate → latch) প্রতিটা computer-এর সবচেয়ে ছোট building block। RAM-এ কয়েক বিলিয়ন flip-flop। CPU-তে কয়েক বিলিয়ন gate। প্রতিটা gate-এ কয়েকটা করে transistor। সব শুরু voltage থেকে।

    // এই আর্টিকেলে কী শিখলাম
      • Bit কোনো বিমূর্ত ধারণা নয় — এটা voltage-এর একটা physical state।
      • Binary এসেছে math-এর জন্য নয়, reliability-র জন্য। Noise দুইটা state সহজে ভাঙতে পারে না।
      • Memory ম্যাজিক না — জাস্ট দুইটা gate loop করে বসিয়ে দেওয়া। Feedback থেকেই memory-র জন্ম।
    এই পাতা খোলার পর থেকে আপনার device-এ আনুমানিক ৩২৬.০ কোটি বার transistor switch হয়েছে।
    cd ~  # back to terminal