The most (in)famous hard disk barrier of all time was probably the 504 MiB limitation for standard IDE/ATA hard disks,
which started showing up in systems starting in around 1994. Today hard disks are so much
larger and this barrier is so many years in the past, that many PC users aren't aware of
how much trouble this first big size barrier caused. At the time though, this barrier was
a very new experience for PC users and technicians alike.
Due to this barrier, a hard disk with a size over 504 MiB will normally appear only as
having 504 MiB under some circumstances. This problem is a result of combining the
geometry-specification limitations of the IDE/ATA standard and the BIOS Int 13h standard.
This barrier is alternatively referred to as the 504 MB or the 528 MB barrier, depending
on whether you are looking at binary or decimal
megabytes.
OK, now I'll try explaining it in English.
Every hard
disk is presented to the BIOS through its geometry, which tells the BIOS how many
cylinders, heads and sectors the disk uses. This is the way that the hard disk is
addressed, when a sector needs to be read or written. The geometry that a modern hard disk
uses for the BIOS is normally its logical geometry,
and not the physical geometry actually inside the hard disk assembly.
Various software structures reserve a certain amount of space for specifying each of
the three parameters that make up the hard disk geometry. The amount of space reserved is
dictated by standards that control how IDE/ATA hard disks are supposed to work, and also
how the BIOS sees hard disks through its Int13h software
interface.
The problem is that due to (very) poor planning and coordination, the standards are not
the same; they each reserve different numbers of bits for the geometry. In order to use an
IDE/ATA hard disk with the standard BIOS disk routines then, the limitations of both
standards must be observed, which means that only the smaller of each geometry number can
be used. Here is how the two standards allocate bits for the geometry:
Standard |
Bits For Cylinder
Number |
Bits for Head Number |
Bits for Sector
Number |
Total Bits for
Geometry |
IDE/ATA |
16 |
4 |
8 |
28 |
BIOS Int 13h |
10 |
8 |
6 |
24 |
Combination (Smaller
of Each) |
10 |
4 |
6 |
20 |
Since each geometry figure is a binary number with a number of bits indicated above,
this means that the maximum number supported for any parameter is 2^N, where N is the
number in the table above. So for example, under IDE/ATA, 2^16 or 65,536 cylinders are
supported. We can then multiply all the figures together to get a total number of sectors
supported, and then multiply that by 512 bytes (per sector) to get the maximum supported
capacity:
Standard |
Maximum Cylinders |
Maximum Heads |
Maximum Sectors |
Maximum Capacity |
IDE/ATA |
65,536 |
16 |
256 |
128 GiB |
BIOS Int 13h |
1,024 |
256 |
63 |
7.88 GiB |
Combination (Smaller
of Each) |
1,024 |
16 |
63 |
504 MiB |
Note: The BIOS Int 13h limit
for sectors is 63, and not 64, because by convention sectors are numbered starting at 1
and not 0.
As you can see, the 504 MiB figure is just 1,024 * 16 * 63 * 512, which equals
528,482,304. The problem is the combination of the limitations of the two standards. Due
to the 16-head limitation of IDE/ATA, no IDE hard disk is ever specified with more than 16
logical heads; they always have a large number of cylinders instead. The problem is that
when you put the disk in a machine with a standard, non-translating BIOS, it can't see
more than 1,024 of the cylinders. There are
several different ways that the system may react to a drive too large for it to handle.
The normal solution to the 504 MiB problem is to use a system that supports BIOS
translation. This gets around the problem by using what is little more than a software
trick, but it does work. Software drive overlays will also avoid the problem, but at a
cost. See this section for a full discussion on dealing with this disk
size barrier.
Next: The 4,096 Cylinder (1.97 GiB / 2.11 GB) Barrier