Linux核心設計與實現 讀書筆記(3)系統呼叫

2021-10-08 10:19:20 字數 1153 閱讀 4365

在linux中,每個系統呼叫都被賦予乙個系統呼叫號。當使用者程序執行乙個系統呼叫的時候,這個系統呼叫號就會用來指明到底是要呼叫哪個系統呼叫。程序不會提及系統呼叫的名稱。

系統呼叫號一旦分配不能更改,即使刪除了也不允許**再利用。

linux有乙個「未實現」系統呼叫sys_ni_syscall(),它除了返回-enosys外不做其他操作。這個錯誤號專門針對無效的系統呼叫而設定。

核心記錄了所有已註冊過的系統呼叫的列表,儲存在sys_call_table中。每乙個體繫結構都明確定義了這個表,這個表為每乙個有效的系統呼叫指定了唯一的系統呼叫號。

使用grep命令查詢sys_call_table,可以看到不同架構的實現方式不同。但是都有實現了sys_call_table

nr_syscalls巨集定義表示系統呼叫的總數。

使用者空間的程式無法直接執行核心**,使用者空間的程式通過軟中斷的方式通知核心:通過引發乙個異常,促使系統切換到核心態去執行中斷處理函式。在經過幾個簡單測試之後,使用system_call_table和其他包含的索引資訊來執行真正的系統呼叫了。從系統呼叫返回後,最終執行syscall_exit,並呼叫resume_userspace返回使用者空間。然後繼續在 c 庫中執行,它將返回到使用者應用程式中。

為了系統的安全和穩定性,系統呼叫必須檢查它們所有的引數的合法性。

copy_to_user()和copy_from_user()函式可能會阻塞,當包含使用者資料的頁被換出到硬碟上而不是物理記憶體上時,程序會陷入休眠,直到缺頁處理程式將該頁從硬碟重新換回到物理記憶體。linux支援虛擬記憶體(virtual mmemory),虛擬記憶體是指使用磁碟當作ram的擴充套件,這樣可用的記憶體的大小就相應地增大了。核心會將暫時不用的記憶體塊的內容寫到硬碟上,這樣一來,這塊記憶體就可用於其它目的。當需要用到原始的內容時,它們被重新讀入記憶體.用作虛擬記憶體的硬碟部分被稱為交換空間(swap space)。

Linux核心設計與實現讀書筆記 1

我現在要做的科研專案涉及到核心程式設計的知識,所以在學校的圖書館借了一本 linux核心設計與實現 英文名 linux kernel development 打算通過這本書來了解一下linux核心各部分的原理。我選擇這本書的原因很簡單 薄。全書只有二百多頁,但內容還是很全面的。翻譯質量還可以,譯者還...

linux核心設計與實現讀書筆記 記憶體管理

一 頁 記憶體管理的基本單位 頁。核心中用struct page表示物理頁,位於,屬性包括flag頁狀態 count頁的引用計數,virtual頁虛擬位址。目的在於描述物理記憶體本身而非其中的資料。1 獲得頁 核心 alloc pages gft t gft mask,order 連續分配2n個連續...

《Linux核心設計與實現》讀書筆記 程序排程

程序排程程式負責決定將哪個程序投入執行,何時執行以及執行多長時間。在執行態程序之間分配有限的處理器時間資源。多工系統分為搶占式和非搶占式。linux使用搶占式。大部分現代系統都是搶占式 io消耗型 處理器消耗型程序 把大多時間用於執行 的程序。程序優先順序 nice值 20 19,值越大優先順序越低...