From Transistor to Browser

Parts I to III
Glossary

Most terms are shown by a figure in the book. Follow the link to see it in place, or open the widget to try it.

A

Abstract syntax treeSoftware

The tree a parser builds from the tokens, which makes the program's grouping explicit. In the book's arithmetic language each inner node is an addition and each leaf a number or a variable; for (a + b) + c the root is the outer addition, and both the interpreter and the compiler walk this same tree.

Abstraction and implementationSwitch

Two views of one part: what it does, and how it is built. The chapter draws NAND twice, as the gate symbol, the abstraction it reuses from there on, and as the CMOS implementation, the transistors that actually do the work, set side by side in one view.

Access permissionsSoftware

The marks on a real page-table entry that say what a program may do with that page. A forbidden access is one of the things a real page fault can report. The book's tables carry none: each entry is only a frame number, so they show mappings, not an enforced security boundary.

Accumulator machineCPU

A CPU in which all arithmetic flows through a single working register, the accumulator. The book's machine is one: every ADD reads one operand from memory and adds it to whatever the accumulator currently holds. It has no general-purpose register file.

ACK lossNetwork

An acknowledgement that goes missing on its way back, so the sender cannot tell that its segment arrived. The book's model leaves this out: its ACKs are immediate and reliable, so an arrived segment is never resent. TCP's ACKs can be lost, and a TCP sender may therefore retransmit data that already arrived.

ADDCPU

The instruction that adds a memory word to the accumulator, opcode 3. The ALU adds the word at the operand's address to the accumulator, which keeps the low eight bits of the sum. In the example program ADD 14 and ADD 15 take the accumulator from 10 to 30 and then to 42.

Adder stageArithmetic

One full adder in a ripple-carry chain, handling a single bit position. Each stage's carry-out feeds the next stage's carry-in: the lowest stage receives a carry-in of 0, and the highest stage's carry-out becomes the extra top bit of the result. The chapter's figure shows a four-stage chain.

Address assignmentSoftware

Giving every instruction and data word its place in memory, the job of an assembler's first pass. The book's assembler hands out addresses in sequence and records each label at the address of the next word, so a label alone on a line names the instruction below it. The programmer never counts an address.

Address collisionSoftware

Two programs landing on the same memory cell because both use the same address. If all programs used real addresses, two that both wanted address 3 would collide, and one could overwrite the other's data. With their own page tables, the book's two programs both write virtual address 3 and land at physical 83 and 131.

Address rangeSoftware

A stretch of consecutive addresses, given by where it starts and how long it is. The book's Heap tracks address ranges rather than storing the bytes in them: the allocator decides which ranges are free, and in a real process a page table decides where they land in physical memory.

Address resolutionNetwork

Finding the link address that goes with a neighbour's network address, so that a frame can be addressed for the local hop. The chapter's run resolves B to 02:00:00:0b and C to 02:00:00:0c, answers a repeat from the cache, and fails for Z, an address no machine on the link owns.

Address traceCPU

A fixed list of the memory addresses a program reads, in order, used to test a cache without running the program. The book feeds its cache three: SCAN, addresses 0 to 63 once; LOOP, 0 to 15 four times; and THRASH, 0, 32, 64 and 96 eight times. Each run starts with an empty cache.

Addressed frameNetwork

A frame that names the link address of the interface meant to receive it, needed on a shared local link where several interfaces hear every frame. The book's model writes the addressed result as a (mac, payload) pair; it does not extend or transmit the encoded frames of the framing chapter.

Allocation failureSoftware

What happens when no single free run is large enough for a request: the book's malloc raises a MemoryError and returns no address. Total free space is not what counts. Without coalescing, two small runs side by side would refuse a request for their combined size even though the room exists.

Allocation schemeSoftware

A filesystem's rule for deciding which blocks hold a file and how to find them again. The book builds one, linked allocation, in which a table records for each block which block holds the next piece; the chapter notes that filesystems can also use indexed blocks or runs of adjacent blocks.

Analog and digitalSwitch

Two ways to treat a wire's voltage. Analog takes the continuous value itself; digital recognises only two bands and calls them 0 and 1. Real circuits are analog underneath: during a transition both transistors of a CMOS pair can briefly conduct. The book's binary model leaves such analog effects out.

ARP cacheNetwork

The asker's memory of earlier ARP answers, from network address to MAC address. The second time B is needed, the cache answers and the wire stays quiet. The book's inventory never changes, so its cache never expires; on a real network a cached answer can go stale and must be revalidated or discarded.

AssertMemory

To drive a line to a chosen value, most often to raise a control line so that something happens. To write to the chapter's RAM you assert the data and the address and raise the write line. Later, the control unit of the CPU reads an opcode and asserts the right signals.

AssociativitySoftware

The property of an operation whose result does not depend on how its operands are grouped. Addition associates, even when every sum wraps at 256, so a tree built only from additions is just the sum of its leaves in order. The book's compiler relies on this to flatten (a + b) + c.

AsynchronousMemory

Able to change at any time, not on a shared beat. The bare SR latch is asynchronous: it can be set and reset at any moment, so signals in a system built from dozens of such latches can ripple through unpredictably. The clock is the chapter's answer: update only now, on command.

Average access timeCPU

The average cost of one memory access through a cache: the hit time, paid on every access, plus the miss penalty on the fraction that miss. With a miss penalty a hundred times the hit time, even a few percent of misses decide the average.

B

BandwidthMemory

How much data a memory system can deliver in a given time. The chapter says it comes from moving many bits in parallel: wide buses, bursts, multiple banks and multiple channels all let a memory deliver more than one bit or word per internal operation.

Base addressSoftware

The address where a module's first word lands once the linker has placed it. An exported label's final address is its module's base address plus where it sat inside that module. The book's data module follows the five words of main, so value, at 0 inside its module, lands at address 5.

Best fitSoftware

A placement policy that takes the smallest free run still large enough for the request, rather than the first one found. The chapter names it among the policies real allocators use in place of first fit, to trade speed against how much the heap fragments; the book's Heap does not build it.

BindingSoftware

The tie between one name and its current value. An environment is a set of bindings; an assignment evaluates its expression and binds the result to a name, replacing any earlier binding. In the book's loop product is bound to 0 and then rebound on every pass, until it holds 42.

Bit flipNetwork

A single bit that arrives as the opposite of what was sent, because noise or a misread voltage changed it on the wire. The chapter's run flips one bit of a frame on purpose: that frame's CRC no longer matches, and the receiver drops it while keeping the good one.

Bit listArithmetic

How the book's Python circuits hold a number: a list of bits starting with bit 0, so that addition can follow the carry from low places to high ones. to_bits(13, 4) produces [1, 0, 1, 1], the reverse of the written 11012, and from_bits converts that list back to 13.

Bit-bangingNetwork

Sending bits by driving a clock line and a data line by hand, with no networking hardware, the same basic pattern a processor can use to talk to a chip beside it. Eight clock pulses, most significant bit first, carry a byte: the letter A goes out as 01000001. Real protocols such as SPI and JTAG have this shape.

Bitwise operationArithmetic

An operation applied to two numbers one bit position at a time, each result bit depending only on the two input bits in that position. Three of the book's four ALU operations are bitwise: on a = 12 and b = 10, AND gives 8, OR gives 14 and XOR gives 6.

Blank lineNetwork

The empty line that separates a message's head from its body. It marks where the head ends, but it cannot mark where the body ends, because the body is raw bytes and may contain a blank line of its own. The book's parser raises an error for a message without this separator.

Block sizeSoftware

The fixed number of bytes one disk block holds. A file is cut into pieces of this size, and only the last may be shorter. The book's blocks hold four bytes, so the 13 bytes of long need four blocks: HELL, O, F, ILES and a final !.

Body and wellsSwitch

The doped regions of a transistor's silicon. In the chapter's n-channel device the body is p-type, and set into it are two n-type wells, the source and the drain, marked n+ in the figure. With the gate LOW nothing connects the wells; a HIGH gate bridges them with a channel.

Boolean functionGates

A rule that turns input bits into one output bit; a truth table lists one and a gate network computes one. NOT and AND, together with NAND, span the full set of Boolean functions, which is why each new gate in the chapter is only a short composition of NAND calls.

Boolean variableGates

A letter such as a or b that stands for a value that is only ever 0 or 1. Boolean algebra is the algebra of such variables. In the chapter's circuits each one is an input wire, and its complement a is that wire inverted.

Branch targetCPU

The address a branch sends execution to. In the book's CPU it is the operand of a JUMP or JZ: the control unit receives it from the decoder, and a taken branch overwrites the already-incremented program counter with it, so the next fetch starts there.

Breadth-first searchNetwork

A graph search that visits the source's neighbours first, then their neighbours, and so on outward in rings. Because it reaches nodes in order of distance, the first time it touches a node it has found a shortest path; the first step on that path is the routing table entry, and the distance is the hop count.

Buddy systemSoftware

An allocation scheme that splits free memory into halves and rejoins two matching halves when both are free. The chapter only names it, beside best fit and size classes, as a choice real allocators make to trade speed against how much the heap fragments; the book's Heap uses first fit.

BusMemory

A group of wires that carries the bits of one word side by side. In the chapter's register the data bus fans out to every bit. A real CPU drives an address bus and reads a data bus, and wide buses are one way a memory system moves many bits in parallel.

ByteCPU

A group of eight bits, enough for any whole number from 0 to 255. Every memory word of the book's CPU is one byte, and its byte_word helper rejects any program word outside that range. To run a different program on this machine, you write different bytes into memory.

Byte streamNetwork

Bytes arriving one after another with nothing to mark where a message starts or stops. That unbroken stream is all the physical layer delivers, so the receiver cannot tell one message from the next until framing puts a FLAG byte at every boundary and the receiver splits the stream there.

Byte stuffingNetwork

Escaping a payload byte that equals a delimiter, so it is never read as one. Before sending, each FLAG or ESC byte becomes ESC followed by the byte with one bit flipped, so 7e becomes 7d 5e; a bare FLAG then appears only at true frame boundaries, and the receiver reverses the substitution after splitting.

BytecodeSoftware

Instructions for a machine that exists only as software, a form between source text and real machine code. The chapter notes that Python compiles its source to bytecode first and runs that on a virtual machine, so it only resembles the book's tree-walking interpreter in style.

C

CapacitorMemory

A component that holds electric charge. A DRAM cell stores its bit as charge on a tiny capacitor controlled by a transistor, which makes the cell much smaller than an SRAM latch. The charge leaks, so the stored value fades unless the memory controller refreshes it.

CaptureMemory

To take in the value on a data input at a clock edge and keep it. A flip-flop's Q captures the value d holds at each rising edge and ignores later changes until the next one; a register with load HIGH captures all four data bits together at the next edge.

Carry-in and carry-outArithmetic

The two carry connections of a full adder. The carry-in, cin, arrives from the less significant position and is added to a and b; the carry-out goes on to the next position. In a ripple-carry adder the lowest stage's carry-in is fixed at 0.

Carry-lookahead adderArithmetic

A faster adder design that real processors use in place of the ripple-carry adder. Carry-lookahead and prefix adders compute their carries in parallel instead of letting each wait for the stage before it. The book keeps the ripple design because its logic is transparent: you can trace the carry with your finger.

CarvingSoftware

Cutting a request off the front of a free run and leaving the remainder free; a run exactly the size of the request is used up whole. The book's sixteen-cell heap starts as [(0, 16)], and three requests of four cells are carved from the front, leaving only [(12, 4)].

CharacterSoftware

One letter, digit, space or symbol of text, and the unit a lexer reads. A program arrives as flat text, a row of characters, and a parser can do nothing with it until they are grouped: in total = 12 + 3 the five letters of total form one name and the two digits of 12 one number.

Charge carrierSwitch

A loose charge that is free to move through a material and so carry a current. Pure silicon has few, and the chapter's program prints “few carriers” for it. Doping supplies them: a free electron from each phosphorus atom in n-type silicon, a hole from each boron atom in p-type.

Check valueNetwork

A published result for one agreed input, used to confirm that code computes a checksum variant correctly. For the book's CRC the input is the bytes 123456789 and the check value is 0x29B1; the book's test compares against it as a reference vector.

Chip inputCPU

A signal that enters the fabric from outside the chip, as opposed to one a block produces. The book's fabric has two, a and b. A block input may be wired to a chip input or to an earlier block's output; in the half adder both blocks read the two chip inputs directly.

CipherNetwork

A rule for scrambling a message with a key so that only a holder of the key can unscramble it. The book's record cipher XORs each message byte with a byte of a repeating keystream. It demonstrates the operation and provides no real security, and strengthening it would not supply the missing peer authentication.

CircuitArithmetic

Parts wired together so that signals flow from inputs to outputs. The book's circuits are gates joined by wires: the half adder is a gate-level circuit of one XOR and one AND sharing two inputs. Every circuit in the adder chapter is combinational; memory circuits come later, from the same gates.

Client and serverNetwork

The two ends of a request and response exchange: the client encodes a request and parses the reply, and the server parses the request and answers. A server is then nothing more than a function from a request to a response; the book's looks the path up in a table of paths and the bytes each one serves.

Clock cycleCPU

One tick of the clock, and the unit in which the book counts a processor's time. Each of the pipeline's three stages takes one cycle, so four instructions run one at a time need twelve cycles and the overlapped pipeline needs six. Scheduling a pipeline is bookkeeping over cycle numbers.

Clock driftNetwork

The slipping apart of two clocks that should keep the same time. The chapter lists it among the ways the physical layer is unreliable: the clock can drift, a voltage can be misread, noise can flip a bit. The bit-banged link removes that worry by sending the clock alongside the data.

Clock phaseMemory

One of the two stretches of a clock's beat: the time it stays LOW or the time it stays HIGH. A gated latch whose enable stays HIGH for a whole phase lets Q race through several values. In a flip-flop the master is transparent during the LOW phase and the slave during the HIGH phase.

Clock pulseNetwork

One swing of the clock line from low to high and back. Sending one bit takes three moves: set the data line, raise the clock, lower it again. The rising edge in the middle tells the receiver the data line is ready to be read, and eight pulses, one per bit, carry a byte.

Clock tickNetwork

One fixed slice of time marked out by a clock. On the book's wire the sender holds the data line high or low for one tick per bit and the receiver samples the line at each tick, so eight ticks carry the eight bits of the byte 0x68.

Command and argumentsSoftware

The two parts a shell splits a typed line into: the first word names the program to run, and the rest are handed to it. The line cat greeting splits into the command cat and the argument greeting, and add 40 2 prints 42.

Command lineSoftware

One line of text typed at a shell, naming a program and what to hand it. The shell reads it, splits it into words and treats the first as the command. The book's session types six, among them echo hello world, cat greeting and add 40 2; an empty line does nothing.

CommentSoftware

Text in a program meant for a human reader and ignored by the translator. In the book's assembly anything after a semicolon is a comment: the parser drops everything from the first semicolon onward, so ; acc = a beside LOAD a never reaches the assembler.

Comparison expressionSoftware

An expression that asks a question about two values and answers with a number. The book's imperative language has one, a < b, which yields 1 when true and 0 when false, so a loop has something to test: i < b stays 1 until i reaches b, then becomes 0.

Compiler front endSoftware

The short pipeline, shared by compilers and interpreters, that reads a program before it is run or compiled. The lexer turns text into tokens, the parser turns tokens into a tree, and the tree is then run or compiled; each stage hands the next a tidier form of the program.

Compiler temporarySoftware

A memory cell the compiler invents to hold an intermediate value. The accumulator holds one value at a time, so the outer addition saves its left side in _t0, computes the right side, then adds the saved value; a nested addition uses the next depth, and the underscore keeps these names apart from any the source can use.

Conductor and insulatorSwitch

A conductor lets current flow easily; an insulator blocks it. Silicon is neither, hence semiconductor, and doping lets its conductivity be engineered. In the MOSFET the thin glass under the gate is an insulator, while the channel a HIGH gate forms is a conducting bridge between the wells.

Configurable logic blockCPU

One of the identical blocks that make up an FPGA. The book's is a two-input lookup table whose four loaded entries decide which gate it is; a real logic block also pairs its LUT with a flip-flop on its output, so a fabric can hold state between clock ticks.

Configuration bitCPU

One stored bit of an FPGA's setup. Some fill the lookup tables, four one-bit entries for a two-input block; others drive the switch points of the wiring, where a 1 connects the two wires a switch straddles and a 0 leaves them apart. The bitstream is all of them together.

Contiguous blocksSoftware

Blocks that sit next to each other in one unbroken row. A file rarely gets them once files have been written and deleted for a while. The book's long lands in blocks 0, 2, 3 and 4, which are not contiguous, yet the chain links them in order and the file reads back whole.

Control signalCPU

A line by which the control unit directs another part of the CPU. For each opcode the book's control unit asserts the right ones: it enables the accumulator write or the STORE write to memory, steers the selector in front of the accumulator, and lets a taken branch override the advanced program counter.

CoreCPU

One complete processor: the part of a chip that fetches, decodes and executes instructions. The book measures every memory by its distance from the core. An addition takes it about a cycle and a read from main memory a few hundred, so without a cache beside it a core would spend almost all of its life waiting.

Countdown loopSoftware

A loop whose counter starts at the number of passes wanted and falls to zero, so the counter itself can be the condition. The book rewrites its multiplication this way, with i = b and while i do. Its grammar has no negative literals, so each pass adds an input named minusone, which holds -1.

CRC-16/CCITT-FALSENetwork

The particular CRC the book computes: a 16-bit remainder sent as two bytes, in the variant that starts its register at the initial value 0xFFFF and uses no bit reflection. Each variant has its own published check value, and this one gives 0x29B1 for the bytes 123456789.

Cross-coupled gatesMemory

Two gates wired so that each one's output feeds an input of the other. The SR latch is a cross-coupled pair of NOR gates, and its two crossed feedback wires are the memory: they are what makes the latch different from any circuit in the earlier chapters.

Cumulative acknowledgementNetwork

An acknowledgement that is a single number meaning everything up to here has arrived, instead of a list naming each segment. TCP uses it, with optional selective information. The book's receiver does not: it names every segment it holds, so it can report segments 0 and 2 while segment 1 is still missing.

D

Data cellSoftware

A memory cell that holds a value for the program to work on, not an instruction. A DATA directive makes one: a raw byte, not split into opcode and operand. The book's program names four, a, b, c and result, and opens with JUMP start so the CPU never tries to execute them.

Data lineNetwork

The wire that carries the bits themselves, beside the clock line that says when to read them. To send a bit, the sender puts it on the data line and then pulses the clock from low to high. Eight pulses, most significant bit first, carry a byte: 01000001 is the letter A.

Data link layerNetwork

The layer that turns the wire's raw, unmarked stream of bytes into something usable. It has two jobs: mark where one message ends and the next begins, by wrapping each in a frame, and notice when the wire corrupts a bit, by a CRC. A frame that fails the check is dropped.

DatapathCPU

The routes values take between a CPU's parts. In the book's CPU the program counter drives the memory address, the decoder splits the fetched word, and a multiplexer chooses whether the ALU's sum or a loaded word enters the accumulator, so loading 1 and then 2 leaves 2, not 3.

DecimalArithmetic

The everyday way of writing numbers, in which places have weights 1, 10, 100 from right to left. The book states values in decimal and builds circuits in binary: decimal 13 is 11012, and the chapter's sum of 11 and 6 is 10112 + 01102 = 100012, which is 17.

DelimiterNetwork

A value set aside to mark a boundary instead of carrying data. The book's frames use two, the FLAG byte that opens and closes a frame and the ESC byte that announces a stuffed byte. Byte stuffing leaves no bare delimiter inside a frame, so a payload may contain the very bytes used as delimiters.

Delivery roundNetwork

One turn of the book's delivery loop: the sender sends every segment not yet acknowledged, the channel delivers some of them, and the sender immediately learns what the receiver holds. Rounds are synchronous, a simplification; real delivery uses timers. The book's run takes two rounds, sending [0, 1, 2, 3] and then [0, 2].

Dependent chainCPU

A run of instructions in which each needs the result of the one before it, so every link is a data hazard. In the book's timing model each then waits two cycles past the instruction it depends on, and four chained instructions take nine cycles where four independent ones take six. The accumulator CPU's arithmetic forms such chains.

DictionarySoftware

A table that pairs each key with a value and finds the value by its key. The book's interpreter holds a program's whole state in an ordinary dictionary keyed by variable name; after the multiplication loop it holds a as 6, b as 7, product as 42 and i as 7.

DiskSoftware

A storage device divided into a grid of fixed-size blocks, each known by its number. It is not a smooth surface to lay a file down on: a file takes whichever blocks have room. The book's Disk keeps the bytes of each block, a table of links and a directory; the figure draws eight blocks, numbered 0 to 7.

Double inversionSwitch

Inverting a signal twice, which gives back the original value. Follow a NAND with a NOT and the two inversions cancel, leaving plain AND; the chapter's program writes it as not_(nand(a, b)).

Dropped frameNetwork

A frame the receiver throws away instead of passing on, because the CRC it recomputes does not match the one the frame carried. In the chapter's run both frames are sent again with one bit flipped; the receiver drops the corrupted frame and keeps the good one, so one message arrives.

Duplicate segmentNetwork

A second copy of a segment the receiver already holds; a best-effort network can duplicate a packet as well as drop it. The book's reassembly indexes segments by sequence number, so a segment that arrives twice just overwrites itself with identical data. The example channel never duplicates.

E

ElectronSwitch

A particle that carries negative charge. The chapter counts each atom's outer electrons: silicon has four, phosphorus five and boron three. Phosphorus's fifth electron has no bond to join, so it drifts free, and the electrons a HIGH gate pulls up to the surface form the channel.

EmitterSoftware

The part of a compiler that writes out instructions, appending each to the program it is building. The book's code generator has two: an expression emitter, which leaves an expression's value in the accumulator, and a statement emitter, which stores an assignment's result or tests a loop's condition and plants the jumps.

Encryption and decryptionNetwork

Turning a message into ciphertext with a key, and turning it back. The book's toy does both with one operation, XORing the bytes with a keystream derived from the shared secret. Its decrypt checks the checksum first and only then XORs the keystream back, so Bob reads attack at dawn.

End-of-chain markerSoftware

The entry in the file allocation table that says a block is the last of its file, with no block after it. Writing marks the final block this way, and reading follows the chain until it meets the mark. For the book's long, block 3 leads to block 4, and 4 is the end.

EndpointNetwork

One of the two machines a conversation is meant to be between, as distinct from anything on the wire in the middle; the chapter also calls the other endpoint the peer. Agreement alone does not identify the other endpoint: with an intermediary in place, neither endpoint detects that it agreed with the intermediary.

EquivalenceGates

Two circuits are equivalent when they produce identical outputs for every combination of inputs, however differently they are drawn. The chapter's example is De Morgan's: a NAND and an OR with inverted inputs are the same gate, an equivalence its figure makes visible as geometry.

Error detectionNetwork

Noticing that data was damaged on its way. The receiver has no other copy to compare against, so the sender sends a checksum alongside the data and the receiver recomputes it; if the two disagree, a bit was corrupted. The book's link then drops the frame, which makes corruption visible.

Escape byteNetwork

The special byte, ESC, that begins a two-byte escape sequence and tells the receiver that the byte after it was stuffed; it is 7d in the book. An ESC that occurs in the data must itself be escaped: the chapter's second message contains one, and it crosses the wire as 7d 5d.

EthernetNetwork

A widely used technology for local links, and the setting in which link addresses are called MAC addresses. An Ethernet MAC address has six octets, which the book shortens to four in its examples, and the standard that defines ARP describes mapping a next-hop network address to an Ethernet address.

EvaluationSoftware

Working out the value of an expression. In the book's interpreter a number node evaluates to its value, a variable node to whatever the environment binds it to, and an addition node to the wrapped sum of its two children, so (a + b) + c evaluates to 42. A statement, by contrast, is executed.

EvictionCPU

Removing a line from a cache slot to make room for another. In a direct-mapped cache each line has exactly one slot, so a miss always evicts whatever that slot held. The book's thrashing trace visits lines 0, 4, 8 and 12, which all map to slot 0, so each visit evicts the line before.

ExceptionSoftware

The way a running Python function reports that it cannot carry on: it stops and hands the problem to its caller. The book's translator raises one, a PageFault, for a virtual page its table does not map, since no physical address can be returned. A real page fault goes to a kernel handler instead.

Executable fileSoftware

A file that holds a program's bytes, ready to be loaded into memory and run. A real shell asks the operating system to load one for a command. The book's commands are not executable files loaded onto its CPU; they are Python functions already available in the shell.

Execution budgetSoftware

A cap on how many steps a run may take, so that an experiment cannot run forever. The book's interpreter spends one step at every assignment and every condition test, 10,000 by default across the whole program, and raises an execution-limit error when they run out. Reaching the limit means the run was stopped, not that it finished.

Expression languageSoftware

A language whose whole program is one expression: a fixed formula, evaluated once, as a calculator does. The book's first language has only integer literals, variable names, addition and parentheses, and (a + b) + c is the whole of it. With no state and no loop it can add but cannot multiply.

ExpressivenessSoftware

What a language is able to say. Neither the book's machine nor its expression language can multiply, yet a loop over addition does; the chapter's lesson is that control flow buys expressiveness the hardware does not have on its own. With state, sequencing and repetition a language can compute anything the machine can.

F

FairnessSoftware

The property of a scheduling policy that gives every unfinished process its turn. Round-robin is the simplest fair policy: the book's scheduler goes around its list giving each process the same quantum, skipping only those that have halted. An exercise adds a third program to confirm each still gets its fair turn.

Fall-throughSoftware

What happens when a conditional jump is not taken: execution carries on with the next instruction. In the book's jump-driven machine JZ moves the program counter to its label only if the accumulator is zero and otherwise falls through, which is how a loop's test lets control into the body.

Feed-forward circuitCPU

A circuit in which signals flow one way, from inputs to outputs, with no path leading back. The book's fabric allows nothing else: a block may only read the chip inputs or blocks before it, so a loaded circuit can never chase its own tail and always settles. The model stops at combinational fabrics.

Field effectSwitch

Controlling whether a path conducts with an electric field alone. A voltage on the gate sets up a field that reaches through the thin glass and pulls electrons up to the silicon surface, where they form the channel. It gives the field-effect transistor its name.

Field-programmableCPU

Able to be given its circuit after it leaves the factory. The factory ships the same blank chip to everyone, and it is programmed in the field, after manufacture, by whoever loads it. The two words open the name FPGA, a field-programmable gate array.

File deletionSoftware

Removing a file by dropping its name from the directory and marking every block in its chain free. In the book's run, deleting a and c frees blocks 0 and 2, which the next file reuses. Writing over an existing name frees its old chain first, so no blocks are leaked.

File nameSoftware

The label by which a file is asked for. It is not kept with the file's bytes: the directory maps each name to the first block of its chain, and the blocks hold only data. The book's directory lists long at block 0 and b at block 1.

FireCPU

To evaluate a gate during simulation. A gate can fire only once every wire it reads is known; firing computes its output wire by calling the function its kind names, and that newly known wire may let other gates fire. In the XOR netlist shared fires first, then left and right, then out.

First fitSoftware

The placement policy that takes the first free run at least as large as the request; the book's Heap uses it, carving each request off the front of that run. It is the simplest choice, not the only one: real allocators also use best fit, buddy systems and size classes to trade speed against how much the heap fragments.

Fixed siliconCPU

A circuit cast directly into a chip, its gates and wires set at manufacture. It is the fastest and most frozen end of the chapter's spectrum: change one gate and you manufacture a new chip. A CPU is one fixed circuit made universal by running programs; an FPGA sits between the two.

Floating inputSwitch

An input left disconnected, so that nothing drives it and it can float at an unpredictable voltage. The chapter's account of CMOS assumes settled, valid LOW or HIGH inputs; a floating input is one of the analog effects its binary model leaves out.

ForwardingCPU

Routing a value straight from the execute stage that computes it to the instruction behind, instead of making that instruction wait for the write-back. Many stalls disappear, but a value needed before it exists is still a hazard.

Four-to-one multiplexerArithmetic

A multiplexer with four data inputs, chosen between by two select bits. Three 2-to-1 multiplexers compose into one. The book's ALU uses one per bit position, written mux4, to pick among the add, AND, OR and XOR results according to the two opcode bits.

Free-running clockNetwork

A clock that ticks on its own, independent of the machine at the other end of a link. Two such clocks can drift apart, the worry of the framed wire. On the book's two-line link the clock travels alongside the data, so the receiver needs no separate free-running clock and reads only on the sender's rising edges.

G

Gate countGates

How many gates a circuit uses, a first measure of its cost. Counted as NANDs, the chapter's NOR is four: two input inverters, the OR NAND and one final NAND acting as NOT. XOR is also four, because one NAND is shared instead of being computed twice.

Gate networkGates

Several gates wired together, outputs into inputs, to compute one result. The chapter's XOR is a four-gate network of NANDs that detects whether two bits disagree, and the chapter calls it part of the skeleton of every binary adder.

Gate recordCPU

One entry of a netlist, describing one gate: the wire it drives, its kind, and the wires it reads. The first record of the chapter's XOR netlist says that a nand gate drives the wire shared and reads a and b; four such records are the whole circuit.

Generator polynomialNetwork

The fixed divisor of a CRC. The whole message is treated as one enormous binary number and divided by it, bit by bit: whenever the leading bit of the 16-bit register is 1, the register is shifted and the polynomial subtracted, which modulo 2 is an XOR. What is left after the whole message is the checksum.

GrammarSoftware

The rules that define a language's syntax, one per kind of phrase. The book's imperative language needs seven, from program, a list of statements, down to atom, a number, a name or a parenthesized expression; its recursive-descent parser has one method per rule.

Grammar ruleSoftware

One line of a grammar: it names a kind of phrase and says what it may be made of. The book's rule for a loop is while, an expression, do, a list of statements and end. Its recursive-descent parser has one method per rule, so a rule that mentions another becomes a method that calls another.

H

Halted flagCPU

The one bit of the book's CPU state that records that the machine has stopped. It starts false; executing HALT sets it, and from then on a step returns without fetching anything. The run() method returns normally only once it is set.

Hand encodingSoftware

Writing a program as machine words yourself, working out every opcode and address. The book's CPU chapter did it with calls like program[0] = encode(LOAD, 13). The numbers are correct but fragile: insert one instruction near the top and every address below it shifts by one. An assembler takes over that bookkeeping.

HandlerSoftware

The kernel routine that carries out one kind of request. The book's kernel keeps a table of three, for WRITE, READ and GETPID; the matching one runs in the kernel's privileged mode, and its result is what the program gets back. The write routine appends its argument to the output and returns 0.

Handshake signatureNetwork

A value computed over the handshake with a private key, which the other side verifies to confirm who took part. In a typical web TLS connection the client validates a certificate for the expected server name and verifies a handshake signature made with the corresponding private key. The book's code deliberately leaves this step out.

HardwareCPU

The physical machine: transistors, gates, wires and chips, as opposed to the programs and data loaded into them. Until the FPGA chapter every circuit in the book was wired in place; an FPGA's hardware is generic and its circuit is loaded, which gives it hardware speed with software's ability to be reloaded.

Hardware description languageCPU

A language for writing a circuit down as source text, since circuits with billions of transistors are never wired by hand. Verilog is one; tools compile its source into a netlist of gates and wires, which a simulator can test long before the chip is built in silicon.

Hazard ruleCPU

The condition that lets an overlapped pipeline give the same result as running its instructions one at a time: no instruction reads an operand before the instruction that produces it has computed it. The book's checker calls a schedule safe when every read comes strictly later than the execute that writes the register.

Heap fragmentationSoftware

The breaking of free memory into small separate holes as blocks come back in any order, so a request can fail even though the room exists. Left unmerged, the book's freed runs (0, 4) and (4, 4) would stay two holes and refuse a request for eight cells; coalescing undoes the fragmentation that freeing creates.

Heap holeSoftware

A free run left among live blocks when a block comes back out of order. In the book's run, freeing a leaves a hole at 0 while b and c stay in use; freeing b, whose run touches the hole, merges the two. The allocator must reuse holes, or the heap fills with gaps and can satisfy nothing.

High-level languageSoftware

A language more abstract than assembly: a program says what to compute and leaves the choice of instructions to a translator. The book's arithmetic language is one level up, so the single line (a + b) + c stands for a program that loads a, adds b, adds c and stores the result.

Hit timeCPU

The cost of a cache access that hits, and a cost every access pays, hit or miss. The book's model sets it to one cycle, so a program that always hit would average exactly one cycle an access; anything above that is the work of the miss penalty.

Hold stateMemory

What an SR latch does while S and R are both LOW: each gate's output holds the other gate's input, so both outputs stay at their last value. The chapter calls it the point of the circuit: the latch sits in one of two stable states, exactly one bit of memory.

Hop countNetwork

The number of links on a route, and so the distance between two machines when every link counts as one hop. The book's breadth-first search records it as it goes: each newly reached node is one hop farther than the node it was reached from. From A to F the count is 3.

HTTP versionNetwork

The label in a start line that says which form of HTTP a message is written in. HTTP/1.0 closes the book's request line, GET /hello HTTP/1.0, and opens its reply, HTTP/1.0 200 OK. The chapter's messages have the text shape of HTTP/1.x; HTTP/2 uses binary framing instead.

I

In flightCPU

Said of an instruction that has entered a pipeline and has not yet finished its last stage. Once the book's three-stage pipeline fills, three instructions are always in flight and one finishes every cycle; the figure lights cycle three, where three of its four instructions overlap.

In the clearNetwork

Sent as plain bytes with no protection, so that anyone sitting on the wire between the two machines can read them. Every message in the book before this chapter crosses the network this way, the protocol chapter's request included. A secure channel must protect the bytes and establish who is at the other end.

Independent instructionsCPU

Instructions none of which reads a value that another of them writes, so a pipeline can overlap them without waiting. The book's figure shows four: each runs its stages one cycle behind the instruction above it, and all four finish in six cycles with no stall.

Indexed blocksSoftware

An allocation scheme in which a file's blocks are found through a list of their numbers, rather than by following a link from each block to the next. The chapter only names it, beside runs of adjacent blocks, as something filesystems can use in place of the chain the book builds.

Input and outputSwitch

The wires on which a part receives its values, and the wire on which it delivers its result. In the CMOS inverter a single input a drives both transistor gates and the output is its opposite; the NAND has two inputs, a and b, and one output.

Integer divisionArithmetic

Division of whole numbers that stops at a whole quotient and reports what is left over as a remainder, with no fraction. The chapter's run divides 13 by 3 and prints quotient 4, remainder 1. Real processors also divide fractions; the chapter keeps to the integer idea.

IntegrityNetwork

The assurance that a message is exactly what its sender wrote, with any change on the way detected. The book's record falls short of it: a mismatched checksum rejects the record, but many different records share a one-byte checksum, so a matching tag establishes neither cryptographic integrity nor the sender's identity.

InterleavingSoftware

The mixing of several programs' steps on one processor, a few from one and then a few from another. With a quantum of three steps the book's two programs interleave as adder, pair, adder, pair, and it changes nothing about either answer: the accumulators still hold 42 and 9.

IntermediaryNetwork

An attacker in the middle who replaces messages instead of only watching them. In the chapter's example an intermediary swaps both public values for its own, computed from private exponent 9: Alice derives 1493771129, Bob derives 849309108, and the intermediary derives both keys, so it can read each message and encrypt it again unnoticed.

Intermediate sum and carryArithmetic

The values a full adder passes between its two half adders. The first adds a and b, giving an intermediate sum and a carry; the second adds that sum to the carry-in and may give a second carry. At most one of the two carries can be 1, so a simple OR merges them.

InternetNetwork

The worldwide network of networks. The chapter describes it as billions of machines joined by many local links, not a single shared wire that every machine can hear, so a message from here to anywhere crosses a chain of intermediate machines, each passing it one step closer. The book studies the problem on six machines.

IPv4 addressNetwork

A real network-layer address, the kind used by version 4 of the Internet Protocol. The book writes none out: its letters A through F are readable stand-ins for such addresses, here and in the routing chapter. They are not host names such as example.com, which DNS resolves later.

J

JTAGNetwork

A real chip-testing protocol, named after the Joint Test Action Group. The chapter names it beside SPI as having the shape of its bit-banged link, in which a clock and a data line driven by hand carry bits across one at a time.

JUMPCPU

The unconditional branch of the book's CPU, opcode 4: it sets the program counter to its operand, so the next fetch starts there. The counter has already advanced by the time an instruction executes, so JUMP overwrites the already-incremented value with the branch target.

JZCPU

Branch on zero, opcode 5 of the book's CPU: it sets the program counter to its operand only if the accumulator is 0, and otherwise lets the next instruction follow. The control unit decides from a zero test of the accumulator. It is the machine's only conditional instruction.

K

Key derivationNetwork

Turning the secret that two ends agreed on into the key bytes that protect their records. The book's toy derives a repeating keystream of four key bytes from the shared secret, one of the things that prevent it from being a secure channel; real TLS combines suitable key agreement and key derivation.

Keyed checksumNetwork

A checksum that depends on a secret as well as on the message, so that only a holder of the secret should be able to produce a matching one. The book's toy record carries a one-byte keyed checksum, checked before decoding; many records share one byte, so a match establishes neither integrity nor the sender's identity.

L

L1, L2 and L3 cachesCPU

The three levels of cache a real processor places between its registers and main memory, each trading size for distance. The book's ladder prices them at 4, 12 and 40 cycles, against 1 for a register and 400 for main memory: on your desk, across the room and down the hall.

LayerNetwork

One level in the design of a network, which builds on the level beneath it and offers something more usable to the level above. The book builds its network one layer at a time from the bottom: the physical layer moves raw bits, and the link layer turns that unmarked stream into frames and makes corruption visible.

Lazy allocationSoftware

Putting off giving a page real memory until the program first touches it. The chapter lists it among the valid work a real page fault can ask the kernel to complete: the handler supplies the missing mapping and resumes execution. The book's model does nothing lazily; an absent entry simply raises an exception.

Left shiftArithmetic

Moving every bit of a number one place to the left, towards the more significant end, which leaves the lowest bit empty. Each step of binary long division shifts its running remainder left and drops the next dividend bit into that empty low bit, the binary form of bringing down the next digit.

Level (of gates)Gates

A rank of gates that all sit the same number of gates away from the inputs, so a signal crosses one gate per level. The chapter's XOR is four NANDs in three levels: a shared NAND, two NANDs combining it with each input, then an output NAND.

LibrarySoftware

Ready-made code that someone else wrote, joined to a program when it is linked. The chapter names libraries as part of why a real program is not one file: its pieces are written and assembled separately, then joined at the end. The book's own example links two modules and no library.

Line numberCPU

The number that names the cache line an address belongs to: the address divided by the line size, remainder dropped. With the book's eight words per line, addresses 0, 32, 64 and 96 fall in lines 0, 4, 8 and 12. The line number then chooses the slot; in a four-slot cache all four of those land in slot 0.

LinkNetwork

A direct connection between two machines, across which one can send to the other without help from a third. In the book's network graph every link is an edge and counts as one hop. A has links to B and C only, so a message from A to F must cross intermediate machines.

Link costNetwork

A weight given to a link, such as its speed or its cost, so that routes can be compared by more than their number of links. A real network weighs its links this way and its shortest route is the cheapest one; the book treats every link as one hop, which keeps the search in its simplest correct form.

Link orderSoftware

The order in which objects are handed to the linker, which decides where each one lands in the image. The book's linker resolves a module's own labels as local addresses, correct only at the start of the image, so the main module is linked first; a real linker relocates every reference by wherever its module lands.

Linked imageSoftware

The single runnable block of machine words a linker builds from its objects, with every blank filled. The book's has seven words, 21, 54, 36, 0, 0, 7 and 35: five from main, then the two data values. Addresses must fit the machine's 4-bit operand, so an image holds at most sixteen words.

LiteralSoftware

A value written directly in the program text, such as the 1 in 255 + 1, as opposed to a variable, whose value comes from the environment. The book's first language allows integer literals from 0 to 255, and its compiler gives each one a data cell with a name like _lit42.

Literal operandSoftware

An operand that is the value itself, not the place where a value is kept. On the book's toy CPU every operand is an address. The idealised machine of this chapter lets LOAD carry a literal value, so LOAD 0 puts 0 in the accumulator while LOAD b still reads memory.

LOADCPU

The instruction that copies a memory word into the accumulator, opcode 1. The loaded word bypasses the adder and replaces what the accumulator held, so loading 1 and then 2 leaves 2, not 3. The example program opens with LOAD 13, which puts the 10 stored at address 13 into the accumulator.

Load lineMemory

The control input, shared by every bit, that tells a register whether to take a new word. When load is HIGH, the next rising edge captures the data word; when load is LOW, each flip-flop feeds its own output back and the word holds. A RAM write asserts only the selected register's load line.

LoaderSoftware

The part of a system that copies a program's bytes from storage into memory before it executes. The book builds none: its shell's commands are already resident, which lets the chapter follow command dispatch on its own. A real shell asks the operating system to load executable programs.

Look-aheadSoftware

Peeking at the next token without consuming it, to decide which grammar rule applies. The book's statement parser needs a single look-ahead: a statement that begins with while is a loop, and anything else is an assignment. The same peek tells a loop's body where to stop, at the matching end.

Loop bodySoftware

The block of statements a loop repeats. In the book's language it is the list of statements between do and the matching end; the example loop's body is two assignments, product = product + a and i = i + 1. Because a body is read as ordinary statements, loops nest inside loops.

Loop counterSoftware

A variable that keeps track of how far a loop has got. In the book's multiplication loop it is i: it starts at 0, each pass advances it by 1, and when it reaches b the comparison becomes zero and the loop ends. The next chapter's version counts down from b to zero instead.

Loop passSoftware

One trip through a loop: the condition is tested and, if it is nonzero, the body runs once. The book calls each trip a pass, where many texts say iteration. With a as 6 and b as 7, its multiplication loop makes seven passes, each adding 6 to product.

Lossy channelNetwork

The book's stand-in for an unreliable network: whatever carries the sender's segments toward the receiver and may drop or reorder them. The example channel drops the even-numbered segments on their first try, delivers the odd ones reordered, never duplicates, and delivers a lost segment on its second attempt.

LOW and HIGHSwitch

The two voltage bands a wire is read as, called exactly 0 and 1. A voltage that drifts into the low band is snapped back to a clean 0, and one in the high band to a clean 1: gates drive their settled output towards a rail, restoring signals as long as noise stays within the bands.

LoweringSoftware

Rewriting a construct of the source language in the simpler terms of the machine below it. A processor has no idea what a loop is, so the compiler lowers while to a test and two jumps. The book's compiler lowers only addition and a loop tested against zero; a comparison such as i < b would need more cases.

M

Malloc and freeSoftware

The usual names of an allocator's two library routines: malloc hands out a block of the size asked for and returns its start address, and free takes a block back. In the book's run, malloc(4) three times returns 0, 4 and 8, and freeing all three leaves the single run [(0, 16)].

MaskNetwork

A fixed pattern of bits combined with a value to change or pick out chosen bits. The book's byte stuffing masks each escaped byte with 20 by XOR, which flips one bit, so 7e becomes 5e and 7d becomes 5d; the receiver undoes the flip when it un-stuffs the frame.

Master-slave flip-flopMemory

Two gated D latches in series on opposite clock phases, the arrangement that makes a D flip-flop. The master is transparent while the clock is LOW and the slave while it is HIGH. At the rising edge the master closes, locking in the last d, and the slave opens to present it as Q.

MemoryMemory

A circuit that keeps what was written to it: a stored bit survives after the signal that wrote it changes. No combinational circuit can do this, so the chapter builds memory from feedback: one bit in a latch, then a word in a register, then a small RAM of four words.

Memory controllerMemory

The part of a memory system that manages its DRAM. Because the charge in a DRAM cell leaks, the controller must periodically refresh rows before the stored values fade. The chapter's small RAM needs none: like SRAM, it holds each bit by feedback for as long as power remains.

Memory imageCPU

The whole contents of a memory at one moment. The chapter draws the image its example program builds, just before the first cycle: instruction words at addresses 0 to 4, zeros between, the result slot at 12 and data at 13 to 15. Program and data are the same kind of thing, words in one memory.

Memory regionSoftware

A stretch of memory handled as one piece. Kernel requests acquire or release larger regions as needed, and the allocator subdivides what it already holds, so each small allocation need not make a system call. The region managed this way is the heap; the book's is one fixed region of sixteen cells, with no kernel calls.

Memory wordMemory

A fixed group of bits stored and moved as one unit. A register holds one word, one flip-flop per bit, and its shared clock makes all the bits change together; the chapter's register holds a 4-bit word, and its RAM holds four words of equal width, picked by address.

Menu of servicesSoftware

The small, fixed list of things a kernel will do for a program, each service a number the program names. The book's menu has three: write a value out, read one in, and report the program's own id. The program strings these together to get its work done, never touching the resources behind them.

MessageNetwork

A run of bytes that one machine means another to receive as a whole. A wire delivers only an unbroken stream, so the link layer must mark where one message ends and the next begins. The chapter's run sends two messages, the first the two letters hi, and both come back exactly as sent.

Message encodingNetwork

Writing a message's parts out as the bytes that travel, the opposite of parsing. The book's client encodes a request for /hello as the lines GET /hello HTTP/1.0 and Content-Length: 0 followed by a blank line; the server encodes its reply in the same shape, beginning HTTP/1.0 200 OK.

Message framingNetwork

Marking where a message ends inside a stream that never stops. The chapter's messages do it in two steps: a blank line ends the head, and Content-Length states the body's length, so the body is taken by count and not by searching for a delimiter. HTTP/2 uses binary framing instead.

Message headNetwork

Everything in a message before the blank line: the start line and the headers. The book's parser splits the head from the body at the blank line, takes the first line of the head as the start line, and reads every later line as a header, a name and value pair such as Content-Length: 23.

Message parsingNetwork

Turning a message's bytes back into its parts. The book's parser splits head from body at the blank line, reads the start line and headers, and takes the body by Content-Length. It raises an error if the separator is missing, the length is not a nonnegative decimal, or the body is too short.

Minuend and subtrahendArithmetic

The two numbers of a subtraction: in a - b the minuend a is the one subtracted from, and the subtrahend b is the one taken away. The book's subtraction inverts every bit of the subtrahend, adds one, and adds the result to the minuend.

Miss penaltyCPU

The extra cost of a cache miss: the slow trip to fetch the line from memory further out, paid on top of the hit time. The book's model charges a hundred cycles against a one-cycle hit, so at 99 hits in a hundred the average access already costs two cycles, double the hit time.

Mode bitSoftware

The hardware bit with which a real processor enforces the boundary between a program's restricted mode and the kernel's privileged one. The book has no such bit: its program holds a reference to the kernel object and is only meant to cross through the syscall, so nothing the machine does prevents a shortcut.

ModelSwitch

A simplified description of a real thing that keeps only what the question needs. The book's code is a binary model: a switch passes its signal only when its control is HIGH, and analog effects are left out. The truth tables it prints come from running that model, not from typing them in.

ModuleSoftware

One source file of a program, written and assembled on its own. It cannot know where in memory it will finally sit, or the address of a label defined in another file, so it is assembled into an object with blanks. The book links two: main, with the code, and data, with the values.

Mutable stateSoftware

The values a running program keeps and can change. In the book's interpreter it is the environment, the dictionary of variable values: an assignment writes into it, which is what lets a later statement see an earlier one's work. State, sequencing and repetition are what separate a language from a calculator.

N

n-channel and p-channelSwitch

The two flavours of the transistor switch. An n-channel device conducts when its gate is HIGH; a p-channel device is the mirror, conducting when its gate is LOW. CMOS gates use both: p-channel switches pull the output HIGH and n-channel switches pull it LOW.

Named memorySoftware

Memory whose cells are found by name, not by numeric address. The book's code generator keeps variables and labels as names, the form assembly takes before a linker places it, and its jump-driven machine holds them in a table that starts as the input environment. Such memory is unbounded, unlike the toy CPU's sixteen words.

NeighbourNetwork

A machine one link away, which can be reached directly. In the book's network A has two neighbours, B and C, and D has three. A routing table names one neighbour for each destination, and breadth-first search visits the source's neighbours first, then their neighbours, and so on outward.

NestingSoftware

One structure placed inside another of the same kind. In the book's first language parentheses group sub-expressions and groups can nest; a single recursive call in the parser lets expressions nest to any depth. In the next language a loop's body is read as ordinary statements, so loops nest inside loops with no extra machinery.

NetworkNetwork

A set of machines joined by links so that any of them can send messages to any other, including machines that share no direct link. The chapter's example network is six machines with addresses A through F; its run lists the links of each, beginning with A connects to B, C.

Network graphNetwork

A network with the wires stripped away: machines are nodes, and a link between two machines is an edge. The book's example is six machines, A to F, arranged as two triangles joined by two links, so a message from A to F must cross intermediate machines.

Network layerNetwork

The layer above the link, concerned with where a packet should eventually arrive and not with which interface receives the next frame. Its addresses are the book's letters A through F, stand-ins for addresses such as IPv4 addresses. The chapter's figure calls it the routing layer and shows ARP turning its next-hop address into a link address.

NibbleCPU

Half of an 8-bit word, four bits. The book's instruction word splits into two: the high nibble, bits 7 to 4, carries the opcode, and the low nibble, bits 3 to 0, carries the operand, so each field has room for 16 values.

Node and edgeCPU

The two ingredients of a graph: a node is a thing, and an edge joins one node to another. In the chapter's circuit each gate is a node and each wire an edge, so the XOR built from four NAND gates is drawn as four gate nodes, with edges leading from a and b through to out.

NoiseSwitch

Unwanted disturbance of a wire's voltage, such as what a wire picks up from its neighbours. Gates restore signals whose noise stays within the valid input bands, snapping them back to a clean 0 or 1; they cannot rescue a disturbance that crosses into the wrong band.

Nonterminating loopSoftware

A loop whose condition never reaches zero, so it would run forever. The book's language permits such loops, and its interpreter therefore runs every program on a budget of steps. The chapter is careful: reaching the limit shows that the run was stopped, not that the program has been proved nonterminating.

O

Object fileSoftware

The output of assembling one module on its own, which the book calls an object: its machine code, the labels it exports, and the imports it needs, left as blanks. In the book, main.o holds code whose LOAD and ADD operands are blank, and data.o holds the values 7 and 35.

OctetNetwork

A group of exactly eight bits, the word network standards use for a byte when they give the size of an address. Ethernet MAC addresses contain six octets; the book's MAC strings, such as 02:00:00:0b, have four, and the chapter calls them abbreviated teaching labels.

One-hotMemory

A way of marking one choice on a group of lines: exactly one line is HIGH and the rest are LOW. The chapter's 2-to-4 decoder turns two address bits into four one-hot select lines; its four AND gates cover every combination of the address bits with no overlaps and no gaps.

Operand (of an expression)Software

A value that an operation works on. In (a + b) + c the outer addition has two operands, the sub-expression a + b and c; flattened, the whole sum has three, and the book's compiler gives each distinct operand a memory cell. An instruction's operand is a narrower thing, an address field.

Operating systemSoftware

The program in charge: a program like any other, but privileged, which decides which program runs and shares the single processor among them all. The book's tiny one is a scheduler that runs several programs on the sixteen-word CPU by letting each take a turn.

P

Page faultSoftware

The event raised when an access touches a page the table does not map. In the book's model it is simply an exception, since no physical address exists; a real one can also ask the kernel to finish valid work, such as allocating a page lazily, and the handler then either supplies a mapping and resumes or rejects the access.

Peer authenticationNetwork

Establishing who is at the other end, which agreement alone does not do. An intermediary that replaces both public values agrees separately with each side, so it can read a message and encrypt it again for the other side without recovering either private exponent. In a typical web TLS connection, the client validates a certificate for the expected server name.

Persistent storageSoftware

Storage that keeps its contents without power, so data outlives any running program. Memory forgets everything when the power goes; a disk does not. The book's Disk is not persistent itself: it lives in Python memory and nothing is saved across process restarts, so it shows how file blocks are found, not the device.

Physical layerNetwork

The bottom layer of a network, where a bit is nothing but a voltage. The sender holds the wire high or low for one tick of a shared clock per bit and the receiver reads its level once per tick; eight ticks carry the byte 0x68. It is unreliable: a clock can drift and noise can flip a bit.

Pipeline bubbleCPU

The empty slot a stall leaves in a pipeline: a cycle in which a stage has no instruction to work on. In the book's hazard figure r2 is held back at cycle 2, drawn as a dashed box, and everything behind the bubble slips a cycle.

Pipeline depthCPU

The number of stages an instruction passes through in a pipeline; the book's has three. A deeper pipeline fetches further ahead before a branch executes, so a wrong guess costs more: the book's figure flushes two instructions, and a deeper pipeline would flush more.

Pipeline scheduleCPU

The plan that gives every stage of every instruction a cycle number. The book builds one by placing each instruction one cycle after the last, unless it must wait for a register an earlier instruction is still computing; the run then takes as many cycles as the last instruction's execute, plus one.

Power of twoArithmetic

A number reached by doubling from 1: 1, 2, 4, 8 and so on. Powers of two are the weights of binary places, and they count what a group of bits can tell apart: the two opcode bits of the book's ALU select one of four operations.

Pre-shared keyNetwork

A secret that both ends already hold before the handshake begins. The chapter names it as another way, besides a certificate and a handshake signature, to authenticate a peer and the handshake. The book's toy uses none of them: its exchange has no authentication at all.

PrecedenceSoftware

The rule that decides which operator takes its operands first when no parentheses say. The book's first language has only addition, so the question does not arise in it; an exercise adds multiplication, binding tighter than addition, and asks where in the parser that precedence lives.

PreemptionSoftware

Stopping a process that has not halted in mid-run, the moment its quantum is spent. The book's scheduler gets this free because the CPU is simulated one step at a time and it counts steps from outside; a real operating system needs a timer interrupt to regain control from a running core.

Private exponentNetwork

The number each side of a key exchange keeps to itself and never sends. In the book Alice's is 6 and Bob's is 15. Each raises the other's public value to its own private exponent, modulo the prime, and both arrive at 1893334806. A real exchange needs large enough exponents and groups, and the book's small constants do not meet that requirement.

PrivilegeSoftware

The right to touch the machine's resources directly. Only the kernel has it: its routines run in the privileged mode, while a program has no privileged state of its own and learns even its own id by asking. The operating system is a program like any other, but a privileged one.

Process contextSoftware

Everything the operating system must remember to pause a program and later resume it exactly where it left off. Each of the book's processes keeps its own: the saved program counter, the accumulator, a reference to its memory list and the halted flag. Only one context is loaded into the processor at a time.

Process creationSoftware

Asking the operating system for a new process in which a program can run. A real shell does this, and has an executable program loaded, for the commands it is given. The book's shell stops earlier, at dispatching functions that are already resident; the scheduler and memory translator remain separate models.

Process idSoftware

The number by which a kernel tells one process from another. A program has no privileged state of its own, so it learns even its own id by asking: the book's GETPID call, number 2 on the menu, returns 7, which the program then hands back to the kernel to write out.

Program inputSoftware

A value handed to a program from outside before it runs. In the book's languages inputs enter only through the starting environment: the multiplication program is given a as 6 and b as 7, and b must be a nonnegative integer for the loop to multiply. Everything else the program computes for itself.

Programming languageSoftware

A notation for programs, with two halves: syntax, the rules for which texts are programs, and semantics, what a program does once it is understood. The chapter asks what separates one from a calculator and answers with three things: a way to keep state, a way to do one thing after another, and a way to repeat.

Propagation delayMemory

The time a gate's output takes to settle to the result for new inputs. A combinational answer, such as a RAM read, is valid only once its gate delays settle; and when the inputs change, a gate has no separate way to retain the old result, which is why memory needs feedback.

ProtocolNetwork

An agreement between two machines on where their messages end and what the bytes mean. Without one, two machines holding an open stream are like two people on a phone line who have not agreed on a language: the line works and still they cannot talk. The book's protocol has the text shape of HTTP/1.x.

PrototypingCPU

Trying a design out in a form that is cheap to change before committing to the final one. Chip designers prototype on FPGAs: the book's processor could be loaded into a fabric, tested against real inputs for months, and recast in silicon only once it stops changing.

Pure functionArithmetic

A rule whose result depends only on the inputs it is given now, never on anything earlier. A combinational circuit's output is a pure function of its present inputs: feed it the same inputs twice and it gives the same output twice, which makes it easy to trace.

PythonSoftware

The programming language in which the book writes its models, including both of its interpreters. The chapter notes that Python itself is no tree walker: it compiles source to bytecode and runs that on a virtual machine. Its integers do not wrap at eight bits, so the book's first interpreter wraps each sum at 256 itself.

Q

Quotient bitArithmetic

One bit of the quotient, settled by one step of binary division: 1 if the divisor could be subtracted at that bit position, 0 if not. In the run of 13 / 3 only the step at bit 2 can subtract, so only bit 2 is set and the quotient is 0100, which is 4.

R

Range checkSoftware

A test that a value fits the space it is about to be written into. The book's assembler range-checks a DATA value, rejecting anything outside 0 to 255, but not a resolved operand: an address of sixteen or more would silently wrap in the four-bit operand field instead of being rejected.

Ready gateCPU

A gate whose input wires all have values already, so it can be evaluated. Each round, the book's simulator collects the ready gates and fires them all at once. With only a and b known, shared is the one ready gate of the XOR netlist; left and right must wait for it.

Reason phraseNetwork

The short text that follows the status code in a response's start line and says the same thing in words; the chapter calls it the reason. The book's server sends OK after 200 and Not Found after 404, so the reply to /hello opens with HTTP/1.0 200 OK.

Receiver bufferNetwork

Where the receiver keeps the segments that have arrived until the message is complete. The book's is a table from sequence number to segment, and the receiver acknowledges every segment in it. In the run it holds [1, 3] after the first round and [0, 1, 2, 3] after the second.

ReconfigurationCPU

Loading a different bitstream into the same fabric so that it becomes a different circuit. Nothing physical changes; configuring is only a memory write. The book loads one two-block fabric twice: bitstream A makes the half adder, and bitstream B, two NANDs with block 1 reading block 0, makes AND.

RecursionSoftware

A function calling itself on a smaller piece of the same problem. The book's interpreter is one recursive function: an addition recurses into both children, so the whole tree collapses to one byte from the leaves upward. In the parser, the recursion in the grammar becomes recursion in the code.

Recursive descentSoftware

The smallest kind of parser that handles nesting. One method reads an expression as terms joined by +; another reads a single term, and a parenthesized term calls the first method again, so the recursion in the grammar becomes recursion in the code and expressions nest to any depth.

RefreshMemory

What a DRAM memory controller must do to its rows periodically, before the stored values fade: a DRAM cell keeps its bit as charge on a tiny capacitor, and the charge leaks. SRAM, held by feedback, needs no refresh.

Register fileCPU

A set of general-purpose working registers inside a CPU, any of which an instruction may name. The book's CPU has none: it is an accumulator machine, so every ADD reads one operand from memory and adds it to the single accumulator.

Reliable deliveryNetwork

Delivery in which a message arrives complete and in order, or the failure is reported. The book's loop makes a narrower promise: when it succeeds under the stated channel contract, the returned message is complete and ordered. Retrying cannot guarantee success through a permanent outage, so past the round limit the call fails.

ReorderingNetwork

Arrival of pieces in a different order from the one they were sent in, as when two packets take different routes. In the book's run the first round sends segments [0, 1, 2, 3] and the two that get through arrive as [3, 1]; sorting by sequence number restores the original order.

Repeated additionSoftware

Multiplying with nothing but adding: add one number to a running total as many times as the other says. The book's machine has no multiply instruction, yet its loop adds a to product b times; with 6 and 7 that is seven additions of 6, ending at 42.

Request handlerNetwork

The code a server runs to answer one request. In the book's small protocol it is a lookup in a table of paths; a real web server has handlers that compute a page rather than look one up. Either way, a handler can still be understood as a function from a request to a response.

Request numberSoftware

The number by which a program names the service it wants. It leaves the number and an argument where the kernel will look, then traps. In the book, 0 is WRITE, 1 is READ and 2 is GETPID; a number that is not on the menu is refused, so a program cannot invent a service.

Request pathNetwork

The part of a request's start line that names what the client is asking for, after the method: /hello in GET /hello HTTP/1.0. The book's server answers by finding the path in its table, so /hello earns 200 OK and the page, while /missing, a path it does not have, earns 404 Not Found.

Resident programSoftware

A program already in memory and ready to run when it is asked for, so nothing has to be loaded first. The book's commands are all resident: they are Python functions already available in the shell, so dispatch only maps a command name to one of them and runs it.

ResourceSoftware

Something a program needs but must not touch directly: the screen, the disk, the network, another program's memory. The kernel holds the resources and the routines that touch them, and serves one request at a time; the book's program reaches the screen only by handing the kernel a value to write.

Return valueSoftware

What a call hands back to its caller when it finishes. Each of the book's system calls returns one number, the result of the routine the kernel ran: GETPID returns 7, the two READ calls return the inputs 40 and 2, and each WRITE returns 0.

RFCNetwork

A Request for Comments, one of the numbered public documents in which the internet's protocols are written down. The chapter cites two: RFC 826, which describes ARP's mapping from a next-hop protocol address to an Ethernet address, and RFC 1122, for its section on validating an ARP cache.

Rising edgeMemory

The instant a clock signal goes from LOW to HIGH. A D flip-flop's output changes only then, capturing the value d held at that moment and ignoring later changes until the next one. The bit-banged link reuses the idea: its receiver reads the data line on each rising edge of the clock line.

Root, child and leafSoftware

The positions a node can hold in a tree: the root is the top node, a child sits directly beneath another node, and a leaf has no children. In the tree of (a + b) + c the outer addition is the root, the inner a + b its left child and c its right; the three variables are leaves.

Round tripNetwork

A test that sends a value out and brings it back, then compares the result with the original. The bit-banging run clocks every byte from 0 to 255 out as line states and reads each back by sampling; all 256 survive, so the two lines carry any byte intact.

RouteNetwork

The chain of machines a packet passes through, source first and destination last. No packet carries its route and no table stores a whole one, since each machine holds only the first step. The chapter's run forwards a packet along the route A to B to D to F, three hops.

RouterNetwork

A machine that passes a packet on toward a destination other than itself. The routing chapter calls it an intermediate machine: on the journey from A to F, B and D each forward the packet one step. For a distant destination, the link address that ARP finds belongs to the next router, not to the final recipient.

Row bufferMemory

The store that holds the row a large memory has opened. The address is split into a row and a column: activating a row copies many nearby cells into the buffer, and column selection picks the requested bytes. A second access to the same row is a row hit and can be quick; another row must first be activated.

Row detectorSwitch

A small gate network that outputs 1 for exactly one row of a truth table. For the row where a is LOW and b is HIGH, a · b inverts a, keeps b and ANDs them. OR the detectors for every 1-row and any truth table follows; since NOT, AND and OR all come from NAND, NAND is enough.

Runaway processSoftware

A process whose program never halts. The book's scheduler has no guard against one: its loop runs until every process has halted, so a single runaway would spin the scheduler forever. The chapter names this as what its toy scheduler lacks.

Running and waitingSoftware

The two conditions of a process that has not yet halted. The running one has its context loaded into the processor; a waiting one sits saved until its turn. The book's figure shows adder running and pair waiting, and only one context is loaded at a time.

S

SaturationCPU

Stopping at a limit instead of going past it or wrapping round. The book's two-bit counter rises with each taken outcome and falls with each not-taken one, stopping at 3 or 0, so a steady branch saturates fast and then stays right. From a saturated state it takes two contrary outcomes to change the prediction.

Save and restoreSoftware

The two halves of a context switch. Restore loads a process's saved context into the one shared processor before it runs; save copies the processor's state back into the process when its slice ends. The book's mechanism is just these two and a loop, and it swaps a reference to a memory list rather than copying the memory.

ScanningSoftware

Reading text one character at a time, left to right, and deciding at each what to do: skip a space, gather a number, gather a name, make a symbol token, or refuse. The book's lexer is one such scan, and the small lexers of the next two languages reuse the idea.

Scheduling policySoftware

The rule by which a scheduler decides who runs next and for how long, as distinct from the mechanism that carries the decision out. The book's policy is round-robin, and the quantum is the whole of it; its mechanism is just save, restore and a loop.

SecrecyNetwork

Keeping a value from everyone who can watch the wire. The chapter treats it as a separate claim from agreement: the arithmetic makes both sides reach the same number, but hiding it rests on the belief that deriving it from the public values is infeasible, given suitable large groups and private exponents. The book's small constants do not qualify.

Secure channelNetwork

A way of talking across a network that protects the bytes and establishes who is at the other end. The book's toy is not one: its tiny parameters, four repeating key bytes, weak checksum and unauthenticated exchange each prevent it. Real TLS combines key agreement and key derivation, authentication of the peer and handshake, and secure record protection.

SegmentationNetwork

Cutting a message into pieces small enough to send and numbering each one, the first step of the book's transport; reassembly is the inverse. The number travels with its piece. With at most four bytes per segment, HELLO, NETWORK! becomes HELL, O, N, ETWO and RK!.

Selective acknowledgementNetwork

An acknowledgement that names each segment the receiver holds, so the sender can resend exactly the missing ones. The book's receiver works this way: with three segments and the middle one lost it answers ack 0, 2, and later ack 0, 1, 2. TCP carries selective information only as an option beside its cumulative acknowledgement.

SemanticsSoftware

The half of a language that fixes meaning: what a program does once it is understood. The book gives it by an interpreter that walks the tree, evaluating expressions and executing statements, so its multiplication loop leaves product at 42 when a is 6 and b is 7.

SemiconductorSwitch

A material that is neither a good conductor nor a true insulator. Silicon, the main ingredient of sand, is one: in a crystal, each atom's four outer electrons are locked into bonds with neighbours, so pure silicon has few loose charges to carry a current until doping changes that.

Sender and receiverNetwork

The two ends of one transfer across a wire. The sender holds the wire high or low for each bit, and the receiver watches it and reads its level once per tick. Whatever the sender adds, the receiver undoes: it splits the stream at the flags, un-stuffs each frame and recomputes the CRC.

SequencingSoftware

Doing one thing after another: with state and repetition, one of the three things that turn a calculator into a language. In the book's interpreter it is just the order of the statements, run one after another, each able to see what the earlier ones left in the environment.

Sequential executionCPU

Running instructions one at a time, each finishing before the next begins, as the book's accumulator CPU does. It is the standard a pipeline is held to: overlapping is allowed only because the result is the same. Run this way, the chapter's four three-stage instructions take twelve cycles; overlapped, six.

Set and resetMemory

The two control inputs of an SR latch, written S and R. Raising S sets the latch, so Q goes HIGH; raising R resets it, so Q goes LOW. Both HIGH together is excluded from normal use, and the book's model rejects that combination with ValueError.

SettlingArithmetic

A circuit's outputs reaching their final values after its inputs change; until then an output is not yet valid. In the ripple-carry adder each stage must wait for the stage to its right to settle before its own carry-out is valid.

Shared frameSoftware

A physical frame that appears in the page tables of several processes at once. Real systems map frames this way on purpose, for example to share data or read-only code. The book's example never does: its two programs get disjoint frames, so neither touches the other's cells.

Signal restorationSwitch

A gate's driving of its settled output towards a rail, which wipes out small errors on its input. A lone switch only passes its input along; the inverter and the NAND do the restoring. Repeated at every gate, within the valid bands, it is why two values work so reliably.

Signed and unsignedArithmetic

An unsigned number is never negative; a signed one may be. The chapter stays unsigned, so its subtraction refuses any result that would go below zero and its divider takes only unsigned values. Real processors also handle signed numbers, which the chapter leaves out.

SiliconSwitch

The element a transistor is made from, and the main ingredient of sand. A silicon atom has four outer electrons, each locked into a bond with a neighbour in the crystal, so pure silicon carries little current. The MOSFET's p-type body and n-type wells are the same silicon, doped two ways.

Simulation roundCPU

One pass of the book's simulator, in which every ready gate fires at once; the chapter also calls the rounds waves. Values spread outward from the inputs, round by round, until every wire is settled. The XOR netlist takes three, and listing its gates in any order gives the same rounds.

Size classSoftware

One of a fixed set of block sizes an allocator serves, each request being rounded up to the nearest. The chapter only names size classes, beside best fit and buddy systems, as a choice real allocators make to trade speed against how much the heap fragments.

Small multipleSwitch

A figure that repeats one small drawing several times, changing only what differs; the caption credits the form to Tufte. The chapter draws the same NAND pulldown four times, once per input combination, and the four output bits read left to right, 1,1,1,0, are the NAND truth table.

SoftwareSoftware

Programs: instructions and data loaded into a machine, as opposed to the hardware that runs them. The assembler is the first piece of software in the book. Assembling the sum program changes nothing about the machine, only the bytes placed in its memory, and the accumulator still ends holding 42.

Source and destinationNetwork

The machine a packet starts from and the machine it is meant to reach. A packet carries its destination and nothing about the way there; each machine it reaches looks that destination up in its own routing table. In the book's journey the source is A and the destination is F, and both must be nodes of the network.

Spatial localityCPU

The habit of programs to use the words next to one they have just used. It is why a cache moves whole lines: a miss on one word loads its eight-word line, and the next seven words then hit. The book's SCAN trace never reads an address twice, yet it hits 56 times and misses only 8.

SPINetwork

The Serial Peripheral Interface, a real protocol by which a processor talks to a chip beside it. The chapter names it, with JTAG, as having the shape of its bit-banged link: a clock line beside a data line, with each bit set on the data line and then clocked across.

SRAM and DRAMMemory

Two kinds of real RAM. An SRAM cell is a tiny latch that feedback holds while power remains, fast but physically large, so SRAM serves registers and caches. A DRAM cell stores a bit as charge on a tiny capacitor: much smaller, so DRAM is denser, cheaper and usually main memory, but the charge leaks and needs refresh.

SSDCPU

A solid-state drive: storage that keeps its contents without power, far larger and far slower than main memory. It is the disk rung of the book's ladder, 400,000 cycles from the core, which is 4.6 days at one second a cycle: a parcel in the post.

Stale mappingNetwork

A remembered answer that is no longer true. On a real network a machine can move or an interface can change, so a cached pairing of network address and MAC address can become stale; implementations must revalidate or discard old mappings and resolve them again. The book's inventory never changes, so its cache does not expire.

STORECPU

The instruction that copies the accumulator into a memory word, opcode 2, and the only one of the six instructions that writes to memory. The control unit enables the memory write for it. In the example program STORE 12 puts the sum, 42, into the result slot at address 12.

StringSoftware

A piece of text held as one value in a program: a sequence of characters. The lexers of the next two languages return each token as a plain string, where this chapter's returns a Token(kind, value) pair, and their parsers recognize the kind from the string itself.

Sub-expressionSoftware

An expression that forms part of a larger one. Parentheses mark it in the text, and in the tree it is a sub-tree: the a + b inside (a + b) + c is the left child of the outer addition. The book's parser descends into the parentheses and comes back with that sub-tree.

Sum bitArithmetic

The bit an adder writes in its own column, as distinct from the carry it passes on. For two bits it is their XOR: 1 when exactly one input is 1, and 0 when both are 1, where the sum wraps around and the carry records that 1 + 1 = 102.

Switch pointCPU

One programmable connection in a real FPGA's wiring: a transistor straddling two wires, its gate driven by a stored configuration bit. A signal crossing a mesh of switch points travels further and slower than one on a soldered wire, which is why an FPGA is typically several times slower than the same circuit cast in silicon.

Symbol resolutionSoftware

Replacing a name with the address it stands for. The book's assembler resolves a label its own module defines at once, to a local address; a label defined in another file it cannot resolve, so the operand stays blank until the linker has gathered every export and can look the name up.

Syntax errorSoftware

What a parser reports when the tokens do not fit the grammar. The book's parsers stop at the first token that cannot belong: another token where a group should close gives missing closing parenthesis, and tokens that run out early give unexpected end of input.

T

Table indexCPU

The position in a stored table that the inputs select. A lookup table's two inputs, packed side by side, spell the index: with a = 1 and b = 0 they pick row 10, and the block's output is the bit stored there, read out and not computed. It is a RAM address by another name.

Taken and not-takenCPU

The two outcomes of a branch: taken when execution goes to the branch's target, not-taken when it carries on with the next instruction. The book's predictor raises its counter by one for each taken outcome and lowers it by one for each not-taken outcome, and guesses whichever way the counter leans.

TamperingNetwork

Changing a message on its way between sender and receiver. The book's run flips one bit of the ciphertext, and the receiver refuses it with checksum mismatch: the message was tampered with. Catching that one edit proves little, since many different records share a one-byte checksum.

Target machineSoftware

The machine a compiler writes its instructions for. This chapter's target is an idealised version of the book's CPU: the same LOAD, STORE, ADD, JZ, JUMP and HALT, one accumulator and one program counter, but LOAD may carry a literal, memory is named and unbounded, and arithmetic does not wrap at eight bits.

Temporal localityCPU

The habit of programs to use again soon a word they have just used. A cache profits by keeping recently loaded lines close. The book's LOOP trace reads addresses 0 to 15 four times; its two lines stay cached after their first visits, giving 62 hits and only 2 misses.

Term (of an expression)Software

One of the pieces an expression joins with +. In the book's first grammar an expression is a sequence of terms, and a single term is a number, a name or a parenthesized expression; that last case sends the parser back to the expression method. The next chapter's grammar calls the same piece an atom.

ThrashingCPU

Lines that map to the same slot of a direct-mapped cache evicting one another on every visit. The book's THRASH trace visits lines 0, 4, 8 and 12, which all map to slot 0 of a four-slot cache, so it never hits, even though four lines would fit in four slots.

Tie-breakingNetwork

The rule that chooses among routes of equal length. The book's breadth-first search visits neighbours in sorted order, so ties break the same way on every run. From A, the ways to F through B and through C are both three hops, and the routing table at A records B.

Tied inputsSwitch

Two inputs of one gate wired to the same signal, so that they always agree. Tie a NAND's inputs together and “both high” collapses to “input high”, so the output is the input inverted: NOT from a single NAND, which the chapter's program writes as nand(a, a).

Timer interruptSoftware

A signal from a hardware timer that stops the running program and hands control back to the operating system. The book's scheduler does not need one, because it counts the steps of a simulated CPU from outside; a real operating system does, to regain control from a core that is actually running.

Timing modelCPU

A model that keeps only when each step happens. The book's pipeline chapter uses one: a separate machine with several named registers and three one-cycle stages, whose instruction records say only which registers are read and written. It checks the hazard rule but does not prove that overlapping keeps the sequential result.

Token kindSoftware

The label on a token that says what sort of piece it is, apart from its text. The book's lexer pairs every value with a kind, and its run shows six: NAME, NUMBER, EQUALS, PLUS, LPAREN and RPAREN. Two tokens can share a kind and differ in value, as 12 and 3 do.

ToolchainCPU

The set of programs that turns a design into the form a machine loads. The chapter names one for the FPGA: a real toolchain compiles a netlist into the bitstream, so the description-as-data of the netlist chapter becomes configuration-as-data.

TopologyNetwork

The shape of a network: which machines exist and which links join them. Every table builder in the book receives the complete, static graph, so the topology is simply given. Discovering it, and updating routes after a link changes, are outside the book's model.

TranslatorSoftware

A program that reads a program in one form and writes it out in another. The assembler is the book's first: its only job is to translate readable text into the words the CPU executes. It starts a chain of translators that, many chapters later, ends at a browser.

TransparencySoftware

The property that a paused and resumed process cannot tell it was ever interrupted. Because the context switch saves and restores every register faithfully, the book's adder still ends holding 42 and its pair holding 9, exactly what each computes when run alone. That is what lets one machine pretend to be many.

Transparent latchMemory

A latch while its enable is HIGH: any change in d passes straight through to Q. If enable stays HIGH for a whole clock phase, Q can race through several values, and a circuit reading it may see a changing value instead of a settled one. The book calls this the transparency problem, and the flip-flop solves it.

Transport layerNetwork

The layer that supplies the contract a best-effort network lacks: a successful download returns its bytes whole and in order, and failure is reported when that cannot be done. The book's model cuts a message into numbered segments, acknowledges and retransmits, and reassembles in order, over a channel that drops and reorders.

Tree nodeSoftware

One point of a tree, holding a single piece of the program and joined to the nodes beneath it. The book's expression tree has three kinds: a number node, a variable node and an addition node with two children. The tree of (a + b) + c has five nodes, two additions and three variables.

Two-bit counterCPU

A counter with four states, 0 to 3, and the whole of the book's branch predictor. States 0 and 1, strongly and weakly not-taken, predict not-taken; states 2 and 3, weakly and strongly taken, predict taken. From a strong state two contrary outcomes change the prediction; from a weak state, one is enough.

Two-pass assemblerSoftware

An assembler that reads its source twice so a label may be used before it is defined. Pass one assigns addresses and records every label in the symbol table without encoding anything; pass two encodes each line, looking label operands up, so JUMP start resolves though start is defined five lines later.

U

Undefined symbolSoftware

The error a linker reports when an import names a symbol that no object exports, so its blank can never be filled. The book's linker stops with undefined symbol and the missing name. The mirror-image mistake, two modules exporting one name, stops it with symbol defined twice.

Undriven wireCPU

A wire that some gate reads but that no gate drives and no input supplies, so it never becomes known. It is one of two faults that stop the book's simulator: gates remain, none is ready, and it raises ValueError. The other fault is a set of gates that feed back into a loop.

Unexpected characterSoftware

The lexer's error for a character that begins no token: not a space, a digit, a letter or a known symbol. The book's lexer rejects it at once and does not guess; given a stray ? it stops with the message unexpected character.

Unsigned byteSoftware

Eight bits read as a whole number with no sign, from 0 to 255. To match the CPU, the book's first language works in unsigned bytes: literals and inputs must lie in that range, and each addition keeps only its low eight bits, so 255 + 1 is 0 and 200 + 100 is 44.

Unused opcodeCPU

An opcode value to which the instruction set gives no meaning. A 4-bit opcode has room for 16 operations and the book's CPU defines six, so ten are unused. The model rejects them with a ValueError and does not treat them as hidden instructions.

User mode and kernel modeSoftware

The two sides of the protection boundary. A program runs in the restricted user mode, unable to touch resources directly; the kernel runs in the privileged mode where that work is done. A real processor enforces the boundary with a hardware mode bit; the book models it only by discipline.

User programSoftware

A program running in the restricted mode, which gets outside work done only by asking the kernel. The chapter's example asks for its id, writes it, reads its two inputs, 40 and 2, and writes their sum, 42: five requests cross the boundary and it makes no direct resource access.

V

Variable environmentSoftware

The mapping from variable names to values that an interpreter consults, and the only place a program's inputs enter. To run (a + b) + c, the book's environment binds a to 10, b to 20 and c to 12, so the tree evaluates to 42.

VerilogCPU

A hardware description language, the one the chapter names. A circuit too large to draw by hand is written as source in such a language; tools compile that source into a netlist, the gate-and-wire description, and a simulator tests the chip long before it is built in silicon.

Virtual machineSoftware

A machine built in software: a program that runs instructions the way a CPU would. The chapter mentions it as the way Python really runs, compiling source to bytecode and running that on a virtual machine, where the book's own interpreter walks the tree and never mentions an opcode.

W

Warm-upCPU

The first outcomes a predictor sees, before its state reflects how the branch usually behaves. The book's counter starts at 0, strongly not-taken, so it needs two taken outcomes before it predicts taken; after warming up on a loop that runs many times and leaves once, it misses mostly on the way out.

Web serverNetwork

A real program that answers HTTP requests, the grown-up version of the book's lookup server. It adds methods beyond fetching, headers that negotiate format and caching, and handlers that compute a page rather than look one up. None of that changes the idea: a request goes in, a response comes out.

WhitespaceSoftware

The spaces between the pieces of a line of text. The book's lexer steps over each one without making a token, so spacing separates tokens but is never one itself, and names and numbers come out whole however the spacing falls.

WireSwitch

A conducting connection that carries one signal between parts. The book's switch is flipped by another wire, not by hand. A real wire carries a continuous voltage that sags over distance and picks up noise, so the book reads every wire as only LOW or HIGH.

Wire representationNetwork

The exact bytes a message takes while it travels, as distinct from what the message means. HTTP/1.x uses the textual envelope the chapter builds, readable lines such as GET /hello HTTP/1.0; HTTP/2 uses binary framing. The wire representation is therefore not universal, while the request/response idea stays the same.

WraparoundCPU

What a fixed-width register does when a sum needs more bits than it keeps: the extra carry is discarded and only the low bits remain. The accumulator keeps eight bits, so its value wraps around at 256: adding 1 to 255 leaves 0, and adding 255 to a nonzero value decrements it.

Write lineMemory

The control input that turns a memory access into a write. To write to the chapter's RAM you assert the data and the address and raise the write line; the selected register then loads the data input at the next clock edge. A read needs neither the write line nor an edge: its path is combinational.

Write-backCPU

The step in which an instruction's computed result is stored into its destination register. The book's three-stage model has no separate write-back stage: a value exists once its instruction's execute has run. A real pipeline has one, and forwarding spares the instruction behind from waiting for it.

X

XNORGates

XOR with its output inverted, so it outputs 1 when its two inputs are equal. For inputs 00, 01, 10, 11 its outputs are 1, 0, 0, 1; like the chapter's other gates, the book builds it from NAND calls alone.

Z

Zero testCPU

The check of whether the accumulator holds 0. In the book's datapath its result goes to the control unit, which needs it for JZ: if the accumulator is 0 the branch is taken and the operand becomes the program counter; if not, the already-advanced counter stands.