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