linux内核杂记(15)-系统调用(2)
1、內(nèi)核在執(zhí)行系統(tǒng)調(diào)用時(shí),處于進(jìn)程上下文狀態(tài),current指針指向調(diào)用 系統(tǒng)調(diào)用的進(jìn)程。
2、在進(jìn)程上下文中
(1)內(nèi)核可休眠(比如在系統(tǒng)調(diào)用阻塞或顯式調(diào)用 schedule()時(shí))。
休眠說(shuō)明系統(tǒng)調(diào)用可使用內(nèi)核提供的絕大部分功能。
(2)內(nèi)核可被搶占
就像用戶空間內(nèi)的進(jìn)程一樣,當(dāng)前進(jìn)程同樣可被其它進(jìn)程搶占。因?yàn)樾碌倪M(jìn)程要使用相同的系統(tǒng)調(diào)用,所以必須小心,保證該系統(tǒng)是可重入。
當(dāng)系統(tǒng)調(diào)用 返回時(shí),控制權(quán)仍然在system_call()中,它最終會(huì)切換到用戶空間,讓用戶進(jìn)程繼續(xù)執(zhí)行
3、系統(tǒng)調(diào)用的綁定:
系統(tǒng)調(diào)用必須編譯進(jìn)內(nèi)核,不能編譯成模塊
以sys_mytest 為例
(1)在系統(tǒng)調(diào)用表中最后加入一項(xiàng),觀察其最后一項(xiàng)調(diào)用號(hào)多少,一般加1即可,從0開始編號(hào)
在entry.s中
(2)將系統(tǒng)調(diào)用號(hào)加入<asm/unistd.h>
#define __NR_mytest 338
(3)實(shí)現(xiàn)mytest()調(diào)用
kernel/sys.c 文件中(也可根據(jù)其功能放入聯(lián)系最緊密的代碼中)
總結(jié)
以上是生活随笔為你收集整理的linux内核杂记(15)-系统调用(2)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL中实现并、交、差
- 下一篇: linux内核杂记(16)-系统调用(3