現代操作系統-操作系統運行環境與運行機制


---恢復內容開始---

應用程序

------------------- 虛擬機器界面

操作系統

-----------------物理機器界面

硬件

 

操作系統的運行環境為 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()的入口地址

 

 

. 硬件壓棧: 程序計數器等
2. 硬件從中斷向量裝入新的程序計數器等
3. 匯編語言過程保存寄存器值
4. 匯編語言過程設置新的堆棧
5. C語言中斷服務程序運行(例: 讀並緩沖輸入)
6. 進程調度程序決定下一個將運行的進程
7. C語言過程返回至匯編代碼
8. 匯編語言過程開始運行新的當前進程

 

 

 

 

 

 

 

 

 

 

 

---恢復內容結束---


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM