目前正在通讀《linux核心設計與實現》一書,本文是對第五章《系統呼叫》的總結。
1.系統呼叫是什麼?
由核心提供的一組介面,在linux中,系統呼叫是使用者空間訪問核心的唯一手段;除異常和陷入外,它們是核心唯一的合法入口。
2.與庫函式和應用程式介面(api)有怎樣的關係?
3.如何增加系統呼叫?
3.1 限定詞:asmlinkage
所有的系統呼叫都需要這個限定詞。這是乙個編譯命令,通知編譯器僅從棧中提取該函式的引數。
所有的系統呼叫,在核心中其方法名都被加上字首"sys_"。
3.2 系統呼叫號
在linux中,每個系統呼叫被賦予乙個系統呼叫號。核心使用系統呼叫表sys_call_table為每個有效的系統呼叫指定唯一的系統呼叫號。每一種體系結構中,都明確定義了這個表。
表項是以64位型別存放的。
3.3步驟:
3.3.1 編寫完系統呼叫,符合設計規範,做必要的相容和合法性檢查;
3.3.2 在系統呼叫表的最後加入乙個表項;從0開始,在表中的位置(index值)就是它的系統呼叫號;
3.3.3 系統呼叫必須被編譯進核心映象,實現方法就是把它放入kernel/下的乙個相關檔案中;
4.系統呼叫的執行:
將系統呼叫號和引數壓入暫存器,然後觸發軟中斷來陷入核心。
應用程式通知核心的機制是靠軟中斷實現的:通過引發乙個異常來促使系統切換到核心態去執行異常處理程式。此時的異常處理程式實際上就是系統呼叫處理程式。
《Linux核心設計與實現》第3章讀書筆記
第三章 程序管理 一 程序 1.程序就是處於執行期的程式,但並不侷限於可執行 實際上,程序是正在執行的程式 的實時結果。2.執行執行緒是在程序中活動的物件 3.在現代作業系統中,程序提供兩種虛擬機制 虛擬處理器和虛擬記憶體。4.程序是呼叫fork 系統的結果,最後程式通過exit 系統呼叫退出執行。...
《Linux核心設計與實現》第5章讀書筆記
第五章 系統呼叫 一 系統呼叫概述 系統呼叫在linux中稱為syscall,返回的值是long型變數 如果出錯,c庫會將錯誤 寫入errno全域性變數 通過呼叫perror 函式可以把該變數翻譯成使用者可以理解的錯誤 為了保證32和64位系統相容,系統呼叫在使用者空間和核心空間有不同的返回值型別 ...
linux 核心設計與實現相關
有待繼續補充。第一章 linux核心簡介 需要注意 核心開發其實並不難。第二章 從核心出發 核心開發需要注意 1 沒有c庫,c庫太大了 2 沒有記憶體保護機制 3 不要輕易使用浮點數 4 可移植的重要性 5 同步和併發 疑問 編譯和安裝核心?必須在linux下麼?其他機器安裝了gcc編譯器呢?能否編...