iT邦幫忙

鐵人檔案

2022 iThome 鐵人賽
回列表
Software Development

與作業系統的第一類接觸 : 探索 xv6 系列

xv6 為 MIT 用於教學所開發的作業系統,希望在本系列文章中,能夠藉由學習與閱讀 xv6 程式碼達到以下目標:

* 了解 C 程式的行為,如 violiate, inline,以及記憶體佈局。
* 了解 process, thread, memory paging, virtual memory 等虛擬化概念。
* trap, exception, interrupt 概念以及處理。
* RISC-V 基本暫存器,CSR 的使用與操作,特權模式。

本文為筆者在對於作業系統零基礎概念的情況下,開始學習xv6所進行的一些系統性整理以及心得記錄,拋磚引玉,還請各位多多指教。

鐵人鍊成 | 共 31 篇文章 | 20 人訂閱 訂閱系列文 RSS系列文 團隊那團名要叫什麼?
DAY 21

Day-20 UART Driver TOP

前言 前面我們知道在 xv6 啟動後,Shell 會輸出 $ 到 Console 上,而我們可以追蹤產生 $ 的行為了解 UART 的運作,以及介紹一下 Dr...

DAY 22

Day-21 UART Driver Bottom

前言 繼續前面 UART TOP 的部分,下面將介紹 UART Bottom 的部分,也就是關於 Interrupt 的處理,並從 Interrupt 的處理...

DAY 23

Day-22 Race Condition, Spin Lock

前言 如果一個應用程式想要使用多個 CPU 的核心 (thread),並且使用了 System call,將會觸發 trap,而多個核心使用 System c...

DAY 24

Day-23 Spinlock 在 UART 使用與實作

前言 前面我們介紹了多 Process 會遇到的 race condition 的問題,以及如何使用 lock 的機制進行處理,後面提到了 xv6 中 Spi...

DAY 25

Day-24 xv6 Process, Init Process

前言 前面我們提到了 Process 的概念,我們知道一個位於 user space 執行中的程式為 Process,而 Process 有虛擬記憶體的概念,...

DAY 26

Day-25 xv6 Thread, Switch Thread

前言 在這一篇文章中,我們將會介紹何謂 Thread,和 Process 之間有什麼樣的區別,前面介紹的 Thread 和 Process 的差別是理論上的差...

DAY 27

Day-26 xv6 Switch Thread, yield, sched

前言 昨天我們簡單的介紹了 Thread 的一些基本概念,以及 Thread 是如何進行切換的,最後通過一個簡單的實驗去證明 compute bound th...

DAY 28

Day-27 C 語言, 變數範圍, volatile, inline

前言 在研讀 xv6 專案程式碼的過程,我們可能會看到各種 C 語言的修飾字以及相關用法,諸如 static, extern, violiate 等等,我們將...

DAY 29

Day-28 Pointer, A Pointer of A Pointer, Function Pointer

前言 在 xv6 中,我們可以看到各種 C 語言的指標操作,而在這一篇章中,我們將回顧一些指標的概念,並且結合部分 xv6 的程式碼進行更多的理解。 指向陣列...

DAY 30

Day-29 階段性小節,未完待續

回顧 默默的也到了鐵人賽的最後一天,感謝看到這裡的你各位,這邊我們來進行一些回顧,檢視一下哪一些目標尚未達成 作業系統簡介 : 作業系統概要 xv6...