linux系統呼叫

2021-09-27 08:18:27 字數 2057 閱讀 6502

linux系統呼叫的層次如下:

使用者程式-------->c庫(即api):int 0x80------------>system_call------------>系統呼叫服務例程--------->核心程式

***api即就是系統提供的c庫。系統呼叫是通過軟中斷指令int 0x80實現的。

(2)system_call:根據具體的系統呼叫號轉到執行具體的系統呼叫服務例程。

過程:通過系統呼叫號查詢系統呼叫表sys_call_table,軟中斷指令0x80執行時,系統呼叫號會被放入eax暫存器當中(由於系統呼叫服務例程只會從堆疊中獲取引數),system_call函式可以讀取eax暫存器獲取(system_call函式執行時會首先將這些暫存器壓入堆疊中),然後將其乘以4,生成偏移位址,然後以sys_call_table為基址,基址加上偏移位址,就可以得到具體的系統呼叫服務例程的位址,然後就可以得到系統服務例程(是對乙個具體的系統呼叫的核心實現函式,系統呼叫處理程式是在執行系統呼叫服務例程之前的乙個引導過程,是針對int 0x80這條指令的,面向所有系統呼叫)了。

系統呼叫通過軟中斷int 0x80陷入核心,跳轉到系統呼叫處理程式system_call函式,然後處理相應的服務例程。但是由於是代表使用者程序,所以這個執行過程並不屬於中斷上下文,而是程序上下文。因此,在系統呼叫的過程中,可以訪問使用者程序的許多資訊,可以被其它程序搶占,可以休眠。

當系統呼叫完成後,把控制權交回到發起呼叫的使用者程序,核心會有一次排程。如果發現有優先順序更高的程序或當前程序的時間片用完,那麼會選擇優先順序更高的程序或重新選擇程序執行

二。系統呼叫的意義

系統呼叫在使用者空間程序和硬體裝置之間新增了乙個中間層,該層的作用:

1.為使用者空間提供了乙個統一的硬體的抽象介面。

2.保證了系統的穩定和安全(可以避免應用程式不正確的使用硬體裝置,竊取其它程序的資源)

3.如果應用程式可以隨意的訪問硬體,而核心又對此一無所知的話,幾乎無法實現多工和虛擬記憶體,當然也不能實現良好的穩定性和安全性

在linux中,系統呼叫時使用者空間訪問核心的唯一手段,除異常和中斷外,他們是訪問核心的唯一入口。

linux系統呼叫的層次如下:

使用者程式-------->c庫(即api):int 0x80------------>system_call------------>系統呼叫服務例程--------->核心程式

***api即就是系統提供的c庫。系統呼叫是通過軟中斷指令int 0x80實現的。

(2)system_call:根據具體的系統呼叫號轉到執行具體的系統呼叫服務例程。

過程:通過系統呼叫號查詢系統呼叫表sys_call_table,軟中斷指令0x80執行時,系統呼叫號會被放入eax暫存器當中(由於系統呼叫服務例程只會從堆疊中獲取引數),system_call函式可以讀取eax暫存器獲取(system_call函式執行時會首先將這些暫存器壓入堆疊中),然後將其乘以4,生成偏移位址,然後以sys_call_table為基址,基址加上偏移位址,就可以得到具體的系統呼叫服務例程的位址,然後就可以得到系統服務例程(是對乙個具體的系統呼叫的核心實現函式,系統呼叫處理程式是在執行系統呼叫服務例程之前的乙個引導過程,是針對int 0x80這條指令的,面向所有系統呼叫)了。

系統呼叫通過軟中斷int 0x80陷入核心,跳轉到系統呼叫處理程式system_call函式,然後處理相應的服務例程。但是由於是代表使用者程序,所以這個執行過程並不屬於中斷上下文,而是程序上下文。因此,在系統呼叫的過程中,可以訪問使用者程序的許多資訊,可以被其它程序搶占,可以休眠。

當系統呼叫完成後,把控制權交回到發起呼叫的使用者程序,核心會有一次排程。如果發現有優先順序更高的程序或當前程序的時間片用完,那麼會選擇優先順序更高的程序或重新選擇程序執行

二。系統呼叫的意義

系統呼叫在使用者空間程序和硬體裝置之間新增了乙個中間層,該層的作用:

1.為使用者空間提供了乙個統一的硬體的抽象介面。

2.保證了系統的穩定和安全(可以避免應用程式不正確的使用硬體裝置,竊取其它程序的資源)

3.如果應用程式可以隨意的訪問硬體,而核心又對此一無所知的話,幾乎無法實現多工和虛擬記憶體,當然也不能實現良好的穩定性和安全性

在linux中,系統呼叫時使用者空間訪問核心的唯一手段,除異常和中斷外,他們是訪問核心的唯一入口。

linux 系統呼叫

使用者應用可以通過兩種方式使用系統呼叫。第一種方式是通過c庫函式,包括系統呼叫在c庫中的封裝函式和其他普通函式。圖5.2 使用系統呼叫的兩種方式 第二種方式是使用 syscall巨集。2.6.18版本之前的核心,在include asm i386 unistd.h檔案中定義有7個 syscall巨集...

Linux系統呼叫

一 實驗目的和要求 1.學習linux核心的配置和編譯 2.深入理解linux系統呼叫 3.理解arm和x86的cpu模式 系統模式 使用者模式 的不同 4.掌握核心模組的編寫方法。二 實驗器材 1.linux實驗板卡一塊 2.5v 1a電源乙個 3.microusb線一根 4.macos一台 5....

Linux系統呼叫

linux系統呼叫 系統呼叫 system call 是使用者空間訪問核心的唯一手段,除異常和陷入外,他們是核心唯一的合法入口。通常情況下應用程式是通過應用程式設計介面api來訪問函式,而不是直接使用系統呼叫來程式設計。作業系統通常是通過中斷從使用者態切換到核心態。中斷就是乙個硬體或軟體請求,要求c...