《Linux内核设计与实现》课程学习重点问题总结
(問題均是同學提出或是老師上課重點講解的部分內容,根據自身理解和筆記總結出自己的答案。如有不對,還請指教。)
week2
【Q1】命令qemu -kernel 內核可執行文件 -initrd rootfs.img
在內核代碼目錄下有init,這是一個可執行文件,內含有C語言文件。
【Q2】編譯內核的目的是什么?
為了生成符號表(即名稱與地址的映射表)。
make config--->make bzImage make module--->make module--->install--->make install make all?
week3
【課堂筆記】
1.MUU頁式轉換(虛擬地址--->物理地址)。
2.0號中斷是除0錯誤。
3.硬中斷:CPU出錯,被動中斷;軟中斷:異常,陷入,trap。
4.所有的驅動操作均在內核態。
5.操作系統的邊界即是系統調用。
6.快速系統調用機制:sysenter/sysexit。
7.int指令流程:無運行級別切換;有運行級別切換
8.TSS:任務堆棧段。
9.Intel設計用來存放硬件上下文,實現任務切換。
10.系統調用過程:執行路徑的切換、運行級別的切換
?
【Q1】所謂的打開中程序與關閉中斷程序過程中的兩種不同情況是指什么?
打開中斷與關閉中斷過程中涉及兩種不同情況。即筆記中第7條提及的不同。什么是運行級別的切換呢?我認為就是在視頻講解中簡單帶過的“中斷發生后的第一件事就是保存現場,結束前最后一件事就是恢復現場”、“發生進程調度”這部分內容。
老師上課提到的打開中斷和關閉中斷的兩種情況應該是指硬中斷與軟中斷的區別。視頻中講解總結如下:
SAVE_ALL-...//內核代碼,完成中斷服務,進程調度 RESTORE_ALL iret_pop cs:eip/ss:eip/eflags from kernel stack如果并未發生進程調度,則直接往下執行restore_all;
如果發生了進程調度,則當前的這些狀態都會暫時保存在系統內,在下次發生進程調度再切回到該進程時則往下執行restore_all。
結合上面知識來思考應該是這樣的:
硬中斷是CPU出錯,因此相當于“停等”。如果執行過程中發生了硬中斷,那么整個執行就“硬生生停下”,然后什么事也不干,此時就是“無運行級別切換”(老師所說),即“未發生進程調度”(視頻所說),中斷結束后,回過神來繼續往下走剛才沒做完的工作。
軟中斷相對應的,就是“發生了進程調度”,中斷發生后,保存現場,然后處理進程,然后下次進程調度到自身時,恢復現場,繼續往下執行。
?
【Q2】中斷過程init前后分析
當init觸發中斷時,系統會根據init中斷的中斷號去查詢中斷向量表,獲取產生的中斷種類,然后找到處理該中斷的中斷處理程序,例如課程中我們所得的中斷號是128(即十六進制數80處理系統調用中斷),尋到中斷處理程序中進行地址換算獲得中斷所對應的程序地址,根據先前在eax中存放的系統調用號查詢系統調用表,然后找到該號系統調用對應的C代碼程序執行實現該系統調用功能。
?
【Q3】虛擬地址、頁式存儲、物理地址三者關系
我們可以聯想到操作系統中所說的“設備無關性”。這里也可以根據無關性來理解。
用戶在操作計算機系統的時候其實只需要對虛擬地址,或說邏輯地址進行操作。而無需去對真正存放程序代碼的地址、資源地址進行操作。而真正存放這些指令、數據的是物理地址,即絕對地址。在操作系統中運用頁式存儲數據。在用戶進行操作時,操作系統中會自動完成地址映射、轉換,通過頁式存儲、段式存儲將虛擬地址轉換為物理地址從而實現尋址。
?
【week4】
【Q1】如果經常為路徑報錯、文件報錯而煩惱。怎么辦?比如:遇到hello報錯。即找不到怎么辦?
應該在環境變量下加入運行文件的路徑,即可在所有的路徑下執行hello。
命令是:export $PATH=你要加入的文件的所在路徑。
【Q2】如何給匯編代碼設斷點?
break 地址
?
?【week5】
【Q1】若找不到文件,則是在哪里找不到文件呢?
若給出了全路徑,則在全路徑下找,若沒有,則在當前目錄下找。
【Q2】注意:
?p->thread.ip的值會在調度時被壓入新進程堆棧棧頂(esp寄存器),在執行完后再根據這個esp的值返回iret,返回到執行前的地方。
?
【week6】
【Q1】預處理后依舊是文本文件,文字替換的作用,將頭文件遞歸加入。
匯編后的文件是文本文件,是ASCII碼。
?
持續更新中....
轉載于:https://www.cnblogs.com/paperfish/p/5293913.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的《Linux内核设计与实现》课程学习重点问题总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IOS之@property 的理解
- 下一篇: 《构建之法》第三周阅读笔记