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

Chinaunix

標題: (linux2.6內(nèi)核)中斷程序中不能進行調(diào)度疑惑 [打印本頁]

作者: mxgsgtc    時間: 2015-07-02 22:16
標題: (linux2.6內(nèi)核)中斷程序中不能進行調(diào)度疑惑
網(wǎng)上有好多這方面的解答,都沒咋看懂,發(fā)帖子請教各位大神
前提:
2.6內(nèi)核中,有個中斷棧的概念,一個cpu有兩個中斷棧,也就是說假設進程A發(fā)生中斷,中斷程序就會在指定的中斷棧中運行,A與此中斷的棧是獨立分開的
問題(我理解的步驟):
1.A發(fā)生中斷,current指向當前進程A
2.中斷函數(shù)執(zhí)行,此時在新的棧中執(zhí)行, current此時指向A
3.任務調(diào)度,此時cpu保存硬件上下文(也就是當前中斷上下文)至current指向的thread_info中,即A中,然后執(zhí)行schule()函數(shù)切換到別的任務,
4.切換回任務A中
請教大家這樣的話就算是有獨立的中斷棧,在中斷中進行調(diào)度任務的話,當前硬件的ss,eip會自動被保存到current所指向的進程中,那么下回不也能在切換回來繼續(xù)執(zhí)行嗎?
作者: karma303    時間: 2015-07-17 20:49
本帖最后由 karma303 于 2015-07-17 20:50 編輯

  Hi,中斷處理程序中不能調(diào)用schedule,這是早期unix設計時的一個簡化。
  中斷例程可以“軟性”的做schedule,像這樣:
  current->need_sched = 1
  這樣,當中斷例程結(jié)束,返回用戶空間前夕,內(nèi)核會檢測一下need_sched字段,做schedule的。(這時候中斷處理流程已經(jīng)結(jié)束了)。

  上面一段話,是我對你題目的理解。你是想說這吧?
  帖子的最后一段話沒有看懂,沒法回復。  state it another way.
作者: nswcfd    時間: 2015-07-20 18:23
猜測樓主是想問,為什么不能在中斷上下文調(diào)度?
或者是,~假如~在中斷上下文發(fā)生了調(diào)度,由于irq stack的esp被保存了,信息是完整的,是否就可以被調(diào)度回來?

這肯定是不行的,因為irq stack是per cpu的,不是per process的,新調(diào)度的進程B如果發(fā)生了中斷,將覆蓋進程A的irq stack。
PS,無irq-stack的場景呢?
作者: mxgsgtc    時間: 2015-08-05 14:02
nswcfd 發(fā)表于 2015-07-20 18:23
猜測樓主是想問,為什么不能在中斷上下文調(diào)度?
或者是,~假如~在中斷上下文發(fā)生了調(diào)度,由于irq stack的e ...

謝謝回復 ,恍然大悟,如果B進程發(fā)生 ①中斷用了irq_stack,②之后進行調(diào)度,③之后運行進程A,④進程A又發(fā)生中斷用了irq_stack(覆蓋了進程B的irq_stack), ⑤這樣進程B的環(huán)境遭到了破壞,⑥.這時假設進程B又被切換回來運行,會繼續(xù)運行之前irq_stack所在的位置,但irq_stack所保存的如何回去B進程的信息不復存在. 我理解的對嗎?

-------------------------------------------------------------------------------------------------------------------------------------------
之前我不理解網(wǎng)上說 :若進程A運行,產(chǎn)生中斷后,在中斷中進行調(diào)度的話,是沒法再切換回A中繼續(xù)運行. 我認為可以,因為不管是進程棧還是中斷棧, 在任務調(diào)度的時候,都會把當前cpu的上下文存起來的
比如進程A---->發(fā)生中斷---->中斷中睡眠( 會把當前寄存器的值 ss sp eip..存入全局變量current中 ,雖然存入的ss,sp 是屬于獨立中斷棧,但會存到進程A的current中),所以之后理論上是可以再切換回來的  

作者: mxgsgtc    時間: 2015-08-05 14:07
karma303 發(fā)表于 2015-07-17 20:49
Hi,中斷處理程序中不能調(diào)用schedule,這是早期unix設計時的一個簡化。
  中斷例程可以“軟性”的做sche ...

謝謝回復 ,我的意思是想說進程發(fā)生中斷,在中斷中進行睡眠或調(diào)度(schedule),那么此進程還是會被調(diào)度回來的,因為假設A進程在運行,current指向的是A,A發(fā)生中斷,若在中斷中睡眠(此時current指向的還是A), 睡眠前會把此時cpu的上下文存入current中(即A中)(雖然此時的上下文輸入per cpu)
作者: mxgsgtc    時間: 2015-08-05 14:08
發(fā)現(xiàn)自己的想象力不夠啊'(




歡迎光臨 Chinaunix (http://72891.cn/) Powered by Discuz! X3.2