国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 基礎常識 > 正文

系統調用如何實現

2019-11-01 00:09:30
字體:
來源:轉載
供稿:網友

   系統調用的實現與一般過程調用的實現相比,兩者間有很大差異。對于系統調用,控制是由原來的用戶態轉換為系統態,這是借助于中斷和陷入機制來完成的,在該機制中包括中斷和陷入硬件機構及中斷與陷入處理程序兩部分。

  中斷和陷入硬件機構

  圖1所示為中斷的處理過程。中斷可進一步分為外中斷和內中斷。外中斷是指由于外部設備事件所引起的中斷,如通常的磁盤中斷、打印機中斷等;而內中斷則是指由于CPU內部事件所引起的中斷,如程序出錯(非法指令、地址越界)等。內中斷(trap)也被譯為“陷入”或“陷阱”。

系統調用如何實現 三聯

  通常,陷入是由于執行了現行指令引起的,而中斷則是由于系統中某事件引起的,該事件與現行指令無關。為了處理上的方便,通常針對不同的設備編制不同的中斷處理程序,并把該程序的入口地址放在某特定的內存單元中。此外,不同的設備也對應著不冋的處理機狀態字PSW,且把它放在與中斷處理程序入口指針相鄰接的特定單元中。在進行中斷處理時,只要有了這樣兩個字,便可轉入相應設備的中斷處理程序,重新裝配處理機的狀態字和優先級,進行對該設備的處理,因此這兩個字被稱為中斷向量。相應地,把存放這兩個字的單元稱為中斷向景單元。類似地,對于陷入也有陷入向量表。由所有的中斷向景和陷入向景構成了中斷和陷入向量表。

  系統調用號和參數的設置

  通常,一個系統中設置了幾十條甚至上百條系統調用,系統賦予每條系統調用一個唯一的系統凋用號。在有的系統中,直接把系統凋用號放在系統凋用命令中,如IBM370和早期的UNIX系統,是用系統調用命令的低8位存放系統調用號;在另一些系統中,則將系統調用號裝入某指定寄存器或內存單元中,如MS-DOS是將系統調用號放在AH寄存器中。每一條系統調用都含有若干個參數,在執行系統調用時,設置系統調用所需的系數通常有兩種方式。

  (1)直接將參數送入相應的寄存器中。這是一種最簡單的方式,MS-DOS采用的便是這種方式,即用MOV指令將各個參數送入相應的寄存器中。這種方式的主要問題是由于寄存器數量有限,因而限制了所設置參數的數目。

  (2)參數表方式。將系統調用所需的參數放入一張參數表中,再將指向該參數表的指針放在某個指定的寄存器中。在當前大多數的OS中,如UNIX系統,便是采用了這種方式。該方式又可進一步分成直接和間接兩種方式,如圖2所示。在直接參數方式中,將所有的參數值和參數的個數N都放入一張參數表中;而在間接參數方式中,則在參數表中僅存放參數個數和指向真正參數數據表的指針。

系統調用的實現

  系統調用的處理步驟

  在設置了系統凋用號和參數后,便可執行一條系統凋用命令。不同的系統可采用不同的執行方式。在UNIX系統中,是執行CHMK命令;而在MS-DOS中則是執行INT21軟中斷。

  系統調用的處理過程可分成以下3步。

  (1)將處理機狀態由用戶態轉為系統態;之后,由硬件和內核程序進行系統調用的一般性處理,即首先保護被中斷進程的CPU環境,將處理機狀態字PSW、程序計數器PC、系統調用號、用戶找指針以及通用寄存器內容等壓入堆棧;然后,將用戶定義的參數傳送到指定的地方保存起來。

  (2)分析系統調用類型,轉入相應的系統調用處理子程序。為使不同的系統調用能方便地轉向相應的系統調用處理子程序,在系統中配置了一張系統調用入口表。表中的每個表目都對應一條系統調用,其中包含該系統調用自帶參數的數目、系統調用處理子程序的入口地址等。內核可利用系統調用號去查找該表,即可找到相應處理子程序的入口地址而轉去執行它。

  (3)在系統調用處理子程序執行完后,恢復被中斷的或設置新進程的CPU現場,然后返冋被中斷進程或新進程,繼續往下執行。

  系統調用處理子程序的處理過程

  系統調用的功能主要是由系統調用子程序來完成的。對于不同的系統調用,其處理程序將執行不同的功能。

  下面以一條在文件操作中常用的creat命令為例來說明處理子程序的處理過程。進入creat的處理子程序后,內核將根據用戶給定的文件路徑名Path,利用目錄檢索過程,去查找指定義件的目錄項。查找目錄的方式可以用順序查找法,也可用Hash查找法。如果在文件目錄中找到了指定文件的目錄項,表示用戶要利用一個已有文件來建立一個新文件。但如果在該巳有(存)文件的屬性中有不允許寫屬性,或者創建者不具有對該文件進行修改的權限,便認為是出錯,隨即做出錯處理;若不存在訪問權限問題,便將巳存文件的數據盤塊釋放掉,準備寫入新的數據文件。如未找到指名文件,則表示要創建一個新文件,內核便從其目錄文件中找出一個空目錄項,并初始化該目錄項,包括填寫文件名、文件屬性、文件建立日期等,然后將新建文件打開。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 烟台市| 姚安县| 南通市| 济阳县| 长阳| 霍邱县| 弥渡县| 仁化县| 勐海县| 怀化市| 东乡| 平武县| 罗源县| 泰州市| 鄄城县| 澄城县| 行唐县| 肥东县| 孙吴县| 安国市| 清苑县| 八宿县| 保靖县| 天峻县| 扶绥县| 大庆市| 兴宁市| 宜君县| 克山县| 开封市| 曲阜市| 泽普县| 榆林市| 沐川县| 商河县| 科尔| 宿迁市| 剑川县| 铜山县| 西昌市| 新闻|