First, pay attention to the difference between a linear address (AKA - pointer value) and a physical address. While the linear address space is indeed 32 bits (AKA 2 ^ 32 different bytes), the physical address that goes to the memory chip does not match. Parts (βpagesβ) of the linear address space can be mapped to physical memory or to a page file or to an arbitrary file, or marked as inaccessible and not backed up by anything. The last page is the last. The display engine is implemented at the CPU level and is supported by the OS.
However, the null address, which is a non-addressing memory, is simply a C convention, which has been provided by all protected operating systems since the first Unices. On real-time operating systems in MS-DOS mode, the null pointer (0000: 0000) was completely addressable; however, writing there will destroy system data structures and bring only trouble. A null pointer (DS: 0000) was also completely accessible, but the runtime library usually reserved some space around zero to protect against accidental dereferencing of null pointers. In addition, in real mode (for example, in DOS), the address space was not 32-bit flat, it was 20-bit efficient.
Seva Alekseyev
source share