亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 74157 | 回復(fù): 80
打印 上一主題 下一主題

關(guān)于LINUX在中斷(硬軟)中不能睡眠的真正原因 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2007-06-27 09:19 |只看該作者 |倒序?yàn)g覽
看鄰居帖子,大家回答的問(wèn)題不大。但也有不同的回答和解釋。有點(diǎn)亂。

有必要討論,得出固定的結(jié)論。

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2007-06-27 09:29 |只看該作者
確實(shí),大家說(shuō)了很多,有些地方還是不是很清楚。
希望高手們能給出正解

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2007-06-27 09:38 |只看該作者
原帖由 思一克 于 2007-6-27 09:19 發(fā)表于 1樓  
看鄰居帖子,大家回答的問(wèn)題不大。但也有不同的回答和解釋。有點(diǎn)亂。

有必要討論,得出固定的結(jié)論。



其實(shí)這只是一個(gè)設(shè)計(jì)上的問(wèn)題, 而并不是強(qiáng)制的. 只是針對(duì)Linux內(nèi)核而言, 這是規(guī)矩.
LKD2上面說(shuō), 切換出去之后, 何時(shí)才能調(diào)度回來(lái)? 就是中斷回來(lái)之后可能不會(huì)回到之前所依俯的那個(gè)進(jìn)程了.
中斷不能睡眠的的最大好處就是可以簡(jiǎn)化內(nèi)核的設(shè)計(jì). 如果說(shuō)中斷隨時(shí)可以睡眠的話, 那么就必須考慮很多其它方面的事情, 比如睡眠之后又出現(xiàn)了
同一IRQ號(hào)的中斷又該怎么辦, 等等.
其實(shí), 如果自己能把握好, 中斷中睡眠也是可以的. 但是必須能夠保證這段代碼具有足夠的安全性與可靠性.
這是我的理解.

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2007-06-27 10:09 |只看該作者
呵呵,我最喜歡這種討論了。先來(lái)獻(xiàn)丑了,說(shuō)說(shuō)我的看法。
先把中斷處理流程給出來(lái)

  1. 1.進(jìn)入中斷處理程序--->2.保存關(guān)鍵上下文---->3.開(kāi)中斷(sti指令)--->4.進(jìn)入中斷處理程序的handler--->5.關(guān)中斷(cli指令)---->6.寫(xiě)EOI寄存器(表示中斷處理完成)---->7.開(kāi)中斷。
復(fù)制代碼

硬中斷:
對(duì)應(yīng)于上圖的1、2、3步驟,在這幾個(gè)步驟中,所有中斷是被屏蔽的,如果在這個(gè)時(shí)候睡眠了,操作系統(tǒng)不會(huì)收到任何中斷(包括時(shí)鐘中斷),系統(tǒng)就基本處于癱瘓狀態(tài)(例如調(diào)度器依賴的時(shí)鐘節(jié)拍沒(méi)有等等……)

軟中斷:
對(duì)應(yīng)上圖的4(當(dāng)然,準(zhǔn)確的說(shuō)應(yīng)該是4步驟的后面一點(diǎn),先把話說(shuō)保險(xiǎn)點(diǎn),免得思一克又開(kāi)始較真 )。這個(gè)時(shí)候不能睡眠的關(guān)鍵是因?yàn)樯舷挛摹?br /> 大家知道操作系統(tǒng)以進(jìn)程調(diào)度為單位,進(jìn)程的運(yùn)行在進(jìn)程的上下文中,以進(jìn)程描述符作為管理的數(shù)據(jù)結(jié)構(gòu)。進(jìn)程可以睡眠的原因是操作系統(tǒng)可以切換不同進(jìn)程的上下文,進(jìn)行調(diào)度操作,這些操作都以進(jìn)程描述符為支持。
中斷運(yùn)行在中斷上下文,沒(méi)有一個(gè)所謂的中斷描述符來(lái)描述它,它不是操作系統(tǒng)調(diào)度的單位。一旦在中斷上下文中睡眠,首先無(wú)法切換上下文(因?yàn)闆](méi)有中斷描述符,當(dāng)前上下文的狀態(tài)得不到保存),其次,沒(méi)有人來(lái)喚醒它,因?yàn)樗皇遣僮飨到y(tǒng)的調(diào)度單位。
此外,中斷的發(fā)生是非常非常頻繁的,在一個(gè)中斷睡眠期間,其它中斷發(fā)生并睡眠了,那很容易就造成中斷棧溢出導(dǎo)致系統(tǒng)崩潰。

如果上述條件滿足了(也就是有中斷描述符,并成為調(diào)度器的調(diào)度單位,棧也不溢出了,理論上是可以做到中斷睡眠的),中斷是可以睡眠的,但會(huì)引起很多問(wèn)題.例如,你在時(shí)鐘中斷中睡眠了,那操作系統(tǒng)的時(shí)鐘就亂了,調(diào)度器也了失去依據(jù);例如,你在一個(gè)IPI(處理器間中斷)中,其它CPU都在死循環(huán)等你答復(fù),你確睡眠了,那其它處理器也不工作了;例如,你在一個(gè)DMA中斷中睡眠了,上面的進(jìn)程還在同步的等待I/O的完成,性能就大大降低了……還可以舉出很多例子。所以,中斷是一種緊急事務(wù),需要操作系統(tǒng)立即處理,不是不能做到睡眠,是它沒(méi)有理由睡眠。

好了,羅嗦了一大堆,大家見(jiàn)仁見(jiàn)智,不要罵人就好。

評(píng)分

參與人數(shù) 1可用積分 +15 收起 理由
albcamus + 15 精品文章

查看全部評(píng)分

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2007-06-27 10:20 |只看該作者
zx_wing, scutan 謝謝

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2007-06-27 10:21 |只看該作者
那么LINUX有在中斷中睡眠的地方嗎

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2007-06-27 10:31 |只看該作者
原帖由 思一克 于 2007-6-27 10:21 發(fā)表于 6樓  
那么LINUX有在中斷中睡眠的地方嗎

據(jù)我所知沒(méi)有。但有沒(méi)有人在他自己寫(xiě)的驅(qū)動(dòng)程序的中斷處理handler中睡眠就不知道了

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2007-06-27 13:29 |只看該作者
任何os,不管是分時(shí)os,還是實(shí)時(shí)os,不管是微內(nèi)核,還是巨內(nèi)核,在ISR中都不能進(jìn)行進(jìn)程切換。因?yàn)镮SR不屬于任何進(jìn)程,而切換只能發(fā)生在進(jìn)程上下文中。雖然ISR在執(zhí)行過(guò)程中要使用進(jìn)程的系統(tǒng)堆棧,但那只是借用,堆棧并不屬于isr,而是屬于進(jìn)程。
也可以從優(yōu)先級(jí)角度來(lái)理解。任何進(jìn)程,不論其優(yōu)先級(jí)多高,也不能高過(guò)isr,所以不能剝奪isr對(duì)cpu的占有權(quán)去運(yùn)行進(jìn)程

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2007-06-27 13:58 |只看該作者
原帖由 gta 于 2007-6-27 13:29 發(fā)表于 8樓  
任何os,不管是分時(shí)os,還是實(shí)時(shí)os,不管是微內(nèi)核,還是巨內(nèi)核,在ISR中都不能進(jìn)行進(jìn)程切換。因?yàn)镮SR不屬于任何進(jìn)程,而切換只能發(fā)生在進(jìn)程上下文中。雖然ISR在執(zhí)行過(guò)程中要使用進(jìn)程的系統(tǒng)堆棧,但那只是借用, ...



呵呵,Solaris的低優(yōu)先級(jí)中斷是可以睡眠的,時(shí)鐘中斷也可以睡眠。盡管系統(tǒng)會(huì)盡量保證中斷線程不去睡眠。例如,磁盤(pán)驅(qū)動(dòng)的ISR里使用DRIVEDR mutex, 實(shí)際上系統(tǒng)把它當(dāng)作自適應(yīng)鎖,當(dāng)獲取鎖失敗時(shí),它先看其它處理器上有沒(méi)有鎖的擁有者在運(yùn)行,如果有,就SPIN,沒(méi)有就去睡眠,睡眠前,會(huì)把打斷的內(nèi)核線程恢復(fù)運(yùn)行,保存自己的上下文。

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2007-06-27 14:04 |只看該作者
原帖由 zx_wing 于 2007-6-27 10:09 發(fā)表于 4樓  
呵呵,我最喜歡這種討論了。先來(lái)獻(xiàn)丑了,說(shuō)說(shuō)我的看法。
先把中斷處理流程給出來(lái)

1.進(jìn)入中斷處理程序--->2.保存關(guān)鍵上下文---->3.開(kāi)中斷(sti指令)--->4.進(jìn)入中斷處理程序的handler--->5.關(guān)中 ...


寫(xiě)得很好。贊一個(gè)。

不過(guò)中斷睡眠與否只是設(shè)計(jì)上的問(wèn)題,不同的系統(tǒng)是不一樣的設(shè)計(jì)。

看看我自己機(jī)器上注冊(cè)的ISR, IPL是10以下的都可以睡眠,里面包括了顯卡,磁盤(pán),網(wǎng)卡的常見(jiàn)外設(shè)的中斷處理:

bash-3.00# mdb -k
Loading modules: [ unix genunix specfs dtrace uppc pcplusmp scsi_vhci ufs ip hook neti sctp arp usba uhci nca lofs zfs random audiosup sppp crypto ptm ipc ]
> ::interrupts
IRQ  Vect IPL Bus    Trg Type   CPU Share APIC/INT# ISR(s)
1    0x41 5   ISA    Edg Fixed  0   1     0x0/0x1   i8042_intr
6    0x44 5   ISA    Edg Fixed  0   1     0x0/0x6   fdc_intr
9    0x81 9   PCI    Lvl Fixed  0   1     0x0/0x9   acpi_wrapper_isr
12   0x42 5   ISA    Edg Fixed  0   1     0x0/0xc   i8042_intr
14   0x40 5   ISA    Edg Fixed  0   1     0x0/0xe   ata_intr
15   0x43 5   ISA    Edg Fixed  0   1     0x0/0xf   ata_intr
16   0x82 9   PCI    Lvl Fixed  0   1     0x0/0x10  nv_intr
21   0x20 1   PCI    Lvl Fixed  0   4     0x0/0x15  uhci_intr, uhci_intr, uhci_intr, ehci_intr
22   0x83 9   PCI    Lvl Fixed  0   1     0x0/0x16  audiovia823x_intr
23   0x60 6   PCI    Lvl Fixed  0   1     0x0/0x17  gem_gld_intr
208  0xd0 14         Edg IPI    all 1     -         kcpc_hw_overflow_intr
209  0xd1 14         Edg IPI    all 1     -         cbe_fire
224  0xe0 15         Edg IPI    all 1     -         apic_error_intr
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP