iT邦幫忙

鐵人檔案

2026 iThome 鐵人賽
回列表
Software Development

打造 OS Kernel:從 OS in 1,000 Lines 到 xv6 系列

本專題以 30 天實作方式建立作業系統核心基礎。前半段以 RISC-V 為平台,從零實作小型 Kernel,逐步完成開機、例外處理、實體記憶體配置、行程管理、Context Switch、CPU 排程、分頁、User Mode、System Call、VirtIO 與檔案系統。
後半段進入 xv6,對照分析相同機制在 Unix-like 作業系統中的完整實作,並進一步擴充 xv6,加入行程資訊、System Call Trace 與排程統計等觀察功能。
最終完成一套可實際執行與觀察 Kernel 行為的實作成果,建立從 OS 原理、原始碼閱讀到核心開發的完整學習路徑。

參賽天數 22 天 | 共 22 篇文章 | 0 人訂閱 訂閱系列文 RSS系列文
DAY 11

Day 11|Context Switch:讓 CPU 真正從 P1 切換到 P2

今天的輸出會在 P1 與 P2 之間來回,兩者各自保留 round,也各自使用不同的堆疊。同一顆 CPU 執行一段工作後,保存現場,再從另一份現場繼續,這就是上...

2026-09-21 ‧ 由 日班工頭 分享
DAY 12

Day 12|第一次寫 Scheduler:Round-Robin 如何分享 CPU?

今天增加第三個行程,讓輸出依序出現 P1 → P2 → P3。工作完成一小段後只呼叫 yield(),由核心決定下一個工作,而不是在工作裡寫死接手者。 這就是排...

2026-09-22 ‧ 由 日班工頭 分享
DAY 13

Day 13|Scheduler 不只要選人:加入 Process State 與排程觀察功能

今天 P1 一開始就進入等待,暫時離開可執行的集合。等 P2 發出喚醒通知,P1 才重新取得排程資格,並繼續原本的工作。 我們會把每次狀態轉換印出來,讓「沒輪到...

2026-09-23 ‧ 由 日班工頭 分享
DAY 14

Day 14|Virtual Memory:讓 Process 不再直接看到 Physical Memory

今天先往一頁實體記憶體寫入 0x12345678,再從虛擬位址 0x40000000 讀到同一個值。接著透過虛擬位址改成 0xabcdef01,原本的實體頁也會...

2026-09-24 ‧ 由 日班工頭 分享
DAY 15

Day 15|Page Table 實戰:自己走一次 Virtual Address Translation

昨天證明 0x40000000 能讀到配置的實體頁,今天把位址改成 0x40000034。它應該仍然查到同一個 frame,只是最後的 PA 多出 0x34,也...

2026-09-25 ‧ 由 日班工頭 分享
DAY 16

Day 16|User Process:第一次讓 Kernel 執行自己的 Application

今天會產生兩份 ELF:核心的 kernel.elf,以及使用者程式的 user.elf。核心要把後者的機器碼放進一頁 RAM,映射到固定的使用者位址,再準備另...

2026-09-26 ‧ 由 日班工頭 分享
DAY 17

Day 17|System Call:User Program 第一次向 Kernel 求助

昨天核心已經把使用者程式放進記憶體,但還沒有執行它。今天要讓終端機出現 U-mode says hello,而且這段文字必須由 U-mode 程式提出輸出請求,...

2026-09-27 ‧ 由 日班工頭 分享
DAY 18

Day 18|從 VirtIO 到檔案:把 Tiny Kernel 變成一個小型 OS

今天的完成畫面只有一行:Hello from hello.txt on VirtIO disk!。不過,這行文字不能來自使用者程式裡的字串,也不能由核心直接印出...

2026-09-28 ‧ 由 日班工頭 分享
DAY 19

Day 19|進入 xv6:把自己寫的 Tiny OS 對映到 Unix-like Kernel

QEMU 印出 init: starting sh,接著出現 $。這次不必重新編譯核心才能換一個測試,我們可以在 Shell 輸入 echo day19-rea...

2026-09-29 ‧ 由 日班工頭 分享
DAY 20

Day 20|xv6 Boot:從 entry.S 一路 Trace 到 main()

今天先讓 QEMU 停在沒有開機文字的狀態。不是核心壞掉,而是我們要趕在主控台初始化以前,看看 CPU 的堆疊與權限模式如何準備完成。 昨天固定了 xv6 版本...

2026-09-30 ‧ 由 日班工頭 分享