天天看點

linux核心的異常連結清單--隻逮捕,不行刑

linux核心的行為方式和現實社會非常的相似,核心就好像一個管理機構,管理着所有的使用者程序,是以當程序犯了錯誤的時候,核心絕對不能不管,而是當場緝拿,要麼懲罰,要麼判處死刑。這其中巧妙的地方就是這個從緝拿到判刑的過程,采用了類似三權分立的思想,各司其職。 

如果一個程序在使用者空間通路了一個不屬于它的位址空間的一個位址,那麼會被核心發現,其實就是發生了缺頁中斷,然後核心直接判了這個程序的死刑,發送越界信号,事實上就是殺死了這個程序(核心夠殘酷吧...)。曾幾何時,每當使用者需要和核心交換資料的時候,核心首先要檢查使用者傳來資料的合法性,就是檢查該資料是否屬于該程序的位址空間,這個操作浪費了大量的時間,如果是人類社會,人們不會認為這浪費了時間,因為人類的行為效率總是十分低下,如果砍掉一些部 門,那麼會帶來大量的失業,會增加社會的不穩定因素,是以人類社會的很多機構都是備援機構,和作業系統一樣,人類社會最重要的也是穩定,不同的是,人類有自由意志,一些規則在某些人身上往往不好使,在作業系統中稀有現象,比如越界,在人類社會就會成為常見現象,比如偷盜,搶劫(實際上也可以了解為使用者空間 越界)以及用假身份證去辦銀行卡(可以了解為往管理機構傳遞資料時的越界),如果砍掉相關的檢查機構,後果将不堪設想。還是計算機最省心,讓它幹什麼它就幹什麼。 

為了節省開銷,核心将資料的合法性檢測推遲到不能再推為止,何時是不能再推的時候呢?當然是通路該資料的時候了,通路該資料的時候,如果它不是合法資料,當然就不可能有頁表映射,是以會産生缺頁中斷,是以将合法性檢測統統歸到缺頁處理當中就可以了,我們來看看代碼的相關内容:

asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long error_code)

{

 本文轉自 dog250 51CTO部落格,原文連結:http://blog.51cto.com/dog250/1274033

繼續閱讀