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

動態記憶體,我們呼叫 newmalloc 分配的記憶體就放在這

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 中