分析system call中斷處理過程

2022-09-19 22:54:12 字數 1278 閱讀 1007

攥寫人:李鵬舉  學號:20132201

( 學習課程:《linux核心分析》mooc課程

實驗要求:

使用gdb跟蹤分析乙個系統呼叫核心函式(您上週選擇那乙個系統呼叫),系統呼叫列表參見 ,推薦在實驗樓linux虛擬機器環境下完成實驗。

根據本週所學知識分析系統呼叫的過程,從system_call開始到iret結束之間的整個過程,並畫出簡要準確的流程圖

實驗過程:

1.首先開啟menu資料夾中,修改text.c,並且加入上週的函式getppid():

2.將menu進行編譯,make rootfs:

3.檢查是否成功的增加了相應的功能:

實驗分析:

通過學習課程我們知道了,linux的系統呼叫過程:使用者程式→c庫(即

api):

int 0x80 →system_call→系統呼叫服務例程→核心程式。我們常說的使用者api

其實就是系統提供的c庫。

系統呼叫是通過軟中斷指令 int 0x80

實現的,而這條

int 0x80

指令就被封裝在

c庫的函式中。軟中斷和我們常說的硬中斷不同之處在於,軟中斷是由指令觸發的,而不是由硬體外設引起的。

int 0x80

這條指令的執行會讓系統跳轉到乙個預設的核心空間位址,它指向系統呼叫處理程式,即

system_call

函式。系統呼叫處理程式

system_call

並不是系統呼叫服務例程,系統呼叫服務例程是對乙個具體的系統呼叫的核心實現函式,而系統呼叫處理程式是在執行系統呼叫服務例程之前的乙個引導過程,是針對

int 0x80

這條指令,面向所有的系統呼叫的。簡單來講,執行任何系統呼叫,都是先通過呼叫

c庫中的函式,這個函式裡面就會有軟中斷

int 0x80

語句,然後轉到執行系統呼叫處理程式

system_call

,system_call

再根據具體的系統呼叫號轉到執行具體的系統呼叫服務例程。

最後我做了乙個流程圖,總結從system_call開始到iret結束的過程:

分析system call中斷處理過程

linux 核心分析 mooc課程 上一次的實驗中,我們選擇了乙個系統呼叫即系統呼叫函式system write函式,分別使用庫函式 api即 printf 函式和c 中嵌入彙編 的方式進行了系統呼叫。我們先複習一下系統呼叫的原理和系統呼叫的過程。首先我們看一下課堂上孟寧老師給出的 系統呼叫三層皮 ...

linux中system call中斷處理過程

上次我們分析了系統呼叫大致過程,現在我們把這兩個系統呼叫的 放到menuos中,並用gdb跟蹤除錯來看看從system call開始到iret結束之間的整個過程。邊看實驗過程邊分析 首先我們要將系統裡面的menu目錄刪去,然後從github上更新到新版的menu。接著,把我們之前寫好的getpid ...

ARM Linux 中斷分析

在具體的 arm 晶元中會有很多的中斷型別,每一種型別的中斷用以上結構來表示 struct irqdesc irq desc nr irqs nr irqs 根據不同的 mcu 會有所區別 在通過request irq 函式註冊中斷服務程式的時候,將會把中斷向量和中斷服務程式對應起來。我們來看一下 ...