From 07f3694003581c0859ab6ab174991b4f4ccd0cde Mon Sep 17 00:00:00 2001 From: thomasabishop Date: Tue, 16 Jul 2024 17:00:03 +0100 Subject: [PATCH] Autosave: 2024-07-16 17:00:03 --- .zk/notebook.db | Bin 4153344 -> 4153344 bytes zk/Memory_Management_Unit.md | 39 +++++++++++++++++++++++++++++++++-- zk/VirtualMemory.md | 28 +++++++++++++++++++------ 3 files changed, 59 insertions(+), 8 deletions(-) diff --git a/.zk/notebook.db b/.zk/notebook.db index 348c3daaa0a70358c8ddc33ab052fb4ec7363f6d..21892ccae9ab0536045799e3f6fe0fd90a5e21a9 100644 GIT binary patch delta 33367 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 z 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≥)oPw21Vf1~HA(Y3 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 diff --git a/zk/Memory_Management_Unit.md b/zk/Memory_Management_Unit.md index 91c9ab5..d96a1b3 100644 --- a/zk/Memory_Management_Unit.md +++ b/zk/Memory_Management_Unit.md @@ -4,6 +4,41 @@ tags: [memory, Linux] created: Monday, July 08, 2024 --- -# Memory_Management_Unit +# Memory Management Unit (MMU) -## Related notes +The MMU is the bridge between the physical memory devices of the machine and the +virtual memory space. It is a chip that sits between the CPU and the RAM and +determines the physical location of the memory requested by the kernel as +virtual memory. + +![Virtual memory diagram](/img/virtual-memory-diagram.jpg) + +## 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. diff --git a/zk/VirtualMemory.md b/zk/VirtualMemory.md index e66f2f5..146c3ea 100644 --- a/zk/VirtualMemory.md +++ b/zk/VirtualMemory.md @@ -45,17 +45,33 @@ _How Computers Really Work_ (2021) p.206 ## Virtual memory and the kernel -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. +The kernel itself utilises virtual memory. + +During the [boot_process](Boot_process.md), it runs in physical memory mode +however it rapidly creates a 1:1 mapping of physical to virtual memory for +itself. This direct mapping allows the kernel to easily access any physical +memory location as needed, whilst retaining the benefits of virtual memory. + +With its own virtual memory established, it can then build additional virtual +memory structures for itself and user processes. + +While the kernel uses virtual memory it can also access physical memory at any +time wherease user space processes can only ever access 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. -// Next: the kernel also uses virtual memory however isn't also responsible for -the appportioning of virtual memory. Confused. +In addition to being able to access its own virtual memory (and physical memory, +as required) the kernel can also access any user processes' virtual address. -// See Claude convo +This said, the virtual memory space of the kernel and the virtual memory space +of the user processes are distinct. It is not the case that the kernel is +superset of all available virtual memory. It can access user space virtual +memory because it sets up the tables and locations, not because it is a subset +of its own virtual memory. ![Virtual memory diagram](/img/virtual-memory-diagram.jpg)