一直以來都沒有養成記錄讀書筆記的好習慣,導致每次迫切的需要一些知識的時候,又要重新的去溫習,雖說之前若是對某項知識已經有所了解,再去溫習肯定輕車熟路了,但多少總還要費一番周折的,翻閱資料總歸會花些時間的。從今天起記錄每天所學到點點滴滴,相信定能積少成多,這樣一來可以對學到的東西做個梳理,二來可以做個備忘,方便自己查閱溫習。
學習linux核心情景分析已經有段時間了,現在還停留在的最開始的兩章,雖說進展緩慢(可能自己不夠勤奮,讀書三天打漁兩天曬網),但自認為還是學到了不少東西的,今天主要對彙編部分做了溫習:
linux核心原始碼中的組合語言是at&t 格式的,一條彙編語句的主要格式如下: 指令部:輸出部:輸入部:損壞部
有如下要點:
1. 暫存器編號從輸出部開始,從0依次遞增。
2.輸出部描述以「=」開始,而輸入不卻沒有。
乙個簡單的set_bit函式彙編實現書中是這樣實現的:
__asm__ __volatile__( lock_prefix
"btsl %1,%0"
:"=m" (addr)
:"ir" (nr));
btsl這條指令時將%0暫存器中指標(addr)指向的整形記憶體單元中的nr(%1暫存器)位設為1.
"btsl %0,%1"
::"lr"(nr),"m"(addr(addr)));
此外如果某個地方使用的暫存器與之前的某個暫存器相同,則可以在描述中用之前的那個暫存器的編號表示,不過這種情況只能在輸入部中出現,因為編號從輸出部開始的,而在輸出部內部,又不可能存在兩個變數同時使用乙個暫存器。
Linux核心原始碼情景分析 系統呼叫
一 系統呼叫初始化 void init trap init void 對0x80中斷向量。設定了系統呼叫的總入口system call。static void init set system gate unsigned int n,void addr 在idt中設定了門描寫敘述符,例如以下圖 sel...
Linux核心 fork 原始碼分析
核心版本 linux 4.4.18 原始碼位置 這裡 接著 呼叫copy process 它設定了程序描述符以及子程序所需的任何其他核心資料結構。ftrace graph init task 初始化ftrace,核心追蹤函式呼叫。rt mutex init task 初始化鎖。copy creds ...
SynchronousQueue原始碼閱讀心得
synchronousqueue 簡寫為sq 同步佇列中,讀執行緒與寫執行緒只有相互匹配時才能完成一次完整的讀寫操作。而讀與寫的匹配依賴於transferqueue或transferstack中的transfer sq中重要的資料結構有transferqueue和transferstack,還有qn...