2022-08-31 13:30:04 +01:00
|
|
|
---
|
|
|
|
tags: [memory]
|
|
|
|
---
|
2022-08-31 18:30:05 +01:00
|
|
|
|
|
|
|
# Virtual memory and the Memory Management Unit
|
|
|
|
|
|
|
|
## What is virtual memory?
|
|
|
|
|
2024-02-02 15:58:13 +00:00
|
|
|
Virtual memory is implemented at the level of the operating system and is an
|
|
|
|
abstraction on top of 'real', physical memory (i.e the charges stored within the
|
|
|
|
actual DRAM component.).
|
2022-08-31 18:30:05 +01:00
|
|
|
|
2024-02-02 15:58:13 +00:00
|
|
|
When virtual memory is used, the CPU handles physical memory allocation and
|
|
|
|
presents this to the kernel as an idealised representation. This means that the
|
|
|
|
kernel and, by extension, programs and processes do not need to think about
|
|
|
|
accessing the real memory blocks. This reduces complexity because often memory
|
|
|
|
will be allocated in places that are non-contiguous with similar running
|
|
|
|
processes or be located in the cache or swap memory on the disk.
|
2022-08-31 18:30:05 +01:00
|
|
|
|
2024-02-16 16:14:01 +00:00
|
|
|

|
2022-09-03 12:00:04 +01:00
|
|
|
|
2024-02-02 15:58:13 +00:00
|
|
|
It would require considerable processing work for the kernel to be tracing these
|
|
|
|
disparate memory sources at every instance. By working on an idealised
|
|
|
|
(contiguous, unlimited) memory set the kernel can focus on task management and
|
|
|
|
CPU sequencing as its primary task.
|
2022-08-31 18:30:05 +01:00
|
|
|
|
2024-02-02 15:58:13 +00:00
|
|
|
The memory is idealised in that all locations are represented virtually as being
|
|
|
|
contiguous (even when this is not physically the case). Secondly, quantities of
|
|
|
|
available memory can be presented as much larger than is actually the case and
|
|
|
|
which often exceed the physical memory limits of the device. This is achieved
|
|
|
|
through paging, handled by the MMU.
|
2022-08-31 18:30:05 +01:00
|
|
|
|
|
|
|
## The Memory Management Unit (MMU)
|
|
|
|
|
2024-02-02 15:58:13 +00:00
|
|
|
Without an MMU, when the CPU accesses RAM, the actual RAM locations never
|
|
|
|
change. The memory address is always the same physical location within the RAM.
|
|
|
|
The MMU is a chip that sits between the CPU and RAM recalculating the actual
|
|
|
|
memory address from the virtual memory location requested by the kernel.
|
2022-08-31 18:30:05 +01:00
|
|
|
|
|
|
|
## Pages
|
|
|
|
|
2024-02-02 15:58:13 +00:00
|
|
|
We use the term **pages** to denote blocks of virtual memory and to distinguish
|
|
|
|
them from **addresses** as physical blocks. The MMU possesses a **page table**
|
|
|
|
which is registry logging which pages correspond to which physical blocks.
|
2022-09-03 12:00:04 +01:00
|
|
|
|
|
|
|
## Shared pages
|
|
|
|
|
2024-02-02 15:58:13 +00:00
|
|
|
Virtual memory allows the sharing of files and memory by multiple processes.
|
|
|
|
Crucially the shared data doesn't have to be within the address of each process,
|
|
|
|
instead there is a reference in the page table that each process has access to
|
|
|
|
the shared data.
|
2022-09-03 12:00:04 +01:00
|
|
|
|
2022-09-05 13:00:04 +01:00
|
|
|
## Page faults
|
|
|
|
|
|
|
|
There are two kinds of error that can occur with relation to paged memory:
|
|
|
|
|
|
|
|
- minor page faults
|
2024-02-02 15:58:13 +00:00
|
|
|
- The desired page is in main memory but the MMU doesn't currently know where
|
|
|
|
it is
|
2022-09-05 13:00:04 +01:00
|
|
|
- major page faults
|
2024-02-02 15:58:13 +00:00
|
|
|
- The desired page is not in main memory at all. Therefore the kernel must
|
|
|
|
fetch it from disk
|
|
|
|
|
|
|
|
Minor page faults are very common and are to be expected; they resolve quickly.
|
|
|
|
On the other hand too many major page faults can slow the system down both
|
|
|
|
because of the time-costly process of fetching data from disk and because it
|
|
|
|
demands more kernel resources to locate the missing page, which puts other
|
|
|
|
processes on hold.
|
2022-09-05 13:00:04 +01:00
|
|
|
|
2022-09-03 12:00:04 +01:00
|
|
|
## Resources
|
|
|
|
|
2024-02-17 11:57:44 +00:00
|
|
|
[Virtual memory](9_VirtualMemory.html#:~:text=Virtual%20memory%20also%20allows%20the,to%20more%20than%20one%20process)
|