eolas/zk/VirtualMemory.md

62 lines
2.3 KiB
Markdown
Raw Normal View History

2024-07-08 07:00:04 +01:00
---
tags:
- memory
- Linux
2024-07-12 07:00:03 +01:00
- kernel
2024-07-08 07:00:04 +01:00
---
2024-07-09 07:00:03 +01:00
# Virtual memory
2024-07-08 07:00:04 +01:00
2024-07-09 07:00:03 +01:00
Virtual memory is an abstracted and idealised representation of the physical
2024-07-12 07:00:03 +01:00
memory capacity of a machine that is presented to user space for its memory
2024-07-09 07:00:03 +01:00
operations.
2024-07-08 07:00:04 +01:00
2024-07-12 07:00:03 +01:00
When an OS implements virtual memory, [processes](./Processes.md) in
2024-07-16 07:00:04 +01:00
[user space](./User_Space.md) cannot directly read or write to the physical
2024-07-12 07:00:03 +01:00
memory. Instead they execute memory operations against virtual memory and the
2024-07-12 09:00:03 +01:00
[kernel](./The_kernel.md) translates these into the actual operations against
the memory hardware.
2024-07-08 07:00:04 +01:00
The main benefits:
- User mode processes do not have to be concerned with the physical memory
management
- There is a buffer between user mode processes and physical memory, meaning
that memory cannot be accidentally corrupted by other processes in user space.
2024-07-09 07:00:03 +01:00
Because the physical memory is abstracted, it can be the case that the physical
2024-07-12 07:00:03 +01:00
[memory addresses](./Memory_addresses.md) are non-contiguous or even distributed
2024-07-12 09:00:03 +01:00
accross different hardware components (such as the
[cache](./Register_and_cache_memory.md) and [swap](./Swap_space.md)). Despite
2024-07-12 07:00:03 +01:00
this, the memory addresses will appear contiguous in virtual memory. Each user
space process is presented with the same range of available memory addresses and
the same total capacity.
It is also possible for the kernel to present user space with an available
virtual memory capcacity that exceeds the current physical capacity of the
2024-07-09 07:00:03 +01:00
machine:
2024-07-08 07:00:04 +01:00
2024-07-09 07:00:03 +01:00
> _It's possible for the kernel and all running processes to request more bytes
> of virtual memory than the total size of RAM. In that situation, the OS can
> move move bytes of memory to secondary storage to make room in RAM for newly
> requested memory._
_How Computers Really Work_ (2021) p.206
2024-07-16 07:00:04 +01:00
## Virtual memory and the kernel
2024-07-12 07:00:03 +01:00
2024-07-16 07:00:04 +01:00
The kernel itself utilises virtual memory. The kernel virtual memory has a
different range of virtual addresses to work with than user space virtual
memory.
Unlike user space virtual memory, the kernel has access to everything running in
kernel address space whereas processes in user address space are partitioned
from each other with separate address spaces that cannot interact.
2024-07-12 07:00:03 +01:00
2024-07-09 07:00:03 +01:00
// Next: the kernel also uses virtual memory however isn't also responsible for
the appportioning of virtual memory. Confused.
2024-07-08 07:00:04 +01:00
2024-07-16 07:00:04 +01:00
// See Claude convo
![Virtual memory diagram](/img/virtual-memory-diagram.jpg)