This page assumes nothing. If the parent note used a word or a symbol, we build it here from the ground up, in the order that each idea needs the previous one.
The parent note says "transfer one unit of data" — that unit is usually a byte (or a word, a few bytes the CPU handles at once).
Recall Why do we count in bytes here?
Because the three methods differ in how much CPU work per byte. To compare them we must count per byte, so we need the byte as our ruler. ::: A byte is the natural unit of a single I/O transfer.
KB in "4 KB" means kilobyte ≈ 1000 bytes (precisely 1024 in memory contexts). So 4 KB ≈4096 bytes — that number 4096 in the parent's example is just 4×1024.
The CPU cannot reach inside the device. Instead the device exposes a few tiny memory slots called registers. Think of them as labelled mailboxes bolted to the outside of the device.
The picture shows three mailboxes:
The red mailbox is the status register — it is red because the entire topic is about who keeps checking this one flag.
The status register is set by the device, read by the CPU.
The command register is written by the CPU, read by the device.
How the CPU reaches these mailboxes (special I/O instructions vs. treating them like ordinary memory addresses) is its own subject — see Memory-mapped I/O vs Port-mapped I/O.
Let's read this like a sentence, symbol by symbol:
while (condition) ; means "keep doing nothing, as long as the condition is true." The lone semicolon ; is an empty action — the loop's whole job is to check again.
status_register.busy reads the busy flag out of the status mailbox.
== 1 asks "is it equal to 1?" (double-equals == is a question, not an assignment).
So the whole line means: "As long as the device says busy=1, loop back and check again, doing nothing useful." That is busy-waiting — the picture is a person refreshing a page over and over.
The parent's formulas use three time symbols. Each is just "how long some action takes".
Picture a long bar (the device's wait Tdev) chopped into many tiny slices (each slice = one poll tpoll):
The symbol ≫ in the parent ("Tdev≫tint") means "is very much bigger than" — not just bigger, overwhelmingly bigger. It marks the condition under which interrupts clearly beat polling.
During a DMA transfer the red DMA controller hops on to move a block.
Because it's one lane, when DMA is driving, the CPU must briefly wait — this is cycle stealing (DMA "steals" a bus cycle). That's why the parent warns DMA does not make the CPU 100% free.
Before reading the parent note, you should be able to answer each of these. Cover the right side and test yourself.
What is one bit, and how many bits in a byte?
A bit is a single 0/1; a byte is 8 bits.
Roughly how much faster is a CPU (ns) than a disk (ms)?
About a million to ten million times faster.
Name the three device registers and who writes each.
Status (device sets, CPU reads), Data (byte transferred), Command (CPU writes).
What does the busy-wait line while(busy==1); do?
Loops doing nothing, re-checking the status flag until the device is ready.
Difference between = and ==?
= sets a value; == asks a yes/no question.
What do Tdev, tpoll, tint each measure?
Device ready-time, cost of one poll, cost of servicing one interrupt.
Why does Tdev/tpoll count wasted polls?
It's how many tiny poll-slices fit inside the long device wait.
What does the symbol ≫ mean?
"Very much greater than."
What is an interrupt and what is an ISR?
A hardware "pay attention" signal; a small routine the CPU runs to handle it.
What is "context" and why save it?
The CPU's current instruction and register snapshot; save it to resume exactly where it left off after the ISR.
Why can't the CPU be fully free during DMA?
DMA and CPU share one bus lane; DMA steals cycles (cycle stealing).
What do O(N) and O(1) mean in plain words?
Work grows with N bytes vs. work stays constant regardless of N.
Now you carry every symbol the parent note assumed. Return to the main I/O management note and the Hinglish version, and each formula will read like plain English.