Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 3 Jan 1996 13:46:49 -0700 (MST)
From:      Terry Lambert <terry@lambert.org>
To:        joerg_wunsch@uriah.heep.sax.de
Cc:        freebsd-hackers@FreeBSD.ORG
Subject:   Re: HELP!!! THIS IS AN EMERGENCY (fwd)
Message-ID:  <199601032046.NAA15501@phaeton.artisoft.com>
In-Reply-To: <199601030846.JAA19346@uriah.heep.sax.de> from "J Wunsch" at Jan 3, 96 09:46:12 am

next in thread | previous in thread | raw e-mail | index | archive | help
> > > problem.  This system gets most of its real stuff over NFS so a small disk
> > > was used.  I was careful to get both Boot partitions under the 500M limit.
> > 
> > Right.  See above.
> > 
> > The 500M limit comes from the BSD inability to talk to the controller
> > using an LBA adressing mechanism.  The BSD *does* see the OnTrack and
> > do the 64 sector offsetting.
> 
> BSD does not have a 500 MB limit.  It can speak whatever the hardware
> allows for, this is c<=65535, h<=15, s<=255.  For disks that are used
> in a BIOS environment as well, the `s' limit is 63 however.  This
> would still account for 65536*16*31 = 32505856 blocks, or 15872 MB.

c = 10 bits = 2^10 = 1024.  Not 65536.

The missing 6 bits that you added in are 1024 * 2^5 and 2^n = 32 for
h = 0..31 (your n is too small by one bit).

The INT 21 interface is very specifically c:10/h:6/s:8.  Or 8Gig for
a maxed out 24 bit value.

But since IDE is and extension of ISA, you get 2^16 * 512 or 33M.  Then
cluster addressing is used in the INT 21 interface to shove it up; the
limit there become 2G for the mak cluster size of 32k.  DOS claims to
operate with a cluster size of 64k, but the max transfer on a write
with a 16 bit count is 64k, and they steal a write of 0 to mean a file
truncation instead of a full 64k, so it is only feasable to do a single
atomic 2^n transfer for n<=15, not n<=16.  Thus DOS partitions are
limited to 2G at the FAT/INT 21 cluster addressing interface.  Hence
the 4 partition limit in the DOS partition table.

And, indeed, 2^16 * 512 * 16 (4 bits) == 536870912 (500M).



The BSD limit I was speaking of is imposed by the second stage boot
loader using the INT 13 interface on an INT 13 interface without an
understanding of EIDE (or better, ATA-2) LBA mechanisms.  It must be
able to load the kernel, which may require accessing any sector in
the 'a' slice.  Additionally, if BAD144 bad block remapping is enabled,
it must be able to access the bad block table, meaning you must put all
of the BSD partition under the 1024 cylinder limit so that the bad
block table (which I maintain should be located after slice 'a' so it
can be expanded into slice 'b', stealing from your swap, as necessary)
can be accessed by BIOS.

					Terry Lambert
					terry@lambert.org
---
Any opinions in this posting are my own and not those of my present
or previous employers.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199601032046.NAA15501>