第二課? 操作系統(tǒng)接口
上一章回顧:在操作系統(tǒng)啟動后內存會變?yōu)槿缦碌臉幼樱?/p>

操作系統(tǒng)接口的概念:上層應用通過接口來使用操作系統(tǒng)提供的功能使用硬件
用戶如何使用計算機?
1.命令行(主要通過shell敲命令行)
①在操作系統(tǒng)啟動的過程中,執(zhí)行到main.c函數(shù)之后便執(zhí)行啟動shell的命令,此時跳出shell界面
②shell的程序如下圖所示,循環(huán)打印cmd等待輸入命令行,并對其進行執(zhí)行

2.圖形按鈕
采用消息隊列機制:
當硬件有輸入時候,將該輸入添加到系統(tǒng)消息隊列中。
然后應用程序中不斷循環(huán)的從系統(tǒng)消息隊列中獲取消息,對不同的消息調用不同的函數(shù)進行相應的操作。

什么是操作系統(tǒng)接口?


第三課 系統(tǒng)調用的原理
1.為什么要將內存分為內核態(tài)和用戶態(tài)?

出于安全方面的考慮,防止系統(tǒng)root用戶名密碼,重要文檔信息的丟失。
2.如何做到內核態(tài)和用戶態(tài)之間的隔離?

通過特權級的方式實現(xiàn)用戶態(tài)和內核態(tài)之間的隔離,特權級規(guī)則:
DPL:要訪問的目標內核段特權級(內核態(tài)的DPL為0)
CPL:當前特權級
當DPL>=CPL時候,該指令才能被運行。
通過該方式進而實現(xiàn)用戶態(tài)只能訪問用戶態(tài)而不能訪問內核態(tài);而內核態(tài)可以訪問任何數(shù)據(jù)。
3.被隔離后,如何實現(xiàn)用戶態(tài)對內核態(tài)的訪問?

中斷指令是用戶態(tài)進入內核態(tài)的唯一方法。系統(tǒng)調用實際上是一段包含中斷的即int指令的代碼。(且為0x80中斷)

中斷int0x80通過初始化int0x80的DPL為3來實現(xiàn)用戶態(tài)對內核態(tài)的訪問。
總結:

調用系統(tǒng)調用whoani()不能直接訪問到內核態(tài)中的相對應的代碼,而是要經(jīng)過以下步驟:
1.通過庫函數(shù)將whoani擴展為包含0x80的代碼,并指定系統(tǒng)調用號eax。int 0x80通過將DPL設置為3,而當前的CPL也為3來實現(xiàn)對內核的訪問。進入內核后CPL變?yōu)?。
2.通過查表sys_call_table,找到需要調用的函數(shù)為sys_whoami。
3.執(zhí)行sys_whoami中的內容。