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