vault backup: 2025-05-05 04:53:58
This commit is contained in:
parent
df6a389528
commit
aa6547aa28
51
.obsidian/workspace.json
vendored
51
.obsidian/workspace.json
vendored
@ -11,29 +11,42 @@
|
||||
"id": "46800597ab6eb156",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "markdown",
|
||||
"type": "image",
|
||||
"state": {
|
||||
"file": "Operating Systems/Memory Management.md",
|
||||
"mode": "source",
|
||||
"source": false
|
||||
"file": "Operating Systems/assets/Pasted image 20250505042548.png"
|
||||
},
|
||||
"icon": "lucide-file",
|
||||
"title": "Memory Management"
|
||||
"icon": "lucide-image",
|
||||
"title": "Pasted image 20250505042548"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "33dc0f1ebcbf4c21",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "release-notes",
|
||||
"type": "image",
|
||||
"state": {
|
||||
"currentVersion": "1.8.10"
|
||||
"file": "Operating Systems/assets/Pasted image 20250505042548.png"
|
||||
},
|
||||
"icon": "lucide-book-up",
|
||||
"title": "Release Notes 1.8.10"
|
||||
"icon": "lucide-image",
|
||||
"title": "Pasted image 20250505042548"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "565b9e04e8704d81",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "markdown",
|
||||
"state": {
|
||||
"file": "Operating Systems/Virtual Memory.md",
|
||||
"mode": "source",
|
||||
"source": false
|
||||
},
|
||||
"icon": "lucide-file",
|
||||
"title": "Virtual Memory"
|
||||
}
|
||||
}
|
||||
]
|
||||
],
|
||||
"currentTab": 2
|
||||
}
|
||||
],
|
||||
"direction": "vertical"
|
||||
@ -210,13 +223,17 @@
|
||||
"omnisearch:Omnisearch": false
|
||||
}
|
||||
},
|
||||
"active": "46800597ab6eb156",
|
||||
"active": "565b9e04e8704d81",
|
||||
"lastOpenFiles": [
|
||||
"Operating Systems/Overview.md",
|
||||
"Operating Systems/Processes and Threads.md",
|
||||
"Operating Systems/Scheduling.md",
|
||||
"Operating Systems/Inter-Process Communication.md",
|
||||
"Operating Systems/Processes and Threads.md",
|
||||
"Operating Systems/Memory Management.md",
|
||||
"Operating Systems/Inter-Process Communication.md",
|
||||
"Operating Systems/Virtual Memory.md",
|
||||
"Operating Systems/assets/Pasted image 20250505042548.png",
|
||||
"Operating Systems/assets/Pasted image 20250505042419.png",
|
||||
"Operating Systems/assets/Pasted image 20250204103541.png",
|
||||
"Operating Systems/Overview.md",
|
||||
"Operating Systems/assets/Pasted image 20250502183523.png",
|
||||
"Operating Systems/assets/Pasted image 20250502183221.png",
|
||||
"Operating Systems/assets/Pasted image 20250502183310.png",
|
||||
@ -225,12 +242,9 @@
|
||||
"Operating Systems/assets/Pasted image 20250502183002.png",
|
||||
"Operating Systems/assets/Pasted image 20250502182934.png",
|
||||
"README.md",
|
||||
"Pasted image 20250502182936.png",
|
||||
"Untitled.canvas",
|
||||
"Discrete Structures/Midterm/attempt 2.md",
|
||||
"Discrete Structures/Mathematical Data Structures.md",
|
||||
"Operating Systems/assets/image.png",
|
||||
"Operating Systems/assets/Pasted image 20250502181012.png",
|
||||
"unicef.org.md",
|
||||
"Linear Algebra/Matrices.md",
|
||||
"Languages & Machines/Regular languages.md",
|
||||
@ -248,7 +262,6 @@
|
||||
"Functional Programming/Recursion.md",
|
||||
"Functional Programming/Lists.md",
|
||||
"Functional Programming/Eq and Num.md",
|
||||
"Functional Programming/Introduction to Functional Programming.md",
|
||||
"Languages & Machines/assets",
|
||||
"Languages & Machines",
|
||||
"Extracurricular/Misc/Proposed Routine Plan.canvas",
|
||||
|
98
Operating Systems/Virtual Memory.md
Normal file
98
Operating Systems/Virtual Memory.md
Normal file
@ -0,0 +1,98 @@
|
||||
---
|
||||
type: theoretical
|
||||
backlinks:
|
||||
- "[[Memory Management]]"
|
||||
---
|
||||
Separating logical memory from physical memory.
|
||||
- Allows **very large** virtual memory, when only a smaller physical memory is available
|
||||
The **virtual address space** of a process refers to the logical view of how a process is stored
|
||||
|
||||
## Implementation
|
||||
Maintain a copy of the process (including code,data heap and stack segments) in a special area of the HDD named **virtual memory**
|
||||
|
||||
> [!IMPORTANT]- Refresher - code, data, heap and stack segments
|
||||
> 
|
||||
|
||||
>[!NOTE]- Another refresher - stack vs. heap allocation
|
||||
> 
|
||||
|
||||
- Process is divided into pages
|
||||
- If a page is referred to, it is brought into main memory (**DEMAND PAGING**)
|
||||
|
||||
## Page faults
|
||||
When a page is referenced but not present in memory - a main memory access is required.
|
||||
|
||||
## Page replacement
|
||||
The act of replacing a frame in memory with another one (which we need) from the main memory.
|
||||
|
||||
|
||||
### Basic Page Replacement
|
||||
Linear search for free frame, if none -> select victim page via **a page replacement algorithm** and do your thing!
|
||||
|
||||
|
||||
## Typical pages
|
||||
Contain:
|
||||
- A P (or V for valid) bit -> page is in RAM (else page fault)
|
||||
- M (dirty) bit - page in RAM modified
|
||||
- R bit - referenced since last time R was cleared
|
||||
|
||||
## Belady’s Anomaly
|
||||
|
||||
Increasing the number of page frames (or memory pages) allocated to a process can lead to an increase in the number of page faults, rather than a decrease.
|
||||
## Frame-allocation algorithms
|
||||
How many frames to give to each process
|
||||
|
||||
### Fixed
|
||||
Each process receives the same number of frames -> **Equal Allocation**
|
||||
|
||||
### Proportional
|
||||
Allocate according to size of process.
|
||||
|
||||
## Page-replacement algorithms
|
||||
Which page to replace, optimizing for lowest page fault rate.
|
||||
|
||||
### FIFO
|
||||
Read title.
|
||||
### Least Recently Used (LRU)
|
||||
Replace page that has not been used recently.
|
||||
|
||||
**Counter**:
|
||||
- Every page entry has a counter; every time page is referenced through this entry, copy the clock into the counter.
|
||||
- When a page is to be changed, find smallest value in counters.
|
||||
**Stack**:
|
||||
- Keep a stack of page numbers in a double link form[^1]
|
||||
- On page reference - move to top
|
||||
|
||||
### LRU Approximation
|
||||
Since LRU is slow as shit, we need an approximation.
|
||||
|
||||
We introduce a **Reference bit**:
|
||||
- Each page has `R = 0` at first
|
||||
- Whenever referenced `R = 1`
|
||||
- Replace any page with `R = 0`
|
||||
|
||||
#### Second-chance (Clock)
|
||||
Do the above. It's called a clock cuz it's like a `itertools.cycle()`. It holds the state of last accessed page (clock hand) and moves on from there on next iteration.
|
||||
|
||||
## The Working Set Model
|
||||
We want to have the set of pages "in use" in RAM!
|
||||
- Working set changes over time
|
||||
- Usually approximated by the set of pages used by some amount of most recent references
|
||||
|
||||
## Thrashing
|
||||
When a process is busy swapping pages.
|
||||
Multiprogramming[^2] is high, CPU utilization[^3] is low.
|
||||
|
||||
### Solving it
|
||||
Give the process(es) more memory by:
|
||||
- Taking it from another process
|
||||
- Swap out shit until demand is lower (scheduler)
|
||||
|
||||
## Prepaging
|
||||
|
||||
|
||||
|
||||
---
|
||||
[^1]: Doubly-linked list where we can go `prev` and `next`
|
||||
[^2]: Many processes wanting resources
|
||||
[^3]: Shit actually happening
|
BIN
Operating Systems/assets/Pasted image 20250505042419.png
Normal file
BIN
Operating Systems/assets/Pasted image 20250505042419.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 279 KiB |
BIN
Operating Systems/assets/Pasted image 20250505042548.png
Normal file
BIN
Operating Systems/assets/Pasted image 20250505042548.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 148 KiB |
Loading…
x
Reference in New Issue
Block a user