As previously mentioned, IBM’s OS/2 1.0 and 1.1 is extra unfriendly to modern hypervisors. To recap, there is a curious difference between IBM’s and Microsoft’s kernels in OS/2 1.0/1.1 with regard to mode switching.
For reasons that aren’t very clear, IBM’s kernels implement only 286 style mode switching: In order to get from protected back to real mode, the processor is reset and the BIOS told where to resume execution. On the other hand, Microsoft’s kernels have had (faster) 386-specific code ever since the first OS/2 SDK beta from April 1987.
To make matters more interesting, the OS/2 kernel is also famous for using the undocumented LOADALL instruction when running on a 286. Yet IBM’s OS/2 did run on 386 AT clones of the era. How is that possible? Continue reading