02_操作系統接口

什麼是接口?日常生活中如電源插座、汽車油門踏板
接口的作用:連接兩個東西、信號轉化、屏蔽細節
操作系統接口:連接操作系統和應用軟件,使得程序在用戶態和內核態之間切換
       如何連接:C語言程序,進一步的即系統函數,表現爲系統函數的調用,又稱爲系統調用
外在形式:1. 命令行   2.圖形按鈕   3.應用程序如word、PPT等
以圖形按鈕爲例描述一個操作系統接口的細節
鼠標雙擊文檔打開文檔:

圖形界面的本質是:消息框架程序+消息處理程序

  1. 鼠標雙擊文檔,產生硬件中斷
  2. 此時鼠標雙擊消息存入了應用消息隊列
  3. 應用程序不斷地循環從應用消息隊列中取出消息,此時取到鼠標雙擊消息
  4. 根據消息的編號進入消息處理程序(中斷處理函數),即執行系統函數open,打開文件

即最終表現爲調用系統函數open,如下圖所示


系統調用:

系統調用函數就像電源的插頭一樣,插頭有三角插、十字插等,系統函數也有很多種,下圖是linux一些典型的系統函數

可查系統函數手冊:POSIX

................................................................................分割線....................................................................

下面深入一層談談系統調用的實現
一些基本概念:
程序的運行空間分爲內核態和用戶態

  1. 內核態:控制計算機的硬件資源,並提供上層應用程序運行的環境,運行在高特權級上
  2. 用戶態:上層應用程序的活動空間,運行在低特權級別上
                                    

內核態可以訪問任何數據,用戶態不能訪問內核數據。爲了使上層應用能夠訪問到內核態資源,內核爲上層應用提供訪問的接口
以一段實際的代碼舉例用戶態陷入內核態的過程
 

int main()
{

whoami();//禁止
fopen(“:/D/chucan/paper.xls”)//允許
}  // 用戶程序

whoami()
{
printf(100,8);//打印地址100處的8個字節

通過whomi查看內存地址100處的內容被禁止,當然不能訪問,因爲如果可以隨意訪問的話那root密碼,加密的文件就都能看到了。第2個函數打開表格就能夠正常執行。
也就是說操作系統必然有一個機制來判斷是否爲合理的系統調用?
通過使用特權級判斷
PC指針由CS+IP組合而成,CS的低兩位來記錄特權級,低兩位爲0是內核態,3是用戶態
CPL表示當前特權級,讀的CS低兩位,DPL表示目標特權級
當DPL>=CPL時的調用才被允許執行。
上述代碼中,main主函數剛開始在用戶態,CPL爲3,printf(100,8)在內核態,即DPL=0,DPL<CPL,因此不能被執行
那麼打開文件也是由用戶態陷入內核態,爲什麼被允許呢?
硬件提供了“主動進入內核的方法",中斷機制
當執行合理的系統調用時,如打開未加密文件,會觸發相應的中斷,中斷指令int將CS的低兩位改成0.
中斷是用戶程序發起調用內核代碼的唯一方式
系統調用的核心:

  1. 用戶程序中包含一段int指令的代碼
  2. 操作系統寫中斷處理,獲取想調程序的編號
  3. 操作系統根據編號執行相應代碼

下面以屏幕上打印字符串爲例,看系統調用的實現

Visual stdio中敲下printf(%s,name)//格式不一定對
打印字符串實質上是一個寫操作,即調用write庫函數,而write的使用格式和VS中的printf不一樣,
因此係統的C函數庫中的printf將其轉化成write庫函數所需要的格式
執行write庫函數,此時才真正獲取了name,如下圖

然後出發0x80中斷,調用系統的write函數

打印函數執行流程圖如下:

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