看到Linux內核設計與實現已經第三版了,翻開看看發現增加一章專門描述內核數據結構,詳細描述中斷處理程序和下半部機制。
Linux內核設計與實現(第三版)PDF 下載地址 http://www.linuxidc.com/Linux/2011-05/35647.htm
一、溫故而知新篇
1、fork和vfork
進程創建,在unix系統中,進程創建比較特別,分解為兩個函數,分別為 fork和exec。首先,fork通過拷貝當前進程創建一個子進程,子進程與父進程區別僅僅在於一個pid,和某縣資源和統計量,例如掛起的信號,它沒有必要繼承。exec函數負責讀取可執行文件並將其載入地址空間運行。
寫時拷貝,linux的fork使用的是寫時拷貝,內核不復制地址空間,僅僅是共享同一個拷貝,在需要寫的時候才被復制,例如fork後直接exec則無需復制了。
fork和vfork功能相同,都是創建一個進程,但是子進程作為父進程的一個單獨線程在它的地址空間運行,父進程被阻塞,知道子進程退出或者執行exec,子進程不能想地址空間寫入。linux的fork引入了寫時拷貝技術, 並明確了子進程先執行,vfork的僅限於不用拷貝父進程的頁表項了。
2、內存管理
區,由於硬件的限制,內核不能對所有頁一視同仁,所以內核把頁劃分為不同的區,一些硬件只能用某些特定的內存地址來執行DMA;一些體系結構其內存的物理尋址范圍比虛擬地址范圍大得多,有些內存不能永久的映射到內核地址空間。
ZONE_DMA ZONE_NORMAL ZONE_HIGHMEM
對於區這部分,並不是非常理解,http://www.linuxidc.com/Linux/2011-05/35645.htm
3、per cpu變量,突然發現內核是有專門的api的,例如DEFINE_PER_CPU
總結一下,面試的時候發現很多東西都是一知半解,希望以後可以深入研究。
二、深入學習
1、內核數據結構
2、中斷處理程序和下半部機制