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 11

Day-10 xv6 memory layout kernel virtual address space

前言 在昨天我們看到了 xv6 中記憶體分頁與虛擬記憶體的概念與實作的部分,有了這一些功能,我們就能夠實現作業系統中的隔離性,也就是 process 之間使用...

DAY 12

Day-11 xv6 process virtual address space

前言 我們昨天看到了 kernel space 中的 kernel virtual address space,今天我們會看到 user virtual ad...

DAY 13

Day-12 C Memory Management, Process Memory layout in UNIX

前言 這邊簡單的介紹 C 的記憶體管理機制與 Process 在 memory 中的布局與分布情形,之所以在這邊進行介紹,是為了方便理解後面的 object...

DAY 14

Day-13 Exception vs Interrupt, Trap overview Driver

Synchronize Exception (同步異常) Exception 意思為處理器在執行指令時,遇到了非預期的情況,就稱之為 Exception。 S...

DAY 15

Day-14 xv6 Trap (user mode): overview, ecall

Interrupt 中斷 (Interrupt) 可以用來改變 CPU 執行程式的流程,當 CPU 在執行一個程式時,可以通過 Interrupt 讓 CPU...

DAY 16

Day-15 xv6 Trap (user mode): Trace Trap

前言 前面看完了 ecall 的前後變化,接下來我們將繼續深入追蹤 trap 的流程,查看是如何進行整個 user mode 到 supervisor mod...

DAY 17

Day-16 xv6 Trap (user mode): Trace exec()

前言 在前面我們看過了整個 trap 的流程,而在今天我們將以 exec() 這個 System call 來追蹤實際 trap 發生的情況。 exec()...

DAY 18

Day-17 Trap (supervisor mode, machine mode), conclusion Trap in xv6

前言 我們簡單的回顧來自於 user mode 的 trap 的流程,整個流程為 uservec 到 usertrap() 再到 usertrapret()...

DAY 19

Day-18 Page Fault Overview

前言 我們在前面花了 5 個篇章對於 trap 進行了完整的介紹,並且瞭解了 trap 處理得具體流程,今天我們將看到 page fault 所造成的 tra...

DAY 20

Day-19 Page Fault Lazy Page Allocation Implementation

前言 在前面我們介紹了 page fault 以及 lazy page allocation 的概念,而我們在 usertrap() 中通過 scause C...