From 9f6e7329fe804b036964c5f5c4ec39031a2a66b0 Mon Sep 17 00:00:00 2001 From: thomasabishop Date: Mon, 8 Jul 2024 07:00:04 +0100 Subject: [PATCH] Autosave: 2024-07-08 07:00:04 --- .zk/notebook.db | Bin 3829760 -> 3829760 bytes zk/Memory_Management_Unit.md | 9 +++ zk/VirtualMemory.md | 39 +++++++++++ zk/Virtual_memory_and_the_MMU_in_Linux.md | 76 ---------------------- 4 files changed, 48 insertions(+), 76 deletions(-) create mode 100644 zk/Memory_Management_Unit.md create mode 100644 zk/VirtualMemory.md delete mode 100644 zk/Virtual_memory_and_the_MMU_in_Linux.md diff --git a/.zk/notebook.db b/.zk/notebook.db index 9c5418dfab00a106250cb04c8d99e8fbde4b505e..ce120f4d612a874b17098fbc729f9d312722d2db 100644 GIT binary patch delta 36924 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 OV=&qHD?{IS>)!wXwFX}R diff --git a/zk/Memory_Management_Unit.md b/zk/Memory_Management_Unit.md new file mode 100644 index 0000000..91c9ab5 --- /dev/null +++ b/zk/Memory_Management_Unit.md @@ -0,0 +1,9 @@ +--- +title: Memory_Management_Unit +tags: [memory, Linux] +created: Monday, July 08, 2024 +--- + +# Memory_Management_Unit + +## Related notes diff --git a/zk/VirtualMemory.md b/zk/VirtualMemory.md new file mode 100644 index 0000000..f049223 --- /dev/null +++ b/zk/VirtualMemory.md @@ -0,0 +1,39 @@ +--- +tags: + - memory + - Linux +--- + +# Virtual memory and the Memory Management Unit + +## What is virtual memory? + +Virtual memory is an abstraction of physical memory capacity and allocation that +is accessible to user space. The kernel handles physical memory allocation and +presents this to user space as a simplified and idealised representation of the +available memory of the system. + +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. + +When a process writes or reads from a virtual memory address this does not +directly refer to a hardware memory location. The kernel translates this into a +physical memory address but this is opaque to the user space process. In fact, +the physical memory addresses could be distributed accross multiple +non-contiguous locations such as cache and swap memory, not just DRAM. + +Although the physical memory may be distributed and non-contiguous, from the +viewpoint of user space, the available virtual memory is contiguous. Each user +space process is presented with the same range of available memory addresses and +the same total capacity. + +Because this is virtual, there is no risk of one process reading or overwriting +the address of another. The same virtual address for multiple programs maps to +different physical addresses. + +// Next: more memory offered than is physically available. +![](/img/virtual-memory-diagram.jpg) diff --git a/zk/Virtual_memory_and_the_MMU_in_Linux.md b/zk/Virtual_memory_and_the_MMU_in_Linux.md deleted file mode 100644 index e3d92b3..0000000 --- a/zk/Virtual_memory_and_the_MMU_in_Linux.md +++ /dev/null @@ -1,76 +0,0 @@ ---- -tags: - - memory - - Linux ---- - -# Virtual memory and the Memory Management Unit - -## What is virtual memory? - -Virtual memory is implemented at the level of the operating system and is an -abstraction on top of 'real', physical memory (i.e the bits stored within the -[DRAM](./Memory.md#DRAM). - -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) does 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 and may even be located in the -cache or in swap memory on the disk, rather than the actual main memory. - -Virtual memory presents a unified abstraction to the kernel over and above these -specific memory locations. - -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. - -![](/img/virtual-memory-diagram.jpg) - -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. - -## The Memory Management Unit (MMU) - -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. - -## Pages - -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. - -## Shared pages - -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. - -## Page faults - -There are two kinds of error that can occur with relation to paged memory: - -- minor page faults - - The desired page is in main memory but the MMU doesn't currently know where - it is -- major page faults - - 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.