Exception - CSAPP C8

I never make exceptions. An exception disproves the rule
-- Sherlock Holmes

福爾摩斯的世界沒有Exception才可以更好的去在既有的框架下解決問題,但Exception卻是計(jì)算機(jī)構(gòu)成的一個(gè)有力武器,因?yàn)楝F(xiàn)實(shí)世界總是有各種的不完美,而作為要去表達(dá)世界的計(jì)算機(jī)自然也要包容這個(gè)不停有意外(Exception)的世界。
最理想的系統(tǒng)是一切可控,從開啟到結(jié)束一步步去執(zhí)行我們計(jì)劃的命令,最終達(dá)到結(jié)果,這種基于我們之前實(shí)現(xiàn)過的跳轉(zhuǎn)-分支與調(diào)用-返回就可以實(shí)現(xiàn),但是不能覆蓋這個(gè)不完美的世界,比如你之前要的數(shù)據(jù)經(jīng)歷了重重阻隔終于到手邊可以用了,定了個(gè)鬧鐘要提醒你了,甚至于外力想阻斷系統(tǒng)的流程,這些都需要更為復(fù)雜的一個(gè)體系去包容,稱為異常控制流(exceptional control flow)

異常控制流貫穿于整個(gè)系統(tǒng),存在于各個(gè)系統(tǒng)的層級(jí)。

  • 最底層的機(jī)制稱為異常(Exception),主要涵蓋了系統(tǒng)事件,通常是由硬件和操作系統(tǒng)共同實(shí)現(xiàn)的。

  • 進(jìn)程切換(Process Context Switch),主要涵蓋硬件過渡到操作系統(tǒng),操作系統(tǒng)過渡到語言庫,由硬件計(jì)時(shí)器和操作系統(tǒng)共同實(shí)現(xiàn)的。

  • 信號(hào)(Signal),主要涵蓋了操作系統(tǒng)到進(jìn)程。由操作系統(tǒng)實(shí)現(xiàn)。

  • 非本地跳轉(zhuǎn)(Nonlocal Jumps),主要是涵蓋進(jìn)程內(nèi)部,一般由操作系統(tǒng)配合語言本身實(shí)現(xiàn)

異常

異常是計(jì)算機(jī)應(yīng)對(duì)“意外”的一種機(jī)制。主要用來響應(yīng)處理器發(fā)出的信號(hào)。

而這些意外又會(huì)有多種,包括interrupt,trap,fault和abort,從這四種我們也可以了解到“異?!逼鋵?shí)不一定是壞事,更是一種“包容”的手段

進(jìn)程

進(jìn)程是一個(gè)偉大的抽象概念?;镜牟僮飨到y(tǒng)編程概念立足于此。而異常就是提供這個(gè)概念基礎(chǔ)的一個(gè)構(gòu)造塊。
進(jìn)程的定義是一個(gè)執(zhí)行中程序的實(shí)例,就像是給一個(gè)單調(diào)的可執(zhí)行文件填充了血肉,賦予他兩個(gè)層次的抽象,獨(dú)占處理器和獨(dú)占內(nèi)存系統(tǒng)。而這和我們常識(shí)是不同的,我們的確可以一邊聽歌一邊打代碼順便還瀏覽著網(wǎng)站,我們可憐的處理器縱有多核應(yīng)該也不夠分,更何況摩爾定律往前幾輪處理器也就是單核,但概念卻幾乎沒有變化,主要就是靠進(jìn)程切換這個(gè)概念去實(shí)現(xiàn)的。不只是我們直覺上的普通進(jìn)程是在不停切換的,把代碼執(zhí)行的鏡頭拉近我們會(huì)發(fā)現(xiàn)應(yīng)用程序和操作系統(tǒng)之間的部分,也是有“切換”這個(gè)概念的。

信號(hào)

信號(hào)是一種在計(jì)算機(jī)體系中偏高層的概念,與操作系統(tǒng)實(shí)現(xiàn)有關(guān)。信號(hào)大體像一種操作系統(tǒng)固定下來給進(jìn)程小弟們利用的約定,然后小弟們在這個(gè)約定下,接收信號(hào),發(fā)送信號(hào),老實(shí)做人:)

非本地跳轉(zhuǎn)

而非本地跳轉(zhuǎn)又是更為上層的概念,以C為例,它的目的主要是將控制直接從一個(gè)函數(shù)轉(zhuǎn)移到另一個(gè)當(dāng)前正在執(zhí)行的函數(shù),而不需要經(jīng)過正常的調(diào)用-返回順序

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 32,305評(píng)論 2 89
  • 計(jì)算機(jī)系統(tǒng)漫游 代碼從文本到可執(zhí)行文件的過程(c語言示例):預(yù)處理階段,處理 #inlcude , #defin...
    willdimagine閱讀 3,835評(píng)論 0 5
  • 空氣中有一雙手 捏著我的脖頸 我無法呼吸 眼前越來越迷糊 將要死去 我想 可以的話 給我一根香煙 我想再抽一口回憶...
    漂飄小曄閱讀 269評(píng)論 0 0
  • 上學(xué)那會(huì)兒特別癡迷拍照,渴望著能有自己的相機(jī)。當(dāng)時(shí)的諾基亞手機(jī)帶的攝像頭也不過30W,在大二那年買了個(gè)手機(jī),記得很...
    執(zhí)言偏語閱讀 424評(píng)論 6 8
  • 這文藝范十足的朋友圈,是別人家的。 這隨意瀟灑的畫風(fēng),還是別人家的。 看到別人的朋友圈多姿多彩,而你自己的朋友圈,...
    顧小九nine閱讀 614評(píng)論 0 3

友情鏈接更多精彩內(nèi)容