最近更新於2021/08/05. 我們以xv6的一個系統調用getpid()為例,觀察xv6的系統調用大致過程。 系統調用的聲明位於 user.h 中,xv6的用戶程序若要使用系統調用需要包括這個頭文件,其中getpid()聲明如下: int getpid(void); 此函數定義 ...
在操作系統中,有三種情況會導致CPU的控制流發生轉移:用戶態中通過ecall指令進入內核態 異常發生,如除零 訪問非法地址 設備中斷,如硬盤完成讀寫請求。上面這些情況可以統稱為陷阱 trap 。 陷阱在一般情況下應該是透明的,即當執行完處理程序后能夠恢復之前程序的狀態。這就要求在陷入內核態時,內核要保存之前的寄存器等狀態信息,當執行完處理程序之后再進行恢復。 在XV 中處理陷阱有以下四步:CPU進 ...
2021-01-04 10:35 0 326 推薦指數:
最近更新於2021/08/05. 我們以xv6的一個系統調用getpid()為例,觀察xv6的系統調用大致過程。 系統調用的聲明位於 user.h 中,xv6的用戶程序若要使用系統調用需要包括這個頭文件,其中getpid()聲明如下: int getpid(void); 此函數定義 ...
xv6學習筆記(3):中斷處理和系統調用 1. tvinit函數 這個函數位於main函數內 表明了就是設置idt表 1. SETGATE函數 這里的setgate是一個宏定義是用來設置idt表的 下面是函數參數的說明 Sel : 表示對於中斷處理程序代碼所在段的段選擇 ...
1. Overview 要為xv6添加一個系統調用,需要修改以下5個文件: syscall.h syscall.c sysproc.c usys.S user.h 由於Unix v6發行於1975年,下面我們以添加一個返回整數1975的系統調用作為示范來說明如何為 ...
Xv6的lecture LEC 1 Operating systems L1: O/S overview L1:O/S概述 ...
XV6操作系統是MIT 6.828課程中使用的教學操作系統,是在現代硬件上對Unix V6系統的重寫。XV6總共只有一萬多行,非常適合初學者用於學習和實踐操作系統相關知識。 MIT 6.828的課程網站是https://pdos.csail.mit.edu/6.828/。XV6操作系統有官方文檔 ...
代碼在github上。 這一個實驗是要利用缺頁異常來實現懶分配(lazy allocation)。用戶態程序通過sbrk系統調用來在堆上分配內存,而sbrk則會通過kalloc函數來申請內存頁面,之后將頁面映射到頁表當中。 當申請小的空間時,上述過程是沒有問題的。但是如果當進程一次申請很大 ...
在包括XV6的絕大部分操作系統都是多個任務交錯執行的。交錯的一個原因是多核硬件:多核計算機的多個CPU核心獨立執行計算,如XV6的RISC-V處理器。多個CPU核心共享物理內存,XV6利用這種共享來維護所有核心都會讀寫的數據結構。而這種共享會導致一個CPU在讀取某數據結構時,可能有另一個CPU正在 ...
0x00背景 最近在看操作系統上的書 然后選了本知乎推薦的xv6 https://th0ar.gitbooks.io/xv6-chinese/content/content/chapter0.html 我們從這幾個問題入手 操作系統作用是什么? 內核的作用 ...