এই পর্বে যা শিখবেন
- Computer architecture, organization, microarchitecture আর digital logic — চারটি শব্দের পরিষ্কার পার্থক্য
- Abstraction-এর নয়টি স্তর, আর
c = a + b;লাইনটি কীভাবে প্রতিটি স্তর পেরিয়ে transistor পর্যন্ত নামে - von Neumann মডেল, Harvard মডেল আর fetch–decode–execute চক্র — নিজের হাতে একটি খেলনা কম্পিউটার চালিয়ে
- একটি আসল x86-64 মেশিনে code আর data-র ঠিকানা, endianness আর cache নিজের চোখে দেখা
- আর্কিটেকচারের আটটি মহান ধারণা আর পুরো কোর্সের ১০টি মডিউলের রোডম্যাপ
১ · ফোনের স্ক্রিনে একটি টাচ — ভেতরে কী ঘটে?
আপনি ফোনে bKash অ্যাপ খুলে “Send Money” চাপলেন। এক সেকেন্ডেরও কম সময়ে ব্যালান্স থেকে টাকা বিয়োগ হলো, নতুন অঙ্ক স্ক্রিনে ভেসে উঠল। এই ছোট্ট ঘটনার পেছনে ফোনের chip-এর ভেতরে কোটি কোটি ছোট সুইচ — transistor — বহুবার জ্বলেছে আর নিভেছে।
কিন্তু অ্যাপ যিনি লিখেছেন, তিনি কোনো transistor-এর কথা ভাবেননি। তিনি লিখেছেন balance = balance - amount; জাতীয় কিছু। তাহলে মানুষের লেখা এই লাইন থেকে বিদ্যুতের সুইচ পর্যন্ত পথটা কী? এই প্রশ্নের উত্তরই কম্পিউটার আর্কিটেকচার আর ডিজিটাল লজিক।
একটি রেস্তোরাঁর কথা ভাবুন। আপনি ওয়েটারকে বললেন “এক প্লেট কাচ্চি”। আপনি জানেন না রান্নাঘরে কয়টি চুলা, কে পেঁয়াজ কাটছেন, ডেকচি কোন তাকে। আপনি শুধু মেনু চেনেন। মেনু হলো আপনার আর রান্নাঘরের মধ্যে চুক্তি। রান্নাঘর বদলে গেলেও — নতুন চুলা, নতুন বাবুর্চি — মেনু একই থাকলে আপনার অর্ডার একই থাকে। কম্পিউটারে এই “মেনু”-র নাম ISA, আর “রান্নাঘর”-এর নাম microarchitecture.
এই পর্বটি পুরো কোর্সের মানচিত্র। নতুন হলে চিন্তা নেই — আমরা শূন্য থেকে শুরু করব। আর অভিজ্ঞ হলে এখানে পাবেন পরিভাষার সূক্ষ্ম পার্থক্য, কোন বিষয় কোন পর্বে গভীরে যাবে তার পরিষ্কার নির্দেশ, আর কয়েকটি ঐতিহাসিক বিতর্কের নির্ভুল তথ্য।
২ · চারটি শব্দ — architecture, organization, microarchitecture আর digital logic
পাঠ্যবই আর চাকরির পরীক্ষায় এই চারটি শব্দ প্রায়ই গুলিয়ে ফেলা হয়। ক্লাসিক পার্থক্যটি এমন:
📜 Computer architecture (ISA)
প্রোগ্রামার বা compiler যা দেখেন: কোন কোন instruction আছে, কয়টি register, ডেটার আকার, মেমরির ঠিকানা কীভাবে দেওয়া হয়। এটি hardware আর software-এর মধ্যে চুক্তি।
যেমন: x86-64, ARMv8-A (AArch64), RISC-V🏗️ Organization / microarchitecture
চুক্তিটি ভেতরে কীভাবে বানানো: pipeline কয় ধাপের, cache কত বড়, একসাথে কয়টি instruction চলে, branch predictor কেমন। প্রোগ্রামার সরাসরি দেখেন না, কিন্তু গতিতে টের পান।
যেমন: Intel আর AMD-এর বিভিন্ন প্রজন্মের core🔌 Digital logic
Microarchitecture-এর প্রতিটি অংশ — adder, register, multiplexer — বানানো হয় logic gate আর flip-flop দিয়ে। এখানে ভাষা হলো 0 আর 1-এর Boolean algebra.
মডিউল ২ ও ৩-এ⚡ Circuit ও device
Logic gate নিজে তৈরি হয় transistor দিয়ে, আর transistor চলে অর্ধপরিবাহীর (semiconductor) পদার্থবিদ্যায়। এটি মূলত EEE আর VLSI-র জগৎ।
পর্ব ০৮-এ পরিচয়ISA = কী (what), microarchitecture = কীভাবে (how). একই ISA-র বহু ভিন্ন microarchitecture হতে পারে। Intel-এর একটি laptop CPU আর AMD-এর একটি desktop CPU ভেতরে সম্পূর্ণ আলাদা, তবু দুটোই x86-64 ISA মানে — তাই একই Windows প্রোগ্রাম দুটোতেই চলে। উল্টোদিকে, x86-64-এর জন্য compile করা প্রোগ্রাম একটি ARM ফোনে সরাসরি চলে না, কারণ চুক্তিটাই আলাদা।
“Organization” শব্দটি পাঠ্যবইয়ে বেশি দেখা যায় (যেমন Patterson–Hennessy-র “Computer Organization and Design”); শিল্প আর গবেষণার লেখায় একই অর্থে “microarchitecture” বেশি চলে। কয়েকটি উদাহরণে পার্থক্যটি পাকা করে নিই:
| প্রশ্ন | কোন স্তরের সিদ্ধান্ত | কেন |
|---|---|---|
| গুণ করার instruction আছে কি না | ISA | প্রোগ্রাম সেটি লিখতে পারে কি না, তা বদলায় |
| Programmer কয়টি general-purpose register দেখেন | ISA | RISC-V-এ ৩২টি, x86-64-এ ১৬টি — compiler-কে জানতে হয় |
| মেমরিতে বাইট কোন ক্রমে বসে (endianness) | ISA | একই বাইট ভিন্ন ক্রমে পড়লে ভিন্ন সংখ্যা |
| L2 cache কত বড় | Microarchitecture | শুধু গতি বদলায়, ফলাফল নয় |
| Pipeline কয় ধাপের | Microarchitecture | একই প্রোগ্রাম একই ফল দেয়, শুধু দ্রুত বা ধীরে |
| Clock কত GHz | Implementation / circuit | একই নকশা ভিন্ন গতিতে চালানো যায় |
“Architecture” শব্দটি এই অর্থে জনপ্রিয় করে IBM. ১৯৬৪ সালে IBM তাদের System/360 পরিবার ঘোষণা করে — ছোট-বড় বিভিন্ন দামের মেশিন, ভেতরের নকশা আলাদা, কিন্তু সবার instruction set এক। Gene Amdahl, Gerrit Blaauw আর Fred Brooks-এর সেই নকশা প্রমাণ করল যে চুক্তি আর নির্মাণ আলাদা রাখলে গ্রাহক ছোট মেশিন থেকে বড় মেশিনে গেলেও সফটওয়্যার নতুন করে লিখতে হয় না। আজকের x86-64, ARM আর RISC-V সেই চিন্তারই উত্তরসূরি।
৩ · Abstraction-এর স্তর — অ্যাপ থেকে পদার্থবিদ্যা
একটি আধুনিক chip-এ কয়েকশো কোটি transistor থাকতে পারে। কোনো মানুষ একসাথে এত কিছু মাথায় রাখতে পারেন না। সমাধান হলো abstraction — প্রতিটি স্তর ওপরের স্তরকে একটি সহজ “মেনু” দেয় আর নিচের জটিলতা লুকিয়ে রাখে।
কম্পিউটারের নয়টি স্তর
The layers of abstraction — each layer hides the one below
| স্তর | কী দেখা যায় | কে কাজ করেন | এই কোর্সে |
|---|---|---|---|
| ৯ · Application | bKash, Facebook, গেম | অ্যাপ ডেভেলপার | — |
| ৮ · প্রোগ্রামিং ভাষা | c = a + b; | প্রোগ্রামার | পর্ব ৩১ |
| ৭ · Compiler / assembler | C থেকে assembly আর machine code | Compiler প্রকৌশলী | পর্ব ২৯–৩১ |
| ৬ · Operating system | Process, ফাইল, virtual memory | OS প্রকৌশলী | পর্ব ৩৮, ৫০, ৫২ (আর OS কোর্স) |
| ৫ · ISA | add x5, x6, x7 — instruction-এর তালিকা | Architect | মডিউল ৫ |
| ৪ · Microarchitecture | Datapath, pipeline, cache | CPU নকশাকার | মডিউল ৬–৮ |
| ৩ · Logic gate ও register | AND, OR, NOT, adder, flip-flop | Digital designer | মডিউল ২–৪ |
| ২ · Transistor ও circuit | CMOS সুইচ | Circuit / VLSI প্রকৌশলী | পর্ব ০৮ |
| ১ · পদার্থবিদ্যা | ইলেকট্রন, ভোল্টেজ, তাপ | Device physicist | পর্ব ০২ (power wall) |
এই কারণেই একজন অ্যাপ ডেভেলপার transistor না জেনেও অ্যাপ বানাতে পারেন, আর একজন chip নকশাকার Facebook-এর কোড না পড়েও CPU বানাতে পারেন। প্রত্যেকে শুধু তাঁর ঠিক নিচের স্তরের “মেনু” জানেন। Operating system এই মাঝখানের একটি গুরুত্বপূর্ণ স্তর; এর বিস্তারিত দেখবেন আমাদের অপারেটিং সিস্টেম কোর্সের প্রথম পর্বে। আর একদম নতুন হলে আগে পড়ে নিতে পারেন কম্পিউটার ফান্ডামেন্টালস কোর্সের ট্রানজিস্টর থেকে অ্যাপ — বিমূর্ততার স্তর আর হার্ডওয়্যার পর্ব।
কখন abstraction “ভাঙতে” হয়
Abstraction-এর প্রতিশ্রুতি হলো: “নিচে কী আছে, আপনার জানার দরকার নেই।” কথাটি সঠিকতার জন্য সত্য, কিন্তু গতি আর নিরাপত্তার জন্য প্রায়ই সত্য নয়। এখানেই আর্কিটেকচার জানা মানুষের দাম।
- গতি: ISA বলে, “যেকোনো ঠিকানা থেকে পড়া যায়।” কিন্তু ঠিকানাটি cache-এ থাকলে কয়েক cycle লাগে, আর main memory থেকে আনতে হলে শত শত cycle. একই কাজের দুটি loop শুধু মেমরি পড়ার ক্রম আলাদা হওয়ায় কয়েক গুণ দ্রুত বা ধীর হতে পারে। এর হাতে-কলমে পরীক্ষা পাবেন পর্ব ৪৮-এ আর C কোর্সের পারফরম্যান্স আর CPU cache পর্বে।
- নিরাপত্তা: ISA-র চুক্তিতে cache-এর কোনো উল্লেখ নেই। অথচ ২০১৮ সালে প্রকাশিত Spectre আর Meltdown দেখাল, CPU আগাম অনুমান করে যে instruction চালায়, তার চিহ্ন cache-এ থেকে যায় — আর সময় মেপে সেই চিহ্ন থেকে গোপন তথ্য আন্দাজ করা যায়। নিচের স্তরের খবর ওপরে “চুইয়ে” পড়ল। ধারণা আর প্রতিরক্ষা দেখবেন পর্ব ৪১-এ।
- সংখ্যার নির্ভুলতা: গণিতে ০.১ + ০.২ = ০.৩, কিন্তু অনেক প্রোগ্রামিং ভাষায়
0.1 + 0.2 == 0.3মিথ্যা হয়, কারণ hardware দশমিক সংখ্যা binary-তে রাখে। কেন, তা পর্ব ২৩–২৪-এ।
“Abstraction ভাঙা” মানে নিয়ম ভাঙা নয়। এর মানে হলো নিচের স্তরের আচরণ জেনে ওপরের স্তরের সিদ্ধান্ত নেওয়া — যেমন মেমরিতে ডেটা এমনভাবে সাজানো যাতে cache ভালো কাজ করে। প্রোগ্রামের অর্থ একই থাকে, শুধু দ্রুত আর নিরাপদ হয়।
৪ · একটি লাইনের যাত্রা — c = a + b; নিচে নামছে
এবার একটিমাত্র লাইন ধরে প্রতিটি স্তর পেরিয়ে নিচে নামি। ধরি a = 25 আর b = 17. এই কোর্সের প্রধান শেখানোর ISA হলো RISC-V (৩২-বিটের মূল সংস্করণ RV32I), তাই assembly-ও RISC-V-তে দেখাব। প্রতিটি ধাপ এখানে শুধু এক ঝলক — বিস্তারিত পাবেন উল্লেখ করা পর্বে। “পরে” চাপুন:
int a = 25, b = 17, c;
c = a + b; /* c হবে 42 */
# x10 = a, b, c যেখানে পাশাপাশি রাখা আছে, তার ঠিকানা lw x6, 0(x10) # x6 = a (মেমরি থেকে load) lw x7, 4(x10) # x7 = b add x5, x6, x7 # x5 = x6 + x7 sw x5, 8(x10) # c = x5 (মেমরিতে store)
funct7 rs2 rs1 f3 rd opcode
0000000 00111 00110 000 00101 0110011
x7 x6 x5 (R-type ALU)
hex: 0x007302B3
executable ফাইল ──OS──▶ মেমরি code অংশ : ... B3 02 73 00 ... (instruction-ও সংখ্যা!) data অংশ : a=25 b=17 c=? OS সেট করে: PC = প্রোগ্রামের প্রথম instruction-এর ঠিকানা
PC ─▶ instruction memory ─▶ 0x007302B3
│ rs1=6, rs2=7, rd=5
▼
register file: x6 = 25, x7 = 17
│ │
└──▶ ALU (op = ADD) ◀──┘
│ 42
▼
register file: x5 ◀── 42
carry : 0 0 1 0 0 0 1 0
a = 25: 0 0 0 1 1 0 0 1
b = 17: 0 0 0 1 0 0 0 1
───────────────
c = 42: 0 0 1 0 1 0 1 0
S = A ⊕ B ⊕ Cin Cout = A·B + Cin·(A ⊕ B) বিট ০: A=1, B=1, Cin=0 → S = 0, Cout = 1 ৩২ বিটের adder = এমন ৩২টি full adder পাশাপাশি
NAND gate = 4টি transistor (২টি pMOS + ২টি nMOS)
full adder ≈ কয়েক ডজন transistor (নকশাভেদে)
"1" মানে ≈ উঁচু ভোল্টেজ, "0" মানে ≈ শূন্য ভোল্ট
সুইচ বদলাতে = চার্জ ভরা-খালি → সময় (delay) আর শক্তি (তাপ)
- প্রোগ্রামিং ভাষা। মানুষের লেখা একটি লাইন:
c = a + b;. এখানে “মেমরি”, “register” বা “bit” — কিছুই চোখে পড়ে না। ভাষা এগুলো লুকিয়ে রেখেছে। - Compiler-এর অনুবাদ। RISC-V-এ ALU সরাসরি মেমরির ডেটায় যোগ করে না; আগে
lwদিয়ে register-এ আনতে হয়, যোগ শেষেswদিয়ে রাখতে হয়। তাই এক লাইন C হলো চারটি instruction (load-store আর্কিটেকচার)। আসল compiler optimization চালু থাকলে আরও ছোট করতে পারে। বিস্তারিত পর্ব ২৬ আর ৩১-এ। - ISA-র encoding.
add x5, x6, x7আসলে একটি ৩২-বিটের সংখ্যা। ISA ঠিক করে দেয় কোন বিটে কী: শেষ ৭ বিট opcode0110011(register-register ALU কাজ), তারপর rd = 5, rs1 = 6, rs2 = 7, আর funct3/funct7 মিলে বলে “যোগ”। সব মিলিয়ে0x007302B3. হাতে encoding করা শিখবেন পর্ব ২৭-এ। - OS প্রোগ্রাম মেমরিতে আনে। আপনি প্রোগ্রাম চালালে OS ফাইল থেকে code আর data মেমরিতে বসায়, তারপর CPU-র program counter (PC) প্রথম instruction-এ তাক করে। খেয়াল করুন — instruction আর ডেটা দুটোই মেমরিতে সংখ্যা হয়ে বসে আছে (RISC-V little-endian, তাই
0x007302B3-এর সবচেয়ে ছোট বাইটB3আগে বসে)। এটিই stored-program ধারণা, অংশ ৫-এ। - Datapath-এ যাত্রা। CPU PC-র ঠিকানা থেকে instruction আনে, বিটগুলো ভেঙে register file থেকে x6 = 25 আর x7 = 17 পড়ে, ALU-কে “যোগ” করতে বলে, আর ফল 42 x5-এ লেখে। এই পথের নাম datapath; পুরো নকশা পর্ব ৩২–৩৩-এ।
- ALU-র ভেতরে binary যোগ। 25 =
00011001, 17 =00010001. ডান থেকে বিট ধরে যোগ: বিট ০-এ 1 + 1 = 0, carry 1; বিট ৪-এ আবার 1 + 1 = 0, carry 1. ফল00101010= 42. Binary সংখ্যা পর্ব ০৪-এ, adder পর্ব ১১-এ। - Logic gate. প্রতিটি বিটের যোগ করে একটি full adder, যা কয়েকটি XOR, AND আর OR gate-এর জোড়া। বিট ০-এ A = 1, B = 1, Cin = 0: S = 1 ⊕ 1 ⊕ 0 = 0, Cout = 1·1 = 1 — ঠিক আগের ধাপের carry. এখানে ⊕ মানে XOR, · মানে AND, + মানে OR.
- Transistor আর পদার্থবিদ্যা। প্রতিটি gate কয়েকটি CMOS transistor দিয়ে বানানো, যেগুলো ভোল্টেজ দিয়ে খোলে-বন্ধ হয়। সুইচ বদলাতে সামান্য চার্জ ভরতে বা খালি করতে হয় — এতে সময় লাগে (delay, যা clock-এর গতি সীমিত করে) আর শক্তি খরচ হয় (তাপ, যা ফোন গরম করে)। পর্ব ০৮ আর ১৮-এ দেখবেন। একটি লাইনের যাত্রা এখানেই শেষ।
প্রতিটি তীর একটি স্তরের চুক্তি
৫ · Stored-program ধারণা, von Neumann আর Harvard
প্রথম দিকের ইলেকট্রনিক কম্পিউটার ENIAC (১৯৪৫ সালের শেষ দিকে চালু) নতুন কাজ করাতে হলে মানুষকে তার জোড়া খুলে নতুন করে লাগাতে হতো, সুইচ ঘোরাতে হতো। নতুন প্রোগ্রাম মানে কয়েক দিনের কায়িক শ্রম। সমাধান এলো একটি সরল কিন্তু বৈপ্লবিক চিন্তায়: প্রোগ্রামও ডেটার মতো সংখ্যা — তাকেও মেমরিতে রাখা যাক। একে বলে stored-program ধারণা। তখন নতুন প্রোগ্রাম মানে শুধু মেমরিতে নতুন সংখ্যা লেখা।
von Neumann মডেল
১৯৪৫ সালে John von Neumann-এর নামে প্রচারিত “First Draft of a Report on the EDVAC” এই নকশার বর্ণনা দেয়, তাই একে বলে von Neumann architecture (নামের পেছনের বিতর্ক ভাবনার প্রশ্ন ২-এ)। এর অংশগুলো:
von Neumann মডেল
One memory, one path, for both instructions and data
- CPU
control unit + ALU + registersনির্দেশ বোঝে ও হিসাব করে - Bus
address · data · controlএকটিই রাস্তা - Memory
instruction + dataদুটোই একই জায়গায় - I/O
keyboard, screen, diskবাইরের জগৎ
- Control unit: instruction পড়ে বোঝে কী করতে হবে, আর বাকি অংশগুলোকে সংকেত (control signal) পাঠায় — রেলস্টেশনের সিগন্যালম্যানের মতো।
- Datapath / ALU: আসল হিসাব — যোগ, বিয়োগ, AND, OR, তুলনা।
- Register: CPU-র ভেতরের অল্প কয়েকটি খুব দ্রুত ঘর — ডেস্কের ওপর খোলা খাতা। এর মধ্যে বিশেষ দুটি: PC (পরের instruction-এর ঠিকানা) আর IR (এখন যে instruction চলছে)।
- Memory: বড় কিন্তু ধীর — আলমারির তাক। প্রতিটি ঘরের একটি ঠিকানা আছে, মহল্লার বাড়ির নম্বরের মতো।
- I/O ও bus: বাইরের যন্ত্রের সাথে যোগাযোগ, আর সবার মধ্যে তার দিয়ে বানানো রাস্তা। বিস্তারিত পর্ব ৫১-এ।
von Neumann bottleneck — CPU কেন অপেক্ষায় বসে থাকে
এক রাস্তায় instruction আর ডেটা দুটোকেই আসা-যাওয়া করতে হয়। আর মেমরি CPU-র তুলনায় অনেক ধীর। ফল: CPU-র বেশিরভাগ সময় কাটে অপেক্ষায়। ১৯৭৭ সালের Turing Award ভাষণে John Backus এই সমস্যার নাম দেন von Neumann bottleneck. নিচে একটি সরল হিসাব দেখুন — ধরে নিচ্ছি মেমরি থেকে কিছু আনতে ১০০ cycle লাগে আর CPU-র নিজের কাজে ১ cycle (সংখ্যাগুলো বোঝানোর জন্য; আধুনিক DRAM-এ সত্যিই শত শত cycle লাগতে পারে):
| cycle | |
| CPU | |
| bus-এ | |
| কাজের ভাগ |
- Fetch-এর অনুরোধ। CPU পরের instruction
lw x6, 0(x10)চায়। PC-র ঠিকানা bus দিয়ে মেমরিতে গেল। এখন CPU-র করার কিছু নেই। - প্রথম ১০০ cycle — instruction আসছে। মেমরি ধীর। ১০০ cycle পরে instruction-এর ৩২ বিট CPU-তে পৌঁছাল। এতক্ষণ ALU একদম বসে ছিল।
- আবার ১০০ cycle — ডেটা আসছে। Decode করে CPU বুঝল, এটি load — মেমরি থেকে
aআনতে হবে। সেই একই bus আবার ব্যস্ত হলো। আরও ১০০ cycle অপেক্ষা। - ১ cycle-এর আসল কাজ। ২০১তম cycle-এ x6 = 25 লেখা হলো। ২০১ cycle-এর মধ্যে কাজ ১ cycle — মাত্র ০.৫% সময় CPU কাজে লাগল। যত দ্রুত CPU-ই বানান, মেমরির রাস্তা ধীর হলে লাভ নেই।
- পরের instruction-এ একই গল্প। instruction আর ডেটা একই রাস্তা ভাগ করে, তাই একটি ডেটা আনার সময় পরের instruction আনা যায় না। এটিই bottleneck — একটি সরু গলি, যেখানে আসা-যাওয়ার সব রিকশা আটকে থাকে।
- সমাধানের ইঙ্গিত — cache. CPU-র পাশেই ছোট, দ্রুত মেমরি (L1 cache) রাখলে, ধরা যাক ৪ cycle-এ পাওয়া যায়: ৪ + ৪ + ১ = ৯ cycle, কাজের ভাগ ১/৯ ≈ ১১%. Instruction আর ডেটার জন্য আলাদা cache থাকলে দুটো একসাথে আনাও যায়। Pipelining (পর্ব ৩৫) আর memory hierarchy (পর্ব ৪৪–৪৭) এই লড়াইয়েরই গল্প।
Harvard আর modified Harvard
১৯৪৪ সালে চালু Harvard Mark I যন্ত্রে instruction আসত ছিদ্র করা কাগজের ফিতা থেকে, আর ডেটা থাকত আলাদা জায়গায়। সেই থেকে Harvard architecture মানে: instruction আর ডেটার জন্য আলাদা মেমরি আর আলাদা পথ। সুবিধা — একই সময়ে instruction আর ডেটা দুটোই আনা যায়। আজও অনেক ছোট microcontroller (যেমন Arduino Uno-র AVR chip) আর DSP-তে (signal processing-এর বিশেষ প্রসেসর) এই নকশা দেখা যায়।
von Neumann
একটি মেমরি, একটি পথ। সরল আর নমনীয় — প্রোগ্রাম নিজেই নতুন প্রোগ্রাম লিখতে বা লোড করতে পারে (compiler, OS loader ঠিক এটাই করে)। দুর্বলতা: bottleneck.
Harvard
দুটি মেমরি, দুটি পথ। একসাথে fetch আর data access. দুর্বলতা: code-কে ডেটা হিসেবে লেখা কঠিন, আর কোন মেমরি কত বড় হবে আগেই ঠিক করতে হয়।
Modified Harvard (আজকের CPU)
বাইরে একটিই main memory (von Neumann), কিন্তু CPU-র কাছে আলাদা L1 instruction cache আর L1 data cache (Harvard). দুই জগতের সুবিধা একসাথে।
এবার একটি আসল x86-64 মেশিনে stored-program ধারণা নিজের চোখে দেখি। নিচের C প্রোগ্রামটি c = a + b হিসাব করে, মৌলিক টাইপগুলোর আকার ছাপে, একটি সংখ্যার বাইট মেমরিতে কোন ক্রমে বসে তা দেখায়, আর একটি ফাংশনের ঠিকানা ও তার প্রথম কয়েকটি বাইট পড়ে দেখায় — অর্থাৎ code-ও মেমরিতে রাখা সংখ্যা। Run চাপুন:
#include <stdio.h>
#include <stdint.h>
#include <string.h>
int total; /* a global: lives in the data area */
int add(int a, int b) { return a + b; } /* a function: lives in the code area */
int main(void) {
int a = 25, b = 17; /* locals: live on the stack */
total = add(a, b);
printf("c = a + b = %d\n", total);
printf("sizeof: char=%zu short=%zu int=%zu long=%zu long long=%zu\n",
sizeof(char), sizeof(short), sizeof(int), sizeof(long), sizeof(long long));
printf("sizeof: float=%zu double=%zu pointer=%zu\n",
sizeof(float), sizeof(double), sizeof(void *));
uint32_t x = 0x01020304;
unsigned char m[4];
memcpy(m, &x, sizeof x); /* look at the raw bytes in memory */
printf("0x01020304 stored as: %02x %02x %02x %02x -> %s-endian\n",
m[0], m[1], m[2], m[3], m[0] == 0x04 ? "little" : "big");
int (*fp)(int, int) = add;
const unsigned char *code;
memcpy(&code, &fp, sizeof code); /* same 8-byte address, as bytes */
printf("code add() at %p, first bytes:", (const void *)code);
for (int i = 0; i < 4; i++) printf(" %02x", code[i]);
printf("\ndata total at %p\n", (void *)&total);
printf("stack a at %p\n", (void *)&a);
return 0;
}একবার চালানোর আসল ফল (gcc, Linux x86-64):
c = a + b = 42
sizeof: char=1 short=2 int=4 long=8 long long=8
sizeof: float=4 double=8 pointer=8
0x01020304 stored as: 04 03 02 01 -> little-endian
code add() at 0x401126, first bytes: 55 48 89 e5
data total at 0x40401c
stack a at 0x7ffd896993b4
আকার: এই Linux x86-64 মেশিনে int ৪ বাইট, long আর pointer ৮ বাইট। এগুলো C ভাষা নয়, প্ল্যাটফর্মের চুক্তি (ABI) ঠিক করে — ৬৪-বিটের Windows-এ long ৪ বাইট। Endianness: 0x01020304-এর সবচেয়ে ছোট বাইট 04 সবার আগে বসেছে, অর্থাৎ x86-64 little-endian; বিস্তারিত পর্ব ০৬-এ। Stored program: ফাংশন add-এর একটি ঠিকানা আছে, ঠিক ডেটার মতো, আর সেখানে পড়লে পাওয়া যায় সংখ্যা 55 48 89 e5 — এগুলো x86-64-এর দুটি instruction push rbp আর mov rbp, rsp-এর machine code (optimization ছাড়া compile করলে সাধারণত এমন হয়; flag বা compiler বদলালে বাইট বদলাতে পারে)। Code আর data একই মেমরিতে, শুধু ভিন্ন ঠিকানায়। ঠিকানা বদলায়: দ্বিতীয়বার চালালে stack-এর ঠিকানা এসেছিল 0x7ffd482e50f4 — কারণ Linux নিরাপত্তার জন্য প্রতিবার এলোমেলো ঠিকানা বেছে নেয় (ASLR). এই runner-এ প্রোগ্রামটি PIE (যেকোনো ঠিকানায় বসানো যায় এমন executable) ছাড়া build হয়েছে বলে code আর global-এর ঠিকানা দুবারই এক ছিল; আধুনিক Ubuntu-র ডিফল্ট build-এ সেগুলোও প্রতিবার বদলায়। আপনার রানে ঠিকানাগুলো আলাদা হবে — সেটাই স্বাভাবিক।
৬ · Fetch–decode–execute — CPU-র অবিরাম চক্র
CPU যত জটিলই হোক, তার মূল কাজ একটি ছোট চক্র, যা সে প্রতি সেকেন্ডে শত কোটিবার ঘোরায় — fetch–decode–execute:
- Fetch (আনা): PC-তে লেখা ঠিকানা থেকে instruction মেমরি থেকে এনে IR-এ রাখা, আর PC-কে পরের instruction-এ এগিয়ে দেওয়া।
- Decode (বোঝা): Control unit IR-এর বিট ভেঙে দেখে — কোন কাজ (opcode), কোন register বা ঠিকানা।
- Execute (চালানো): দরকার হলে মেমরি থেকে ডেটা আনা, ALU-তে হিসাব, ফল register বা মেমরিতে লেখা। Jump হলে PC-তে নতুন ঠিকানা বসানো।
রান্নাঘরের হেড বাবুর্চির কথা ভাবুন। দেয়ালে অর্ডারের স্লিপ সাজানো, একটি কাঁটা দিয়ে চিহ্ন দেওয়া কোনটি পরের (PC). তিনি স্লিপটি নামিয়ে হাতে নেন (fetch, IR), পড়ে বোঝেন কী রান্না আর কোন তাক থেকে কী লাগবে (decode), তারপর রান্না করেন (execute). কাঁটা এক ঘর সরে যায়। সারাদিন এই একই চক্র।
পাঠ্যবইয়ে এই চক্র বোঝাতে আরও দুটি register দেখানো হয়: MAR (মেমরিকে কোন ঠিকানা চাই তা বলে) আর MDR (মেমরি থেকে আসা বা মেমরিতে যাওয়া ডেটা ধরে রাখে)। চলুন একটি সরল accumulator মেশিনে একটি instruction-এর পুরো চক্র দেখি। মেশিনের মেমরিতে ৮টি ঘর; প্রতিটি instruction একটি সংখ্যা = opcode × ১০ + ঠিকানা (1 = LOAD, 2 = ADD, 3 = STORE, 4 = JUMP, 9 = HALT). এখন PC = 5, আর ACC-তে আগের LOAD থেকে 25 আছে:
044 JUMP 4125 data a217 data b300 data c411 LOAD 1522 ADD 2633 STORE 3790 HALT
| PC | |
| MAR | |
| MDR | |
| IR | |
| ACC |
- চক্রের শুরু। PC = 5, অর্থাৎ পরের instruction ঠিকানা 5-এ। IR-এ এখনো আগের instruction
11(LOAD 1), যার ফলে ACC = 25. - Fetch, ধাপ ১। PC-র মান MAR-এ কপি হলো: MAR = 5. ঠিকানাটি address bus দিয়ে মেমরিতে গেল, সাথে control bus-এ “পড়ার” সংকেত।
- Fetch, ধাপ ২। মেমরি ঠিকানা 5-এর সংখ্যা
22data bus দিয়ে পাঠাল; সেটি MDR হয়ে IR-এ বসল। এখন IR = 22. - Fetch, ধাপ ৩। PC এক বেড়ে 6 হলো — পরের চক্রে ঠিকানা 6 থেকে আনা হবে। খেয়াল করুন, PC বাড়ে execute-এর আগেই; JUMP তাই পরে PC-কে নতুন মান দিয়ে মুছে দিতে পারে।
- Decode. Control unit IR = 22 ভাঙল: opcode = 22 ÷ 10-এর ভাগফল = 2, অর্থাৎ ADD; ঠিকানা = 22-এর ১০ দিয়ে ভাগশেষ = 2. সে ALU-কে “যোগ” মোডে বসাল।
- Execute, ধাপ ১। Operand আনতে আবার মেমরিতে যাওয়া: MAR = 2, মেমরি থেকে এলো 17, MDR = 17. লক্ষ করুন — এই চক্রে মেমরিতে দুবার যেতে হলো, একবার instruction-এর জন্য, একবার ডেটার জন্য।
- Execute, ধাপ ২। ALU হিসাব করল ACC + MDR = 25 + 17 = 42, ফল ACC-তে। চক্র শেষ। পরের চক্রে PC = 6 থেকে
33(STORE 3) আসবে, যা 42-কে ঠিকানা 3-এ লিখবে।
এবার পুরো প্রোগ্রামটি চালিয়ে দেখি। নিচের simulator প্রতিটি চক্রের পরে PC, IR, accumulator আর পুরো মেমরি ছাপে। প্রথম instruction JUMP 4 ডেটার ঘরগুলো টপকে যায় — কারণ এখানে code আর data একই মেমরিতে মিশে আছে। Run চাপুন:
// Toy accumulator computer: code AND data live in one memory (stored program).
// Instruction word = opcode*10 + address. 1 LOAD, 2 ADD, 3 STORE, 4 JUMP, 9 HALT
const NAME = { 1: "LOAD", 2: "ADD", 3: "STORE", 4: "JUMP", 9: "HALT" };
const mem = [44, 25, 17, 0, 11, 22, 33, 90]; // 0: JUMP 4 | 1-3: data | 4-7: code
let pc = 0, ir = 0, acc = 0, cycle = 0, running = true;
const pad = (v, n) => String(v).padStart(n);
const dump = () => mem.map(v => String(v).padStart(2, "0")).join(" ");
console.log("cycle PC IR instruction ACC nextPC memory[0..7]");
console.log("start - - - " + pad(acc, 4) + " 0 " + dump());
while (running && cycle < 20) { // safety limit: at most 20 cycles
cycle++;
const at = pc;
ir = mem[pc]; // FETCH: copy word at address PC into IR
pc = pc + 1; // and point PC to the next word
const op = Math.floor(ir / 10); // DECODE: split IR into two fields
const addr = ir % 10;
switch (op) { // EXECUTE
case 1: acc = mem[addr]; break; // LOAD addr
case 2: acc = acc + mem[addr]; break; // ADD addr
case 3: mem[addr] = acc; break; // STORE addr
case 4: pc = addr; break; // JUMP addr
case 9: running = false; break; // HALT
default: console.log("bad opcode " + op); running = false;
}
const text = (NAME[op] || "?") + (op === 9 ? "" : " " + addr);
console.log(pad(cycle, 5) + pad(at, 4) + " " + String(ir).padStart(2, "0") + " " +
text.padEnd(11) + pad(acc, 4) + pad(pc, 8) + " " + dump());
}
console.log("halted after " + cycle + " cycles; mem[3] = " + mem[3]);আউটপুট (নির্ধারিত — প্রতিবার একই):
cycle PC IR instruction ACC nextPC memory[0..7]
start - - - 0 0 44 25 17 00 11 22 33 90
1 0 44 JUMP 4 0 4 44 25 17 00 11 22 33 90
2 4 11 LOAD 1 25 5 44 25 17 00 11 22 33 90
3 5 22 ADD 2 42 6 44 25 17 00 11 22 33 90
4 6 33 STORE 3 42 7 44 25 17 42 11 22 33 90
5 7 90 HALT 42 8 44 25 17 42 11 22 33 90
halted after 5 cycles; mem[3] = 42
চক্র ১-এ JUMP 4 PC-কে 1 থেকে 4-এ সরিয়ে দিল, তাই ঘর 1–3 কখনো instruction হিসেবে চলেনি। চক্র ৩ ঠিক ওপরের stepper-এর চক্র: ACC 25 থেকে 42. চক্র ৪-এ STORE মেমরির ঘর 3 বদলে 42 করল — মেমরি সারিতে একমাত্র পরিবর্তন। এবার একটি মজার পরীক্ষা: ঘর 1-এর 25-কে instruction হিসেবে পড়লে হয় “ADD 5”! কোনো সংখ্যা ডেটা না instruction, তা সংখ্যার গায়ে লেখা নেই — PC যেখানে তাক করে, CPU সেটিকেই instruction ধরে নেয়। এই সত্য থেকেই compiler আর OS loader-এর ক্ষমতা আসে, আবার buffer overflow আক্রমণের ঝুঁকিও। আধুনিক OS তাই ডেটার পাতাকে “চালানো যাবে না” (NX বিট) চিহ্ন দেয়। আসল RISC-V-এ instruction ৪ বাইটের, তাই PC বাড়ে ৪ করে; ক্যাপস্টোনে (পর্ব ৫৭) এমনই একটি simulator বানাবেন।
৭ · আপনার ফোন আর ল্যাপটপের chip-এর ভেতরে
পুরোনো দিনের কম্পিউটারে CPU, মেমরি কন্ট্রোলার, গ্রাফিক্স — সব আলাদা chip ছিল। আজকের ফোনে প্রায় সবকিছু একটি chip-এ: System-on-Chip (SoC). নির্মাতাভেদে নকশা আলাদা, তবে সাধারণত যা থাকে:
| অংশ | কাজ | কোর্সে |
|---|---|---|
| CPU core (কয়েকটি) | সাধারণ প্রোগ্রাম। অনেক ফোনে কয়েকটি বড়-দ্রুত আর কয়েকটি ছোট-সাশ্রয়ী core মিশিয়ে রাখা হয় | মডিউল ৬–৭, পর্ব ৫৩ |
| GPU | গ্রাফিক্স আর একসাথে বিপুল সংখ্যক সরল হিসাব | পর্ব ৫৫ |
| NPU / AI accelerator | neural network-এর matrix গুণ, কম শক্তিতে | পর্ব ৫৫ |
| Cache (L1, L2, শেয়ার করা শেষ স্তর) | ঘন ঘন লাগা ডেটা CPU-র কাছে রাখা | মডিউল ৮ |
| Memory controller | বাইরের DRAM-এর সাথে কথা বলা | পর্ব ৪৯ |
| ISP, modem, video codec, security block | ক্যামেরা, নেটওয়ার্ক, ভিডিও, চাবি সুরক্ষা — বিশেষায়িত hardware | পর্ব ৫৬ |
এখন যে মেশিনে এই পাতার কোড চলে, সেটিকেই জিজ্ঞেস করি — কয়টি core, কোন কোন cache, আর x86-64 চুক্তির বাধ্যতামূলক দুটি বাড়তি অংশ (extension) আছে কি না? নিচের bash script Linux-এর /sys আর /proc থেকে এসব পড়ে। কোনো ফাইল না থাকলে সেটাও সৎভাবে জানায়:
echo "== machine and cores =="
echo "ISA family : $(uname -m)"
command -v nproc >/dev/null && echo "logical CPUs: $(nproc)" || echo "nproc not found"
echo "== caches seen by cpu0 =="
found=0
for d in /sys/devices/system/cpu/cpu0/cache/index*; do
[ -r "$d/size" ] || continue
found=1
printf " L%s %-12s %7s line=%s B\n" "$(cat "$d/level")" "$(cat "$d/type")" \
"$(cat "$d/size")" "$(cat "$d/coherency_line_size" 2>/dev/null || echo '?')"
done
[ "$found" -eq 1 ] || echo " (cache info is not exposed here)"
echo "== baseline x86-64 features (every x86-64 CPU must have them) =="
flags=$(grep -m1 '^flags' /proc/cpuinfo 2>/dev/null)
if [ -n "$flags" ]; then
for f in lm sse2; do
if echo "$flags" | grep -qw "$f"; then echo " $f: yes"; else echo " $f: no"; fi
done
else
echo " no x86 flags line in /proc/cpuinfo"
fiএকটি shared virtual machine-এ (x86-64) একবার চালানোর আসল ফল:
== machine and cores ==
ISA family : x86_64
logical CPUs: 2
== caches seen by cpu0 ==
L1 Data 32K line=64 B
L1 Instruction 32K line=64 B
L2 Unified 512K line=64 B
L3 Unified 16384K line=64 B
== baseline x86-64 features (every x86-64 CPU must have them) ==
lm: yes
sse2: yes
ISA family x86_64 — এই চুক্তিই ঠিক করে কোন machine code এখানে চলবে। ২টি logical CPU — এটি একটি shared virtual machine, তাই আসল chip-এর সব core দেখা যাচ্ছে না। Cache: L1-এ Data আর Instruction আলাদা, প্রতিটি ৩২ KB — এটিই অংশ ৫-এর modified Harvard, চোখের সামনে! L2 ৫১২ KB আর L3 ১৬ MB (১৬৩৮৪K) “Unified”, অর্থাৎ instruction আর ডেটা দুটোই রাখে। প্রতিটি cache line ৬৪ বাইট — মেমরি থেকে ডেটা আসে ৬৪ বাইটের টুকরোয় (পর্ব ৪৫)। Extension: lm (long mode, অর্থাৎ ৬৪-বিট মোড) আর sse2 (SIMD instruction — এক instruction-এ একসাথে অনেক সংখ্যার হিসাব, পর্ব ৪২) x86-64 চুক্তির বাধ্যতামূলক অংশ, তাই যেকোনো x86-64 CPU-তে “yes” আসবে। এর ওপরে AVX, AVX-512 (আরও চওড়া SIMD), FMA (গুণ আর যোগ এক ধাপে) বা AES (এনক্রিপশনের বিশেষ instruction)-এর মতো ঐচ্ছিক extension chip ভেদে থাকে, আবার না-ও থাকে। তাই ভারী সফটওয়্যার চালু হওয়ার সময় যাচাই করে নেয় কোনটি আছে। নিজের Linux মেশিনে grep -o -w avx2 /proc/cpuinfo | sort -u চালিয়ে দেখে নিতে পারেন; সেখানে core আর cache-এর সংখ্যাও আলাদা আসবে।
আরও গভীরে: ARM ২০১১ সালে “big.LITTLE” নামে বড় আর ছোট core মেশানোর ধারণা জনপ্রিয় করে; এখন Intel-এর অনেক laptop ও desktop chip-ও performance আর efficiency core মেশায়, আর OS-এর scheduler-কে ঠিক করতে হয় কোন কাজ কোন core-এ যাবে। Apple-এর M-সিরিজের মতো কিছু SoC-তে CPU আর GPU একই DRAM ভাগ করে (unified memory), ফলে ডেটা কপি কমে। আর বড় server chip-এ একটি বিশাল die (silicon-এর একটি টুকরো)-এর বদলে কয়েকটি ছোট “chiplet” একসাথে প্যাকেজ করার চল বেড়েছে, যাতে উৎপাদনের ত্রুটিতে পুরো chip নষ্ট না হয়।
৮ · আজ আর্কিটেকচার কেন এত গুরুত্বপূর্ণ
🚀 গতি
একই algorithm, একই ISA — শুধু মেমরি পড়ার ক্রম বদলে বা ডেটা cache-বান্ধব করে সাজিয়ে প্রোগ্রাম কয়েক গুণ দ্রুত করা যায়। Clock-এর গতি বহু বছর ধরে মোটামুটি থেমে আছে (পর্ব ০২), তাই এখন বাড়তি গতি আসে hardware বুঝে লেখা কোড থেকে।
🔋 শক্তি আর ব্যাটারি
ফোনে প্রতিটি transistor-এর সুইচ বদলানো মানে ব্যাটারির চার্জ খরচ। মেমরি থেকে ডেটা আনা একটি যোগের চেয়ে বহু গুণ বেশি শক্তি খায়। তাই কম মেমরি-যাতায়াতের কোড মানে ঠান্ডা ফোন আর বেশিক্ষণ চার্জ (পর্ব ৫৬)।
🛡️ নিরাপত্তা
Spectre, Meltdown, Rowhammer — এগুলো সফটওয়্যারের বাগ নয়, hardware-এর আচরণ থেকে জন্মানো ঝুঁকি। এদের বুঝতে আর প্রতিরক্ষা নিতে microarchitecture জানতেই হয় (পর্ব ৪১ আর ৪৯)।
🤖 AI hardware
বড় AI মডেল চলে GPU আর বিশেষ accelerator-এ। কেন GPU-তে হাজার হাজার সরল core, কেন মেমরির bandwidth-ই প্রায়ই আসল সীমা — এসব আর্কিটেকচারের প্রশ্ন (পর্ব ৫৫)।
পেশা আর সুযোগ
এই বিষয় সরাসরি কয়েকটি পেশার দরজা খোলে:
- Chip design ও verification: Verilog/SystemVerilog-এ নকশা লেখা আর লক্ষ লক্ষ test দিয়ে প্রমাণ করা যে নকশা ঠিক। বলা হয়, বড় chip প্রকল্পে verification-এ প্রায়ই নকশার চেয়েও বেশি প্রকৌশলী আর সময় লাগে।
- Embedded ও firmware: microcontroller-এ register, interrupt আর মেমরি-ম্যাপড I/O নিয়ে সরাসরি কাজ — গাড়ি, চিকিৎসা যন্ত্র, স্মার্ট মিটার, IoT.
- Compiler ও systems: কোন instruction বেছে নিলে pipeline আর cache ভালো চলে, তা জানা compiler আর OS প্রকৌশলীর কাজ।
- Performance engineering: বড় সার্ভার বা গেমের কোড প্রোফাইল করে ধীর অংশ খুঁজে hardware-বান্ধব করা।
বাংলাদেশেও কয়েকটি প্রতিষ্ঠান বিদেশি গ্রাহকের জন্য chip design ও verification-এর কাজ করছে, আর embedded সফটওয়্যারের কাজ ধীরে ধীরে বাড়ছে বলে শোনা যায়। এই ক্ষেত্রগুলোর ইন্টারভিউতে এই কোর্সের বিষয় — digital logic, pipeline, cache — নিয়মিত আসে। আর বিশ্ববিদ্যালয়ের CSE/EEE পরীক্ষা, ব্যাংক বা সরকারি IT পদের লিখিত পরীক্ষার কম্পিউটার অংশেও এই বিষয়ের প্রশ্ন প্রায়ই থাকে।
৯ · আর্কিটেকচারের আটটি মহান ধারণা আর এই কোর্সের রোডম্যাপ
David Patterson আর John Hennessy তাঁদের বিখ্যাত পাঠ্যবইয়ে কম্পিউটার নকশার আটটি “great idea”-র তালিকা দেন। গত ৬০ বছরের প্রায় প্রতিটি উদ্ভাবন এগুলোর কোনো একটির প্রয়োগ। পুরো কোর্সে এগুলো বারবার ফিরে আসবে:
| ধারণা | সহজ কথায় | কোথায় দেখবেন |
|---|---|---|
| ১ · Design for Moore’s law | নকশা শেষ হতে কয়েক বছর লাগে; ততদিনে transistor কত বাড়বে, সেটা মাথায় রেখে নকশা | পর্ব ০২, মডিউল ৯ |
| ২ · Abstraction দিয়ে নকশা সহজ করা | স্তরে স্তরে ভাগ — এই পর্বের মূল কথা | পুরো কোর্স |
| ৩ · Make the common case fast | যা সবচেয়ে বেশি ঘটে, সেটিকে দ্রুত করুন | পর্ব ০৩ (Amdahl), মডিউল ৫ |
| ৪ · Parallelism | একসাথে অনেক কাজ | মডিউল ৭ ও ৯ |
| ৫ · Pipelining | গার্মেন্টস লাইনের মতো ধাপে ধাপে, প্রতিটি ধাপে আলাদা কাজ একসাথে | পর্ব ৩৫–৩৮ |
| ৬ · Prediction | নিশ্চিত হওয়ার আগে অনুমান করে এগোনো, ভুল হলে ফিরে আসা | পর্ব ৩৭, ৪০–৪১ |
| ৭ · Hierarchy of memories | ছোট-দ্রুত ওপরে, বড়-সস্তা নিচে — ডেস্ক, তাক, গুদাম | মডিউল ৮ |
| ৮ · Dependability via redundancy | বাড়তি অংশ রেখে ভুল ধরা ও সামলানো (parity, ECC, RAID) | পর্ব ০৬, ৪৯; নেটওয়ার্কিং কোর্সের error detection |
আর পুরো কোর্সের ১০টি মডিউল, নিচ থেকে ওপরে ওঠার ক্রমে:
| মডিউল | বিষয় | পর্ব | শেষে যা পারবেন |
|---|---|---|---|
| ১ | আর্কিটেকচারের ভিত্তি | ০১–০৬ | পারফরম্যান্স মাপা, সংখ্যা আর ডেটার বিট-রূপ পড়া |
| ২ | Combinational লজিক | ০৭–১৪ | Boolean সরলীকরণ, adder ও ALU নকশা, Verilog-এর শুরু |
| ৩ | Sequential লজিক | ১৫–১৯ | Flip-flop, counter, FSM আর timing |
| ৪ | কম্পিউটারের গাণিতিক কাজ | ২০–২৪ | গুণ, ভাগ আর IEEE 754 floating point |
| ৫ | Instruction set আর্কিটেকচার | ২৫–৩১ | RISC-V assembly পড়া-লেখা, C থেকে assembly |
| ৬ | প্রসেসর নকশা | ৩২–৩৮ | Datapath, control unit, pipeline আর hazard |
| ৭ | উন্নত প্রসেসর | ৩৯–৪৩ | Superscalar, out-of-order, SIMD আর Spectre |
| ৮ | মেমরি হায়ারার্কি | ৪৪–৫০ | Cache-এর হিসাব, cache-বান্ধব কোড, TLB |
| ৯ | I/O, সমান্তরালতা আর আধুনিক সিস্টেম | ৫১–৫৭ | Multicore, GPU, embedded আর ক্যাপস্টোন CPU simulator |
| ১০ | পরীক্ষা ও ইন্টারভিউ প্রস্তুতি | ৫৮–৬২ | Numerical, MCQ, ভাইভা আর ইন্টারভিউর প্রশ্ন |
কীভাবে পড়বেন: একদম নতুন হলে ক্রম ধরে পড়ুন। Digital logic আগে থেকে জানলে মডিউল ২–৩ দ্রুত চোখ বুলিয়ে মডিউল ৫-এ চলে যেতে পারেন। আর শুধু দ্রুত কোড লেখাই লক্ষ্য হলে মডিউল ১, ৫, ৬ আর ৮ আপনার সবচেয়ে কাজের।
১০ · AI-এর যুগে আর্কিটেকচার শেখা
AI এই বিষয়ে চমৎকার শিক্ষক হতে পারে — ধারণা ব্যাখ্যা, উদাহরণ বানানো, প্রশ্ন করা। কিন্তু এই বিষয়ে AI-এর ভুলগুলো বেশ নির্দিষ্ট, আর আত্মবিশ্বাসী ভঙ্গিতে বলা: K-map-এ ভুল গ্রুপ, two's complement-এর সীমার মানে ভুল, IEEE 754-এর বিট প্যাটার্নে একটি বিট এদিক-ওদিক, cache-এর tag/index/offset বিটের ভুল ভাগ, pipeline-এর cycle গোনায় গরমিল, MIPS আর RISC-V-এর নিয়ম গুলিয়ে ফেলা (যেমন register-এর নাম বা branch delay slot), synthesize করা যায় না এমন Verilog, আর কোনো chip-এর cache বা core সংখ্যা বানিয়ে বলা।
AI-কে শিক্ষক হিসেবে ব্যবহারের একটি ভালো কাঠামো — উত্তরের সাথে যাচাইয়ের পথও চেয়ে নিন:
AI-এর উত্তর হাতে পেলে — যাচাইয়ের চেকলিস্ট
পরীক্ষা ও ইন্টারভিউতে এই বিষয়ে প্রায়ই যা জিজ্ঞেস করা হয়:
- Computer architecture আর computer organization-এর পার্থক্য কী? — Architecture হলো programmer-এর চোখে দৃশ্যমান বৈশিষ্ট্য (ISA: instruction, register, addressing); organization হলো সেগুলো hardware-এ কীভাবে বাস্তবায়িত (pipeline, cache, control signal).
- von Neumann আর Harvard architecture-এর পার্থক্য? — von Neumann-এ instruction ও ডেটার একটি মেমরি ও একটি পথ; Harvard-এ দুটি আলাদা, তাই একসাথে আনা যায়। আধুনিক CPU modified Harvard: আলাদা L1 I-cache ও D-cache, একটি main memory.
- Instruction cycle-এর ধাপগুলো লিখুন। — Fetch (MAR ← PC, IR ← mem[MAR], PC ← PC + ১), decode, operand fetch, execute, write back.
- von Neumann bottleneck কী, আর কীভাবে কমানো হয়? — CPU আর মেমরির মধ্যের একটি পথ ধীর হওয়ায় CPU অপেক্ষা করে; cache, আলাদা I/D cache, pipelining, prefetching দিয়ে কমানো হয়।
- Stored-program concept কী? — Instruction আর ডেটা দুটোই binary সংখ্যা হিসেবে একই read-write মেমরিতে থাকে, তাই প্রোগ্রাম বদলাতে hardware বদলাতে হয় না।
ভাবনার প্রশ্ন
প্রতিটি প্রশ্ন নিয়ে নিজে কিছুক্ষণ ভাবুন — তারপর “→ উত্তর” চাপুন।
প্র ০১১৯৭৮ সালের একটি ISA কেন আজও আপনার ল্যাপটপে চলছে? চুক্তি ভাঙতে চাইলে কী দাম দিতে হয়?
Intel ১৯৭৮ সালে ১৬-বিটের 8086 বাজারে আনে। এরপর ৩২-বিটের IA-32 (80386, ১৯৮৫) আর ৬৪-বিটের x86-64 এলো — মজার ব্যাপার, ৬৪-বিট সংস্করণটি প্রথম নকশা করে AMD (AMD64, প্রথম chip ২০০৩ সালে), পরে Intel-ও সেটিই গ্রহণ করে। প্রতিটি ধাপে পুরোনো প্রোগ্রাম চালানোর ক্ষমতা রাখা হয়েছে। এর কারণ সফটওয়্যার: কোটি কোটি মানুষের হাতে থাকা প্রোগ্রাম, ব্যবসার পুরোনো সিস্টেম, driver — এগুলো নতুন করে লেখার খরচ কোনো নতুন chip-এর গতির লাভের চেয়ে অনেক বেশি।
চুক্তি ভাঙার একটি শিক্ষণীয় উদাহরণ Intel আর HP-র Itanium (IA-64), যা ২০০১ সালে আসে। এর ISA ছিল সম্পূর্ণ নতুন, compiler-নির্ভর একটি নকশা (EPIC). কিন্তু পুরোনো x86 প্রোগ্রাম এতে ধীরে চলত, আর compiler প্রত্যাশামতো কাজ করতে পারেনি। বাজার বেছে নিল AMD-এর পথ — পুরোনো চুক্তিকে প্রসারিত করা। Itanium ধীরে ধীরে হারিয়ে যায়।
উল্টো দিকে Apple কয়েকবার সফলভাবে ISA বদলেছে — 68000 থেকে PowerPC (১৯৯৪), PowerPC থেকে Intel x86 (২০০৬), আর ২০২০ সালে নিজস্ব ARM chip-এ। প্রতিবারই তাদের কৌশল ছিল একটি অনুবাদক (যেমন Rosetta 2), যা পুরোনো ISA-র প্রোগ্রাম নতুন ISA-তে চালায়, যতদিন না ডেভেলপাররা নতুন করে compile করেন। নিজের hardware আর OS — দুটোই এক কোম্পানির হাতে থাকায় এটি সম্ভব হয়েছে।
ভেতরে অবশ্য আধুনিক x86 chip সাধারণত জটিল x86 instruction-কে ছোট ছোট অভ্যন্তরীণ ধাপে (micro-op) ভেঙে চালায় — অর্থাৎ বাইরের চুক্তি পুরোনো, ভেতরের রান্নাঘর একেবারে নতুন।
মূল উপলব্ধি: ISA হলো দীর্ঘমেয়াদি চুক্তি, আর microarchitecture প্রতি কয়েক বছরে বদলানো যায়। ভালো architect তাই ISA-তে নতুন কিছু যোগ করার আগে অনেক ভাবেন — একবার যোগ করলে কয়েক দশক টানতে হয়।
প্র ০২“von Neumann architecture” নামটি কি ন্যায্য? Stored-program কম্পিউটারের কৃতিত্ব আসলে কার?
ENIAC বানিয়েছিলেন University of Pennsylvania-র J. Presper Eckert আর John Mauchly. ENIAC-এ প্রোগ্রাম মেমরিতে থাকত না — তার আর সুইচ দিয়ে বসাতে হতো। এর উত্তরসূরি EDVAC-এর পরিকল্পনার সময় তাঁরা আর তাঁদের দল প্রোগ্রামকে মেমরিতে রাখার কথা ভাবছিলেন। গণিতবিদ John von Neumann এই দলের পরামর্শক হিসেবে যুক্ত হন, এবং ১৯৪৫ সালে আলোচনাগুলো গুছিয়ে লেখেন “First Draft of a Report on the EDVAC”.
সমস্যা হলো, খসড়াটিতে লেখক হিসেবে শুধু von Neumann-এর নাম ছিল, আর দলের একজন সদস্য সেটি ব্যাপকভাবে বিতরণ করেন। ফলে ধারণাটি পরিচিত হয়ে যায় von Neumann-এর নামে। Eckert আর Mauchly এতে ক্ষুব্ধ ছিলেন, আর প্রকাশিত হয়ে যাওয়ায় ধারণাটির patent পাওয়ার পথও জটিল হয়ে পড়ে। অন্যদিকে Alan Turing ১৯৩৬ সালের universal machine-এর তত্ত্বে আগেই দেখিয়েছিলেন যে একটি যন্ত্র “প্রোগ্রামকে ডেটা হিসেবে পড়ে” যেকোনো হিসাব করতে পারে — তত্ত্বের দিক থেকে ভিত্তি সেখানেই।
বাস্তবে প্রথম stored-program প্রোগ্রাম চলে ইংল্যান্ডের Manchester-এ — “Manchester Baby” নামের ছোট পরীক্ষামূলক যন্ত্রে, ২১ জুন ১৯৪৮ সালে। আর নিয়মিত ব্যবহারের প্রথম দিকের stored-program কম্পিউটারগুলোর একটি Cambridge-এর EDSAC (১৯৪৯), Maurice Wilkes-এর নেতৃত্বে। এ কারণে অনেক ইতিহাসবিদ “stored-program architecture” বা “Eckert–Mauchly–von Neumann” জাতীয় নাম পছন্দ করেন।
তবু von Neumann-এর অবদান ছোট নয়: তিনি ধারণাটিকে পরিষ্কার যৌক্তিক কাঠামো দিয়েছিলেন — আলাদা arithmetic অংশ, control অংশ, মেমরি, input আর output — যা আজও প্রায় প্রতিটি পাঠ্যবইয়ের প্রথম ছবি।
মূল উপলব্ধি: প্রযুক্তির বড় উদ্ভাবন প্রায় সবসময় একটি দলের, একাধিক মানুষের, আর কয়েক বছরের কাজ। পরীক্ষায় “von Neumann architecture” লিখুন, কিন্তু মনে রাখুন ইতিহাসটি এর চেয়ে বড়।
প্র ০৩Abstraction যদি এত ভালো হয়, তাহলে Spectre আর Rowhammer কীভাবে সম্ভব হলো?
Abstraction একটি প্রতিশ্রুতি দেয় ফলাফল নিয়ে — instruction যা বলে, ফল তাই হবে। কিন্তু কত সময়ে, কত শক্তিতে, আর পাশে কী চিহ্ন রেখে — এগুলো নিয়ে সাধারণত কোনো প্রতিশ্রুতি থাকে না। আক্রমণকারীরা ঠিক এই ফাঁকটি ব্যবহার করেন।
Spectre ও Meltdown (প্রকাশ ২০১৮ সালের শুরুতে): আধুনিক CPU গতি বাড়াতে branch-এর ফল জানার আগেই অনুমান করে সামনের instruction চালিয়ে রাখে (speculative execution). অনুমান ভুল হলে register-এর ফল মুছে ফেলা হয় — ISA-র চোখে কিছুই ঘটেনি। কিন্তু সেই সময়ে যে ডেটা cache-এ এসেছিল, তা থেকে যায়। আরেকটি প্রোগ্রাম সময় মেপে বুঝতে পারে কোন ঘর cache-এ আছে, আর সেখান থেকে গোপন তথ্য আন্দাজ করতে পারে। অর্থাৎ microarchitecture-এর অবস্থা চুইয়ে ওপরে উঠল।
Rowhammer (গবেষণাপত্র ২০১৪): DRAM-এর একটি সারি খুব দ্রুত বারবার পড়লে পাশের সারির কিছু বিট বৈদ্যুতিক প্রভাবে উল্টে যেতে পারে। এখানে একদম নিচের স্তর — পদার্থবিদ্যা — ওপরের স্তরের নিরাপত্তা ভেঙেছে।
প্রতিরক্ষা এসেছে প্রতিটি স্তরে: OS-এ kernel আর user-এর page table আলাদা করা (KPTI), compiler-এ নিরাপদ জায়গায় অনুমান থামানোর instruction (যেমন lfence) আর retpoline কৌশল, browser-এ প্রতিটি সাইট আলাদা process-এ রাখা আর সূক্ষ্ম timer-এর নির্ভুলতা কমানো, নতুন chip-এ hardware সংশোধন, আর DRAM-এ ঘন ঘন refresh ও ECC. এর অনেকগুলোতে গতির কিছু দাম দিতে হয়েছে।
মূল উপলব্ধি: নিরাপত্তার দিক থেকে কোনো abstraction পুরোপুরি বন্ধ বাক্স নয়। যিনি একাধিক স্তর একসাথে বোঝেন, তিনিই এমন ঝুঁকি আগে দেখতে পান। Spectre-Meltdown-এর ধারণা আর প্রতিরক্ষা পর্ব ৪১-এ, আর Rowhammer পর্ব ৪৯-এ বিস্তারিত দেখবেন — শুধু প্রতিরক্ষার দৃষ্টিকোণ থেকে।
প্র ০৪Hennessy আর Patterson কেন বলেন আমরা আর্কিটেকচারের “নতুন স্বর্ণযুগে” আছি?
কয়েক দশক ধরে দুটি “বিনামূল্যের উপহার” ছিল। প্রথমটি Moore’s law — Gordon Moore ১৯৬৫ সালে লক্ষ করেন একটি chip-এ transistor-এর সংখ্যা প্রায় প্রতি বছর দ্বিগুণ হচ্ছে, আর ১৯৭৫ সালে সেই হার প্রতি দুই বছরে দ্বিগুণ বলে সংশোধন করেন। দ্বিতীয়টি Dennard scaling — transistor ছোট হলে ভোল্টেজও কমানো যেত, তাই একই আকারের chip-এ শক্তি খরচ না বাড়িয়েই clock বাড়ানো যেত। ফলে প্রোগ্রামার কিছু না করেই প্রতি বছর দ্রুততর কম্পিউটার পেতেন।
২০০০-এর দশকের মাঝামাঝি Dennard scaling থেমে যায়: ভোল্টেজ আর কমানো যাচ্ছিল না, ফলে clock বাড়ালে chip অসহনীয় গরম হচ্ছিল — একে বলা হয় power wall (পর্ব ০২)। শিল্প তখন একটি core-কে আরও দ্রুত না করে একাধিক core বসানোর দিকে গেল। আর transistor বাড়ার হারও আগের চেয়ে ধীর ও ব্যয়বহুল হয়ে এসেছে।
২০১৭ সালের Turing Award পাওয়া Hennessy আর Patterson তাঁদের ভাষণ “A New Golden Age for Computer Architecture”-এ যুক্তি দেন: সাধারণ-উদ্দেশ্যের CPU থেকে আর সহজে বাড়তি গতি আসবে না, তাই সামনে আসবে domain-specific architecture — নির্দিষ্ট কাজের জন্য বিশেষ hardware. উদাহরণ: Google-এর TPU (neural network-এর জন্য, ২০১৬ সালে প্রকাশ্যে ঘোষিত), ফোনের NPU, ভিডিও এনকোডার। সাথে উন্মুক্ত ISA (RISC-V) আর সহজ chip-নকশার টুল নতুন দলকেও এই খেলায় নামার সুযোগ দিচ্ছে।
এর অর্থ প্রোগ্রামারের জন্যও বড়: কোড এখন নিজে থেকে দ্রুত হয় না। Parallelism, cache, SIMD, accelerator — এগুলো বুঝে লিখলে তবেই নতুন hardware-এর সুবিধা পাওয়া যায়।
মূল উপলব্ধি: বিনামূল্যের গতির যুগ শেষ; এখন গতি আসে নকশার বুদ্ধি থেকে — hardware-এ এবং software-এ। এ কারণেই আর্কিটেকচার আজ আগের যেকোনো সময়ের চেয়ে বেশি প্রাসঙ্গিক।
প্র ০৫এই কোর্স কেন RISC-V দিয়ে শেখায়, x86 বা ARM দিয়ে নয়? একটি উন্মুক্ত ISA বাংলাদেশের মতো দেশের জন্য কী অর্থ বহন করে?
RISC-V-এর কাজ শুরু হয় ২০১০ সালে University of California, Berkeley-তে — Krste Asanović-এর নেতৃত্বে একটি দলে, যেখানে David Patterson-ও ছিলেন। উদ্দেশ্য ছিল গবেষণা আর শিক্ষার জন্য একটি পরিষ্কার, আধুনিক, উন্মুক্ত ISA. আজ এর মান (specification) দেখাশোনা করে অলাভজনক সংস্থা RISC-V International, আর যে কেউ কোনো লাইসেন্স-ফি ছাড়াই এই ISA মেনে chip বানাতে পারেন।
শেখানোর জন্য কেন ভালো: মূল অংশ RV32I ছোট — হাতে গোনা কয়েক ডজন instruction, নিয়মিত encoding, কয়েকটি মাত্র format. এর ওপর ঐচ্ছিক extension যোগ হয় (M = গুণ-ভাগ, F/D = floating point, V = vector). x86-64-এর হাজারখানেক instruction আর কয়েক দশকের ঐতিহাসিক জটিলতার তুলনায় এটি অনেক পরিষ্কার। আগের প্রজন্মের পাঠ্যবই MIPS দিয়ে শেখাত; RISC-V দেখতে অনেকটা MIPS-এর মতোই, তবে বেশ কিছু নিয়ম আলাদা — তাই এই কোর্সে যেখানে পার্থক্য আছে, সেখানে স্পষ্ট বলা থাকবে।
ব্যবসার দিক: ARM ISA ব্যবহার করতে ARM-এর সাথে লাইসেন্স চুক্তি লাগে; x86 কার্যত দুটি কোম্পানির হাতে। RISC-V-এ এই বাধা নেই, তাই ছোট কোম্পানি, বিশ্ববিদ্যালয় আর নতুন দেশও নিজস্ব core বানাতে পারে। ইতিমধ্যে বিভিন্ন microcontroller আর embedded chip-এ RISC-V core ব্যবহৃত হচ্ছে।
বাংলাদেশের জন্য: আধুনিক chip বানাতে বিশাল ও ব্যয়বহুল কারখানা (fab) লাগে, যা খুব অল্প কয়েকটি দেশে আছে। কিন্তু chip নকশা আর verification মূলত মেধা আর সফটওয়্যারের কাজ। উন্মুক্ত ISA আর open-source টুলের কারণে এই কাজে ঢোকার খরচ কমেছে। দেশের বিশ্ববিদ্যালয়ের শিক্ষার্থীরা RISC-V core নকশা করে FPGA-তে (নতুন করে প্রোগ্রাম করা যায় এমন chip) চালাতে পারেন, আর এই দক্ষতা নিয়ে আন্তর্জাতিক নকশা-প্রকল্পে কাজ করার সুযোগও বাড়ছে বলে মনে করা হয়।
মূল উপলব্ধি: ISA-র ধারণা — register, load-store, encoding, pipeline — সব ISA-তে একই। একটি পরিষ্কার ISA-তে ধারণাগুলো শিখলে x86 বা ARM পড়াও সহজ হয়ে যায়; পর্ব ৩১-এ তিনটির তুলনা দেখবেন।
অনুশীলন
খাতা-কলম নিন। হাতে করার পর simulator বা হিসাব দিয়ে মিলিয়ে নিন।
-
আউটপুট অনুমান করুন (হাতে trace): খেলনা কম্পিউটারের মেমরি
[11, 22, 37, 90, 0, 0, 0, 0](instruction = opcode × ১০ + ঠিকানা; 1 LOAD, 2 ADD, 3 STORE, 9 HALT). শুরুতে PC = 0, ACC = 0. প্রতিটি চক্রে PC, IR আর ACC লিখুন। HALT-এর পরে ঘর 7-এ কী থাকবে?cycle PC IR instruction ACC 1 0 11 LOAD 1 22 2 1 22 ADD 2 59 3 2 37 STORE 7 59 4 3 90 HALT 59ঘর 7-এ থাকবে 59. ফাঁদটি হলো:
LOAD 1ঘর 1 থেকে পড়ে, আর ঘর 1-এ আছে পরের instruction22— CPU সেটিকে ডেটা হিসেবেই পড়ল, ACC = 22. তারপরADD 2যোগ করল ঘর 2-এর37(যা নিজেও একটি instruction!): 22 + 37 = 59. একই সংখ্যা একবার ডেটা, একবার instruction — stored-program ধারণার সরাসরি ফল। Simulator-এmemবদলে চালালে একই ফল পাবেন। -
Numerical — bottleneck আর cache: একটি CPU-তে প্রতিটি instruction-এর জন্য মেমরি থেকে ১বার fetch লাগে, আর ৩০% instruction-এর জন্য বাড়তি ১বার ডেটা আনতে হয়। Execute-এ লাগে ১ cycle. (ক) Cache নেই, প্রতিটি মেমরি-যাতায়াত ১০০ cycle — গড়ে প্রতি instruction কত cycle? (খ) Cache যোগ হলো: ৯৫% যাতায়াত cache-এ মেলে ২ cycle-এ, বাকি ৫% লাগে ১০০ cycle. এখন গড় কত, আর গতি কত গুণ বাড়ল?
(ক) প্রতি instruction-এ গড় মেমরি-যাতায়াত = ১ + ০.৩ = ১.৩. মোট = ১.৩ × ১০০ + ১ = ১৩১ cycle.
(খ) প্রতিটি যাতায়াতের গড় সময় = ০.৯৫ × ২ + ০.০৫ × ১০০ = ১.৯ + ৫ = ৬.৯ cycle. প্রতি instruction = ১.৩ × ৬.৯ + ১ = ৮.৯৭ + ১ = ৯.৯৭ cycle. গতি বাড়ল ১৩১ ÷ ৯.৯৭ ≈ ১৩.১ গুণ.
খেয়াল করুন, মাত্র ৫% miss হলেও গড় ৬.৯-এর মধ্যে ৫ cycle আসে সেই miss থেকে — miss-ই আসল খরচ। CPI-র হিসাব পর্ব ০৩-এ, আর এই “গড় মেমরি-যাতায়াতের সময়” (AMAT)-এর হিসাব পর্ব ৪৭-এ পূর্ণাঙ্গভাবে করবেন।
-
ISA না microarchitecture? প্রতিটিকে ভাগ করুন: (ক) RISC-V-এ ৩২টি integer register (খ) একটি chip-এ L1 data cache ৪৮ KB (গ)
mulinstruction আছে কি না (ঘ) branch predictor কোন algorithm ব্যবহার করে (ঙ) instruction-এর encoding ৩২ বিট (চ) একসাথে ৪টি instruction decode করা যায়।ISA: (ক), (গ), (ঙ) — এগুলো বদলালে প্রোগ্রাম বা compiler-কেও বদলাতে হয়। Microarchitecture: (খ), (ঘ), (চ) — এগুলো বদলালে একই প্রোগ্রাম একই ফল দেয়, শুধু গতি বদলায়। পরীক্ষা করার সহজ প্রশ্ন: “এটি বদলালে কি পুরোনো প্রোগ্রাম ভুল চলবে বা চলবেই না?” হ্যাঁ হলে ISA.
-
কোড লিখুন — নতুন instruction: খেলনা কম্পিউটারে opcode 5 =
SUB addr(ACC ← ACC − mem[addr]) যোগ করুন, আর মেমরি এমনভাবে বদলান যাতে প্রোগ্রাম 25 − 17 হিসাব করে ঘর 3-এ রাখে।Simulator-এর
switch-এ একটি লাইন আরNAME-এ একটি নাম যোগ করুন, তারপর ঘর 5-এর22(ADD 2)-কে52(SUB 2) করুন:const NAME = { 1: "LOAD", 2: "ADD", 3: "STORE", 4: "JUMP", 5: "SUB", 9: "HALT" }; const mem = [44, 25, 17, 0, 11, 52, 33, 90]; case 5: acc = acc - mem[addr]; break; // SUB addrচালালে চক্র ৩-এ ACC 25 থেকে 8 হবে, আর শেষ লাইন হবে
halted after 5 cycles; mem[3] = 8. লক্ষ করুন — নতুন instruction যোগ করা মানে ISA বদলানো: পুরোনো মেশিনে 52 চালালেbad opcode 5আসবে। বাস্তব ISA-তে এজন্যই নতুন instruction যোগ হয় সাবধানে, extension আকারে।
নিজেকে যাচাই করুন
ভুল হলে কারণসহ ব্যাখ্যা পাবেন, আবার চেষ্টাও করতে পারবেন।
ক্রমএকটি ADD instruction-এর চক্রের ধাপগুলো সঠিক ক্রমে সাজান (▲▼ চেপে সরান)
- PC-র ঠিকানা MAR-এ পাঠানো
- মেমরি থেকে instruction এনে IR-এ রাখা
- PC এক ধাপ বাড়ানো
- Control unit-এর decode — opcode আর ঠিকানা আলাদা করা
- মেমরি থেকে operand আনা
- ALU-তে যোগ করে ফল accumulator-এ লেখা
নিচের কোনটি ISA (computer architecture)-এর অংশ, microarchitecture-এর নয়?
- L2 cache-এর আকার
- Pipeline-এর ধাপ সংখ্যা
- Instruction-এর তালিকা আর programmer-এর দেখা register-এর সংখ্যা
- Clock frequency
একটি Windows প্রোগ্রাম Intel আর AMD — দুই কোম্পানির CPU-তেই না বদলে চলে। মূল কারণ কী?
- দুটির microarchitecture হুবহু এক
- দুটিই একই ISA (x86-64) মেনে চলে
- দুটির clock গতি সমান
- দুটি একই কারখানায় তৈরি
Stored-program ধারণার মূল কথা কোনটি?
- Instruction আর ডেটা দুটোই সংখ্যা হিসেবে মেমরিতে থাকে
- প্রোগ্রাম সবসময় hard disk-এ রাখা থাকে
- Instruction আর ডেটার জন্য সবসময় আলাদা মেমরি লাগে
- প্রোগ্রাম শুধু ROM-এ থাকে, কখনো বদলায় না
আধুনিক অনেক CPU-কে “modified Harvard” বলা হয় কেন?
- বাইরে instruction আর ডেটার জন্য দুটি আলাদা RAM থাকে
- CPU-তে register আছে বলে
- I/O যন্ত্র আলাদা bus-এ থাকে বলে
- একটি main memory, কিন্তু CPU-র কাছে আলাদা L1 instruction আর data cache
একটি accumulator মেশিনে instruction = opcode × 10 + ঠিকানা (1 = LOAD, 2 = ADD, 3 = STORE, 9 = HALT). মেমরি [14, 25, 36, 90, 8, 5, 0], শুরুতে PC = 0. HALT-এর পরে ঘর 6-এ কত থাকবে?
- 13
- 8
- 25
- 0
RV32I-এ প্রতিটি instruction ৪ বাইটের। ঠিকানা 0x1000 থেকে একটি add instruction fetch হওয়ার পর (কোনো branch বা jump নেই) PC-র মান কত হবে?
- 0x1001
- 0x1004
- 0x1008
- 0x1000
শব্দকোষ
লেখার মধ্যে ডটেড দাগ দেওয়া শব্দে মাউস রাখুন বা চাপুন — অর্থ দেখাবে। এই পর্বের সব নতুন শব্দ এখানে একসাথে:
মনে রাখুন
- ISA = কী (programmer-এর চুক্তি), microarchitecture = কীভাবে (ভেতরের নির্মাণ)। একই ISA, অনেক নকশা।
- কম্পিউটার স্তরে স্তরে সাজানো — অ্যাপ থেকে পদার্থবিদ্যা; গতি আর নিরাপত্তার জন্য নিচের স্তর বুঝতে হয়।
- Stored program: instruction আর ডেটা দুটোই মেমরিতে সংখ্যা; PC যেখানে তাক করে, সেটিই instruction.
- CPU-র চক্র fetch → decode → execute; PC, IR, MAR, MDR আর ALU-র ভূমিকা মনে রাখুন।
- von Neumann bottleneck কমাতে cache আর আলাদা I/D cache (modified Harvard); আটটি মহান ধারণা পুরো কোর্সের মানচিত্র।
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- পর্ব ০২ · ইতিহাস আর প্রবণতা — ENIAC থেকে আজকের chip, Moore-এর সূত্র আর power wallপরবর্তী পর্বকম্পিউটারের প্রজন্ম, Moore’s law আর power wall.
- কম্পিউটার আর্কিটেকচার ও ডিজিটাল লজিক · কোর্স হোম৬২টি পর্বপুরো কোর্সের রোডম্যাপ — কোন পর্ব কখন।
- CPU কীভাবে কাজ করেসহজ শুরুকম্পিউটার ফান্ডামেন্টালস কোর্সে fetch-decode-execute, clock আর core-এর সহজ পরিচয়।
- OS-এর চোখে হার্ডওয়্যারপাশের ট্র্যাকCPU, interrupt আর memory hierarchy — অপারেটিং সিস্টেমের দৃষ্টিতে।
- C থেকে assemblyহাতে-কলমেC কোড x86-64 assembly-তে কেমন দেখায় — stack frame আর calling convention.