核心** mem_init的過程 statrt_memory 減去了 核心**的長度 所以其實虛擬空間是從核心之上開始的
其實這樣省了很多麻煩,因為一開始設定 page 的時候就不用算上核心了
摘選:linux核心中沒有分頁記憶體嗎?是的,沒有,那麼windows的核心為何就有呢?畢竟不是乙個家族不好做全方位的評判,我的結論就是linux上的任何的程式只將核心作為乙個平台而不依賴核心。這個事實的結果就是在linux核心中不能分配過大的記憶體,linux核心中唯一可以分配大記憶體的地方就是vmalloc區域,僅僅放鬆了對物理記憶體連續的限制,在vmalloc中分配記憶體只要求虛擬記憶體連續,並且事實上最多只能分配128m的記憶體,這是linux核心中最寬鬆的限制了。
在linux中,一切功能都可以由使用者空間應用程式來解決,就連防毒程式也不例外,這是因為linux有強大的安全機制,單點驗證機制,只要linux保證任何使用者不能隨意su到root許可權就可以了,這事實上就是乙個消除一切漏洞的行為,只要作業系統安全機制沒有漏洞,只要核心沒有漏洞,那麼一切惡意程式的得逞完全歸結於該惡意程式所利用的使用者空間應用程式設計的不足,而且這件事在linux看來,核心完全沒有必要過問,正如乙個國家的機關只認百姓的請求以及該請求的**許可權,只要認證通過就給與服務而不再對別的情況加以過問,linux只是乙個服務者罷了,它不喜歡任何額外的機制要靠核心來完成,也就是說任何使用者都不要隨意動不動就用核心實現乙個機制,只要在使用者空間實現就好了。
看看windows下的防毒程式這一簡單的使用核心來完成的程式,正是由於windows不能保證複雜但是薄弱的使用者空間機制都是安全的,才會動用核心來實現更高階別的安全管理,它沒有linux的那種簡單但是可以信賴的單點驗證機制。正如微軟建議的那樣,在沒有別的辦法的時候請實現乙個驅動程式,在driverentry中完成一切。既然微軟會建議程式設計師編寫核心驅動,那麼微軟的作業系統當然也把核心空間的開發開放給了程式設計師,於是ddk成了很大一部分人最後的救命稻草,既然將核心驅動的開發開放給了程式設計師,那麼如何使用記憶體就不應該有任何限制,再者windows希望用一種簡單一致的機制管理所有的不管是使用者空間還是核心空間的記憶體,於是核心空間的記憶體管理和使用者空間的記憶體管理大體上沒有區別,都可以使用分頁記憶體,說一句可能讓windows的粉絲不願意聽的話:我們windows實現的不是很安全,所以你們可以用核心這個最高端別的執行緒以權勢壓人。反觀linux,開源的linux難道沒有將核心開放給程式設計師嗎?不,絕對的開放,看看lkml的熱鬧程度吧!但是不同的是,linux下開發核心是完全為了核心本身的機制擴充套件而不涉及任何使用者策略,linux的核心和使用者應用分得比較開。
核心中的記憶體都不分頁
今天看 linux核心設計與實現 2.4.3節中有這麼一句話 核心中的記憶體都不分頁 說說我對這句話的理解 記憶體分頁機制是為普通程序設計的,每乙個普通程序的記憶體空間都被劃分為特定大小的頁,如此一來,在某乙個特定的時刻,該程序按需可以調進另乙個記憶體頁,而把長時間沒有使用的頁換出。核心與其它普通程...
linux核心分頁位址保護
linux核心是通過什麼機制來判斷使用者訪問的記憶體是非法的,從而實現位址保護?姑且認為32位機器在上,程序能看到的虛擬位址空間是4g。這4g是乙個潛力值,並非所有虛擬記憶體下都有物理記憶體做backup。只有某些虛擬記憶體段是有效的,作業系統記錄著這些位址段,通過乙個鍊錶。每一元素有乙個區間,表示...
linux核心中沒有分頁記憶體
linux核心中沒有分頁記憶體嗎?是的,沒有,那麼windows的核心為何就有呢?畢竟不是乙個家族不好做全方位的評判,我的結論就是linux上的任何的程式只將核心作為乙個平台而不依賴核心。這個事實的結果就是在linux核心中不能分配過大的記憶體,linux核心中唯一可以分配大記憶體的地方就是vmal...