Linux

Linux 核心如何知道哪個程序進行了系統呼叫?

  • July 10, 2021

假設一個程序進行了系統呼叫來打開一個文件,當Linux核心執行這個系統呼叫時,Linux核心應該將fd打開的文件添加到進行系統呼叫的程序fd表中。

當傳遞給系統呼叫的參數不包括 PID 時,Linux 核心如何知道哪個程序進行了這個系統呼叫?

核心系統呼叫在呼叫程序的上下文中執行,只是在不同的特權級別和不同的支持基礎設施。Linux 核心有一個 per-CPU 變數,用於跟踪目前程序current_task;它在需要知道目前程序是什麼時使用它。在給定的 CPU 上,目前任務僅在調度程序決定時更改,並且上下文切換負責保存所有必要的資訊,以便核心可以跟踪發生的情況。

LWN 有幾篇關於系統呼叫的有用文章,系統呼叫剖析第 1部分和第 2 部分。他們解釋瞭如何定義系統呼叫以及如何執行它們,儘管可能沒有足夠的細節來實際回答您的問題,因為它們沒有詳細介紹從使用者空間到核心空間的轉換;但這只是 CPU 上可用的任何基於陷阱的轉換支持。

引用自:https://unix.stackexchange.com/questions/364502