---恢復內容開始---
應用程序
------------------- 虛擬機器界面
操作系統
-----------------物理機器界面
硬件
操作系統的運行環境為 1.CPU狀態2.中斷/異常機制
操作系統運行機制: 系統調用
處理器狀態與模式
CPU由運算器,控制器,寄存器,高速緩存構成
寄存器分為:
用戶可見寄存器:用於優化算法分配使用的
控制和狀態寄存器:用於控制處理器操作,由操作系統使用
一般的控制狀態寄存器可以在某種特級權別控制處理器操作,常見的控制和狀態寄存器 程序計數器,指令寄存器,程序狀態字(PSW)
PSW:記錄cpu的運行狀態,比如條件碼,模式,控制位
操作系統特征:並發,共享,因此,我們需要實現保護與控制
硬件提供的基本運行機制:
處理器有特權級別,不同的級別可以使用的指令集合是不同的
硬件機制可以將os跟用戶程序隔離
現代操作系統通常把cpu的狀態分為2-4種,PSW中有一位專門用來控制資源和指令的使用權限
linux操作系統一般的CPU狀態分為2種,用戶態跟內核態
用戶態->內核態 中斷/異常/陷入機制(一條特色指令,如trap,int,syscall)
內核態->用戶態 設置PSW
中斷:cpu對系統發出的某個事件作出的一種反應
cpu暫停正在執行的程序,保留現場,自動轉去執行相應事件的處理程序,處理完成后返回斷電,繼續執行被打斷的程序
特點:隨機發生,自動處理,可恢復,
中斷/異常機制工作原理
中斷跟異常的不同點
中斷:外部事件,正在運行的程序不期望
異常:由自己正在執行的指令所引發的
事件分為:中斷跟異常
中斷:I/O中斷,時鍾中斷,硬件故障
異常:系統調用,頁故障,保護性異常等
中斷異常機制工作原理
硬件: 捕獲中斷源發出的中斷/異常請求 ,以一定方式響應,將處理器控制權交給特定的處理程序
軟件:中斷/異常處理程序,識別中斷,異常類型,並完成相應處理
中斷響應:發現中斷,接收中斷的過程,由中斷硬件部件完成,中斷處理控制部件設有中斷寄存器
cpu響應:在每條指令執行周期的最后時刻掃描中斷寄存器,查看是否中斷信號,如果有中斷,中斷硬件將該中斷觸發器內容按規定編碼送入PSW的相應位,稱為中斷碼,通過查中斷向量表引出中斷處理程序
中斷向量:一個內存單元,存放中斷處理程序入口地址跟程序運行時所需的cpu狀態字
(執行流程按照中斷號/異常類型的不同,通過中斷向量表轉移控制權給中斷處理程序)
中斷響應示意:
設備發出中斷信號,硬件保護現場(PSW,PC保存在系統堆棧),根據中斷碼查表,把中斷處理程序入口地址等推送到相應的寄存器,執行中斷處理程序
在設計操作系統時,給每一類中斷/異常事件編寫好相應的處理程序,並設置好中斷向量表
系統運行時,如果響應中斷,中斷硬件部件將cpu控制權轉給中斷處理程序:
保存相關寄存器信息,分析中斷/異常的具體原因,執行對應的處理功能,恢復現場,返回被事件打斷的程序
設備輸入輸出中斷為例:
打印機給cpu發送中斷信號,CPU處理當前指令后檢測到中斷,判斷中斷來源並且向相關設備發確認信號,,處理器狀態切換為內核態
在系統棧保存:PC,PSW,cpu根據中斷碼查中斷向量表,獲得該相關中斷的處理程序的入口地址,將PC設置為此地址,新的指令周期開始,CPU控制轉移到中斷處理程序,中斷處理程序開始工作,在系統棧中保存現場信息,檢查I/O設備信息,等等之類
中斷處理結束,cpu檢測到中斷返回指令,從系統棧恢復被中斷的上下文,cpu狀態恢復為原來的狀態,cpu開始一個新的指令周期
X86對中斷/異常的支持
中斷:是硬件信號引發的,可屏蔽和不可屏蔽中斷
異常:指令執行引發的,除以0異常
系統調用:異常的一種,用戶態到內核態的唯一入口
中斷控制器(PIC)負責將硬件的中斷信號轉為中斷向量,引發cpu中斷
采用中斷描述符表:用gate描述符數據結構表示中斷向量,gate分為任務門,中斷門,陷阱門,調用門
中斷/異常的硬件處理過程:
確定中斷/異常關聯的向量i;通過IDTR寄存器找到IDT表,獲得中斷描述符(表中的第i項),從GDRT寄存器獲得GDT的地址;結合中斷描述符中的段選擇符,在GDT表中獲得對應的段描述符,從該段描述符中獲得中斷/異常處理程序所在的段基址,特權級檢查,如果發現變化,進行堆棧切換(必須使用與新的特權級相關的棧),保存上下文到棧中,通過中斷描述符中的段內偏移量和段描述符中的基地址,找到程序入口地址,執行第一條指令
系統調用機制
系統調用:在用戶在編程時,可以調用操作系統功能,系統調用的操作系統提供給編程人員的唯一接口,使CPU狀態從用戶態轉為內核態
中斷/異常機制 支持系統調用服務的實現 選擇一條特殊指令:陷入指令(亦稱訪管指令)引發異常,完成用戶態到內核態的切換 ②系統調用號和參數 每個系統調用都事先給定一個編號(功能號)系統調用表存放系統調用服務例程的入口地址
cpu執行特殊的陷入指令時:
中斷/異常機制:硬件保護現場,通過查中斷向量表,控制權轉給系統調用入口程序
系統調用總入口程序:保存現場,將參賽保存在內核棧,通過查系統調用表把控制權轉給相應的系統處理歷程,執行系統調用歷程,恢復現場,返回用戶程序
linux系統調用的實現
陷入指令選擇128號;
int $0x80
門描述符,系統初始化,對IDT表的128號門初始化,門描述符的2,3兩個字節:內核代碼選擇符,0,1,6,7四個字節:偏移量(指向system_call())
門類型:陷阱門
由於特權級的改變:用戶棧->內核棧,cpu從任務狀態段TSS中裝入新的棧指針,指向內核棧
用戶棧指針,用戶態CS,EIP寄存器的內容壓棧,用128在IDT中找到該門描述符,從中找到段選擇符裝入代碼段寄存器CS
,代碼段描述符的基地址+陷阱門描述符中的偏移量->定位systemcall()的入口地址
1 . 硬件壓棧: 程序計數器等
2. 硬件從中斷向量裝入新的程序計數器等
3. 匯編語言過程保存寄存器值
4. 匯編語言過程設置新的堆棧
5. C語言中斷服務程序運行(例: 讀並緩沖輸入)
6. 進程調度程序決定下一個將運行的進程
7. C語言過程返回至匯編代碼
8. 匯編語言過程開始運行新的當前進程
---恢復內容結束---