李治軍課程---第二天操作系統接口

操作系統接口

一、應用程序(用戶)得以與計算機交互的原因:os提供了printf,fork,exec等函數(接口)。

問題:1)提供哪些系統調用?2)圖形用戶接口(GUI)怎麼調用?

二、實現系統調用

1、將內核程序和用戶程序隔離----硬件實現了內核態可以訪問任何數據,用戶態不能訪問內核數據。因爲CS:IP是當前指令,所以用CS的最低兩位來表示:0是內核態,3是用戶態。

2、硬件提供了”主動進入內核的方法“------中斷指令int

        int指令將CS中的CPL(用戶段)改成0,”進入內核“,這是用戶程序發起調用內核代碼的唯一方式。

        實現過程:

        1)用戶程序中寫上一段包含int指令的代碼

        2)OS寫上中斷處理的代碼獲取想調程序的編號

        3)OS根據編號轉去執行相應的代碼

        如 應用程序printf()的實現:首先printf()在C函數庫中調用printf(),write(),庫函數write()調用OS內核write()。

        C函數庫中的write()的CPL爲3,當系統調用OS內核write()(int 0x80 ,DPL=3, eax=4 系統調用號)後,CPL=0,然後

        就可以訪問內核態的數據了。

        set_system_gete用來設置int  0x80的中斷,是用戶程序與內核程序的過渡代碼。在這裏DPL=3------處理IDT表,CPL=0。

        _system_call爲中斷處理程序:這個程序的作用是根據系統調用號找到相應代碼。system_call_table+4*%eax就是相應系統調用處理函數入口。

       當IDT表處理完成之後程序的級別就發生了改變。

問題:1)int 0x80指令是在用戶態還是內核態?用戶態

           2)int 0x80與內核態之間的參數傳遞,與CPL,DPL級別的轉化?CPL由3變爲0,DPL由0變爲3

           3)int 0x80到底是指令還是地址?int 0x80指的到底是什麼?不清楚

           4)set_system_gate處理IDT表的過程是怎樣的?不清楚

           5)system_call是怎麼樣找到系統調用處理函數入口的?system_call_table是什麼?有什麼作用?不清楚

 

          

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