The sentence and paragraph which makes it clear that this was megabytes and not kilobytes
At a time when PC memory maxed out at 640 megabytes, the fact that the PCI bus could address 4 gigabytes meant that quite a few of its address bits were surplus. So we decided to increase the amount of data shipped in each bus cycle by using some of them as data. IIRC NV1 used 23 address bits, occupying 1/512th of the total space. 7 of the 23 selected one of the 128 virtual FIFOs, allowing 128 different processes to share access to the hardware. We figured 128 processes was plenty.
Okay but "640" is a completely fictitious number for installed RAM in any given PC.
PC memory was nearly always sold in powers of two. So you could have SIMMs in capacity of 1MiB, 2MiB, 4, 8, 16MiB. You could usually mix-and-match these memory modules, and some PCs had 2 slots, some had 4, some had a different number of slots.
So if you think about 4 slots that can hold some sort of maximum, we're thinking 64MiB is a very common maximum for a consumer PC, and that may be 2x32 or 4x16MiB. Lots of people ran up against that limit for sure.
640MiB is an absurd number if you think mathematically. How do you divide that up? If 4 SIMMs are installed, then their capacity is 160MiB each? No such hardware ever existed. IIRC, individual SIMMs were commonly maxed at 64MiB, and it was not physically possible to make a "monster memory module" larger than that.
Furthermore, while 64MiB requires 26 bits to address, 640MiB requires 30 address bits on the bus. If a hypothetical PC had 640MiB in use by the OS, then only 2 pins would be unused on the address bus! That is clearly at odds with their narrative that they were able to "borrow" several more!
This is clearly a typo and I would infer that the author meant to write "64 megabytes" and tacked on an extra zero, out of habit or hyperbole.
Alright then! Humbly, I stand corrected about my poor speculation without research. It looks like 640MiB has been a perfectly achievable configuration, especially with 2x256+2x64 or such. That is, I must say, a huge amount of RAM. Like, way more than any video game ever specified in HW requirements. What use cases applied that you could use up 640MiB in that era, I wouldn't know!
I remain a bit mystified about why it would be a hard maximum, though. Did such motherboards prevent the user from installing 4x256MiB for a cool 1GiB of DRAM? Was the OS having trouble addressing or utilizing it all? 640MiB is not a mathematical sort of maximum I was familiar with from the late 1990s. 4GiB is obviously your upper limit, with a 32-bit address bus... and again, if 640MiB were installed, that's only 2 free bits on that bus.
So I'm still a little curious about this number being dropped in the article. More info would be enlightening! And thank you for speaking up to correct me! No wonder it was down-voted!
I did a bunch of media and software development back then so RAM helped a lot. Why 640? Not sure. My particular board could have gone up to 768. I did some googling and found some boards that maxed out at 1 GB.
That was a weird time in computing. Things were getting fast and big quickly (not that many years later, I built a dual-socket Xeon at 2.8 GHz, and before that my brother had a dual socket P3 at 700 MHz.) but all the expansion boards were so special-purpose. I remember going out of my way to pick a board with something like seven expansion slots.
But I think your question about why the author said 640 is fair! Maybe they had a machine like mine around then. Or maybe it’s something NVIDIA was designing around?
> I remain a bit mystified about why it would be a hard maximum, though. Did such motherboards prevent the user from installing 4x256MiB for a cool 1GiB of DRAM?
Probably not - it's not that rare to see the supported maximum memory be a function of the biggest DIMM you can buy, I guess as a reflection of the biggest configuration the manufacturer could test.
The article is a touch confusing, but I'm pretty sure I agree that they meant the 640 kilobyte limit of the OG PC architecture. The Pentium II dates from 1997, the NV1 to 1995, and the new PCI bus with its whopping 32-bits to 1992. 640MiB would have been a prodigious amount of memory at the time of launch.
I don't think any mathematical relationship between the address bus and either 640KiB or 640MiB was intended, it was just the anchor point for how huge 4GiB of addressing was viewed at the time.
The article then goes on to say that the NV1 used 23 bits of the address bus but adds in the next paragraph that 16 bits remained to use for data. That math isn't working out for me.
Actually, I'm really struggling to understand how this scheme would work at all. It strongly implies open addressing with no other MMIO devices to conflict with, but that's just not how I thought PCI worked. Maybe someone who knows more can explain it to me.
My reading was 640MiB was seen as some extraordinary upper bound that was unlikely to be breached in 1995 leaving lot of bits of the address bus for NV1 for quite some time. The 640 KiB seems definitely not a limit as even IBM PC/AT released in 1984! had an upper limit of 16MiB. So, as NV1's designer you could not assume 640KiB was some sort of upper bound on PC's of 1995 when designing the scheme. As to why 640MiB and not something else, I believe Windows 95 could address 2GB in theory but would start becoming unstable around 512MiB so maybe he chose 640MiB.
The whole thing a bit ironic since Bill Gates took great pains to say he never said 640KiB is all you need (or something like that). Given my example of the IBM PC/AT it definitely was not common understanding of upper limits in 1995 apocryphal or not.
It wasn't that simple: in practice the arrival of the 286 in 1984 was very much only the beginning of the PC's escape from the 640KiB/1MiB limit. It wasn't until some time after the promulgation of the DOS Protected Mode Interface in 1989 that it became routine for PC applications to have unrestricted, straightforward access to all of RAM. (I'm very much relying on resources like https://news.ycombinator.com/item?id=17274672 for the details here: I was never a serious DOS user or a DOS developer.) Still it would definitely be overstating things to say that "PC memory maxed out at 640 kilobytes" in 1993 or subsequently. It does seem possible that the author did mean to say "640 kilobytes", but really just as a snarky jab at the PC platform: PC software really was still relying on DOS extenders to make use of "extended memory" in 1993, even if they were by then doing a solid job at it.
Another possibility: apparently https://www.os2museum.com/wp/windows-nt-3-1-and-os2-memory-d... all x86 machines released before maybe 1993 are restricted to 64MiB, even under Windows NT and other fully 32-bit OSes, because the BIOS simply can't report having any more RAM than that. By early 1993 the first "service" allowing the reporting of more than 64MiB of system RAM (up to the full 4GiB supported by x86) was starting to appear on some BIOSes.
Yeah, I dunno. Besides being a lot for 1995, the address space stuff, if taken at face value, means you'd only have to knick 3 bits off before starting to eat into it. Shrug
By 1995, PCI had vanquished VL-Bus and a cheap entry PC would have had a PCI bus and a 486 CPU at 66 MHz or 100 MHz with 8 MB of RAM, while a decent PC would have had a Pentium with 16 MB of RAM.
The days of 640 kB memory were long forgotten.
Even in 1990, a decent PC would have had a 386 CPU with 4 MB of RAM, which would have been used as extended memory by the MS-DOS programs, while the cheapest computers would have been PC/XT clones with a NEC V20 CPU and with 2 MB of expanded memory, so still well beyond the 640 kB.
It did, especially as the drives got older and shrieky. Plus the floppy and optical drives spinning up. But... funny story, when I moved to Silicon Valley, SSDs didn’t exist yet, but compile times were IO-bound. So my company bought everyone Dell workstations with two 15k RPM SAS drives in RAID 0. When I’d kick off a build, the desk would start vibrating under my fingers.
It made everything feel real!
Later, the company switched new employees to 3x 10,000 RPM SATA drives. Not quite as grindy, but still loud.
Looks like ‘97. Unfortunately I can’t find the receipts! If I had to guess, I think I’d say somewhere around $2000 in all. That computer lasted me a LONG time. When it was done being a desktop, it became a Linux server until I sold it around 2009. Sometimes I wish I’d kept it: the Pentium 2 was such an important CPU and I smile every time I see the one on display in the Computer History Museum.
As another poster has said, around 2000/2001 there were many PC motherboards for which the maximum RAM capacity was 640 MB of SDRAM (though depending on the motherboard the capacity limit could have other values, e.g. 512 MB or 768 MB were other frequent values). Only around 2003, motherboards where you could install up to 4 GB of DDR memory became widespread.
I had a few such motherboards, with Pentium III "Coppermine" and with AMD Athlon "Thunderbird" (with 3 DIMM sockets, 2 accepting 256 MB modules and 1 accepting 128 MB modules).
While I had initially equipped them with less memory, i.e. either 128 MB or 256 MB, because of the high cost at that time, eventually I had maxed up the installed memory to 640 MB on the Athlon motherboards.
At that time, the memory controller was not included in the CPU, but it was contained in an external chip, the Northbridge. The MB chipsets could come from various vendors, including Intel and Via. Depending on the chipset, different maximum amounts of SDRAM could be supported. Sometimes there were also limits for the maximum amount of RAM caused by the L2 cache controller, due to the size of the tags required in cache lines. Even with the same chipset, the MB manufacturer could choose to route different numbers of address lines to the sockets, probably depending on whether the extra capacitive loading caused by a bigger memory module would have allowed it to function at the rated speed on that PCB.
64 MB would have been a typical maximum memory around 1998 (2 sockets for 32 MB SDRAM modules, on a MB with an AGP socket for the graphics card), so if the author would have had that year in mind, you would be right.
QUESTION: I read in a newspaper that in 1981 you said, ``640K of memory should
be enough for anybody.'' What did you mean when you said this?
ANSWER: I've said some stupid things and some wrong things, but not that. No
one involved in computers would ever say that a certain amount of memory is
enough for all time.
The need for memory increases as computers get more potent and software gets
more powerful. In fact, every couple of years the amount of memory address
space needed to run whatever software is mainstream at the time just about
doubles. This is well-known.
When IBM introduced its PC in 1981, many people attacked Microsoft for its
role. These critics said that 8-bit computers, which had 64K of address space,
would last forever. They said we were wastefully throwing out great 8-bit
programming by moving the world toward 16-bit computers.
We at Microsoft disagreed. We knew that even 16-bit computers, which had 640K
of available address space, would be adequate for only four or five years. (The
IBM PC had 1 megabyte of logical address space. But 384K of this was assigned
to special purposes, leaving 640K of memory available. That's where the
now-infamous ``640K barrier'' came from.)
A few years later, Microsoft was a big fan of Intel's 386 microprocessor chip,
which gave computers a 32-bit address space.
Modern operating systems can now take advantage of that seemingly vast
potential memory. But even 32 bits of address space won't prove adequate as
time goes on.
Meanwhile, I keep bumping into that silly quotation attributed to me that says
640K of memory is enough. There's never a citation; the quotation just floats
like a rumor, repeated again and again.
For a while, I had 36MB on a 486 mobo, with a combination of SIMMs and DIMMs. As others have mentioned, 640MB is a valid, if odd, configuration for RAM.
The precise reason for this is straightforward: 486 processors had a 32-bit data bus, but DIMMs took advantage of the Pentium's new 64-bit wide bus, because otherwise users found themselves installing SIMMs in matched pairs in order to span that entire width.
At a time when PC memory maxed out at 640 megabytes, the fact that the PCI bus could address 4 gigabytes meant that quite a few of its address bits were surplus. So we decided to increase the amount of data shipped in each bus cycle by using some of them as data. IIRC NV1 used 23 address bits, occupying 1/512th of the total space. 7 of the 23 selected one of the 128 virtual FIFOs, allowing 128 different processes to share access to the hardware. We figured 128 processes was plenty.