xv6學習筆記(5) : 鎖與管道與多cpu 1. xv6鎖結構 1. xv6操作系統要求在內核臨界區操作時中斷必須關閉。 如果此時中斷開啟,那么可能會出現以下死鎖情況: 進程A在內核態運行並拿下了p鎖時,觸發中斷進入中斷處理程序。 中斷處理程序也在內核態中請求p鎖,由於鎖在 ...
在包括XV 的絕大部分操作系統都是多個任務交錯執行的。交錯的一個原因是多核硬件:多核計算機的多個CPU核心獨立執行計算,如XV 的RISC V處理器。多個CPU核心共享物理內存,XV 利用這種共享來維護所有核心都會讀寫的數據結構。而這種共享會導致一個CPU在讀取某數據結構時,可能有另一個CPU正在對此數據進行更新 或者多個CPU同時更新同一個數據。如果不對這種並行訪問進行小心的設計,就可能會導致錯 ...
2021-02-05 11:05 0 334 推薦指數:
xv6學習筆記(5) : 鎖與管道與多cpu 1. xv6鎖結構 1. xv6操作系統要求在內核臨界區操作時中斷必須關閉。 如果此時中斷開啟,那么可能會出現以下死鎖情況: 進程A在內核態運行並拿下了p鎖時,觸發中斷進入中斷處理程序。 中斷處理程序也在內核態中請求p鎖,由於鎖在 ...
代碼在github上。 這一個實驗是要利用缺頁異常來實現懶分配(lazy allocation)。用戶態程序通過sbrk系統調用來在堆上分配內存,而sbrk則會通過kalloc函數來申請內存頁面,之 ...
實驗的代碼放在了Github上。 第二個實驗是Lab: system calls。 這個實驗主要就是自己實現幾個簡單的系統調用並添加到XV6中。 XV6系統調用 添加系統調用主要有以下幾步: 在user/user.h中添加系統調用函數的定義。 在user/usys.pl中添加 ...
頁表是操作系統中非常重要的一部分,用於將虛擬地址轉化為物理地址。虛擬內存是操作系統實現進程隔離的關鍵技術。 在 XV6 中通過 RISC-V 的頁表機構完成了虛擬地址向物理地址的轉換。 分頁硬件機構 XV6 運行於 Sv39 RISC-V 上,64 位地址中的低 39 位被使用。RISC-V ...
這一個實驗主要是學習XV6的頁表(分頁機制),關於分頁機制的相關內容已經寫在XV6學習 (3)里面了。 代碼放在Github上。 Print a page table (easy) 這一個就是要實現一個vmprint()函數來遍歷頁表並打印,可以仿照freewalk()函數來寫。 在這里 ...
正在學習MIT的6.S081,把做的實驗寫一寫吧。 實驗的代碼放在了Github上。 第一個實驗是Lab util,算是一個熱身的實驗,沒有涉及到系統的底層,就是使用系統調用來完成幾個用戶模式的小程序。 Boot xv6 (easy) 啟動XV6,按照文檔執行就ok了。 在XV6中 ...
這一個實驗主要是對RISC-V的匯編、棧幀結構以及陷阱進行簡單的了解,難度並不大。 代碼放在github上。 RISC-V assembly (easy) Q1: Which registers ...
xv6學習筆記(4) : 進程 xv6所有程序都是單進程、單線程程序。要明白這個概念才好繼續往下看 1. XV6中進程相關的數據結構 在XV6中,與進程有關的數據結構如下 與前述的兩類信息的對應關系如下 操作系統管理進程有關的信息:內核棧kstack,進程的狀態state,進程 ...