日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

系统调用

發(fā)布時間:2023/12/20 windows 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 系统调用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

程序接口是 OS 專門為用戶程序設置的,也是用戶程序取得 OS 服務的唯一途徑。程序接口通常是由各種類型的系統(tǒng)調(diào)用所組成的,因而,也可以說,系統(tǒng)調(diào)用提供了用戶程序和操作系統(tǒng)之間的接口,應用程序通過系統(tǒng)調(diào)用實現(xiàn)其與 OS 的通信,并可取得它的服務

?

處理器(CPU)=運算器+控制器+寄存器+高速緩存

?

系統(tǒng)調(diào)用的基本概念


通常,在 OS 的核心中都設置了一組用于實現(xiàn)各種系統(tǒng)功能的子程序(過程),并將它們提供給應用程序調(diào)用。

?


系統(tǒng)態(tài)和用戶態(tài)


在計算機系統(tǒng)中,通常運行著兩類程序:系統(tǒng)程序和應用程序,為了保證系統(tǒng)程序不被應用程序有意或無意地破壞,為計算機設置了兩種狀態(tài):

  • 系統(tǒng)態(tài)(也稱為管態(tài)或核心態(tài)),操作系統(tǒng)在系統(tǒng)態(tài)運行
  • 用戶態(tài)(也稱為目態(tài)),應用程序只能在用戶態(tài)運行。

在實際運行過程中,處理機會在系統(tǒng)態(tài)和用戶態(tài)間切換。相應地,現(xiàn)代多數(shù)操作系統(tǒng)將 CPU 的指令集分為特權指令和非特權指令兩類。


1) 特權指令——在系統(tǒng)態(tài)時運行的指令

  • 對內(nèi)存空間的訪問范圍基本不受限制,不僅能訪問用戶存儲空間,也能訪問系統(tǒng)存儲空間,
  • 特權指令只允許操作系統(tǒng)使用,不允許應用程序使用,否則會引起系統(tǒng)混亂。

?

2) 非特權指令——在用戶態(tài)時運行的指令

一般應用程序所使用的都是非特權指令,它只能完成一般性的操作和任務,不能對系統(tǒng)中的硬件和軟件直接進行訪問,其對內(nèi)存的訪問范圍也局限于用戶空間。

?

?

系統(tǒng)調(diào)用

?

如上所述,一方面由于系統(tǒng)提供了保護機制,防止應用程序直接調(diào)用操作系統(tǒng)的過程,從而避免了系統(tǒng)的不安全性。但另一方面,應用程序又必須取得操作系統(tǒng)所提供的服務,否則,應用程序幾乎無法作任何有價值的事情,甚至無法運行。為此,在操作系統(tǒng)中提供了系統(tǒng)調(diào)用,使應用程序可以通過系統(tǒng)調(diào)用的方法,間接調(diào)用操作系統(tǒng)的相關過程,取得相應的服務

當應用程序中需要操作系統(tǒng)提供服務時,如請求 I/O 資源或執(zhí)行 I/O 操作,應用程序必須使用系統(tǒng)調(diào)用命令。由操作系統(tǒng)捕獲到該命令后,便將 CPU 的狀態(tài)從用戶態(tài)轉換到系統(tǒng)態(tài),然后執(zhí)行操作系統(tǒng)中相應的子程序(例程),完成所需的功能。執(zhí)行完成后,系統(tǒng)又將CPU 狀態(tài)從系統(tǒng)態(tài)轉換到用戶態(tài),再繼續(xù)執(zhí)行應用程序。

?

系統(tǒng)調(diào)用和一般調(diào)用的區(qū)別:

(1) 運行在不同的系統(tǒng)狀態(tài)——調(diào)用程序是運行在用戶態(tài),而被調(diào)用程序是運行在系統(tǒng)態(tài)。

(2) 狀態(tài)的轉換通過軟中斷進入

  • 一般的過程調(diào)用并不涉及到系統(tǒng)狀態(tài)的轉換,可直接由調(diào)用過程轉向被調(diào)用過程。
  • 系統(tǒng)調(diào)用不允許由調(diào)用過程直接轉向被調(diào)用過程。

通常都是通過軟中斷機制,先由用戶態(tài)轉換為系統(tǒng)態(tài),經(jīng)核心分析后,才能轉向相應的系統(tǒng)調(diào)用處理子程序。

(3) 返回問題。

在采用了搶占式(剝奪)調(diào)度方式的系統(tǒng)中,在被調(diào)用過程執(zhí)行完后,要對系統(tǒng)中所有要求運行的進程做優(yōu)先權分析。當調(diào)用進程仍具有最高優(yōu)先級時,才返回到調(diào)用進程繼續(xù)執(zhí)行;否則,將引起重新調(diào)度,以便讓優(yōu)先權最高的進程優(yōu)先執(zhí)行。此時,將把調(diào)用進程放入就緒隊列。

(4) 嵌套調(diào)用。

像一般過程一樣,系統(tǒng)調(diào)用也可以嵌套進行,即在一個被調(diào)用過程的執(zhí)行期間,還可以利用系統(tǒng)調(diào)用命令去調(diào)用另一個系統(tǒng)調(diào)用。當然,每個系統(tǒng)對嵌套調(diào)用的深度都有一定的限制,例如最大深度為 6。


中斷機制


系統(tǒng)調(diào)用是通過中斷機制實現(xiàn)的,并且一個操作系統(tǒng)的所有系統(tǒng)調(diào)用都通過同一個中斷入口來實現(xiàn)。對于擁有保護機制的操作系統(tǒng)來說,中斷機制本身也是受保護的,

?

?


系統(tǒng)調(diào)用的類型


對于一般通用的 OS 而言,可將其所提供的系統(tǒng)調(diào)用分為:進程控制、文件操縱、通信管理和系統(tǒng)維護等幾大類。

?


進程控制類系統(tǒng)調(diào)用


這類系統(tǒng)調(diào)用主要用于對進程的控制,如創(chuàng)建一個新的進程和終止一個進程的運行,獲得和設置進程屬性等。


1) 創(chuàng)建和終止進程的系統(tǒng)調(diào)用
在多道程序環(huán)境下,為使多道程序能并發(fā)執(zhí)行,必須先利用創(chuàng)建進程的系統(tǒng)調(diào)用來為欲參加并發(fā)執(zhí)行的各程序分別創(chuàng)建一個進程。當進程已經(jīng)執(zhí)行結束時、 或因發(fā)生異常情況而不能繼續(xù)執(zhí)行時,可利用終止進程的系統(tǒng)調(diào)用來結束該進程的運行。

?

2) 獲得和設置進程屬性的系統(tǒng)調(diào)用
當我們創(chuàng)建了一個(些)新進程后,為了能控制它(們)的運行,應當能了解、 確定和重新設置它(們)的屬性。這些屬性包括: 進程標識符、進程優(yōu)先級、最大允許執(zhí)行時間等。此時,我們可利用獲得進程屬性的系統(tǒng)調(diào)用,來了解某進程的屬性,利用設置進程屬性的系統(tǒng)調(diào)用,來確定和重新設置進程的屬性。


3) 等待某事件出現(xiàn)的系統(tǒng)調(diào)用
進程在運行過程中,有時需要等待某事件(條件)出現(xiàn)后方可繼續(xù)執(zhí)行。例如,一進程在創(chuàng)建了一個(些)新進程后,需要等待它(們)運行結束后,才能繼續(xù)執(zhí)行,此時可利用等待子進程結束的系統(tǒng)調(diào)用進行等待;

?


文件操縱類系統(tǒng)調(diào)用


對文件進行操縱的系統(tǒng)調(diào)用數(shù)量較多,有創(chuàng)建文件、刪除文件、打開文件、關閉文件、讀文件、寫文件、建立目錄、移動文件的讀/寫指針、改變文件的屬性等。


1) 創(chuàng)建和刪除文件
當用戶需要在系統(tǒng)中存放程序或數(shù)據(jù)時,可利用創(chuàng)建文件的系統(tǒng)調(diào)用 creat,由系統(tǒng)根據(jù)用戶提供的文件名和存取方式來創(chuàng)建一個新文件;當用戶已不再需要某文件時,可利用刪除文件的系統(tǒng)調(diào)用 unlink 將指名文件刪除。


2) 打開和關閉文件
用戶在第一次訪問某個文件之前,應先利用打開文件的系統(tǒng)調(diào)用 open,將指名文件打開,即系統(tǒng)將在用戶(程序)與該文件之間建立一條快捷通路。在文件被打開后,系統(tǒng)將給用戶返回一個該文件的句柄或描述符;當用戶不再訪問某文件時,又可利用關閉文件的系統(tǒng)調(diào)用 close,將此文件關閉,即斷開該用戶程序與該文件之間的快捷通路。


3) 讀和寫文件
用戶可利用讀系統(tǒng)調(diào)用 read,從已打開的文件中讀出給定數(shù)目的字符,并送至指定的緩沖區(qū)中;同樣,用戶也可利用寫系統(tǒng)調(diào)用 write,從指定的緩沖區(qū)中將給定數(shù)目的字符寫入指定文件中。read 和 write 兩個系統(tǒng)調(diào)用是文件操縱類系統(tǒng)調(diào)用中使用最頻繁的。

?


進程通信類系統(tǒng)調(diào)用


在 OS 中經(jīng)常采用兩種進程通信方式,即消息傳遞方式和共享存儲區(qū)方式。

當系統(tǒng)中采用消息傳遞方式時

  • 先打開一個連接(由源進程發(fā)出一條打開連接的系統(tǒng)調(diào)用 open connection,目標進程則應利用接受連接的系統(tǒng)調(diào)用 accept connection
  • 可以利用發(fā)送消息的系統(tǒng)調(diào)用 send message 或者用接收消息的系統(tǒng)調(diào)用 receive message 來交換信息。
  • 通信結束后,還須再利用關閉連接的系統(tǒng)調(diào)用 close connection 結束通信。
  • 用戶在利用共享存儲區(qū)進行通信

  • 先利用建立共享存儲區(qū)的系統(tǒng)調(diào)用來建立一個共享存儲區(qū)
  • 再利用建立連接的系統(tǒng)調(diào)用將該共享存儲區(qū)連接到進程自身的虛地址空間上
  • 然后便可利用讀和寫共享存儲區(qū)的系統(tǒng)調(diào)用實現(xiàn)相互通信。
  • 除上述的三類外,常用的系統(tǒng)調(diào)用還包括設備管理類系統(tǒng)調(diào)用和信息維護類系統(tǒng)調(diào)用,

    ?

    ?


    系統(tǒng)調(diào)用的實現(xiàn)

    ?

    系統(tǒng)調(diào)用的實現(xiàn)與一般過程調(diào)用的實現(xiàn)相比,兩者間有很大差異。對于系統(tǒng)調(diào)用,控制是由原來的用戶態(tài)轉換為系統(tǒng)態(tài),這是借助于中斷和陷入機制來完成的,在該機制中包括中斷和陷入硬件機構中斷與陷入處理程序兩部分。當應用程序使用 OS 的系統(tǒng)調(diào)用時,產(chǎn)生一條相應的指令,CPU 在執(zhí)行這條指令時發(fā)生中斷,并將有關信號送給中斷和陷入硬件機構,該機構收到信號后,啟動相關的中斷與陷入處理程序進行處理,實現(xiàn)該系統(tǒng)調(diào)用所需要的功能。

    ?

    中斷和陷入硬件機構

    1) 中斷和陷入的概念(面試考點——中斷與異常的區(qū)別)

    中斷是指 CPU 對系統(tǒng)發(fā)生某事件時的這樣一種響應: CPU 暫停正在執(zhí)行的程序,在保留現(xiàn)場后自動地轉去執(zhí)行該事件的中斷處理程序;執(zhí)行完后,再返回到原程序的斷點處繼續(xù)執(zhí)行。

    下圖 表示中斷時 CPU 的活動軌跡。還可進一步把中斷分為外中斷內(nèi)中斷

    • 外中斷——是指由于外部設備事件所引起的中斷,如通常的磁盤中斷、打印機中斷等;
    • 內(nèi)中斷——是指由于 CPU 內(nèi)部事件所引起的中斷,如程序出錯(非法指令、地址越界)。內(nèi)中斷(trap)也被譯為“捕獲”或“陷入”。

    通常,陷入是由于執(zhí)行了現(xiàn)行指令所引起的;而中斷則是由于系統(tǒng)中某事件引起的,該事件與現(xiàn)行指令無關。由于系統(tǒng)調(diào)用引起的中斷屬于內(nèi)中斷,因此把由于系統(tǒng)調(diào)用引起中斷的指令稱為陷入指令。

    ?

    2) 中斷和陷入向量(百度面試考過中斷向量)
    ?

    • 針對不同的設備編制不同的中斷處理程序,并把該程序的入口地址放在某特定的內(nèi)存單元中。
    • 不同的設備也對應著不同的處理機狀態(tài)字PSW,且把它放在與中斷處理程序入口指針相鄰接的特定單元中。

    在進行中斷處理時,只要有了這樣兩個字,便可轉入相應設備的中斷處理程序,重新裝配處理機的狀態(tài)字和優(yōu)先級,進行對該設備的處理。因此,我們把這兩個字稱為中斷向量。相應地,把存放這兩個字的單元稱為中斷向量單元

    類似地,對于陷入,也有陷入向量,不同的系統(tǒng)調(diào)用對應不同的陷入向量,在進行陷入處理時,根據(jù)陷入指令中的陷入向量,轉入實現(xiàn)相應的系統(tǒng)調(diào)用功能的子程序,即陷入處理程序。由所有的中斷向量和陷入向量構成了中斷和陷入向量表,如圖所示。

    ?

    ?

    ?

    ?


    UNIX 系統(tǒng)調(diào)用

    ?

    ?UNIX 系統(tǒng)調(diào)用的類型


    進程控制


    該類系統(tǒng)調(diào)用包括:創(chuàng)建進程的系統(tǒng)調(diào)用 fork、終止進程的系統(tǒng)調(diào)用 exit、等待子進程結束的系統(tǒng)調(diào)用 wait 等十多條。


    (1) 創(chuàng)建進程(fork)。

    一個進程可以利用 fork 系統(tǒng)調(diào)用來創(chuàng)建一個新進程。新進程是作為調(diào)用者的子進程,它繼承了其父進程的環(huán)境、 已打開的所有文件、根目錄和當前目錄等,即它繼承了父進程幾乎所有的屬性,并具有與其父進程基本上相同的進程映像。


    (2) 終止進程(exit)。

    一個進程可以利用 exit 實現(xiàn)自我終止。通常,在父進程創(chuàng)建子進程時,便在子進程的末尾安排一條 exit 系統(tǒng)調(diào)用。這樣,子進程在完成規(guī)定的任務后,便可進行自我終止。子進程終止后,留下一記賬信息 status,其中包含了子進程運行時記錄下來的各種統(tǒng)計信息。


    (3) 等待子進程結束(wait)。

    wait 用于將調(diào)用者進程自身掛起,直至它的某一子進程終止為止。這樣,父進程可以利用 wait 使自身的執(zhí)行與子進程的終止同步。


    (4) 執(zhí)行一個文件(exec)。

    exec 可使調(diào)用者進程的進程映像(包括用戶程序和數(shù)據(jù)等)被一個可執(zhí)行的文件覆蓋,此即改變調(diào)用者進程的進程映像。該系統(tǒng)調(diào)用是 UNIX 系統(tǒng)中最復雜的系統(tǒng)調(diào)用之一。


    (5) 獲得進程 ID。

    UNIX 系統(tǒng)提供了一組用于獲得進程標識符的系統(tǒng)調(diào)用,比如,可利用 getpid 系統(tǒng)調(diào)用來獲得調(diào)用進程的標識符,利用 getpgrp 系統(tǒng)調(diào)用來獲得調(diào)用進程的進程組 ID,以及利用 getppid 系統(tǒng)調(diào)用來獲得調(diào)用進程的父進程 ID 等。


    (6) 獲得用戶 ID。

    UNIX 系統(tǒng)提供了一組用于獲得用戶 ID 的系統(tǒng)調(diào)用,如 getuid 可用于獲得真正的用戶 ID,geteuid 用于獲得有效用戶 ID,getgid 用于獲得真正用戶組 ID 等。


    (7) 進程暫停(pause)。

    可用此系統(tǒng)調(diào)用將調(diào)用進程掛起,直至它收到一個信號為止。

    ?

    ?

    文件操縱


    用于對文件進行操縱的系統(tǒng)調(diào)用是數(shù)量最多的一類系統(tǒng)調(diào)用,其中包括創(chuàng)建文件、打開文件、關閉文件、讀文件及寫文件等二十多條。


    (1) 創(chuàng)建文件(creat)。

    系統(tǒng)調(diào)用 creat 的功能是根據(jù)用戶提供的文件名和許可權方式,來創(chuàng)建一個新文件或重寫一個已存文件。如果系統(tǒng)中不存在指名文件,核心便以給定的文件名和許可權方式來創(chuàng)建一個新文件;如果系統(tǒng)中已有同名文件,核心便釋放其已有的數(shù)據(jù)塊。創(chuàng)建后的文件隨即被打開,并返回其文件描述符 fd。若 creat 執(zhí)行失敗,便返回“-1”。


    (2) 打開文件(open)。

    open 的功能是把有關的文件屬性從磁盤拷貝到內(nèi)存中,以及在用戶和指名文件之間建立一條快捷的通路,并給用戶返回一個文件描述符 fd。文件被打開后,用戶對文件的任何操作都只須使用 fd 而非路徑名。

    ?

    (3) 關閉文件(close)。

    在 UNIX 系統(tǒng)中,由于允許一個文件被多個進程所共享,故只有在無其他任何進程需要此文件時,才能真正關閉該文件


    (4) 讀和寫文件 read 和 write。

    僅當用戶利用 open 打開指定文件后,方可調(diào)用 read 或write 對文件執(zhí)行讀或?qū)懖僮鳌蓚€系統(tǒng)調(diào)用都要求用戶提供三個輸入?yún)?shù):

    • ① 文件描述符fd。
    • ② buf 緩沖區(qū)首址。對讀而言,這是用戶所要求的信息傳送的目標地址;對寫而言,這則是信息傳送的源地址。
    • ③ 用戶要求傳送的字節(jié)數(shù) n byte。

    系統(tǒng)調(diào)用 read 的功能是試圖從 fd 所指示的文件中去讀入 n byte 個字節(jié)的數(shù)據(jù),并將它們送至由指針 buf 所指示的緩沖區(qū)中;系統(tǒng)調(diào)用 write 的功能是試圖把 n byte 個字節(jié)數(shù)據(jù),從指針 buf 所指示的緩沖區(qū)中寫到由 fd 所指向的文件中。


    (5) 連接和去連接(link 和 unlink)。

    為了實現(xiàn)文件共享,必須記住所有共享該文件的用戶數(shù)目。為此,在該文件的索引結點中設置了一個連接計數(shù) link。每當有一用戶要共享某文件時,須利用系統(tǒng)調(diào)用 link 來建立該用戶(進程)與此文件之間的連接,并對 i.link 做加 1操作。當用戶不再使用此文件時,應利用系統(tǒng)調(diào)用 unlink 去斷開此連接,亦即做 i.link 的減1 操作。當 i.link 減 1 后結果為 0 時,表示已無用戶需要此文件,此時才能將該文件從文件系統(tǒng)中刪除。故在 UNIX 系統(tǒng)中并無一條刪除文件的系統(tǒng)調(diào)用。

    ?

    ?

    進程間的通信


    為了實現(xiàn)進程間的通信,在 UNIX 系統(tǒng)中提供了一個用于進程間通信的軟件包,簡稱IPC。它由消息機制、共享存儲器機制和信號量機制三部分組成。在每一種通信機制中,都提供了相應的系統(tǒng)調(diào)用供用戶程序進行進程間的同步與通信之用。

    (1) 消息機制。

    用戶(進程)在利用消息機制進行通信時,必須先利用 msgget 系統(tǒng)調(diào)用來建立一個消息隊列。若成功,便返回消息隊列描述符 msgid,以后用戶便可利用 msgid 去訪問該消息隊列。用戶(進程)可利用發(fā)送消息的系統(tǒng)調(diào)用 msgsend 向用戶指定的消息隊列發(fā)送消息;利用 msgrcv 系統(tǒng)調(diào)用從指定的消息隊列中接收指定類型的消息。

    (2) 共享存儲器機制。

    當用戶(進程)要利用共享存儲器機制進行通信時,必須先利用shmget 系統(tǒng)調(diào)用來建立一個共享存儲區(qū),若成功,便返回該共享存儲區(qū)描述符 shmid。以后,用戶便可利用 shmid 去訪問該共享存儲區(qū)。進程在建立了共享存儲區(qū)之后,還必須再利用shmat 將該共享存儲區(qū)連接到本進程的虛地址空間上。以后,在進程之間便可利用該共享存儲區(qū)進行通信。當進程不再需要該共享存儲區(qū)時,可利用 shmdt 系統(tǒng)調(diào)用來拆除進程與共享存儲區(qū)間的連接。

    (3) 信號量機制。

    在 UNIX 系統(tǒng)中所采用的信號量機制,允許將一組信號量形成一個信號量集,并對這組信號量施以原子操作

    ?

    ?

    信息維護

    ?

    在 UNIX 系統(tǒng)中,設置了許多條用于系統(tǒng)維護的系統(tǒng)調(diào)用。


    (1) 設置和獲得時間。

    超級用戶可利用設置時間的系統(tǒng)調(diào)用(stime),來設置系統(tǒng)的日期和時間。如果調(diào)用進程并非超級用戶,則 stime 失敗。一般用戶可利用獲得時間的系統(tǒng)調(diào)用time 來獲得當前的日期和時間。

    (2) 獲得進程和子進程時間(times)。

    利用該系統(tǒng)調(diào)用可獲得進程及其子進程所使用的CPU 時間,其中包括調(diào)用進程在用戶空間執(zhí)行指令所花費的時間,系統(tǒng)為調(diào)用進程所花費的 CPU 時間、子進程在用戶空間所用的 CPU 時間、系統(tǒng)為各子進程所花費的 CPU 時間等,并可將這些時間填寫到一個指定的緩沖區(qū)。

    (3) 設置文件訪問和修改時間(utime)。

    該系統(tǒng)調(diào)用用于設置指名文件被訪問和修改的時間。如果該系統(tǒng)調(diào)用的參數(shù) times 為 NULL 時,文件主和對該文件具有寫權限的用戶,可將對該文件的訪問和修改時間設置為當前時間;如果 times 不為 NULL,則把 times 解釋為指向 utim buf 結構的指針,此時,文件主和超級用戶能將訪問時間和修改時間置入 utim buf結構中。

    (4) 獲得當前 UNIX 系統(tǒng)的名稱(uname)。

    利用該系統(tǒng)調(diào)用可將有關 UNIX 系統(tǒng)的信息存儲在 utsname 結構中。 這些信息包括 UNIX 系統(tǒng)名稱的字符串、系統(tǒng)在網(wǎng)絡中的名稱、 硬件的標準名稱等。

    ?

    ?

    總結

    以上是生活随笔為你收集整理的系统调用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。