Linux内核分析 02
二,操作系統(tǒng)是如何工作的
1、函數(shù)調(diào)用堆棧
?
三大法寶:存儲程序計算機 函數(shù)調(diào)用堆棧 中斷機制?
堆棧:是C語言程序運行時必須的一個記錄調(diào)用路徑和參數(shù)的空間。是計算機內(nèi)部現(xiàn)成的東西,我們直接使用。
包括函數(shù)調(diào)用框架、傳遞參數(shù)、保存返回地址、提供局部變量的空間等等。
堆棧相關(guān)寄存器:esp堆棧指針(棧頂)、ebp基址指針(棧底) * ebp在C語言中用作記錄當前函數(shù)調(diào)用基址。
堆棧操作:push(棧頂?shù)刂窚p少四個字節(jié))、pop(棧頂?shù)刂吩黾铀膫€字節(jié))(32位)
?其他關(guān)鍵寄存器:cs:eip,總是指向下一條指令的地址。(call、ret)
?
//建立被調(diào)用函數(shù)的堆??蚣?/p>
pushl %ebp
movl %esp,%ebp
//被調(diào)用者函數(shù)體
//do sth
//拆除被調(diào)用者函數(shù)的堆??蚣?/p>
movl %ebp,%esp
popl %ebp
ret
?
call指令是將eip中下一條指令的地址保存在棧頂,設(shè)置eip指向被調(diào)用程序的代碼開始處。
ret將該地址恢復到eip中
?* 舉例應(yīng)用:首先,使用gcc -g 生成test.c的可執(zhí)行文件test;然后再使用objdump -s獲得test的反匯編文件。
有壓棧必有出棧,有生必有死。
函數(shù)的返回值通過eax寄存器傳遞。
?
2,借助Linux內(nèi)核部分源代碼模擬存儲程序計算機工作模型及時鐘中斷
中斷機制如何工作:CPU和內(nèi)核代碼共同實現(xiàn)保存現(xiàn)場和恢復現(xiàn)場。
mykernel的實驗,諸如下圖:
3,在mykernel基礎(chǔ)上構(gòu)造一個簡單的操作系統(tǒng)內(nèi)核
C語言代碼中嵌入?yún)R編代碼: asm("statements" : output_regs :inout_regs :clobbered_regs); ? 輸入、輸出、破會描述、編譯器優(yōu)化、不允許編譯器優(yōu)化等等。
mysceh的具體內(nèi)容
兩個正在運行的進程之間做進程上下文轉(zhuǎn)換?
* 操作系統(tǒng)的兩把劍:中斷上下文和進程上下文的切換
時間片輪轉(zhuǎn)的例子,時間片可以改小一點。
4,學習心得體會
基本了解了函數(shù)調(diào)用堆棧的過程和原理,中斷機制的工作原理,以及mykernel的一些相關(guān)知識,最后學習了一下時間片輪轉(zhuǎn)的實驗舉例。總的來說內(nèi)容不多也不算少,還是需要一些時間來消化和理解的。很不錯的一次自學。
轉(zhuǎn)載于:https://www.cnblogs.com/KG35/p/5247310.html
總結(jié)
以上是生活随笔為你收集整理的Linux内核分析 02的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 天运旅游旅行社口碑怎么样
- 下一篇: Linux内核的启动过程分析