系統呼叫的概念和型別

2021-08-23 14:33:18 字數 1419 閱讀 1212

系統呼叫提供了使用者程式和作業系統核心間的介面。

在實際執行過程中,處理機會在系統態和使用者態間切換。相應地,現代多數os將cpu的指令集分為特權指令和非特權指令兩類。

(1)特權指令。特權指令是指在系統態執行的指令,它對內部空間的訪問範圍基本不受限制,不僅能訪問使用者空間,也能訪問系統空間。

(2)非特權指令。非特權指令是執行在使用者態的指令。應用程式所使用的都是非特權指令,它只能完成一般性的操作和任務,不能對系統中的硬體和軟體直接進行訪問,對記憶體的訪問範圍也侷限於使用者空間。

系統呼叫本質上是應用程式請求os核心完成某功能時的一種過程呼叫,它與一般的過程呼叫的幾個差別:

1.執行在不同的系統狀態。一般的過程呼叫其呼叫程式和被呼叫程式執行在相同的狀態——系統態或使用者態,而系統呼叫最大的差別是:呼叫程式是執行在使用者態,而被呼叫程式是執行在系統態。

2.狀態的轉換。由於系統呼叫的呼叫和被呼叫過程是工作在不同的系統狀態,因而不允許由呼叫過程直接轉向被呼叫過程,需要通過軟中斷機制,先由使用者態轉換為系統態,經核心分析後,才能轉向相應的系統呼叫處理程式。

3.返回問題。在採用了搶占式(剝奪)排程方式的系統中,在被呼叫過程執行完成後,要對系統中所有要求執行的程序做優先權分析。當呼叫程序仍具有最高優先順序時,才返回到呼叫進行繼續執行;否則,將引起重新呼叫,以便優先權最高的程序優先執行。

4.巢狀呼叫。像一般過程一樣,系統呼叫也可以巢狀進行,即在乙個被呼叫過程的執行期間,還可以利用系統呼叫命令去呼叫另乙個系統呼叫。

系統呼叫是通過中斷機制實現的,並且乙個作業系統的所有系統呼叫,都通過同乙個中斷入口來實現。

對於一般通用的os而言,系統呼叫分為三大類:

1.程序控制類系統呼叫

主要用於對程序控制的系統呼叫有:

(1)建立和終止程序的系統呼叫。

(2)獲得和設定程序屬性的系統呼叫。程序的屬性包括有程序識別符號,程序優先順序,最大允許執行時間等。

(3)等待某事件出現的系統呼叫。

2.檔案操縱類系統呼叫

(1)建立和刪除檔案

(2)開啟和關閉檔案的系統呼叫

(3)讀和寫檔案的系統呼叫

3.程序通訊類系統呼叫

在單機處理系統中,os經常採用訊息傳遞方式和共享儲存區方式。

當採用訊息傳遞方式時,通訊前需先開啟乙個連線。為此,應由源程序發出一條開啟連線的系統呼叫,而目標程序則應利用接受連線的系統呼叫表示同意進行通訊;然後,在源和目標程序之間便開始通訊。可以利用傳送訊息的系統呼叫或者用接收訊息的系統呼叫來交換資訊。通訊結束後,還須再利用關閉連線的系統呼叫結束通訊。

使用者在利用共享儲存區進行通訊之前,須先利用建立共享儲存區的系統呼叫來建立乙個共享儲存區,再利用建立連線的系統呼叫將該共享儲存區連線到程序自身的虛位址空間上,然後便可以利用讀和寫共享儲存區的系統呼叫實現相互通訊。

Linux 檔案系統的概念和型別

檔案系統 file system 是磁碟上有特定格式的一片區域,作業系統利用檔案系統儲存和管理檔案。不同的作業系統需要使用不同的檔案系統,為了與其他作業系統相容,通常作業系統都支援很多種型別的檔案系統。linux系統使用ext2 ext3檔案系統。在linux系統中,儲存資料的各種裝置都屬於塊裝置,...

《Linux系統呼叫 大檔案概念》

通常將存放檔案偏移量的資料型別off t實現為乙個有符號的長整形,之所以採用有符號資料型別是要以 1 來表示錯誤情況 對於open,close等系統呼叫一般來說正常使用基本沒什麼問題,但是也是有侷限性,在32位體系中檔案的大小不能超過2g 2 31 1 如果超過了linux 下是有另外專門的一套ap...

系統呼叫和函式呼叫的區別

作業系統服務的程式設計介面 通常由高階語言編寫 c或c 程式訪問通常通過高層次 的api介面 c標準庫的庫函式 而不是直接進行系統呼叫 每個系統呼叫對應乙個系統呼叫編號 系統呼叫 1.使用int和iret指令,核心和應用程式使用的是不同的堆疊,因此存在堆疊的切換,從使用者態切換到核心態,從而可以使用...