亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区
Chinaunix
標(biāo)題:
如何理解內(nèi)核線程執(zhí)行在用戶模式下,什么樣的情景會(huì)用到?
[打印本頁(yè)]
作者:
jonas_mao
時(shí)間:
2014-10-29 16:19
標(biāo)題:
如何理解內(nèi)核線程執(zhí)行在用戶模式下,什么樣的情景會(huì)用到?
文檔上的一段話
“A kernel thread runs in user mode environment when executing user functions or library calls”
復(fù)制代碼
,這里應(yīng)該怎么理解,哪種情形會(huì)用到,是在系統(tǒng)初始化的時(shí)候,內(nèi)核調(diào)用init來(lái)初始化用戶數(shù)據(jù)?
在用戶模式要訪問(wèn)內(nèi)核數(shù)據(jù)是通過(guò)系統(tǒng)調(diào)用這個(gè)中轉(zhuǎn),那么系統(tǒng)調(diào)用能作為內(nèi)核到用戶的中轉(zhuǎn)嗎?(使內(nèi)核再次陷入內(nèi)核態(tài)?)
作者:
wait_rabbit
時(shí)間:
2014-10-29 21:18
就是系統(tǒng)調(diào)用的時(shí)候。
作者:
jonas_mao
時(shí)間:
2014-10-30 09:41
是說(shuō)內(nèi)核里的線程也可以使用系統(tǒng)調(diào)用嗎?
還是說(shuō)用戶使用系統(tǒng)調(diào)用,當(dāng)在內(nèi)核的時(shí)候相當(dāng)于內(nèi)核線程來(lái)執(zhí)行用戶的function或者lib,但這時(shí)候的內(nèi)核線程執(zhí)行的環(huán)境應(yīng)該是內(nèi)核態(tài),不是用戶態(tài)。存疑。
能否詳解下!
回復(fù)
2#
wait_rabbit
作者:
yimeng4a309
時(shí)間:
2014-10-30 11:57
回復(fù)
1#
jonas_mao
ksoftirqd 就是一個(gè)內(nèi)核線程
負(fù)責(zé)維護(hù)軟件中斷重新觸發(fā)的軟中斷 和 用戶進(jìn)程之間的調(diào)度。保證軟中斷過(guò)多時(shí),用戶進(jìn)程也能得到調(diào)度
只所以ksoftirqd運(yùn)行在 進(jìn)程上下文,是因?yàn)檫M(jìn)程才有調(diào)度的概念。中斷沒(méi)有調(diào)度的概念。比如你在一個(gè)中斷中發(fā)生調(diào)度了,那么就回不去了。因?yàn)橹袛酄顟B(tài)cpu沒(méi)有保存任何id相關(guān)信息。但進(jìn)程調(diào)度前 會(huì) 保存進(jìn)程id以及寄存器等環(huán)境狀態(tài)
只所以運(yùn)行在內(nèi)核態(tài)而不是用戶態(tài)。是因?yàn)橹挥羞\(yùn)行在內(nèi)核態(tài)才能訪問(wèn) 內(nèi)核空間。用戶態(tài)無(wú)法訪問(wèn)內(nèi)核空間
但與一般進(jìn)程通過(guò)系統(tǒng)調(diào)用進(jìn)入內(nèi)核態(tài)不一樣的是。進(jìn)程通過(guò)系統(tǒng)調(diào)用進(jìn)入內(nèi)核態(tài)后,可以訪問(wèn)用戶空間和內(nèi)核空間。
但是內(nèi)核態(tài)線程僅僅只能訪問(wèn)內(nèi)核空間
作者:
jonas_mao
時(shí)間:
2014-10-30 17:03
抱歉現(xiàn)在才看到,你說(shuō)的進(jìn)程通過(guò)系統(tǒng)調(diào)用進(jìn)入內(nèi)核態(tài),可以訪問(wèn)用戶數(shù)據(jù)和內(nèi)核數(shù)據(jù),這里是通過(guò)哪種方式訪問(wèn)用戶數(shù)據(jù)的,是系統(tǒng)調(diào)用所帶的參數(shù)?
你說(shuō)的ksoftirqd 是在調(diào)度用戶進(jìn)程的時(shí)候進(jìn)入user mode 嗎?
回復(fù)
4#
yimeng4a309
作者:
kiongf
時(shí)間:
2014-10-30 18:10
回復(fù)
1#
jonas_mao
內(nèi)核線程可以通過(guò)call_usermodehelper()函數(shù)調(diào)用應(yīng)用層的程序,有一個(gè)場(chǎng)景是cgroup需要調(diào)用應(yīng)用層程序cgroup release agent程序
作者:
yimeng4a309
時(shí)間:
2014-10-31 10:15
回復(fù)
5#
jonas_mao
你說(shuō)的進(jìn)程通過(guò)系統(tǒng)調(diào)用進(jìn)入內(nèi)核態(tài),可以訪問(wèn)用戶數(shù)據(jù)和內(nèi)核數(shù)據(jù),這里是通過(guò)哪種方式訪問(wèn)用戶數(shù)據(jù)的,是系統(tǒng)調(diào)用所帶的參數(shù)?
很多系統(tǒng)調(diào)用是封裝好的。具體的方式可以自己上網(wǎng)搜索下。關(guān)鍵看你的需求。如insmod 就可以通過(guò)參數(shù)傳遞給內(nèi)核
一般自己傳遞數(shù)據(jù)給內(nèi)核常用的系統(tǒng)調(diào)用有,socket 和ioctl。ioctl是同步通信方式,應(yīng)用層和內(nèi)核交互時(shí)需阻塞,對(duì)應(yīng)的數(shù)據(jù)傳遞接口是在內(nèi)核 使用 copy_from_user和copy_to_user
來(lái)訪問(wèn)用戶空間數(shù)據(jù)
當(dāng)然現(xiàn)在內(nèi)核普遍喜歡使用的 傳遞方式是基于socket的netlink。netlink可以實(shí)現(xiàn)內(nèi)核主動(dòng)通知 應(yīng)用,和應(yīng)用主動(dòng)通知內(nèi)核的異步通信方式,而且接口跟socket編程差不多。經(jīng)過(guò)實(shí)測(cè)netlink內(nèi)核端使用的鎖跟進(jìn)程上下文使用的鎖一致。不過(guò)netlink雖然工作在進(jìn)程上下文,但應(yīng)該不屬于系統(tǒng)調(diào)用。這個(gè)還好等后面有空詳細(xì)研究下
你說(shuō)的ksoftirqd 是在調(diào)度用戶進(jìn)程的時(shí)候進(jìn)入user mode 嗎?
ksoftirqd 一直工作在 核心態(tài)。不過(guò)屬于進(jìn)程上下文。這個(gè)你必須搞清楚。
用戶態(tài) 和 核心態(tài) 是一個(gè)對(duì)應(yīng)關(guān)系。
中斷上下文 和 進(jìn)程上下文是一個(gè)關(guān)系。
應(yīng)用通過(guò)系統(tǒng)調(diào)用進(jìn)入核心態(tài)。但屬于進(jìn)程上下文
中斷-軟中斷-啟動(dòng)內(nèi)核線程(常見(jiàn)的為工作隊(duì)列) 。內(nèi)核線程就工作在核心態(tài) 但屬于進(jìn)程上下文。只不過(guò)它的進(jìn)程表示符為NULL
一般情況下 要區(qū)分的是 中斷上下文 和 進(jìn)程上下文。因?yàn)?中斷上下文不會(huì)被打斷,所以不允許睡眠,萬(wàn)一睡眠了內(nèi)核就死在這里了,cpu不會(huì)讓權(quán)啊。所以使用鎖要特別注意。如mutex 和 down等是無(wú)法在中斷上下文使用的。中斷上下文使用kmalloc必須使用GTP_ATOMIC而非可能導(dǎo)致隨眠的GTP_KERNEL
可以看下
深入Linux內(nèi)核架構(gòu)(中文版)
這個(gè)有電子版講的還不錯(cuò)
作者:
jonas_mao
時(shí)間:
2014-10-31 14:03
3Q
回復(fù)
6#
kiongf
作者:
jonas_mao
時(shí)間:
2014-10-31 14:08
非常感謝,最近一直在看內(nèi)核有關(guān)的文檔,以前主要是偏應(yīng)用,所以內(nèi)核不是太熟悉,有些概念因?yàn)闆](méi)有去看源碼,沒(méi)用過(guò)比較難理解
回復(fù)
7#
yimeng4a309
作者:
yimeng4a309
時(shí)間:
2014-10-31 15:42
回復(fù)
9#
jonas_mao
還是要以源碼為主。理解為主,F(xiàn)在別說(shuō)你網(wǎng)上搜索的資料了,即便是源碼中的東西,不同版本之間。很多概念都是模糊的。比如下半部,軟中斷,異常 這些概念很多時(shí)候是混淆的。只能以實(shí)際代碼的效果為主
后來(lái)也搜索了下你發(fā)的那句英文。最后定位到IBM的
kernel thread, kernel-only thread, user thread
其實(shí)我理解的標(biāo)準(zhǔn)linux里面的概念上應(yīng)該沒(méi)這么清晰的劃分的。就分 用戶線程(user thread)和 內(nèi)核線程(這個(gè)應(yīng)該對(duì)應(yīng)你提到的kernel only thread)。用戶線程通過(guò)系統(tǒng)調(diào)用陷入核心態(tài),這個(gè)時(shí)候的狀態(tài)應(yīng)該對(duì)應(yīng)你說(shuō)的kernel thread
作者:
jonas_mao
時(shí)間:
2014-10-31 16:11
對(duì),這個(gè)是IBM上AIX的一篇文檔,因?yàn)橘Y料少,相對(duì)會(huì)有部分想?yún)⒖糽inux理解。
回復(fù)
10#
yimeng4a309
歡迎光臨 Chinaunix (http://72891.cn/)
Powered by Discuz! X3.2