linux的
系統呼叫是用中斷實現的
linux的系統呼叫並不是像普通的函式呼叫那樣直接在使用者程序空間完成的,它是通過中斷實現的,即:發出中斷 + 呼叫中斷服務程式。
www.2cto.com
以x86體系為例,
1. 使用者程序在執行系統呼叫前,先把系統呼叫名(實際上是系統呼叫號)、輸入引數等放到暫存器上(ebx,ecx等暫存器)
2. 然後發出int 0x80指令,即觸發128號中斷
3. 系統暫停使用者程序,根據128號中斷找到中斷服務程式,這個程式名就叫system_call()
4. system_call()接著執行。它會從暫存器中找到系統呼叫名、輸入引數等,並根據系統呼叫上下文中找到引發系統呼叫的程序;執行完畢後它又會把輸出結果放到暫存器中。
5. 系統恢復使用者程序,程序從暫存器中取到自己想要的東西,然後繼續執行。
補充說明:
系統呼叫的中斷一般稱為軟中斷
linux系統呼叫是通過軟中斷實現的嗎
軟中斷是利用硬體中斷的概念,用軟體方式進行模擬,實現巨集觀上的非同步執行效果。很多情況下,軟中斷和訊號有些類似,同時,軟中斷又是和硬中斷相對應的,硬中斷是外部裝置對cpu的中斷,軟中斷通常是硬中斷服務程式對核心的中斷,訊號則是由核心 或其他程序 對某個程序的中斷 linux核心源 情景分析 第三章 ...
linux 訊號 中斷的系統呼叫
apue上提到了低速的系統呼叫 解釋很長很麻煩 第三版 260頁 我只是簡單的理解為能夠發生阻塞並且阻塞時間夠長且有可能永遠阻塞的系統呼叫 當這些函式處於阻塞期,恰好捕捉到乙個訊號,則該系統呼叫返回出錯,起errno設定為eintr 而我們希望重啟這些函式則出線了這樣的 again if n rea...
linux中斷與系統呼叫
1.系統使用巨集syscallx 將相應的系統呼叫定義為其同名函式。呼叫中斷int 0x80.並將引數傳送到相應的暫存器中,供entry system call 使用。2.進入entry system call 中,當系統呼叫合法時,根據索引值,在sys call table中找到相應的實際服務程式...