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

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

Chinaunix

  平臺(tái) 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 4135 | 回復(fù): 11
打印 上一主題 下一主題

[中斷] Linux下半部——誰先運(yùn)行 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2014-02-18 21:00 |只看該作者 |倒序?yàn)g覽
看博客有寫到:一個(gè)軟中斷不會(huì)去搶占另一個(gè)軟中斷。
      個(gè)人理解如下:《Linux內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)》中提到,如果軟中斷存在共享數(shù)據(jù),那么需要進(jìn)行加鎖保護(hù),因?yàn)橥愋偷能浿袛嗫梢酝瑫r(shí)在不同的CPU下運(yùn)行。所以,一個(gè)軟中斷不會(huì)去搶占另一個(gè)軟中斷,這句話的是在一個(gè)CPU上吧?
       以下內(nèi)容為個(gè)人猜想,不對(duì)的地方還請(qǐng)指正。假設(shè)硬件中斷頻繁發(fā)生,那么就會(huì)擠壓了多個(gè)下半部(tasklet)在等待處理,這些tasklet應(yīng)該是以隊(duì)列的形式存放起來的?臻e的CPU從隊(duì)列中取出一個(gè)tasklet進(jìn)行處理,所以所有CPU都在處理軟中斷。 假設(shè)在一個(gè)CPU上,正在運(yùn)行軟中斷A,此時(shí)來了一個(gè)中斷,該中斷處理也分為硬中斷B和軟中斷B,硬中斷B肯定可以搶占CPU運(yùn)行。  那么接下來,執(zhí)行軟中斷A還是軟中斷B呢?  是軟中斷A運(yùn)行完以后,立即運(yùn)行B,還是會(huì)放入隊(duì)列當(dāng)中。

論壇徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辭舊歲徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亞洲杯之卡塔爾
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08處女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技術(shù)圖書徽章
日期:2014-03-25 09:00:29
2 [報(bào)告]
發(fā)表于 2014-02-19 08:39 |只看該作者
“一個(gè)軟中斷不會(huì)去搶占另一個(gè)軟中斷,這句話的是在一個(gè)CPU上吧?”---對(duì)的
軟中斷運(yùn)行順序的問題,記得:首先軟中斷是分類型的,比如網(wǎng)絡(luò)、磁盤、定時(shí)器等,各類型有一定的優(yōu)先順序,其次同類的軟中斷,應(yīng)該是以隊(duì)列方式維護(hù)的,也就是FIFO。

論壇徽章:
7
丑牛
日期:2013-10-18 14:43:21技術(shù)圖書徽章
日期:2013-11-03 09:58:03辰龍
日期:2014-01-15 22:57:50午馬
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亞洲杯之伊朗
日期:2015-03-16 10:24:352015亞冠之城南
日期:2015-05-31 09:52:32
3 [報(bào)告]
發(fā)表于 2014-02-22 14:38 |只看該作者
本帖最后由 smalloc 于 2014-02-22 14:58 編輯

多處理器的同步只能依賴類似spinlock的機(jī)制.
2.6.13中采用test_and_set_bit保護(hù)每個(gè)用戶自注冊(cè)的tasklet在多處理器環(huán)境下自身序列化.非同一個(gè)定義的tasklet(以tasklet_init的執(zhí)行來區(qū)分)仍然可以在多處理器上同時(shí)運(yùn)行. 如果數(shù)據(jù)由同一個(gè)tasklet獨(dú)享,那么就無需多處理器間保護(hù).甚至,此版本中的tasklet_init是注冊(cè)在per cpu變量中的,那么如果保證同一個(gè)CPU上注冊(cè)的tasklet也是多處理器串行的,即使共享數(shù)據(jù)也無需要保護(hù).而類似網(wǎng)絡(luò)處理軟中斷,可以在多處理器上同時(shí)運(yùn)行自身.(如果不考慮處理的數(shù)據(jù)包,則2個(gè)運(yùn)行的實(shí)例完全相同).

論壇徽章:
7
丑牛
日期:2013-10-18 14:43:21技術(shù)圖書徽章
日期:2013-11-03 09:58:03辰龍
日期:2014-01-15 22:57:50午馬
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亞洲杯之伊朗
日期:2015-03-16 10:24:352015亞冠之城南
日期:2015-05-31 09:52:32
4 [報(bào)告]
發(fā)表于 2014-02-22 18:25 |只看該作者
回復(fù) 1# yandongxiao


    軟中斷被中斷,返回后會(huì)繼續(xù)執(zhí)行未完成的軟中斷. 硬中斷可能和被打斷的軟中斷使用同一個(gè)堆棧,硬中斷返回時(shí)數(shù)據(jù)彈出堆棧,繼續(xù)原先的軟中斷

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2014-02-28 06:20 |只看該作者
bump u up for 2 points

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2014-03-25 21:03 |只看該作者
yandongxiao 發(fā)表于 2014-02-18 21:00
那么接下來,執(zhí)行軟中斷A還是軟中斷B呢?  是軟中斷A運(yùn)行完以后,立即運(yùn)行B,還是會(huì)放入隊(duì)列當(dāng)中啊?


如果你這里的軟中斷時(shí)指softirq的話,那么:
查看了一下代碼,流程應(yīng)該是這樣:
1. 當(dāng)某CPU正在run softirq A,這時(shí)來了一個(gè)硬件中斷,硬件中斷打斷軟件中斷;
2. 硬件中斷在上半部raise了軟中斷B的pending標(biāo)志;
3. 硬件中斷運(yùn)行完畢,call  irq_exit :
  1. void irq_exit(void)
  2. {
  3.         account_system_vtime(current);
  4.         trace_hardirq_exit();
  5.         sub_preempt_count(IRQ_EXIT_OFFSET);
  6.         if (!in_interrupt() && local_softirq_pending())
  7.                 invoke_softirq();

  8.         rcu_irq_exit();
  9. #ifdef CONFIG_NO_HZ
  10.         /* Make sure that timer wheel updates are propagated */
  11.         if (idle_cpu(smp_processor_id()) && !in_interrupt() && !need_resched())
  12.                 tick_nohz_stop_sched_tick(0);
  13. #endif
  14.         preempt_enable_no_resched();
  15. }
復(fù)制代碼
4. 注意這里的代碼:
        if (!in_interrupt() && local_softirq_pending())
                invoke_softirq();
是說如果現(xiàn)在的環(huán)境本身就是在中斷中(軟中斷也是在中斷環(huán)境中),那么!in_interrupt()就會(huì)返回false,那么就不會(huì)運(yùn)行invoke_softirq()

5. 硬件中斷繼續(xù)返回到被打斷的地方(即先前的softirq A的處理中),kernel繼續(xù)運(yùn)行softirq A。
請(qǐng)注意在step 2中kernel已經(jīng)raise了softirq B的pending位,所以在函數(shù)__do_softirq中,會(huì)重新check到softirq B的bit,從而運(yùn)行softirq B的action
  1. restart:
  2.         /* Reset the pending bitmask before enabling irqs */
  3.         set_softirq_pending(0);

  4.         local_irq_enable();

  5.         h = softirq_vec;

  6.         do {
  7.                 if (pending & 1) {
  8.                         int prev_count = preempt_count();
  9.                         kstat_incr_softirqs_this_cpu(h - softirq_vec);

  10.                         trace_softirq_entry(h, softirq_vec);
  11.                         h->action(h);
  12.                         trace_softirq_exit(h, softirq_vec);
  13.                         if (unlikely(prev_count != preempt_count())) {
  14.                                 printk(KERN_ERR "huh, entered softirq %td %s %p"
  15.                                        "with preempt_count %08x,"
  16.                                        " exited with %08x?\n", h - softirq_vec,
  17.                                        softirq_to_name[h - softirq_vec],
  18.                                        h->action, prev_count, preempt_count());
  19.                                 preempt_count() = prev_count;
  20.                         }

  21.                         rcu_bh_qs(cpu);
  22.                 }
  23.                 h++;
  24.                 pending >>= 1;
  25.         } while (pending);

  26.         local_irq_disable();

  27.         pending = local_softirq_pending();
  28.         if (pending && --max_restart)
  29.                 goto restart;
復(fù)制代碼

論壇徽章:
3
雙魚座
日期:2013-09-04 19:47:39天蝎座
日期:2013-12-11 20:30:532015年亞洲杯之澳大利亞
日期:2015-04-20 00:28:02
7 [報(bào)告]
發(fā)表于 2014-03-25 22:47 |只看該作者
回復(fù) 6# studying_linux


    irq_enter()/irq_exit()是硬件中斷的入口和出口???

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2014-03-26 00:23 |只看該作者
kiongf 發(fā)表于 2014-03-25 22:47
回復(fù) 6# studying_linux


剛又看了一下代碼,好像沒看錯(cuò)。。。
如果錯(cuò)了請(qǐng)指正~

論壇徽章:
3
雙魚座
日期:2013-09-04 19:47:39天蝎座
日期:2013-12-11 20:30:532015年亞洲杯之澳大利亞
日期:2015-04-20 00:28:02
9 [報(bào)告]
發(fā)表于 2014-03-26 18:15 |只看該作者
回復(fù) 8# studying_linux


    中斷不大懂.因?yàn)檫@個(gè)函數(shù)的調(diào)用者是architecture-dependent, 所以想先確認(rèn)下.

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2014-03-26 19:33 |只看該作者
kiongf 發(fā)表于 2014-03-26 18:15
回復(fù) 8# studying_linux

{:2_178:}
您需要登錄后才可以回帖 登錄 | 注冊(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ū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP