精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

OS內核的信號機制:所有的異步都可以是同步的

系統 其他OS
每個進程,在OS內核里都被一個task結構體表示,這個結構體的其中一個成員變量就是記錄信號的:我們給他起名叫sigmap,Linux的不一定要叫這個名字,但肯定有這一項。

今天條友@xiamenuser給我提了一個關于操作系統的問題:怎么把定時器線程里的回調函數,(在定時器觸發之后)挪到工作線程里運行?

這個需求要做的事,跟Linux內核的信號機制是一樣的。

OS內核的信號機制,在1970年的Unix時代就有了,是一個上古話題。

在unix里,可以使用kill -9 pid命令殺掉進程(pid為進程號),在Linux里也可以。

1.OS內核的信號

有個專有的宏定義#define SIGKILL 9,然后信號9就成了一個特別牛的信號,大概除了0號idle進程和1號init進程之外,其他進程都可以殺死。

0號進程和1號進程是不能殺死的,否則系統就崩潰了!

int sys_kill(int sig, int pid)
{
if (sig < 0 || pid < 0)
return -EINVAL;
if (0 == pid || 1 == pid) {
if (SIGKILL == sig) return -1;
}
tasks[pid]->sigmap |= 1 << sig;
return 0;
}

OS內核里對應著kill命令的sys_kill()系統調用,大概是上面這樣:

在進程的task結構體的sigmap成員變量上,設置1個標志位,進程就可以收到信號了。

每個進程,在OS內核里都被一個task結構體表示,這個結構體的其中一個成員變量就是記錄信號的:我們給他起名叫sigmap,Linux的不一定要叫這個名字,但肯定有這一項。

這個信號在什么時候處理呢?

等到收信號的進程下一次被調度運行的時候。

當前運行的進程,肯定是發信號的進程,否則它沒法主動發起kill()系統調用。

發信號的進程做的事,只是把信號設置到接收進程的信號圖上,這時信號實際上已經發到了:但是接收進程并不會馬上因為SIGKILL信號而被殺死。

SIGKILL信號的殺進程,實際上進程是自殺的!

當收到信號的進程再次被調度運行的時候,操作系統會讓它先執行信號的處理函數,而SIGKILL的處理函數,就是exit()系統調用:進程退出。

這個過程可以是異步的,等到接收進程下一次被調度時再處理,至于什么時候輪到它:等吧。

也可以讓它馬上同步處理,只需要在sys_kill()函數的末尾加一行代碼就行:

shedule_task( tasks[pid] );

直接選擇接收進程是下一個要調度的進程,并且馬上調度它運行:接下來它就完事了。

不需要等OS內核統計時間片,確定調度的優先級了,既然用戶想讓它掛掉,OS當然要馬上讓它掛掉。

畢竟Linux系統也惹不起用戶啊,用戶是可以重裝windows的?

接下來,說說shedule_task()之后的細節。

2.信號是怎么處理的

每個信號都有一個處理函數,叫信號處理函數。

信號處理函數,是在用戶態的代碼里運行的。

所以,程序員可以自己給部分信號編寫處理函數,用signal()系統調用注冊到OS內核,就可以(在收到信號時)運行這個自己編寫的函數了。

如果信號處理函數是在內核狀態運行的,那顯然用戶編寫的函數是沒法運行的,因為用戶函數的內存地址在用戶空間(它在進程的代碼段里)。

OS內核在信號處理時要做的是,把進程從內核返回后要運行的代碼地址,改成信號處理函數的地址。

修改過程如下:

系統內核的信號處理過程

1)進程從內核返回時的狀態,如上圖。

內核棧上的寄存器排布順序不一定是對的,這要查intel的手冊,但是這些項肯定都有。

在進程使用iret指令(中斷返回)從內核返回的那一刻,內核棧上的這些數據都要彈出到對應的寄存器。

然后,進程就會運行EIP指向的用戶代碼,同時用戶態的棧頂就是ESP。

EIP和ESP指向的內容到底是什么,內核不需要管:這是由程序員寫代碼時確定的。

進程從內核返回之后的錯誤,錯的是程序員,不是系統內核。

但要是返不回來,或者不能處理信號,錯的就是系統內核了。

2)OS內核要做的是,修改內核棧上、保存的、用戶態的、EIP和ESP(注意這3個定語):

A,讓EIP指向信號處理函數,

B,讓ESP指向信號處理函數的參數,

C,在信號處理函數的下方,放上“真正的”返回地址,

D,在信號處理函數運行完之后,丟掉(信號處理函數的)參數,彈出真正的返回地址:讓程序恢復正常的狀態,繼續運行。

如上圖中的綠字部分。

如果一次要處理多個信號的話,就順著用戶棧繼續疊加就行。

siska內核demo里的信號處理代碼,如下的3張圖:

因為信號處理函數有參數,而參數要壓在用戶態的棧上,所以信號處理函數運行完之后還要清理它。

所以,與一般的C函數不同,信號處理函數是被調函數清理堆棧的:即它是pascal調用,而不是C調用!

C調用,都是主調函數清理堆棧的。

所以,信號處理函數的總入口是一段匯編代碼,用來在C語言里完成這個pascal調用。

這么看來,pascal這種老語言,也不是想象的那么差?

這個信號處理方式,是我給出來的解決方案?

至于Linux是不是也這么做的,我就不知道了。

但是,這么做是可行的。

siska信號處理,pascal調用的匯編

上圖95行的call *(%eax),就是調用信號處理的函數指針。

它前后的匯編代碼,都是準備參數和清理堆棧。

3.回到開頭的問題

怎么讓定時器線程在觸發之后,讓回調函數在工作線程里運行?

回調函數一般有一個參數,表示回調上下文,但沒有返回值。

因為定時器的添加和處理在2個線程里,回調函數的返回值沒有意義。

如果回調函數的處理出錯了,就在上下文里設置錯誤碼作為提示。

所以,它的函數聲明是這樣的:void callback(void* ctx);

要讓它正常運行,必須把回調上下文的指針添加到工作線程的用戶棧上,同時讓工作線程的內核棧上保存的EIP指向回調函數。

這個處理方式,與OS內核的信號處理方式是一樣的。

信號處理函數的聲明:void sighandler(int sig); 也是一個參數、無返回值。

在定時器觸發之后,定時器線程可以發起一個系統調用,把這些信息給到內核,然后內核修改工作線程的數據,讓定時器的回調處理“像個信號”一樣就可以了?

這個系統調用如果Linux沒有提供的話,就只能自己修改Linux內核代碼,或者給Linus大牛提個需求了(他有可能看不過來你的郵件)。

PS:

工作線程和定時器線程在同一個進程里,所以它們的用戶態內存的代碼段、數據段、堆都是共享的,只是內核棧和用戶棧不一樣。

內核棧:在內核看來,每個線程也是一個可調度的進程,它必須有自己的內核棧和頁表。

同一個進程的不同線程之間共享內存,靠的是頁表的映射:把它們映射到同一個物理內存頁上。

用戶棧:不同的線程可以并發運行,它們的用戶棧肯定是不同的,否則局部變量就互相覆蓋了:這肯定是不可能的。

siska里信號處理的代碼,如下:

siska信號處理,1

siska信號處理,2

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2023-04-03 09:44:18

2025-02-03 07:00:00

2011-07-05 18:40:19

QT 信號 機制

2011-07-05 18:32:52

QT 信號 機制

2024-07-16 10:52:09

2009-07-21 09:31:00

Scala操作符

2025-04-29 06:53:36

2021-12-10 00:01:53

Vsync信號機制

2017-05-15 11:39:36

2018-02-25 09:00:00

LinuxQ4OS開源

2011-10-11 16:57:13

windows8TechEd 2011

2022-03-31 08:15:59

遞歸代碼非遞歸

2009-11-12 09:51:11

Visual C++項

2014-09-24 13:04:13

微信企業號

2022-03-11 11:40:26

AI數據技術

2023-03-20 18:34:02

營銷大促質量保障穩定性

2022-03-07 10:27:03

Linux開源社區

2011-06-17 14:36:50

Linux

2013-04-08 12:41:35

JavaScriptJS

2017-09-14 09:40:32

PythonUbuntu信號機制
點贊
收藏

51CTO技術棧公眾號

少妇人妻好深好紧精品无码| 中文字幕av日韩精品| 青青草国产精品视频| 日本黄色不卡视频| 视频一区欧美日韩| 在线观看日韩视频| 美女流白浆视频| 电影一区二区三| 国产成人午夜99999| 久久久综合av| 又色又爽的视频| 亚洲精品福利| 在线国产电影不卡| 国产精品视频网站在线观看| 日韩有码电影| 狠狠久久亚洲欧美| 欧美一级在线亚洲天堂| 国产suv精品一区二区68| 老司机成人在线| 亚洲一线二线三线视频| 免费日韩av电影| 99热这里只有精品1| 亚洲欧美日韩国产综合精品二区 | 亚洲深深色噜噜狠狠爱网站| 91国产成人在线| 男人添女人下部视频免费| 精品推荐蜜桃传媒| av电影一区二区| 91日本视频在线| 蜜臀尤物一区二区三区直播| 国产精品地址| www.亚洲男人天堂| 在线观看日本中文字幕| 岛国精品一区| 欧美一二三在线| www.激情网| 亚洲欧美高清视频| 韩国女主播成人在线| 国产精品白嫩初高中害羞小美女 | 国产原创欧美精品| 午夜影院免费在线观看 | 99热成人精品热久久66| 欧美亚洲系列| 亚洲猫色日本管| 性欧美18一19内谢| 99免费在线视频| 麻豆成人在线观看| 国产精品伦子伦免费视频| 亚洲AV无码成人精品区东京热| 黄色亚洲在线| 久久久久久久久久久免费精品 | 久久久久久久久国产一区| 在线视频欧美日韩| 在线免费看视频| 欧美好骚综合网| 日韩在线观看免费高清| 成人免费视频入口| 欧美天天综合| 中文字幕日韩精品在线| 色欲AV无码精品一区二区久久| 日韩成人午夜| 亚洲视频欧美视频| 日韩免费成人av| 成人影院在线| 精品国产一区av| 欧美日韩午夜视频| 欧美成人亚洲| 日韩黄色av网站| 极品粉嫩小仙女高潮喷水久久| 精品网站aaa| 亚洲精品久久久久中文字幕欢迎你| 久久无码专区国产精品s| 91午夜精品| 亚洲国产精品va在线看黑人动漫| 国产精品无码专区| 免费视频一区三区| 色悠悠久久久久| 婷婷在线精品视频| 亚洲国产高清一区二区三区| 亚洲**2019国产| 无码人妻精品一区二区50| 日韩精品亚洲专区| 91中文字幕在线| 少妇高潮av久久久久久| 日韩精品五月天| 成人网中文字幕| 韩国av免费在线观看| 99久久99久久精品免费观看 | 999久久久国产精品| 欧美成人精品不卡视频在线观看| 国产无精乱码一区二区三区| 久久中文欧美| 亚洲自拍在线观看| 三级理论午夜在线观看| 国产欧美中文在线| www国产无套内射com| 国产伦理精品| 欧美日高清视频| 国产高潮失禁喷水爽到抽搐| 国产一区二区电影在线观看| 亚洲第一网站男人都懂| 黄色正能量网站| 国产大片一区| 欧美亚洲成人网| 国产日韩欧美一区二区东京热| 成人午夜电影小说| 亚洲精品8mav| 高清毛片在线看| 樱花草国产18久久久久| 日韩黄色片视频| 日本成人精品| 日韩欧美不卡在线观看视频| 久久精品视频在线观看免费| 国产 日韩 欧美 综合 一区| 中文字幕欧美国内| 国产精品第9页| 国产一区欧美二区| 91在线中文字幕| 理论视频在线| 亚洲大片精品永久免费| 国产免费一区二区视频| 激情小说亚洲| 亚洲精品视频播放| 九九视频免费在线观看| 欧美bbbbb| 午夜精品久久久久久99热| 中文字幕在线观看视频一区| 99久久婷婷国产精品综合| 一本久道久久综合| 91看片一区| 国产视频自拍一区| 日产精品久久久久| 国产馆精品极品| 中国一级黄色录像| 久久亚洲精品中文字幕| 亚洲偷熟乱区亚洲香蕉av| 日韩精品一区二区在线播放| 极品少妇一区二区三区精品视频 | 亚洲成av人片一区二区三区| 中文字幕国产高清| 99热精品久久| 91在线|亚洲| 久操视频在线观看| 欧美精选一区二区| 少妇欧美激情一区二区三区| 免费一级欧美片在线观看网站| 尤物精品国产第一福利三区 | 宅男噜噜噜66国产日韩在线观看| 亚洲综合色激情五月| 九七久久人人| 欧美精品色综合| 四虎地址8848| 开心九九激情九九欧美日韩精美视频电影| 欧美一区视久久| 日本精品在线一区| 国产亚洲美女精品久久久| 成人av网站在线播放| 久久久久久久久久久久久久久99| 2022亚洲天堂| 日韩电影精品| 日韩在线视频中文字幕| 亚洲综合免费视频| 成人免费在线播放视频| 三级黄色片免费观看| 欧美+日本+国产+在线a∨观看| 亚洲自拍偷拍在线| 成人影音在线| 亚洲男人天堂古典| 中文字幕无码乱码人妻日韩精品| 国产精品毛片大码女人| 久久综合在线观看| 国产精品扒开腿做爽爽爽软件| 国产伦精品一区二区三毛| 超级白嫩亚洲国产第一| 亚洲美女av电影| 中文字幕在线播放日韩| 亚洲欧美一区二区不卡| 成人午夜精品无码区| 免费欧美在线| 在线精品亚洲一区二区| 66精品视频在线观看| 7777免费精品视频| jizz在线免费观看| 欧美成人欧美edvon| 免费观看成人毛片| 国产高清无密码一区二区三区| 日韩精品综合在线| 久久99精品久久久久久园产越南| 国产精自产拍久久久久久| 午夜在线视频免费| 在线观看av一区| 久久久久久久久久网站| 91视视频在线观看入口直接观看www| 成年人网站大全| 91精品观看| 女同一区二区| 精品视频成人| 日韩美女免费线视频| 黄页视频在线播放| 亚洲精品天天看| 国产绿帽一区二区三区| 欧美日韩免费在线| 亚洲精品一区二区三区在线播放| www.久久精品| 天堂中文av在线| 午夜在线精品偷拍| 日本天堂免费a| 欧美日韩中文字幕一区二区三区| 痴汉一区二区三区| 日韩av懂色| 欧美专区在线观看| 女囚岛在线观看| 中文字幕日韩欧美在线| 色视频在线观看免费| 日韩视频免费直播| 亚洲一级视频在线观看| 日韩欧美高清视频| 波多野结衣影院| 久久精品72免费观看| 国产日韩一区二区在线观看| 欧美精品麻豆| 自拍偷拍亚洲色图欧美| 精品国产日韩欧美| 精品在线一区| 91成人精品在线| 亚洲aⅴ男人的天堂在线观看| 欧美片第1页| 97视频免费观看| 乱插在线www| 欧美另类极品videosbestfree| www.亚洲.com| 国产亚洲欧美日韩一区二区| 欧美在线 | 亚洲| 日韩精品专区在线| 99热这里是精品| 91麻豆精品国产无毒不卡在线观看| 亚洲国产精品无码久久久| 大伊人狠狠躁夜夜躁av一区| 国产真实的和子乱拍在线观看| 亚洲男人的天堂在线观看| 美女三级黄色片| 国产精品激情偷乱一区二区∴| 亚洲精品色午夜无码专区日韩| 26uuu另类欧美| 国产精品无码午夜福利| 91免费精品国自产拍在线不卡| 亚洲av成人片无码| zzijzzij亚洲日本少妇熟睡| 在线观看一区二区三区四区| 懂色一区二区三区免费观看| 潘金莲一级淫片aaaaa| 国产成人在线免费| 欧美做受高潮中文字幕| 成人教育av在线| 一级欧美一级日韩片| 99视频在线精品| 双性尿奴穿贞c带憋尿| 久久久久久麻豆| 少妇大叫太粗太大爽一区二区| 91捆绑美女网站| 久久久久久亚洲中文字幕无码| 久久九九99视频| 超碰人人人人人人人| 最近中文字幕一区二区三区| 人妻人人澡人人添人人爽| 一区二区三区四区视频精品免费 | 黄色av电影在线播放| 不卡av在线网站| 香蕉久久一区二区三区| 日韩成人久久久| 成年人在线免费观看| 精品国产依人香蕉在线精品| 国精产品一区| 久久全球大尺度高清视频| 伊人久久视频| 国产精品偷伦免费视频观看的| 24小时成人在线视频| 成人在线观看网址| 日韩在线观看免费全集电视剧网站| 久久综合久久网| 国产精品va| 日韩av高清在线看片| 亚洲欧美日韩视频二区| 91高清国产视频| 丁香婷婷综合激情五月色| 亚洲av成人片色在线观看高潮| 国产片一区二区三区| 亚洲色图100p| 亚洲一区二区av电影| 国产精品suv一区| 777午夜精品视频在线播放| 免费激情视频网站| 亚洲人成网站免费播放| 中文字幕在线播放网址| 精品国产一区二区三区忘忧草 | 希岛爱理中文字幕| 亚洲高清三级视频| 成人黄色免费网| 欧美丝袜一区二区| 一级α片免费看刺激高潮视频| 欧美电影精品一区二区| 浮生影视网在线观看免费| 欧美另类极品videosbestfree| jizz内谢中国亚洲jizz| 亚洲精品欧美一区二区三区| 亚洲人成亚洲精品| 亚洲自拍偷拍一区二区三区| 国产精品免费看| 久久精品国产露脸对白| www国产精品av| 国产大学生自拍| 欧美在线你懂得| 好吊色在线观看| 日韩在线播放视频| 久久久久久久| 国产精品免费视频一区二区| 日韩一区电影| 久章草在线视频| 成人动漫一区二区在线| 亚洲综合视频网站| 在线观看亚洲精品视频| 日韩一级片免费在线观看| 久久精品电影一区二区| 欧美性理论片在线观看片免费| 国产一区二区高清视频| 重囗味另类老妇506070| 三级a三级三级三级a十八发禁止| 97精品久久久午夜一区二区三区| 日本中文在线视频| 欧美午夜在线一二页| 欧美精品a∨在线观看不卡 | 亚洲精品aⅴ中文字幕乱码| 丝袜在线观看| 91久久国产精品| 日韩久久综合| 我看黄色一级片| 国产农村妇女毛片精品久久麻豆| 亚洲精品国产精品乱码| 精品国产91亚洲一区二区三区婷婷| 精品国产白色丝袜高跟鞋| 国产精品亚发布| 成人情趣视频网站| 天天爱天天操天天干| 国产视频不卡一区| 日本黄色一级视频| 亚洲欧美变态国产另类| 免费观看一级欧美片| 久久另类ts人妖一区二区| 亚洲人人精品| 最新在线黄色网址| 精品国产乱码久久久久久婷婷 | 欧美一区=区三区| 亚洲欧美精品在线观看| 久久爱另类一区二区小说| 蜜桃视频最新网址| 7777精品伊人久久久大香线蕉 | 性欧美亚洲xxxx乳在线观看| 超碰成人福利| 好吊妞无缓冲视频观看| 91香蕉视频mp4| 成年人av网站| 色哟哟入口国产精品| 色综合久久久| 今天免费高清在线观看国语| 国产一级精品在线| 国产一级片视频| 日韩精品在线第一页| 欧美xxx网站| 亚洲欧美日韩精品在线| 国产在线播放一区二区三区| 特级片在线观看| 亚洲激情视频在线观看| 偷拍视频一区二区三区| 一区二区三区偷拍| 国产精品夜夜爽| 日韩无码精品一区二区三区| 亚洲欧美制服综合另类| 粉嫩91精品久久久久久久99蜜桃| 国产福利片一区二区| 波多野结衣亚洲一区| 国产精品视频一区在线观看| 中文字幕免费国产精品| 清纯唯美激情亚洲| 国产免费成人在线| 国产精品福利电影一区二区三区四区| www.av黄色| 国产z一区二区三区| 91嫩草精品| 欧美日韩亚洲一二三| 日韩理论片网站| 五月天丁香视频| 国产美女91呻吟求| 午夜欧美精品| 一级片视频免费看| 欧美一级视频精品观看| 性欧美freesex顶级少妇| 永久域名在线精品| av午夜一区麻豆| 亚洲天堂手机在线| 2019中文在线观看|