High memory
This articleneeds additional citations forverification.(October 2012) |
High memoryis the part ofphysical memoryin acomputerwhich is not directly mapped by thepage tablesof itsoperating systemkernel.The phrase is also sometimes used as shorthand for theHigh Memory Area,which is a different concept entirely.
Some operating system kernels, such asLinux,divide theirvirtual address spaceinto two regions, devoting the larger touser spaceand the smaller to the kernel. In current32-bitx86computers, this commonly (although does not have to, as this is a configurable option) takes the form of a 3GB/1GB split of the 4 GB address space, so kernel virtual addresses start at 0xC0000000 and go to 0xFFFFFFFF. The lower 896 MB, from 0xC0000000 to 0xF7FFFFFF, is directly mapped to the kernel physical address space, and the remaining 128 MB, from 0xF8000000 to 0xFFFFFFFF, is used on demand by the kernel to be mapped to high memory. When inuser mode,translations are only effective for the first region, thus protecting the kernel from userprograms,but when inkernel mode,translations are effective for both regions, thus giving the kernel an easy way to refer to thebuffersof processes—it just uses the process' own mappings.[1]
However, if the kernel needs to refer to physical memory for which a userspace translation has not already been provided, it has only 1 GB (for example) of virtual memory to use. On computers with a lot of physical memory, this can mean that there exists memory that the kernel cannot refer to directly—this is called high memory. When the kernel wishes to address high memory, it creates a mapping on the fly and destroys the mapping when done, which incurs a performance penalty.