linux學習筆記(四)系統調用

系統調用

與內核通信

POSIX : IEEE標準
C庫:
系統調用:系統內核層面使用,應用層需要syscall

系統調用

asmlinkage 限定詞 通知編譯器僅從棧中提取該函數參數

系統調用號

系統通過調用號來進行系統調用,在編譯的時候已經確定
系統調用表,例如x86-64就在 arch/i386/kernel/syscall_64.c

系統調用處理

應用程序通過軟中斷方式通知內核,通過一個異常導致系統切換到內核

實現系統調用

參數驗證

指針必須保證:
內存區域屬於用戶空間
在進程的地址空間裏
讀寫可執行等權限要說明
使用copy_to_user() 和copy_from_user()來進行內核用戶層交換數據,它們的參數類似memcpy
使用capable() 來判斷是否有權限,

系統調用註冊

用戶空間訪問系統調用

_syscalln() n爲0~6,代表需要傳遞的參數個數
例如open 進行系統調用: _syscall3(long,open,const char*,filename,int,flags,int,mode);原型:long open(const char* filename,int flags,int mode);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章