欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Linux 2.6內核搶占和spinlock|linux 2.6,內核搶占,spinloc...
 

剛剛看spinlock和semaphores的使用,有幾個(gè)問(wèn)題,想請教一下:

1)中斷處理程序(top half)中不能睡眠,是因為哪個(gè)原因:
a)沒(méi)有進(jìn)程上下文,睡眠之后不能重新調度?
b)中斷程序可能關(guān)閉了所有中斷(使用SA_INTERRUPT),那么再睡眠,就沒(méi)有搶占點(diǎn)了(中斷都進(jìn)不來(lái),哪里可以schedule()?)

2)kernel thread (ps 中名稱(chēng)類(lèi)似"[xxx]"),可以睡眠,是因為kernel thread是有上下文,可以調度的,
那么kernel module作為kernel的一部分是否能夠睡眠?為什么?如果能,它有上下文么?

3)除了內核線(xiàn)程,內核什么地方可以用semaphores? 即可以睡眠?

呵呵,有點(diǎn)混了,哪位朋友幫我分析一下,非常感謝!

樓主,可能有點(diǎn)把kernel處理和kernel thread處理以及中斷處理弄混了。
記?。寒敵绦蚺茉趦群藨B(tài)的時(shí)候,只可能處于兩種環(huán)境:中斷上下文或者進(jìn)程上下文
前者是中斷驅動(dòng)的,后者是用戶(hù)進(jìn)程/內核線(xiàn)程驅動(dòng)的
當內核處于中斷驅動(dòng)部分時(shí),沒(méi)有上下文,是不能阻塞,睡眠的。這種情況適用于中斷處理程序,以及你提到的packet handler,這是網(wǎng)站中斷驅動(dòng)的
當內核處于進(jìn)程上下文時(shí),是可以阻塞的,包括內核線(xiàn)程,也有自己的上下文。
關(guān)于你的問(wèn)題:
1) a)是主要原因。
2)kernel中是看哪一部分,
有中斷上下文的是不允許阻塞的。系統調用部分是可以的,內核線(xiàn)程也是可以的。

*)關(guān)于內核模塊:以一個(gè)驅動(dòng)程序舉例,驅動(dòng)程序中某部分是中斷處理程序,那么處于中斷上下文中,就不能睡眠。
如果通過(guò)系統調用從用戶(hù)態(tài)到內核態(tài)(比如你的設備是字符設備,驅動(dòng)程序中掛了open/read函數),此時(shí)就處于進(jìn)程上下文,就可以睡眠。

*)關(guān)于內核線(xiàn)程:內核線(xiàn)程與普通的進(jìn)程的區別是,內核線(xiàn)程沒(méi)有獨立的地址空間,它的mm指針被設置為NULL(p->mm = NULL),能訪(fǎng)問(wèn)內核地址空間,一般用于內核后臺執行一些操作,從不切換到用戶(hù)空間去。內核線(xiàn)程只能由其他內核線(xiàn)程創(chuàng )建??梢员徽{度,也可以被搶占。因為它有自己的task_struct,current宏就指向自己的task_struct,x86里在內核棧的尾端創(chuàng )建thread_info結構,通過(guò)計算偏移間接的查找task_struct結構。內核是在創(chuàng )建線(xiàn)程時(shí)分配內核棧的。

From http://www.linuxquestions.org/li ... Linux_Kernel_Thread

The implementation of kernel_thread() function is available in arch/i386/kernel/process.c. The new task is created via do_fork() system call. A kernel_thread() system call is invoked with a special flag CLONE_KERNEL as an argument. This is defined in include/linux/sched.h as below in

define CLONE_KERNEL (CLONE_FS | CLONE_FILES | CLONE_SIGHAND)

Internally, kernel_thread() passes another two flags CLONE_VM and CLONE_UNTRACED to
do_fork() system call. It means a newly created process will share following resources with its parent process.

File System Information.
File Descriptor Table.
Signal Handlers.
Memory space.
A do_fork() is responsible to create a new task structure on the basis of the
flags passed to it, to set a state of newly created task to TASK_RUNNING and put
this task structure on a runqueue list. It depends upon scheduler when this task
is being picked up for execution.


*)關(guān)于系統調用:內核在執行系統調用的時(shí)候是處于進(jìn)程上下文中,current指針指向當前任務(wù),即引發(fā)系統調用的那個(gè)進(jìn)程。所以,系統調用是可以睡眠的。

若有問(wèn)題,歡迎討論。
1) 是因為a), 沒(méi)有進(jìn)程上下文是最關(guān)鍵因素。

kernel module, 從module_init指定的函數起, 是運行于insmod這個(gè)進(jìn)程的進(jìn)程上下文的。 當然,如果你注冊了中斷、softirq等, 你寫(xiě)的那些處理函數就是運行在中斷上下文。

除了irq和softirq,哪里都可以用semaphore

1)ISR中不能睡眠,沒(méi)別的原因,就是因為中斷什么時(shí)候來(lái)是不可預測的。
本來(lái)當前進(jìn)程運行的好好的,突然來(lái)了個(gè)中斷把當前進(jìn)程睡眠掉了,而這個(gè)中斷和當前進(jìn)程什么關(guān)系都沒(méi)有,有點(diǎn)象走大街上突然被天上掉石頭砸一下的感覺(jué)。

被中斷打斷的進(jìn)程或者線(xiàn)程技術(shù)上屬于運行態(tài),不是睡眠態(tài)。

在Solaris里是TS_ONPROC,在linux相信類(lèi)似


2)kernel module是什么?是module嗎?module無(wú)所謂睡眠不睡眠,因為一個(gè)module并不是一個(gè)進(jìn)程或者線(xiàn)程。
有的module中,啟動(dòng)了一個(gè)內核線(xiàn)程,如usb總線(xiàn)驅動(dòng)模塊中啟動(dòng)了usb_hub_thread線(xiàn)程,那么這個(gè)線(xiàn)程倒是可以睡眠,喚醒.......


大部分內核模塊和驅動(dòng)程序都支持多線(xiàn)程,支持鎖來(lái)同步互斥訪(fǎng)問(wèn),這些都是可以引起睡眠的,當然睡眠的實(shí)體還是所服務(wù)的用戶(hù)線(xiàn)程對應的內核線(xiàn)程。

中斷等特殊的上下文在不同的系統上實(shí)現有差異,所有的系統上都存在不允許睡眠的特殊上下文,這時(shí),是不允許睡眠的。

3)內核什么地方都可以用semaphores,只要down和up之間不睡眠。

鎖的使用取決于上下文的約束條件,在不同系統上是有差異的。特殊的內核上下文里不允許睡眠。[]

 


本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Linux進(jìn)程學(xué)習總結 fork()和vfork()的學(xué)習
Linux內核線(xiàn)程之深入淺出
Linux2.4內核說(shuō)明文檔(進(jìn)程與中斷管理篇)
了解Linux的進(jìn)程與線(xiàn)程
Linux進(jìn)程是如何創(chuàng )建出來(lái)的?
Linux核心介紹講義
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久