Content: Virtual Memory
Introduction
virtual memory 是 OS 分配給每個 process 的一段連續記憶體,雖然說是連續,但這個連續是抽象概念,在 physical device 上還是碎片化的,靠 memory mapping 來達成軟體層面上的連續
Relation with PCB
PCB 上的 register 和 program counter 會指向 virtual memory ,其中會記錄 process 的執行狀態
Component in User Space

Text Segment
他是我們要跑的 program 編譯完的程式碼,program counter 會指向這裡的某一部分,代表我們的程式碼已經跑到哪裡了,並且他是 read only
Initialized Data
這裡存的是我們已經明確給予初始值的 global 或 static variable,因為他們會持續存在在整個 process 執行時間,所以我們可以一開始就分配給他們一些位置
exec 在讀取 program file 的時候就會將 text segment 和 initialized data 的部分讀入了
Un-initialized Data
這裡存在是未初始化的 global 或 static variable,但實際上 exec() 會將這個部分全部都設為 0
Heap
動態記憶體,我們呼叫 new 或 malloc 分配的記憶體就放在這
Stack
這裡放的是我們在函式中宣告的 local variable 或 function parameter 之類的,詳見 stack frame
Component in Kernel Space
當我們的 program 執行 system call,其也需要自己的 kernel space 的 memory,並且這個 memory 也屬於這個 process,因為 kernel 是代 user 執行指令
而這部分的記憶體也屬於 virtual memory,只是是在 kernel space 中