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

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

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

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

    x = 5

    কোডটা রান হলো। এবার একটা অদ্ভুত প্রশ্ন — এই ৫ সংখ্যাটা আসলে কম্পিউটারের ভেতরে কোথায় আছে? কাগজে লেখা ৫-এর মতো তো নয়, screen-এর pixel-এও নয়। তাহলে hardware-এর চোখে এর কি কোনো physical অস্তিত্ব আছে?

    আছে — তবে মাঝখানে একটা ধাপ আছে। ৫ নিজে একটা abstract সংখ্যা। Computer সেটাকে লেখে একটা bit pattern হিসেবে — যেমন সাধারণ binary-তে 101। সেই pattern-এর প্রতিটা bit একটা logical মান, ০ অথবা ১। আর hardware প্রতিটা bit-কে ধরে রাখে কোনো একটা physical বৈদ্যুতিক অবস্থা দিয়ে।

    diagram · সংখ্যা থেকে hardware
    5            ← abstract সংখ্যা
    ↓
    101          ← bit pattern
    ↓
    1 · 0 · 1    ← তিনটা logical bit
    ↓
    physical বৈদ্যুতিক অবস্থা

    এই series-এ সেই physical অবস্থা থেকে screen পর্যন্ত পুরো যাত্রাটা দেখানোর চেষ্টা করবো। আজকের প্রশ্ন একটাই — একটা bit-এর ০ বা ১-কে hardware physically ধরে রাখে কীভাবে?

    একটা কথা আগে বলে রাখি — এখানে কোনো নির্দিষ্ট programming language নিয়ে কথা বলবো না। Software-এর স্তরগুলো সরিয়ে একেবারে hardware-এর কাছে নামবো, যেখানে "variable" বা "object" বলে কিছু নেই — আছে transistor, তার, electrical signal আর জমা রাখা charge। বোঝার সুবিধার জন্য বেশিরভাগ সময় voltage-এর ভাষায় কথা বলবো।

    তবে মনে রাখবেন: bit নিজে voltage নয়। Voltage হলো bit-এর logical মানটাকে বাস্তবে প্রকাশ করার একটা physical উপায়।
    01

    Binary কেন?

    কম্পিউটারের ভেতরে তথ্য শেষ পর্যন্ত রাখতে হয় electrical signal দিয়ে। কিন্তু একটা signal-এর voltage ক্রমাগত যেকোনো মান নিতে পারে — ০.৩ ভোল্ট, ১.৭ ভোল্ট, মাঝামাঝি যেকোনো কিছু।

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

    তাত্ত্বিকভাবে যেত। ঝামেলাটা math-এ না, physics-এ। আর ঝামেলাটার নাম — noise।

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

    NOISE VS BANDS
    পড়ছে
    ১
    ভুল পড়া: ০
    ±০.৩V
    একই noise, দুই ধরনের ফলাফল — কাছাকাছি সাজানো দশটা voltage range-এ noise-এর জায়গা কম; অনেক দূরে রাখা দুটো range-এর মাঝখানের gap-টাই noise margin। (Threshold-গুলো উদাহরণ মাত্র; আসল মান chip অনুযায়ী বদলায়।)

    দশটা level রাখতে গেলে প্রতিটার জন্য জায়গা খুব সরু। সামান্য noise-ই একটা level-কে পাশেরটায় ঠেলে দেয় — আর "২" নিঃশব্দে "৩" হয়ে যায়।

    Binary-তে level মাত্র দুটো, তাই LOW আর HIGH-কে অনেক দূরে রাখা যায়। মাঝখানে থাকে একটা চওড়া gap — noise margin। Noise যতক্ষণ এই gap পার না করে, circuit একই মান পড়ে।

    এটাই binary-র আসল কারণ। ০ আর ১ দিয়ে data রাখা সহজ, তা না — ০ আর ১ নির্ভরযোগ্য। Digital circuit ইচ্ছা করেই এমনভাবে বানানো হয়, যাতে এই দুটো অবস্থা পরিষ্কার আলাদা থাকে।

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

    পরের প্রশ্ন: এই signal-গুলো নিয়ন্ত্রণ করে কে?

    02

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

    কম্পিউটারকে কখনো একটা বৈদ্যুতিক পথ খুলে দিতে হয়, কখনো বন্ধ করতে হয়। মানে তার দরকার একটা switch।

    কিন্তু বাড়ির লাইটের switch তো আপনি হাত দিয়ে চাপেন। একটা chip-এ যদি কয়েকশো কোটি switch থাকে, সেগুলো চাপবে কে?

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

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

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

    এখানে গুরুত্বপূর্ণ ব্যাপার একটাই — একটা electrical signal আরেকটা electrical পথকে নিয়ন্ত্রণ করতে পারে।

    এই ছোট্ট আইডিয়াটার ওপরই দাঁড়িয়ে আছে পুরো আধুনিক কম্পিউটার। আপনি এই লেখাটা পড়তে পড়তে আপনার ফোন বা ল্যাপটপের ভেতরে কয়েকশো কোটি transistor প্রতি সেকেন্ডে অসংখ্যবার এক অবস্থা থেকে আরেক অবস্থায় যাচ্ছে।

    03

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

    একটা transistor দিয়ে বেশি কিছু হয় না — ঠিক যেমন একটা LEGO block দিয়ে ঘর হয় না। কিন্তু অনেকগুলো transistor নির্দিষ্টভাবে জোড়া দিলে এমন circuit তৈরি হয়, যা হিসাব করতে পারে, এমনকি মনেও রাখতে পারে।

    একটা সরল switch-মডেল দিয়ে ভাবা যাক। দুটো switch যদি এক লাইনে (series) থাকে, পথ সম্পূর্ণ হতে দুটোকেই চালু থাকতে হবে — আচরণটা AND-এর মতো। পাশাপাশি (parallel) থাকলে যেকোনো একটা চালু হলেই পথ সম্পূর্ণ — আচরণটা OR-এর মতো। আর wiring একটু বদলে পাওয়া যায় NOT — input ১ হলে output ০, input ০ হলে output ১।

    GATE PLAYGROUND
    V+ABout = ০
    ABout
    ০০·
    ০১·
    ১০০
    ১১·
    Switch-এর ছবি → abstract symbol। Series-এ সাজানো switch AND-এর মতো আচরণ করে, parallel-এ সাজানো switch OR-এর মতো — এটা বোঝার জন্য একটা সরল মডেল।

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

    Arithmetic-ও এভাবেই। দুইটা bit যোগ করার circuit (full adder) বানানো যায় কয়েকটা gate দিয়ে, আর অনেকগুলো full adder পাশাপাশি রাখলে বড় সংখ্যা যোগ করার circuit হয় — যা CPU-র ভেতরের ALU-র একটা গুরুত্বপূর্ণ অংশ।

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

    04

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

    এতক্ষণের সব gate-এর একটা বড় সীমাবদ্ধতা আছে: output নির্ভর করে শুধু এই মুহূর্তের input-এর ওপর। Input বদলালেই output বদলে যায় — আগের মান ধরে রাখার কোনো ব্যবস্থা নেই।

    যেমন, AND gate-কে দিলাম (১, ১) — output ১। Input বদলে (০, ১) করলাম — output সঙ্গে সঙ্গে ০। আগে যে ১ ছিল, gate সেটা মনে রাখে না।

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

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

    যাই হোক, সমাধানটা চমৎকার এবং সহজ — feedback। এমন একটা circuit দরকার, যার এখনকার অবস্থা নিজেই তার পরের অবস্থাকে প্রভাবিত করে।

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

    FEEDBACK LATCH
    state ধরে রাখছে: ০
    NOTNOTQ = ০Q̄ = ১
    দুটো NOT gate একে অপরকে ধরে রাখে — দুটো stable state। একটা থেকে অন্যটায় নিতে বাইরে থেকে জোর করে লিখতে হয়। Power কাটলে state আর নিশ্চিত থাকে না; আবার চালু করলে যেকোনো একটায় থিতু হয়।

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

    উল্টোটাও একইভাবে stable: প্রথম gate ০, দ্বিতীয় ১। মানে circuit-টার দুটো stable অবস্থা আছে — একটাকে আমরা ০ বলি, অন্যটাকে ১। এখানে বাইরে থেকে কোনো input নেই যেটা সরিয়ে নেওয়া যায়; state বদলাতে হলে বাইরে থেকে জোর করে লিখতে হয় — যন্ত্রের write বোতামের মতো।

    আরেকভাবে ভাবুন — একটা marble দুইটা গর্তের একটায় বসে আছে। নিজে নিজে নড়বে না। কিন্তু যথেষ্ট জোরে ধাক্কা দিলে অন্য গর্তে চলে যাবে, আর সেখানেও স্থির থাকবে।

    এখানে "মনে রাখা" মানে circuit অতীতের কিছু জানে, তা না। শুধু এটুকু — power থাকা পর্যন্ত circuit-এর বর্তমান বৈদ্যুতিক অবস্থা নিজেই নিজেকে টিকিয়ে রাখে। এই feedback-ই একটা latch-এর মূল ভিত্তি।

    আর এই state টেকে কতক্ষণ? যতক্ষণ power আছে। Power চলে গেলে state আর নিশ্চিত থাকে না। RAM-ও তাই volatile — unplug করলে সব হারায়।

    05

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

    এবার পুরো বিষয়টা প্রথম থেকে একবার দেখি। আপনি লিখলেন x = 5।

    Python অবশ্যই সরাসরি transistor নাড়াচ্ছে না — মাঝখানে interpreter, operating system, CPU আছে, আর Python memory-তে একটা সংখ্যাকে নিজের মতো করে একটা object হিসেবে সাজায়। সেসব পরে। শুধু hardware-এর ধারণাটা বোঝার জন্য ধরে নিই:

    • ৫ binary-তে 101
    • এই তিনটা logical bit hardware-এ তিনটা physical অবস্থা হিসেবে থাকে
    • অবস্থাগুলো কী দিয়ে তৈরি, সেটা নির্ভর করে কোথায় রাখা হচ্ছে — CPU register-এ flip-flop, RAM-এ memory cell
    • পরে CPU সেই অবস্থাগুলো sense করে আবার তিনটা bit ফিরে পায়
    • আর software সেই 101-কে ৫ হিসেবে ব্যবহার করে
    THREE BITS
    ১×৪ + ০×২ + ১×১ = ৫
    x = পাঁচ ✓
    ১০১ = ৫ — প্রোগ্রাম যা দেখে, তাই!
    ৩টা bit, ২³ = ৮টা সম্ভাব্য state। ১০১ মানে ৫ — কম্পিউটার ঠিক এভাবেই গোনে।

    পুরো ব্যাপারটাকে কয়েকটা স্তরে ভাবা যায়:

    diagram · স্তরগুলো
    Transistor
    ↓
    Logic gate আর storage circuit
    ↓
    বড় digital circuit (adder, register …)
    ↓
    Memory, CPU, controller, I/O
    ↓
    Software

    প্রতিটা স্তর নিজের নতুন abstraction যোগ করে, তাই software-এর কোনো ধারণা সরাসরি একটা নির্দিষ্ট circuit-এর সাথে মিলবে — এমন ভাবা ঠিক নয়। কিন্তু সবকিছুর নিচে আছে এই তিনটা ধারণা: transistor দিয়ে switch, switch দিয়ে gate, আর feedback দিয়ে মনে রাখা।

    // এই আর্টিকেলে কী শিখলাম
    • Bit কোনো voltage নয় — bit একটা logical মান, hardware সেটাকে physical বৈদ্যুতিক অবস্থা দিয়ে প্রকাশ করে।
    • Binary এসেছে reliability-র জন্য — দুটো অবস্থাকে দূরে রাখলে noise সহজে একটাকে অন্যটা বানাতে পারে না।
    • Transistor হলো বিদ্যুৎ-নিয়ন্ত্রিত switch — অনেকগুলো মিলে gate আর storage circuit বানায়।
    • Feedback থেকেই মনে রাখা — দুটো stable অবস্থার circuit power থাকা পর্যন্ত নিজের state ধরে রাখে।
    • Latch, flip-flop, SRAM, DRAM এক জিনিস নয় — একই মূল ধারণার ভিন্ন ভিন্ন বাস্তব রূপ।
    এই পাতা খোলার পর থেকে আপনার device-এ আনুমানিক ২২৯.০ কোটি বার transistor switch হয়েছে।
    cd ~  # back to terminal