---恢復內容開始---
一 視頻知識
1 linux系統下如何區分內核態與用戶態
在內核態:cs:eip可以是任意的地址,4G的內存地址空間
在用戶態:cs:eip只能訪問0x00000000—0xbfffffff的地址空間
2 系統調用的三層皮:xyz、system_call和sys_xyz
第一層:API,第一層是指Libc中定義的API,這些API封裝了系統調用,使用int?0x80觸發一個系統調用中斷;當然,并非所有的API都使用了系統調用,如完成數學加減運算的API就沒有使。用系統調用;也有可能某個API使用了多個系統調用;這一層存在的價值就是為應用程序員提供易于使用的API來調用系統調用;
第二層:中斷向量對應的,運行于內核態。system_call是所有系統調用在內核的入口點,在其中的開始處保護用戶態程序執行上下文,結束處恢復用戶態程序執行上下文,在中間根據傳入的系統調用號對應的中斷服務程序;
第三層:sys_xyz?系統調用封裝例程:執行具體的系統調用操作,完成用戶的系統調用請求;系統調用有不同種類的服務程序
二 測試實驗2
1 首先用mdkir 9225 新建文件夾,cd 9225進入此目錄下,使用命令vi main.c進入vim環境中編寫main.chanshu代碼
2 使用命令gcc -S -o main.s main.c -m32其意義是將預處理文件編成.s文件,也就是將c代碼轉換成匯編代碼。使用命令gcc -g main.s -o main -m32,然后使用命令gdb main 進入gdb調試狀態
3 在gdb中使用l指令觀察函數,但出現了理解不了的亂碼。繼續向下操作設置斷點使用命令b*main 或者 break main,然后使用命令r使其運行一下,使用i r命令查看函數的exp eax ebp eip,觀察函數變化,之后重復使用命令n,意為查看下一條運行命令,再使用命令i r,以此下去但是不知道為什么函數運算一直出錯
三 課本知識
通過閱讀第七章我了解到了什么是中斷,并知道了中斷一般分為異步中斷(一般由硬件引起)和同步中斷(一般由處理器本身引起)。
異步中斷:CPU處理中斷的時間過長,所以先將硬件復位,使硬件可以繼續自己的工作,然后在適當時候處理中斷請求中耗時的部分
同步中斷:CPU處理完中斷請求的所有工作后才反饋硬件。同步中斷應該處理能很快完成的一種中斷。
中斷相關函數
實現一個中斷,主要需要知道3個函數:(1)注冊中斷的函數(2)釋放中斷的函數(3)中斷處理程序的聲明
中斷處理的過程主要涉及3函數:
do_IRQ 與體系結構有關,對所接收的中斷進行應答
handle_IRQ_event 調用中斷線上所有中斷處理
ret_from_intr 恢復寄存器,將內核恢復到中斷前的狀態
中斷處理程序會異步執行,并且在最好的情況下它也會鎖定當前的中斷線。最起碼的,中斷處理程序要負責通知硬件設備中斷已被接收,操作系統也把處理硬件中斷的過程分為兩個部分。
上半部分(top half)簡單快速,執行的時候禁止一些或者全部中斷。只能通過中斷處理程序實現。只做有嚴格時限的工作。
下半部分(bottom half)稍后執行,而且執行期間可以響應所有的中斷。
這周將時間放在了測試二中,我用命令gcc -g main.c按照鏈接中的也沒有做出來,實驗四我下周會補上的,我會在下周將作業努力好好完成