3 ms·
The PDP-11 MMU was more powerful than what existed in the 8088/8086. It provided a supervisor/user distinction and didn't allow user code to go to town on the
by monocasa 5y ago
The PDP-11 MMU was more powerful than what existed in the 8088/8086. It provided a supervisor/user distinction and didn't allow user code to go to town on the MMU directly. Yes, being a true 16 bit system, it was limited to 64KB total in each address space, but there was both
* True process isolation since user code couldn't load whatever they wanted into the base registers like on an 8086,
* True pages, so that the entire 64KB didn't have to be contiguous like on a 8086, but was instead broken into 8KB pages that could be mapped, shared between process, and mixed together in different places in the virtual address space.
Everything you're saying applies equally to the 32bit virt/36bit phys PAE world that we had for a while, and I wouldn't call that a simple MMU.
- adrian_b 5y agoIt is true that the PDP-11 MMU provided memory protection, unlike 8088/8086. However that mattered only for the operating system kernel, as it allowed process isolation. For user programs, the 8088/8086 MMU was a thousand times more convenient, because the segments could start on any 16-byte boundary instead of 8 kB boundaries and there were 4 segments instead of 2 and you could load a pointer to a new segment with a single instruction. For an IBM PC, it was very easy to write a 512 kB program, you just had to select an appropriate memory model option for the compiler. For a PDP-11, even when having 4 MB of memory, writing a large program was extremely difficult. You had to partition the code and data of the program in pieces not to small and not too large, to fit in 1 or a few 8 kB pages. You had to partition in such a way that the parts will not need to be active simultaneously and you would not need to swap them frequently. Swapping parts was slow, as it had to be done by an operating system call. The linker had to be instructed to allocate the overlapping parts to appropriate addresses, so that it will be possible to swap them.
- monocasa 5y agoIf you wanted to escew protection for ease of use, you could just map the unibus page into the user process and let them fiddle the attributes directly. Additionally the 8kb pages were subdivided into 128B contiguous blocks, with a base and limit, allowing smaller granularity. The feature set that the 8086 gave you was more or less still available, there was just another option that was deemed more useful in most cases.