二,操作系統是如何工作的
1、函數調用堆棧
?
三大法寶:存儲程序計算機 函數調用堆棧 中斷機制?
堆棧:是C語言程序運行時必須的一個記錄調用路徑和參數的空間。是計算機內部現成的東西,我們直接使用。
包括函數調用框架、傳遞參數、保存返回地址、提供局部變量的空間等等。
堆棧相關寄存器:esp堆棧指針(棧頂)、ebp基址指針(棧底) * ebp在C語言中用作記錄當前函數調用基址。
堆棧操作:push(棧頂地址減少四個字節)、pop(棧頂地址增加四個字節)(32位)
?其他關鍵寄存器:cs:eip,總是指向下一條指令的地址。(call、ret)
?
//建立被調用函數的堆棧框架
pushl %ebp
movl %esp,%ebp
//被調用者函數體
//do sth
//拆除被調用者函數的堆棧框架
movl %ebp,%esp
popl %ebp
ret
?
call指令是將eip中下一條指令的地址保存在棧頂,設置eip指向被調用程序的代碼開始處。
ret將該地址恢復到eip中
?* 舉例應用:首先,使用gcc -g 生成test.c的可執行文件test;然后再使用objdump -s獲得test的反匯編文件。
有壓棧必有出棧,有生必有死。
函數的返回值通過eax寄存器傳遞。
?
2,借助Linux內核部分源代碼模擬存儲程序計算機工作模型及時鐘中斷
中斷機制如何工作:CPU和內核代碼共同實現保存現場和恢復現場。
mykernel的實驗,諸如下圖:
3,在mykernel基礎上構造一個簡單的操作系統內核
C語言代碼中嵌入匯編代碼: asm("statements" : output_regs :inout_regs :clobbered_regs); ? 輸入、輸出、破會描述、編譯器優化、不允許編譯器優化等等。
mysceh的具體內容
兩個正在運行的進程之間做進程上下文轉換?
* 操作系統的兩把劍:中斷上下文和進程上下文的切換
時間片輪轉的例子,時間片可以改小一點。
4,學習心得體會
基本了解了函數調用堆棧的過程和原理,中斷機制的工作原理,以及mykernel的一些相關知識,最后學習了一下時間片輪轉的實驗舉例。總的來說內容不多也不算少,還是需要一些時間來消化和理解的。很不錯的一次自學。