62 comments

[ 3.5 ms ] story [ 141 ms ] thread
>CPU of a computer system does not contain: (a) Main storage (b) Arithmetic unit (c) Special register group (d) None of the above

Well I would have gotten this question wrong if I hadn't read this article.

It has been my experience that outdated, overly specific, or incorrect terminology tends to make its way into computer science and IT-related learning material and its corresponding test question banks.

This learning material often happens to be drafted and paid for by technology companies but it seems as though little effort is spent in revising, verifying, and properly typesetting the material in question, to the chagrin of the students.

As a high school student (in the 1990s), I found our computing textbook contained lots of mistakes. I tried to point out the errors to the teachers. I soon realised they knew absolutely nothing about the topic, they were just reading the textbook, so trying to convince them the textbook was wrong wasn't going to get anywhere. But, I think "outdated, overly specific, or incorrect terminology" is due to a lot of people teaching it (at high schools, etc), or even writing the textbooks, don't know what they are talking about.

Specific examples:

Our textbook claimed that TCP/IP used parity bits. If you actually read the relevant RFCs, you will find out that's wrong, it doesn't use parity bits, it uses a one's complement checksum. But, the teacher had never heard of an "RFC", and didn't know why she should care what one said. Obviously, whatever the textbook says must be right, and anything else must be wrong.

The explanation of CRCs in the textbook made absolutely no sense. It said to treat the message as one long number, and then take the last part of the number. That would make the CRC just the last few bytes of the message, making it rather useless. What I eventually worked out – you really can't explain CRCs without polynomials, but the textbook author didn't want to include any mention of polynomials (and multiplication and division operations on them), since possibly not all students would have done that in high school mathematics yet. (The more advanced students may have, but the students doing the most basic levels of maths would not have.) The part about "take the last part of the number" was actually meant as a reference to the remainder of polynomial division. Once you understand the topic independently of the textbook, you can see how the textbook is a horribly garbled and mangled attempt to simplify the truth. The problem was, the teacher (same high school, different computing teacher) had no idea how CRCs are actually defined, all he knew was what the textbook said. If he actually knew what he was talking about he could have explained to me what I eventually worked out for myself.

A "lie" presumes you know the truth. These teachers weren't consciously simplifying things for the students. If that was what they were doing, they could have explained the missing details if challenged on them. A good teacher really knows their subject, as opposed to just mindlessly repeating whatever the textbook says.
That's an excellent point.
I once saw a science education state standard, that required teaching both 'atoms are conserved in chemical reactions', and 'atoms are electrically neutral; when changed, they're no longer atoms, but ions'. Two historical threads of definition, left for students to reconcile.

Terminology in primary-school science education can have a twilight zone feel, kind-of sort-of resembling science terminology, but as seen from a skewed alternate reality, disconnected from actual science community and practice.

So it's not just cs learning material.

That's why a proper terminological database should contain a source and its date, so you can evaluate its currency and relevance.
Most computer dictionaries are mostly just obsolete jargon shovelware... they just copy&paste and don't really understand what they're printing over and over again.
Most dictionaries and encyclopedias in general become useless once you try to look up technical terms.
> Storage is not part of the CPU.

It kind of is. People often call the box with the motherboard, etc. the CPU.[1][2] That's how the basic parts of a computer were taught to me too when I was a kid. The basic parts of a computer are a "CPU", a "Monitor", a "Keyboard", and a "Mouse". Some time later, when I was taught the parts of a "CPU", it was a "Processor", a "Hard Drive", a "Case", etc. I suppose not everyone used the same nomenclature everywhere.

It still seems like a standard hasn't been reached. Around where I'm at, people call that thinking box the "CPU", and right now, when looking for diagrams, I see some call it the "Tower", the "Case", the "System Unit", the "Computer", etc.

[1] https://i2.wp.com/www.informationq.com/wp-content/uploads/20...

[2] https://ecdn.teacherspayteachers.com/thumbitem/Parts-of-a-Co...

EDIT: Are the downvotes because people don't believe this is how parts of the computer were taught in some places before the internet became more popular? It makes sense to me that this is the reason why main storage being inside the CPU made it into dictionaries.

To me, "CPU" is an ambiguous term. It could either mean the whole case with the electronics inside, or it could be the main Processor in the motherboard.

If you asked me what the "basic parts of a computer are" my first intuition is to answer with the von Neumann architecture. I would not expect the general public to have that answer, but I would expect people with CS backgrounds and the companies building the machines that ken referenced in the article to think in terms of von Neumann.
Well, when I was taught "the basic parts of a computer", it was in a class that was teaching how to use a computer (how to type, what files are, different storage mediums, the different plugs, how to use the GUI, etc.). I was like 8 years old or so. I learned about von Neumann many years later.
The article is specifically talking about how the phrase "special register groups" has been picked up and included in the definition of a CPU in computer architecture text books over the past 60 years. Its clearly not trying to make any sort of statement about how we teach computers to elementary school children.
At least to me it's not inconceivable that somewhere along the line of people writing definitions basing themselves on other definitions they see, that someone saw that people defined CPUs as including main storage and although it may or may not have seemed weird to them, they might have included it in their own definition, thereby mixing both meanings of CPU.
von Neumann is advanced, not sure an 8-year-old can comprehend all of it...
That’s very, very lax terminology at best... but here’s an upvote to show there’s no hard feelings. :)
Back in the 1950s and 1960s, where a single computer was often composed of multiple big cabinets, the word "CPU" was used to refer to the CPU cabinet. (Often, you'd have the CPU in one cabinet, core memory in another, one or more IO controllers in additional cabinets, yet further cabinets for tape drives and hard disks, etc.) So this usage of calling the main chassis the "CPU" is actually very old. On the one hand, people who use it tend not to be very computer literate (since everyone nowadays who knows anything about computers reserves the term "CPU" for a specific integrated circuit inside that case, not the case itself.) But, their usage I'd argue derives from what used to be the usage of the computer literate, decades ago. It was only in the 1970s that a CPU started being implemented by a single integrated circuit, as opposed to a group of them; back when the CPU was multiple integrated circuits, calling the box that contained them all the "CPU" made more sense, especially when the computer itself was spread across multiple boxes. The computer industry moved on, the terminology of the computer illiterate didn't.
> people who use it tend not to be very computer literate (since everyone nowadays who knows anything about computers reserves the term "CPU" for a specific integrated circuit inside that case, not the case itself.)

Indeed, that meaning is mostly used by people that know how to use a computer but have no idea what's in the box.

EDIT: I found a Radio Shack catalogue from 1989 that uses the term "CPU" to refer to the main unit with the chassis:

https://archive.org/details/tandy-computer-catalog-1989/page...

The bottom left of that page has a computer stand. In the description it says "holds CPU in vertical position". To the right of that, there's a "CPU Security System" that's a set of mounting plates to attach a computer to a desk to avoid theft.

I don't see it as about computer literacy, but rather a cultural/technological change over time.

Up until some point probably post-2000, desktop computers were the norm, which had main chassis connected to peripherals such as keyboards, mice, and monitors.

At some point, certainly by 2010, laptops became the majority, which have both input and display integrated. So the referent of CPU, other than the actual chip, no longer existed for most users.

I remember in the early-to-mid 1990s, my parents calling the main chassis the "CPU", and I would respond saying "that box isn't the CPU, the CPU is just one of many chips inside that box".

I doubt the desktop-to-laptop transition was a big factor, simply because among more technical people, calling the main chassis a "CPU" was already considered improper back in the 1990s (and probably even much of the 1980s), when laptops were a clear minority.

It seems to me that a lot of people of a certain generation have issues with the idea that different meanings of a word can co-exist.

Many words have dictionary entries with multiple definitions. And if you Google a word you are curious about, you will probably find an online page with one or more definition.

But nobody has any motivation to make such an entry complete or accurate - it only exists like everything else to get clicks.

So for some reason people have become very dogmatic that any definition missing from the current top hit for a word doesn't exist, because the internet is their reality. They don't seem to have any idea how thoroughly their reality is being distorted.

As far as my personal experience goes, in the 80s and 90s, CPU was used to mean the box containing the processor, where the computer was not an "all-in-one" like the original Macintosh, and it was also used to mean the chip. I don't remember using the former meaning, but neither was I ever confused.

I don't think it's reasonable to argue that one or the other definition is illegitimate, because I think they share a common thread. The modern CPU has multiple processors and other things on-die, so it is "processor plus stuff" just like the CPU-as-main-chassis. I think they are both examples of one basic concept.

I'm perfectly familiar with the idea that one word can have multiple meanings. I don't see any evidence that "people of a certain generation" have issues with that idea.

One can also talk about the idea of different registers – informal, formal, technical, etc. Meanings which are acceptable in an informal or colloquial register can be viewed as less acceptable in a formal or technical one.

CPU means the main processor. I would consider any source on the subject wrong if they say otherwise. But CPUs still have main memory and cache, so to say storage isn't part of the CPU is still wrong.
The name actually still kind of makes sense to me. I know that CPU is an apt name for the main processor, but to a regular user that has no idea what's inside the box and only has an understanding of the different components they connect together (monitor, keyboard, etc.) CPU is also an apt name for the whole box. After all, it is the "central processing unit" of the whole computer (counting the monitor, etc.). "Case" refers only to the box itself and not all the inside components; "system unit" is too vague; "computer" means the whole thing including the monitor, keyboard, and mouse; "tower" also isn't apt because, at least in the 90s, it was also common to lay it below the monitor.

Tell me, if you have the box disassembled with the hard drive and motherboard outside and the monitor and keyboard nearby, what word would you use to describe the whole device that's the case and its inside components? Imagine you want to ask someone to move it to another table, just the case, hard drives, motherboard, etc. but not the monitor and keyboard. How would you fill in "Could you move the ____ to that table?" I think some around me would say CPU.

EDIT: Here, check this out, it's a Radio Shack catalogue from 1989:

https://archive.org/details/tandy-computer-catalog-1989/page...

At the bottom left corner of page 42 (page as seen in the image), it says they're selling a "universal computer floor stand". In the description it says, "holds CPU in vertical position". To the right of that, they're selling a "CPU security system" that's basically mounting plates and cord to attach the computer to the desk to prevent it from being stolen.

That's rather outdated terminology. But you can keep using it if that makes you gay.
The textbook with the garbage definition costs $2. I guess you get what you pay for. Hopefully the colleges using that book charge a similar amount.
> ...the central processing unit was a large physical box, also known as the "main frame". (A mainframe was not a type of computer yet.)

Does that imply that there were other "frames"? Maybe storage frames, I/O frames...

Yes, there were storage frames, power frames, CPU frame, drum frame, electrostatic storage frames, and so forth. (I'm working on a blog post about this, but got sidetracked by the appearance of "special register groups".)
Cool, I'll keep an eye out for that post!
This usage context from that era sounds like the term "frame" from then is what we today refer to as a "rack".
Some old computers were built on racks (relay racks). A frame is basically a cabinet, built around a metal framework, with side panels hanging off it. IBM was a big proponent of frames, I think starting with the IBM 701.
(comment deleted)
Special register groups sounds like Hyper-Threading Technology. Didn't realize that Honeywell had it in 1959.
Here it's just used for fine-grained multitasking-- you need a pipeline and excess resources for simultaneous multithreading. (So that when stuff stalls, on access to memory or data dependency... or e.g. when a program doesn't use the floating point unit... you can use the unused parts of the processor to run another thread).
I'm not knowledgeable about CPUs but as someone who switched careers from one tech (networking) to the next (web development) it's amusing how many approaches to problems are found, resused, not used found again, redeveloped and etc.

I'll find an excerpt from a book from the 1980s someone will post and while on its own I might not grock it I'll hit an issue in React a while later and ... oh I get it now even if the technology is different, the problems and strategies seem to be somewhat natural / recycle.

It's not really similar to hyper-threading. You still just had one thread of execution, you just didn't have the overhead of pushing CPU state to working memory (RAM) on context switch. Hence the CPU could switch contexts on every instruction instead of much more rarely like modern multitasking OSes tend to do.

Reading this I was reminded of the shadow register set on Z80. This CPU has two "special register groups" that could be switched by a single 4-cycle opcode. As far as I remember, the original idea was to have "main" and "interrupt" CPU contexts without the overhead of pushing/poping the stack (which could cost tens of cycles). From what I've seen however, people were mostly ignoring that feature in practice, or using it for various nasty hacks when they ran out of CPU registers.

Nah, this is for sure a form symmetric multithreading (or hyper-threading, Intel's trademark on the technique). Unlike the Z80's shadow register set and like hyper-threading this scheme keeps an independent program counter around for each of the register groups. Doing a thread switch each cycle is pretty common in simpler SMT designs like the UltraSPARC T series, the PPE on the Cell, and the shader cores on PowerVR GPUs.
You remind me of this Kevlin Henney talks that manages to cover a rather big range of programming concepts that keep getting recycled as the big new thing https://youtu.be/AbgsfeGvg3E
It’s barrel processing. A modern example is Intel’s Larrabee; it had 32 4-wide barrel processors, each of which could retire one 16-wide vector instruction, one load or store (fused) instruction, and 0-or-more scalar instructions per cycle.
"Special register groups" is vague enough that it can stretch fit any number of situations:

- Ax versus Dx registers in a MC68K.

- Floating-point versus integer registers.

- Supervisor versus unprivileged registers.

- Machine state registers (interrupt masks, etc) versus computational registers, versus I/O registers.

- Hardware machine contexts similar to those of that Honeywell in numerous other machines.

I don't see the problem with it, except that it's not suitable for a very high level description of a generic CPU.

Since any register group is somehow special, "special register groups" are just an ambiguous concept that can be passively misunderstood to "obviously" mean whatever register classification one finds important, not actively "stretched" to take on new meanings.

Other commonplace "special" register groups include special purpose vs general purpose (SP, BP etc. vs AX to DX on early X86), different sizes, mutually exclusive overlays (e.g. FPU and MMX registers on X86).

In the 68K, I definitely wouldn't describe the Dx registers as special. The Ax is kind of grey - they aren't quite "general" in the way the Dx registers are, but they are still also "standard". But the status register... yeah, it's special.
This is interesting. While I agree that CPUs no longer have the set of registers used the way they were on the Honeywell, they certainly do have special groups of registers that can only be used for some operations and not others. For example, FPU registers don't generally do logical operations. SIMD registers either don't work as general purpose registers, or have to be switched from being general purpose to being SIMD depending on the architecture. So there are still "special register groups" on modern CPUs. It just doesn't mean the same thing as it meant back then. Kind of funny.
Fortunately nobody that learns about computers gets it from a dictionary.

I think "special register groups" has zero impact on literacy and understanding

fascinating investigation though

People born in the 1950s till now have plenty of other excuses to be technophobic so this definition has no effect

Except in this article it's mentioned that a quiz from a 2017 book includes them.
Thats not the point I was making and wasnt refuting its prevalence
Speaking of registers and CPUs, the PDP-10 was interesting (at least, the KA10 model...not sure if the KI10 or KL10 also did this).

The architecture included 16 general purpose registers, which were addressed using the same address space used for main memory. Word addresses 0-15 referred to registers, and addresses 16+ referred to core.

The interesting part is that the registers were actually optional! If you wanted to save a little money, at the cost of some execution time, you could order your PDP-10 without registers. Because the registers and memory use the same address space, everything still worked with the first 16 words of core taking the place of the registers.

If you ordered your PDP-10 with the registers, they would in effect replace the first 16 words of memory.

Main memory was magnetic core and the optional registers was semiconductor memory, which were much faster than core.

Since the registers and memory shared address space, it turned out that you could execute code from the registers. You could often gain quite a bit of speed in a program by having it copy the code for its inner loops into the registers and running from them.

That's actually pretty cool. It seems like you could transparently change the number of registers to whatever would fit in your particular model of chip, 0 to 16 to a kilobyte or more. Is there a reason you wouldn't use such a design for a chip today?
Memory mapped registers are still a thing today. Here's arm documentation describing memory mapped debug registers for Cortex-R chips: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.... Even the intel XAPIC (interrupt controller) has a mode which basically uses memory mapped registers for configuring interrupts. The trick with executing hot loops in registers definitely wouldn't work today, and in some microprocessors the merely reading registers can change the state of external devices.
This makes the register keyword in c make a lot more sense
Some embedded chips do a similar trick, where they have zero-wait-state SRAM for faster operations. In MIPS, this will even be mapped to address zero, so you can use the zero-register for addressing it.
Eh, I don't see the problem with this definition. Registers are "special" storage locations by their very nature, as opposed to memory external to the CPU.

The term "special register group(s)" is a bit offbeat, but it's perfectly accurate and perfectly descriptive of almost any real-world CPU architecture. The only problematic bit is the plural 's'.

This makes me want to shoot myself in the face, weep for humanity, and/or become a con man.
I sacrificed a perfect score in an IT test at school in the 90s over this sort of nonsense. Our IT teacher was adamant that a CPU was the base unit of a computer (terminology from the mainframe era) rather than the processor within it (as in the modern era). I refused to kowtow to the nonsense and took the red mark :-D
That seems like a rather meaningless choice of a hill to die on. Even in the 90s, many of us called the chips CPU chips.
Sure, but it's just a single mark, which is a more than cheap enough price for the principle :-)
Exactly the same thing happened to me. In fact I came here to write down the same thing :) The test was standardized across the entire country. My IT teacher agreed with me, but was not willing to escalate.
I would have probably assumed that it referred to the L1 cache.
In a related topic, Berkely RISC decendents (including SPARC) have the concept of "Register windows"

Basically there are many more registers than can be addressed by the program, instructions are instead addressing a "window" into this much larger register file. A function call shifts the window by some amount, typically with overlap, so parameters and return results go in the overlapped area, and whenever you are about to "wrap around" to the front of the file, the hardware will push to the stack as needed.

Obviously multithreading on such targets becomes complicated because the normal strategy of "Save all registers to the TCB" starts to become inefficient with very large register files.