iT邦幫忙

2026 iThome 鐵人賽

DAY 19
0
IT Operation

解構作業系統:30 天從 Process、Concurrency 到 Virtual Memory系列 第 19 篇

Day 19|Page Fault:明明程式沒有寫錯,CPU 為什麼故意把它丟進 Kernel?

  • 分享至 

  • xImage
  •  

先看一個很普通的程式:

int *p = malloc(4096);
p[0] = 100;

從 Programmer 的角度:
malloc()
↓
拿到 Memory
↓
寫入 100

好像沒有什麼特別的。但 OS 不一定在 malloc() 回傳的那一刻,就立刻:
找到 Physical Frame
↓
清成 0
↓
建立完整 Mapping
↓
準備好所有實體 Memory

它有可能先說「好,這段 Virtual Address 你可以用。」等到程式真的第一次 p[0] = 100 ; 才發現:目前還沒有可以直接完成這次 Access 的 Mapping。於是 CPU:Page Fault!進入 Kernel
Kernel 再把需要的 Memory 準備好,最後讓程式繼續。

所以今天最重要的觀念就是:Page Fault 並不等於錯誤;它首先代表目前這次 Memory Access 無法依照現有 Translation / Protection State 直接完成,需要 OS 介入。


上一篇
Day 18|TLB:CPU 每次存取 Memory 都要查 Page Table,真的不會慢死嗎?
系列文
解構作業系統:30 天從 Process、Concurrency 到 Virtual Memory 共 19 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言