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

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2141 | 回復(fù): 5
打印 上一主題 下一主題

[內(nèi)核入門] 關(guān)于signal [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2013-04-17 16:42 |只看該作者 |倒序瀏覽
signal是在由內(nèi)核態(tài)返回用戶態(tài)的時候檢測的,如果用戶態(tài)的進程有signal需要處理,那么先切換到用戶態(tài)執(zhí)行該signal的handler,執(zhí)行完以后,再切換回
內(nèi)核態(tài),之后再完成內(nèi)核態(tài)到用戶態(tài)的切換

我的問題是:
1)假如該進程有多個signal需要處理,是一次性處理完,還是每次僅僅處理一個?
    我看代碼,感覺是一次僅僅處理一個?
2)大家知道,在由內(nèi)核態(tài)返回用戶態(tài)的時候,是可能會重新調(diào)度的,那么signal的處理在前還是重新schedule在前呢?  
    我感覺是先schedule,然后輪到該進程執(zhí)行的時候,再處理屬于該進程的signal,因為信號是異步的,linux無法保證其實時性。

請指教!謝謝

論壇徽章:
10
戌狗
日期:2013-10-17 09:43:0215-16賽季CBA聯(lián)賽之廣東
日期:2018-02-05 11:22:1215-16賽季CBA聯(lián)賽之八一
日期:2016-07-04 12:26:1815-16賽季CBA聯(lián)賽之青島
日期:2016-06-08 11:15:4115-16賽季CBA聯(lián)賽之遼寧
日期:2016-04-05 10:10:1415-16賽季CBA聯(lián)賽之遼寧
日期:2016-03-11 11:11:48酉雞
日期:2014-12-18 14:35:48獅子座
日期:2014-02-20 10:14:07寅虎
日期:2013-12-02 13:48:2915-16賽季CBA聯(lián)賽之廣夏
日期:2018-03-21 08:51:10
2 [報告]
發(fā)表于 2013-04-18 14:26 |只看該作者
本帖最后由 daniel_11 于 2013-04-18 14:27 編輯

嘗試回答下:
1)是的
2)貼個arm的

  1. work_pending:
  2.         tst     r1, #_TIF_NEED_RESCHED
  3.         bne     work_resched               ====>schedule
  4.         tst     r1, #_TIF_SIGPENDING|_TIF_NOTIFY_RESUME
  5.         beq     no_work_pending
  6.         mov     r0, sp                          @ 'regs'
  7.         mov     r2, why                         @ 'syscall'
  8.         bl      do_notify_resume              ====>signal check
  9.         b       ret_slow_syscall                @ Check work again

  10. work_resched:
  11.         bl      schedule
復(fù)制代碼

論壇徽章:
0
3 [報告]
發(fā)表于 2013-04-18 17:25 |只看該作者
謝謝樓上。
1)get_signal_to_deliver->dequeue_signal中有相關(guān)的處理,挑選出需要處理的一個信號,挑選規(guī)則我沒有深究。
2)明了。調(diào)度優(yōu)先

論壇徽章:
6
金牛座
日期:2013-10-08 10:19:10技術(shù)圖書徽章
日期:2013-10-14 16:24:09CU十二周年紀(jì)念徽章
日期:2013-10-24 15:41:34獅子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亞洲杯之阿聯(lián)酋
日期:2015-05-09 14:36:15
4 [報告]
發(fā)表于 2013-04-18 19:46 |只看該作者
回復(fù) 2# daniel_11
多謝分享

   

論壇徽章:
0
5 [報告]
發(fā)表于 2013-04-20 21:48 |只看該作者
本帖最后由 Morphad 于 2013-04-20 21:51 編輯
1)假如該進程有多個signal需要處理,是一次性處理完,還是每次僅僅處理一個?
    我看代碼,感覺是一次僅僅處理一個?

在不重新調(diào)度的情況下,會把信號處理完:
resume_userspace->work_notifysig->do_notify_resume->do_signal(當(dāng)有信號pending時)-> get_signal_to_deliver->dequeue_signal->recalc_sigpendin-> recalc_sigpending_tsk
當(dāng)還有信號pending時recalc_sigpending_tsk會將TIF_SIGPENDING置位,重新再次走到resume_userspace;
循環(huán)直到pending singal處理完成

2)大家知道,在由內(nèi)核態(tài)返回用戶態(tài)的時候,是可能會重新調(diào)度的,那么signal的處理在前還是重新schedule在前呢?  
    我感覺是先schedule,然后輪到該進程執(zhí)行的時候,再處理屬于該進程的signal,因為信號是異步的,linux無法保證其實時性

  1. ENTRY(resume_userspace)
  2.         LOCKDEP_SYS_EXIT
  3.         DISABLE_INTERRUPTS(CLBR_ANY)        # make sure we don't miss an interrupt
  4.                                         # setting need_resched or sigpending
  5.                                         # between sampling and the iret
  6.         TRACE_IRQS_OFF
  7.         movl TI_flags(%ebp), %ecx
  8.         andl $_TIF_WORK_MASK, %ecx        # is there any work to be done on
  9.                                         # int/exception return?
  10.         jne work_pending
  11.         jmp restore_all
  12. END(ret_from_exception)

  13. work_pending:
  14.         testb $_TIF_NEED_RESCHED, %cl
  15.         jz work_notifysig
  16. work_resched:
  17.         call schedule
復(fù)制代碼
call schedule可以看出需要調(diào)度時,會先調(diào)度的

論壇徽章:
0
6 [報告]
發(fā)表于 2013-04-23 14:31 |只看該作者
回復(fù) 5# Morphad
多謝對問題1)的更正。看樓主應(yīng)該是x86的平臺。

總結(jié):
a.信號的檢測處理是在返回內(nèi)核態(tài)之前執(zhí)行的,檢測的標(biāo)志就是_TIF_SIGPENDING
b.如果發(fā)生重新調(diào)度,即_TIF_NEED_RESCHED置位,則本次先調(diào)度,等下次再檢測是否有機會處理信號

c.
  1>如果不發(fā)生重新調(diào)度的情況,即_TIF_NEED_RESCHED沒有置位,則挑選一個合適的信號,并處理該信號,
2>檢測是否還有信號需要處理,有的話,設(shè)置_TIF_SIGPENDING
  3>循環(huán)1-3步驟,直到所有信號處理完,即_TIF_SIGPENDING被clear. 當(dāng)然,若再次檢測_TIF_NEED_RESCHED,要重新調(diào)度,就調(diào)度去了,剩余的信號等到下次再處理。

謝謝大家
您需要登錄后才可以回帖 登錄 | 注冊

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP