no significant bugs in 80286 virtual memory
A. Lester Buck
buck at siswat.UUCP
Sat Sep 17 17:12:43 AEST 1988
There have been several postings in comp.unix.microport recently
intimating that the "experts" know of a serious bug in the 80286.
It seems some 80286 instructions are not restartable after a virtual
memory fault, therefore a virtual memory operating system
is impossible on the 80286.
I happened to be interested in the 80286 buglist (Intel calls them
Errata) for other reasons, but I stopped by my local Intel sales
office a couple of weeks ago to get the latest information. The
field applications engineer rumaged around for a while in their
files and came up with an Errata Sheet Update for 80286 dated
16 January 1985, as part of Tech Bits issued Feb 22, 1985,
reference no. MIP-19. These fourteen pages document 9 errata and
4 documentation changes for the B-2/B-3 stepping of the chip
and 5 errata with 4 documentation changes for the C-2 stepping.
(The 5 are a subset of the original 9.) I was told the current
stepping (I forget what it is or when it arrived) has NO known errata.
Here are the nine errata for the B-2/B-3 stepping:
1. Pullup BUSY and ERROR inputs
2. Coprocessor operand partially beyond limit of erc segment
3. CLK input requirements
4. POPF behavior
5. Don't remove interrupt signal early
6. Nested interrupts
7. Non-maskable interrupt
8. Protection Violations
9. Loading null selector values into ds or es registers
Here are the four documentation changes:
1. Single-stepping the INT n instruction
2. LOCK signal during INTA cycles
3. instructions longer than 10 bytes
4. ARPL instruction
I am not an 80286 expert, but the only thing that seems to effect
virtual memory is #8, Protection Violations.
[ begin Errata 8 excerpt]
The protection violations involved usually indicate a probable
software bug and restart is not desired if one of these violations
occurs. In a Protected Mode 80286 system with wait states during
any bus cycles, when certain protection violations are detected by
the 80286 component, and the component transfers control to the
exception handling routine, the contents of the CX register may be
unreliable. (Whether CX contents are changed is a function of bus
activity at the time interval microcode detects the protection
violation.)
Note that any "not present" exception when a CS, SS, DS, or ES
segment is "not present" is entirely restartable, for virtual
memory implementation.
[ seven types of protection violation listed that no operating
system should want to restart, like reading from execute-only
code, or direct I/O at the wrong priority ]
The following protection violation below may also lead to
unreliable CX register contents. The following protection
violation is designed to be restartable for dynamically growable
stacks, but due to the errata, is not restartable on this
stepping in a system which has wait states in any bus cycles
(for example, refresh cycles in systems with dynamic memory):
8) exception #SS(0) from attempted "PUSH" below
the defined limit of the stack segment (restart
allows dynamically growable stack segments).
Notation...
exception #SS() = exception #12 = Stack Fault
The value in parentheses indicates the type
of error code pushed on exception handler's
stack.
[End of Errata 8 excerpt]
It seems that a perfectly good virtual memory operating system could
be written with all instructions restartable, except the feature
of a dynamically growable stack segment would not be available.
Is dynamic stack growth essential to Unix?
Is Intel not reporting a serious errata on the 80286?
It is hard for me to believe the 80286 has such a bad bug that
entire sections of the manual are rendered useless.
Let's have some hard facts to back up these rumors, if they are real.
--
A. Lester Buck ...!uunet!nuchat!moray!siswat!buck
More information about the Comp.unix.microport
mailing list