---- 整理自狄泰軟件唐佐林老師課程
查看所有文章鏈接:(更新中)Linux系統(tǒng)編程訓(xùn)練營 - 目錄
1. 信號優(yōu)先級
1.1 問題
- 對于 同一個(gè)進(jìn)程,如果存在 兩個(gè)不同的未決 實(shí)時(shí)信號(可靠信號),那么先處理誰?
1.2 信號優(yōu)先級的概念
- 信號的本質(zhì)是一種 軟中斷(中斷有優(yōu)先級,信號也有優(yōu)先級)
- 對于 未決實(shí)時(shí)信號:
- 對于同一個(gè)未決實(shí)時(shí)信號,按照發(fā)送先后順序遞送給進(jìn)程
- 對于不同的未決實(shí)時(shí)信號,信號值越小優(yōu)先級越高(優(yōu)先遞達(dá)目標(biāo)進(jìn)程)
-
不可靠信號與可靠信號同時(shí)未決:
- 嚴(yán)格意義上,沒有明確規(guī)定優(yōu)先級
- 實(shí)際上,Linux優(yōu)先遞送不可靠信號
-
多個(gè)不可靠信號同時(shí)未決,優(yōu)先遞送誰?
- 優(yōu)先遞送 硬件相關(guān)信號:SIGSEGV、SIGBUS、SIGILL、SIGTRAP、SIGFPE、SIGSYS
- 優(yōu)先遞送 信號值小的不可靠信號
1.3 信號優(yōu)先級實(shí)驗(yàn)設(shè)計(jì)
- 目標(biāo):驗(yàn)證信號的優(yōu)先級
- 場景:不可靠VS不可靠;不可靠VS可靠;可靠VS可靠
- 方案:對目標(biāo)進(jìn)程發(fā)送N次“無”序信號,驗(yàn)證信號遞達(dá)進(jìn)程的先后順序
- 預(yù)備函數(shù):
int sigaddset(sigset_t* set, int signum);
int sigfillset(sigset_t* set);
int sigemptyset(sigset_t* set);
int sigprocmask(int how, const sigset_t set, sigset_toldset);
- 需要思考的問題:
- 如何使得多個(gè)信號同時(shí)未決,且以優(yōu)先級方式遞達(dá)進(jìn)程?
- 如何記錄和對比信號的遞達(dá)次序及發(fā)送次序?
- 對于實(shí)驗(yàn)中涉及的不可靠信號,是否特殊考慮?
- ……
1.3.1 發(fā)送端
1.3.2 接收端
1.3.3 編程實(shí)驗(yàn):信號優(yōu)先級實(shí)驗(yàn)
【參看鏈接】:14 - 信號優(yōu)先級與安全性 / 00可靠信號優(yōu)先級實(shí)驗(yàn)
【參看鏈接】:14 - 信號優(yōu)先級與安全性 / 01所有信號優(yōu)先級實(shí)驗(yàn)
2. 信號安全性
2.1 再論信號處理
2.2 信號安全性概念
- 什么是安全性?
- 程序能夠正確且無意外的按照預(yù)期方式執(zhí)行
- 信號處理的不確定性
- 什么時(shí)候信號遞達(dá)是不確定的 ==> 主程序被中斷的位置是不確定的
- 當(dāng)信號遞達(dá),轉(zhuǎn)而執(zhí)行信號處理函數(shù)時(shí),不可重入的函數(shù)不能調(diào)用
- 不可重入函數(shù):函數(shù)不能由超過一個(gè)任務(wù)(線程 )所共享,除非能確保函數(shù)的互斥(或者使用信號量,或者在代碼的關(guān)鍵部分禁用中斷)
2.3 編程實(shí)驗(yàn):信號安全性問題
- 下面的程序輸出什么?為什么?
【參看鏈接】:14 - 信號優(yōu)先級與安全性 / 02信號安全性實(shí)驗(yàn)/sigex.c
2.4 深入信號安全性
- 不要在信號處理函數(shù)中調(diào)用不可重入函數(shù)(如:使用了全局變量的函數(shù))
- 不要調(diào)用函數(shù)中存在臨界區(qū)的函數(shù)(可能產(chǎn)生競爭導(dǎo)致死鎖)
文章來源:http://www.zghlxwxcb.cn/news/detail-536507.html
- 不要調(diào)用malloc()和free()函數(shù)
- 不要調(diào)用標(biāo)準(zhǔn)I/O函數(shù),如:printf()函數(shù)(此前的實(shí)驗(yàn)中使用printf是不安全的)
- ……
2.5 問題
- 如何知道哪些函數(shù)是安全的?
-
man 7 signal-safety
文章來源地址http://www.zghlxwxcb.cn/news/detail-536507.html
2.6 思考
- 如何編寫信號安全的應(yīng)用程序?
到了這里,關(guān)于14 - 信號優(yōu)先級與安全性的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!