Linux內(nèi)核設(shè)計與實現(xiàn) 讀書筆記
第二章 Linux內(nèi)核
1 內(nèi)核開發(fā)特點
1)內(nèi)核編譯時不能訪問C庫;
2)浮點數(shù)很難使用;
3)內(nèi)核只有一個定長堆棧;
4)注意同步和并發(fā)。
第三章 進程管理
1current宏:查找當前運行進程的進程描述符。
2 進程狀態(tài)(5種)
TASK_RUNNING :1)正在運行;2)在運行隊列中等待執(zhí)行。
TASK_INTERRUPTIBLE:進程正在睡眠,可以被信號喚醒。
TASK_UNINTERRUPTIBLE:進程正在睡眠,不會收到信號被喚醒。
TASK_ZOMBIE:僵死態(tài),進程已經(jīng)結(jié)束,父進程未使用wait4()。
TASK_STOPPED
3 進程上下文
進程進入內(nèi)核空間時,current宏依然有效,內(nèi)核“代表進程執(zhí)行”。
4 進程創(chuàng)建
1)fork():拷貝當前進程創(chuàng)建一個子進程。
2)exec():讀取可執(zhí)行文件并載入地址空間開始運行。
3)寫時拷貝(copy-on-wrtie):推遲數(shù)據(jù)拷貝,在需要寫入數(shù)據(jù)時,數(shù)據(jù)才會被復(fù)制。
4)vfork():不拷貝父進程的頁表項,子進程作為父進程的一個線程在它的地址空間運行,父進程被阻塞直至子進程退出,子進程不能向地址塊空間寫入數(shù)據(jù)。
5 線程
Linux把所有的線程都當作進程來實現(xiàn)。
6 內(nèi)核線程:獨立運行在內(nèi)核中的標準進程。內(nèi)核線程沒有獨立的地址空間,只能在內(nèi)核空間中運行,創(chuàng)建內(nèi)核線程用kernel_thread()。
7 進程終結(jié)
1)釋放資源;
2)進入TASK_ZOMBIE;
3)等待wait4()。





