原文:XV6學習(8)中斷和設備驅動

驅動是操作系統中用於管理特定設備的代碼:驅動控制設備硬件,通知硬件執行操作,處理中斷,與等待該設備IO的進程進行交互。 當設備需要與操作系統進行交互時,就會產生中斷 陷阱的一種 ,之后內核的陷阱處理代碼就會識別中斷設備並調用對應的驅動處理程序。在XV 這一步發生在trap.c的devintr中。 大部分設備驅動在兩個上下文中執行代碼:頂層部分運行在進程的內核線程中,底層部分在中斷處理時執行。頂層部 ...

2021-01-30 11:00 0 328 推薦指數:

查看詳情

xv6學習筆記(3):中斷處理和系統調用

xv6學習筆記(3):中斷處理和系統調用 1. tvinit函數 這個函數位於main函數內 表明了就是設置idt表 1. SETGATE函數 這里的setgate是一個宏定義是用來設置idt表的 下面是函數參數的說明 Sel : 表示對於中斷處理程序代碼所在段的段選擇 ...

Sun Aug 22 23:16:00 CST 2021 0 189
XV6學習(7)Lab lazy

代碼在github上。 這一個實驗是要利用缺頁異常來實現懶分配(lazy allocation)。用戶態程序通過sbrk系統調用來在堆上分配內存,而sbrk則會通過kalloc函數來申請內存頁面,之 ...

Sat Jan 16 18:39:00 CST 2021 1 461
XV6學習(10)鎖

在包括XV6的絕大部分操作系統都是多個任務交錯執行的。交錯的一個原因是多核硬件:多核計算機的多個CPU核心獨立執行計算,如XV6的RISC-V處理器。多個CPU核心共享物理內存,XV6利用這種共享來維護所有核心都會讀寫的數據結構。而這種共享會導致一個CPU在讀取某數據結構時,可能有另一個CPU正在 ...

Fri Feb 05 19:05:00 CST 2021 0 334
XV6學習(2)Lab syscall

實驗的代碼放在了Github上。 第二個實驗是Lab: system calls。 這個實驗主要就是自己實現幾個簡單的系統調用並添加到XV6中。 XV6系統調用 添加系統調用主要有以下幾步: 在user/user.h中添加系統調用函數的定義。 在user/usys.pl中添加 ...

Mon Dec 21 18:28:00 CST 2020 0 917
XV6學習(3)Page tables

頁表是操作系統中非常重要的一部分,用於將虛擬地址轉化為物理地址。虛擬內存是操作系統實現進程隔離的關鍵技術。 在 XV6 中通過 RISC-V 的頁表機構完成了虛擬地址向物理地址的轉換。 分頁硬件機構 XV6 運行於 Sv39 RISC-V 上,64 位地址中的低 39 位被使用。RISC-V ...

Mon Dec 21 18:32:00 CST 2020 0 743
XV6學習 (4)Lab pgtbl

這一個實驗主要是學習XV6的頁表(分頁機制),關於分頁機制的相關內容已經寫在XV6學習 (3)里面了。 代碼放在Github上。 Print a page table (easy) 這一個就是要實現一個vmprint()函數來遍歷頁表並打印,可以仿照freewalk()函數來寫。 在這里 ...

Wed Dec 23 18:33:00 CST 2020 0 509
XV6學習(1) Lab util

正在學習MIT的6.S081,把做的實驗寫一寫吧。 實驗的代碼放在了Github上。 第一個實驗是Lab util,算是一個熱身的實驗,沒有涉及到系統的底層,就是使用系統調用來完成幾個用戶模式的小程序。 Boot xv6 (easy) 啟動XV6,按照文檔執行就ok了。 在XV6中 ...

Tue Dec 22 01:21:00 CST 2020 0 727
XV6學習(6)Lab: traps

這一個實驗主要是對RISC-V的匯編、棧幀結構以及陷阱進行簡單的了解,難度並不大。 代碼放在github上。 RISC-V assembly (easy) Q1: Which registers ...

Wed Jan 06 18:37:00 CST 2021 0 957
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM