學習筆記——OS的運行環境

基於上一篇內容有關微內核結構的內核基礎知識。

鏈接:https://blog.csdn.net/LY_624/article/details/105370954

一、基本概念

1.現代的操作系統內核中基本包括:

              1)一些與硬件關聯較緊密的模塊,諸如時鐘管理、中斷處理、設備驅動等處於最底層;

              2)運行頻率較高的程序,諸如進程管理、存儲器管理和設備管理等。

2.核心態與用戶態

              目的:爲了防止OS本身及關鍵數據(如PCB等)遭受到應用程序有意或者無意的破壞。

              核心態:又稱系統態,管態。具有較高的特權,能執行一切指令,訪問所有寄存器和存儲區。傳統的OS都在系統態運行。

              用戶態:又稱目態。具有較低的執行權利。只能訪問指定的寄存器和存儲區。一般,應用程序在用戶態運行。

             從用戶態轉向核心態的唯一途徑是中斷或異常。

3.特權指令與非特權指令

              特權指令:必須運行在覈心態,只能用於操作系統或其他系統軟件,不能直接給用戶使用。

                               如:I/O指令、置中斷指令、存取某些內存保護的寄存器、置PSW、清內存等。

              非特權指令:運行在用戶態。當用戶態下使用特權指令時,將產生中斷阻止用戶使用。

4.訪管指令與訪管中斷

訪管指令是一條可以在用戶態下執行的指令。

在用戶程序中,因要求OS提供服務而有意識地使用訪管指令,從而產生一箇中斷事件(自願中斷),將OS轉爲核心態,稱爲訪管中斷。訪管中斷由訪管指令產生,程序員使用訪管指令向OS請求服務。

訪管指令本身不是特權指令,其基本功能是讓程序擁有“自願進管”的手段,從而引起訪管中斷。

執行過程:當處於用戶態的程序使用訪管指令時,系統根據訪管指令的操作數執行訪管中斷處理程序,訪管中斷處理程序將按系統調用的操作數和參數轉到相應的例行子程序。完成服務功能後,退出中斷,返回到用戶程序斷電繼續執行。

二、OS的運行機制

1.時鐘管理

如時間片輪轉,每當時間片用完,由時鐘管理產生一箇中斷信號,促使調度程序重新調度。

2.中斷機制

如各種類型的系統調用、鍵盤命令的輸入、進程調度、設備驅動等。現代OS,是靠中斷驅動的軟件。

中斷機制中,只有小部分屬於內核,負責保護和恢復中斷現場的信息,轉移控制權到相關的處理程序。

3.原語

原子操作:一個操作中的所有動作,要麼全做,要麼全不做。換言之,它是一個不可分割的基本單位。

原語執行過程中不允許被中斷。原子操作在系統態下執行,常駐內存。

如對鏈表進行操作的原語、實現進程同步、設備驅動、CPU切換等。

4.系統控制的的數據結構及處理

如JCB、PCB、鏈表、消息隊列、內存分配表等。

需要一些基本操作:進程管理、存儲器管理、設備管理等。

以上可以看出,核心態指令實際上包括系統調用類指令和一些針對時鐘、中斷和原語的操作指令,是指令系統的全集。

三、中斷與異常

重要作用:從用戶態轉向核心態的唯一途徑是中斷或異常,是通過硬件實現的。如用一個特殊寄存器的一位來表示CPU所處的工作狀態,0表示核心態,1表示用戶態。若進入用戶態,只需將該位置爲1即可。

中斷需要保存PC以及PSW的內容,PC值由中斷隱指令自動保存,通用寄存器的內容由OS保存;

而子程序調用保存PC即下一條指令地址,而不用保存PSW。

外中斷:通常是與當前程序運行無關的事件,即它們與當前處理機運行的程序無關。

如I/O結束中斷、時鐘中斷等。

內中斷(異常):一般源於當前程序的運行現場,而且異常不能被屏蔽,一旦出現必須處理。

可分爲故障(fault)、陷阱(trap)和終止(abort)三類。

如程序的非法操作碼、地址越界、算數溢出、虛存系統缺頁以及專門的陷入指令等。

四、系統調用

系統調用是用戶在程序中調用OS所提供的一些子功能,系統調用可以被看做特殊的公共子程序。在用戶程序中,凡是與資源有關的操作(如存儲分配、I/O傳輸以及管理文件等)都必須通過系統調用方式向OS發出服務請求,並由OS代爲完成。

功能包括:設備管理、進程控制、進程通信、文件管理、內存管理等。

顯然,系統調用運行在覈心態,通過系統調用的方式使用系統功能,保證系統的穩定性和安全性,防止用戶隨意更改或訪問系統的數據或命令。系統調用是通過硬件中斷機制或異常實現的。

由用戶態轉向核心態的例子:

        1)用戶程序要求系統服務;

        2)發生一次中斷;

        3)用戶程序中產生了一個錯誤狀態;

        4)用戶程序企圖執行一條特權指令;

由用戶態轉向核心態,所用的堆棧由用戶堆棧轉向系統堆棧;需要使用訪管指令,訪管指令運行在用戶態,不是特權指令。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章