第八章-異吃送剩控制流(1)

異臣停控制流

如果程序計(jì)數(shù)器一直按照內(nèi)存相鄰的地址來(lái)執(zhí)行指令,那么執(zhí)行過(guò)的指令序列是平滑的兆览。但是這種平滑的過(guò)程通常不會(huì)長(zhǎng)久,因?yàn)闀?huì)有程序調(diào)用,返回奠支,跳轉(zhuǎn)等指令,使得平滑流突變抚芦。

還有一些突變是由于其他原因引起的倍谜,如硬件定時(shí)器定期產(chǎn)生信號(hào),事件必須得到處理叉抡《蓿或網(wǎng)絡(luò)適配器收到了一個(gè)包,必須存放在內(nèi)存中等褥民。這種突變稱為異臣敬海控制流(Exceptional Controal Flow,ECF)。

異常

異常就是控制流中的突變消返,用來(lái)相應(yīng)處理器狀態(tài)中的某些變化载弄。

image.png

在任何情況下,處理器檢測(cè)到有事件發(fā)生時(shí)侦副,就會(huì)通過(guò)一張叫異常表的跳轉(zhuǎn)表侦锯,進(jìn)行一個(gè)間接過(guò)程調(diào)用,運(yùn)行專門處理此類事件的操作系統(tǒng)子程序(異常處理程序)秦驯。處理完成后根據(jù)引起異常的事件類型尺碰,回到事件發(fā)生時(shí)的指令,或發(fā)生時(shí)的下一條指令译隘,或終止被中斷的程序亲桥。

異常處理

異常表的結(jié)構(gòu):

image.png

在系統(tǒng)啟動(dòng)時(shí),由操作系統(tǒng)分配和初始化固耘。表的起始地址放在異常表基址寄存器中题篷。

通過(guò)異常號(hào)與基址,獲取異常程序處理地址:

image.png

異常的類別

1. 中斷

中斷是異步發(fā)生的厅目,即是來(lái)自處理器外部I/O設(shè)備的信號(hào)的結(jié)果番枚。而不是處理器內(nèi)部指令產(chǎn)生的法严,所以說(shuō)是異步的。

外部通過(guò)向處理器芯片上的一個(gè)引腳發(fā)信號(hào)葫笼,并將異常號(hào)放到系統(tǒng)總線上深啤,來(lái)出發(fā)中斷,這個(gè)異常好號(hào)標(biāo)識(shí)了引起中斷的設(shè)備路星。

CPU執(zhí)行完當(dāng)前指令會(huì)去執(zhí)行中斷程序溯街,然后回到下一條指令繼續(xù)執(zhí)行。

2. 陷阱

陷阱是有意的異常洋丐,主要用途是在用戶程序和內(nèi)核之間提供一個(gè)像過(guò)程調(diào)用一樣的接口呈昔,叫系統(tǒng)調(diào)用。

比如讀文件友绝,創(chuàng)建新進(jìn)程堤尾,加載新程序,終止當(dāng)前程序九榔,都需要向內(nèi)核請(qǐng)求服務(wù)哀峻。處理器提供了一條特殊的 syscall n 指令涡相,來(lái)調(diào)用服務(wù)n哲泊。

普通的函數(shù)運(yùn)行在用戶模式中,限制了函數(shù)可以執(zhí)行的指令類型催蝗,且只能訪問(wèn)與調(diào)用函數(shù)相同的棧切威。系統(tǒng)調(diào)用運(yùn)行在內(nèi)核模式中,內(nèi)核模式運(yùn)行系統(tǒng)調(diào)用執(zhí)行特權(quán)指令丙号,并訪問(wèn)定義在內(nèi)核匯中的棧先朦。

3. 故障

故障由錯(cuò)誤情況引起,可以被故障處理程序修正犬缨。

如果被修復(fù)了喳魏,會(huì)返回時(shí)重新執(zhí)行當(dāng)前指令。否則怀薛,返回到內(nèi)核的abort例程刺彩,會(huì)終止引起故障的應(yīng)用程序。

缺頁(yè)是一個(gè)經(jīng)典的異常枝恋。

4. 終止

終止時(shí)不可恢復(fù)的致命錯(cuò)誤造成的結(jié)果创倔,通常是硬件錯(cuò)誤。

進(jìn)程

現(xiàn)代的操作系統(tǒng)會(huì)提供給程序一個(gè)假象焚碌,即程序似乎是獨(dú)占處理器和內(nèi)存的畦攘。

系統(tǒng)中的每個(gè)程序都運(yùn)行在某個(gè)進(jìn)程上下文中,上下文是由程序正確運(yùn)行所需的狀態(tài)組成的十电,狀態(tài)包括存放在內(nèi)存中的程序的代碼和數(shù)據(jù)知押,棧叹螟、通用寄存器內(nèi)容、程序計(jì)數(shù)器台盯、變量環(huán)境以及打開(kāi)問(wèn)阿金描述符集合首妖。

1. 邏輯控制流

一個(gè)程序?qū)?yīng)的程序計(jì)數(shù)器的值構(gòu)成的序列,交邏輯控制流爷恳,簡(jiǎn)稱邏輯流有缆。

2. 并發(fā)流

一個(gè)邏輯流的執(zhí)行在時(shí)間上與另一個(gè)流重疊,稱為并發(fā)流温亲,這兩個(gè)流被稱為并發(fā)地執(zhí)行棚壁。

多個(gè)流并發(fā)地執(zhí)行一般現(xiàn)象稱為并發(fā)(concurrency)。一個(gè)進(jìn)程和其他進(jìn)程輪流運(yùn)行的概念稱為多任務(wù)栈虚。一個(gè)程序執(zhí)行它的控制流的一部分的每一時(shí)間段叫時(shí)間片袖外。因此多任務(wù)也叫時(shí)間分片。

如果兩個(gè)流并發(fā)運(yùn)行在不同的處理器核或計(jì)算機(jī)上魂务,則稱為并行流(parallel flow)曼验,并發(fā)地運(yùn)行,且并行地執(zhí)行粘姜。

3. 用戶模式和內(nèi)核模式

處理器通常用某個(gè)控制寄存器中的一個(gè)模式位來(lái)提歐共這種功能鬓照,寄存器描述了進(jìn)程當(dāng)前享有的特權(quán)。在內(nèi)核模式的進(jìn)程可以執(zhí)行任何指令孤紧,且能訪問(wèn)系統(tǒng)中的任何內(nèi)存位置豺裆。

4. 上下文切換

上下文切換是由內(nèi)核完成的。

在進(jìn)程執(zhí)行的某些時(shí)刻号显,內(nèi)核可以決定搶占當(dāng)前進(jìn)程臭猜,并重新開(kāi)始一個(gè)先前被搶占了的進(jìn)程。這種決策叫調(diào)度押蚤,由內(nèi)核中的調(diào)度器的代碼處理的蔑歌。

上下文切換:

  • 保存當(dāng)前進(jìn)程上下文

  • 恢復(fù)先前某個(gè)被搶占的進(jìn)程被保存的上下文

  • 將控制傳遞給這個(gè)新恢復(fù)的進(jìn)程

進(jìn)程控制

獲取PID的方法:

image.png

進(jìn)程的創(chuàng)建:

image.png

子進(jìn)程是父進(jìn)程的一分拷貝,除了PID不同揽碘,其他基本相同次屠。(即在不同的地址空間中,有相同的拷貝)

fork之后钾菊,子進(jìn)程會(huì)沿著fork之后的那條語(yǔ)句繼續(xù)執(zhí)行下去帅矗。

僵死進(jìn)程(僵尸進(jìn)程)

子進(jìn)程已經(jīng)執(zhí)行完畢,但是內(nèi)核并不會(huì)清除掉子進(jìn)程煞烫,直到被父進(jìn)程回收浑此。父進(jìn)程回收子進(jìn)程時(shí),內(nèi)核會(huì)將子進(jìn)程的退出狀態(tài)傳遞給父進(jìn)程滞详,然后再拋棄已終止的進(jìn)程凛俱。一個(gè)終止了還未被回收的進(jìn)程稱為僵死進(jìn)程紊馏。

image.png

pid>0表示進(jìn)程ID等于PID的子進(jìn)程。-1表示所有子進(jìn)程組成的集合蒲犬。其中一個(gè)終止就會(huì)返回PID朱监。

信號(hào)

一個(gè)信號(hào)就是一條小消息,通知進(jìn)程系統(tǒng)中發(fā)生了一個(gè)某種類型的事件原叮。

通常異常都是由內(nèi)核異常處理程序進(jìn)行處理的赫编,正常情況下,對(duì)用戶進(jìn)程是不可見(jiàn)的奋隶。信號(hào)提供了一種機(jī)制擂送,通知用戶進(jìn)程發(fā)生了這些異常。

傳送一個(gè)信號(hào)到目的進(jìn)程的步驟:

image.png
image.png

image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末唯欣,一起剝皮案震驚了整個(gè)濱河市嘹吨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌境氢,老刑警劉巖蟀拷,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異萍聊,居然都是意外死亡问芬,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門脐区,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)愈诚,“玉大人,你說(shuō)我怎么就攤上這事牛隅。” “怎么了酌泰?”我有些...
    開(kāi)封第一講書人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵媒佣,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我陵刹,道長(zhǎng)默伍,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任衰琐,我火速辦了婚禮也糊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘羡宙。我一直安慰自己狸剃,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布狗热。 她就那樣靜靜地躺著钞馁,像睡著了一般虑省。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上僧凰,一...
    開(kāi)封第一講書人閱讀 50,096評(píng)論 1 291
  • 那天探颈,我揣著相機(jī)與錄音,去河邊找鬼训措。 笑死伪节,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的绩鸣。 我是一名探鬼主播架馋,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼全闷!你這毒婦竟也來(lái)了叉寂?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤总珠,失蹤者是張志新(化名)和其女友劉穎屏鳍,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體局服,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡钓瞭,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了淫奔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片山涡。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖唆迁,靈堂內(nèi)的尸體忽然破棺而出鸭丛,到底是詐尸還是另有隱情,我是刑警寧澤唐责,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布鳞溉,位于F島的核電站,受9級(jí)特大地震影響鼠哥,放射性物質(zhì)發(fā)生泄漏熟菲。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一朴恳、第九天 我趴在偏房一處隱蔽的房頂上張望抄罕。 院中可真熱鬧,春花似錦于颖、人聲如沸呆贿。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)榨崩。三九已至谴垫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間母蛛,已是汗流浹背翩剪。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留彩郊,地道東北人前弯。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像秫逝,于是被迫代替她去往敵國(guó)和親恕出。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容