《深入理解Linux核心》 讀書筆記

2022-03-02 21:58:12 字數 2273 閱讀 6307

使用者和組

程序核心體系結構

硬鏈結和軟連線

檔案型別

檔案描述符與索引節點

訪問許可權和檔案模式

檔案操作

程序可重入核心

程序位址空間

同步和臨界區

訊號和程序間通訊

核心收到訊號後,可以

程序間通訊(ipc)

程序管理

記憶體管理

邏輯位址,經過分段單元,轉換為線性位址,線性位址,經過分頁單元,轉換為實體地址

分段單元(用於把邏輯位址,轉換為線性位址)

段描述符,8位元組,存放在gdt或者ldt中,有欄位

gdt,是全域性段列表,item是段描述符

ldt,是區域性段列表,item是段描述符

轉換流程

傳入邏輯位址給分段單元,邏輯位址包含段選擇符和偏移量

檢視段選擇符的ti欄位,決定是從gdt中還是ldt中獲取段描述符,假如是gdt

檢視段選擇符的index欄位,假如是2,從gdtr暫存器中獲取gdt列表的首位元組位址,假如是0x00002000,計算段描述符的位置=0x00002000+2*8,=0x00002016 (每個段描述符8位元組),所以段描述符在記憶體的0x00002016-0x00002024位置

檢視段描述符的base欄位,假如是0x00003000,加上偏移量,假如是100,得到線性位址是0x00003100

程序,輕量級程序(lwp)和執行緒

所以linux的做法是(todo 這一塊還不是很明白)

程序描述符

程序描述符是乙個資料結構(c的struct,類似python的字典)

程序描述符有欄位:

state 狀態

可執行狀態(task_running),要麼在執行,要麼準備執行

可中斷的等待狀態(task_interruptible)程序被掛起(睡眠),表示它在等待乙個事件的發生,例如等待某個系統資源。當這個系統資源可用,核心會產生乙個硬體中斷,來喚醒程序

不可中斷的等待狀態(task_uninterruptible),和可中斷的等待狀態類似,這個狀態較少用到

暫停狀態(task_topped)程序被暫停執行,當程序收到訊號sigstop,sigstp,sigttin sigttou訊號後,會進入暫停狀態

跟蹤狀態(task_traced)當程序被另乙個程序跟蹤,例如執行ptrace命令,

僵死狀態(exit_zombie)程序的執行被終止,但是父程序還沒有發布wait4或者waitpid命令來獲取程序資訊。這時核心不會自動丟棄程序的資訊,因為父程序可能還需要這些資訊

10.僵死撤銷狀態

thread_info 程序的基本資訊

fs_struct 當前目錄

signal_struct 收到的訊號

pid 程序的id。順序遞增,最大是32767,超過後,從1開始獲取閒置的pid值。程序裡面的執行緒,也擁有自己的pid,同時每個執行緒有乙個tgid(thread group id),表示執行緒組id,這個id等於程序中第乙個執行緒的pid。

乙個程序裡面至少有乙個執行緒

程序鍊錶

程序間的關係

程序描述符裡面有特定的字段,記錄每個程序的父程序,兄弟程序和子程序

pidhash

有時候核心需要根據pid來獲取程序描述符

所以核心會儲存乙個pidhash資料結構,是個hash表(c裡面的hash表的實現和redis的hash表實現類似),key是pid,value是程序描述符

程序切換,任務切換,上下文切換是一樣的

上面的操作使用乙個switch_to巨集來實現,傳入引數prev,next,prev。傳入兩次prev是怕切換上下文後,把第乙個prev丟了。

linux程序的特性:

建立程序的系統呼叫:

fork close函式的封裝

vfork close函式的封裝

核心程序

核心程序是一直執行在核心態的

程序0程序0是linux啟動後的第乙個程序,由它建立程序1

程序1程序1也叫init程序,程序1會一直執行知道linux關閉

程序執行完指定的**後,就會終止,這時必須通知核心**程序的資源。

一般是exit系統呼叫,c編譯程式會自己動把exit函式插入到main函式最後

核心可以強迫整個執行緒組死掉(例如收到kill -9)

程序刪除

當程序終止後,程序會進入僵死狀態,直到父程序呼叫wait4來獲取程序的狀態資料,然後程序就會被刪除。

如果父程序已經不存在,程序會交給init程序託管,init程序會定期執行wait4命令來檢視程序的狀態,如果程序已經終止,就會刪除這個程序

《深入理解Python》讀書筆記

1 type函式返回任意物件的資料型別。type可以接收任何東西作為引數 整型 字串 列表 字典 元組 函式 類 模組 甚至型別物件,並返回它的資料型別。可以使用types模組中的常量來進行物件型別的比較。import mymodule import types type mymodule type...

深入理解Linux核心 筆記

第一章 緒論 1.unix檔案可以是下列型別之一 a.正規檔案 regular file b.目錄 directroy c.符號鏈 symbolic link d.塊裝置檔案 block oriented device file e.字元裝置檔案 charactor oriented device ...

《深入理解Python特性》讀書筆記

深入理解python特性 的讀書筆記 單前導下劃線 var 單末尾下劃線 var 雙前導下劃線 var 雙前導雙結尾下劃線var 單獨乙個下劃線 物件可以被當作函式使用,只要他實現了 call 方法 函式預設返回值為none,即所有函式都是有返回值的,不寫就是nonelambda x x 1表示就是...