潘恆 原創做品轉載請註明出處 《Linux內核分析》MOOC課程http://mooc.study.163.com/course/USTC-1000029000html
簡單模擬內核代碼
主要包括:linux
操做系統三個法寶:算法
操做系統核心功能:進程調度和中斷機制,經過與硬件的配合實現多任務處理,再加上上層應用軟件的支持,最終變成可使用戶能夠很容易操做的計算機系統
多進程的Linux操做系統:進程必須等到正在運行的進程空閒CPU後才能運行
進程切換:當正在運行的進程等待其餘的系統資源時,Linux內核將取得CPU的控制權,並將CPU分配給其餘正在等待的進程。進程切換機制中包含esp的切換、堆棧的切換數據結構
跟蹤調試Linux內核的啓動框架
系統調用:即使是最簡單的程序,在進行輸入輸出等操做時也會須要調用操做系統所提供的服務,也就是系統調用。Linux下的系統調用是經過中斷(int 0x80)來實現的函數
傳遞參數:在執行int 80指令時,寄存器 eax 中存放的是系統調用的功能號,而傳給系統調用的參數則必須按順序放到寄存器 ebx,ecx,edx,esi,edi 中,當系統調用完成以後,返回值能夠在寄存器 eax 中得到。Linux 採用的是 C 語言的調用模式,這就意味着全部參數必須以相反的順序進棧,即最後一個參數先入棧,而第一個參數則最後入棧。
用戶態、內核態和中斷處理過程
使用庫函數API和C代碼中嵌入彙編代碼觸發同一個系統調用
使用庫函數API獲取系統當前時間
使用C代碼中嵌入彙編代碼觸發系統調用獲取系統當前時間學習
給MenuOS增長time和time-asm命令
使用gdb跟蹤系統調用內核函數sys_time
系統調用在內核代碼中的工做機制和初始化spa
系統調用就是特殊的一種中斷
系統調用:操作系統
進程的描述:進程描述符task_struct數據結構線程
Linux經過複製父進程來建立一個新進程,經過調用do_fork來實現併爲每一個新建立的進程動態地分配一個task_struct結構
執行起點與內核堆棧保證一致:設置子進程的ip以前:childregs = current_pt_regs();將父進程的regs參數賦值到子進程的內核堆棧,其中存放了SAVE_ALL中壓入棧的參數
新進程的開始:copy_thread()中:p->thread.ip = (unsigned long) ret _from _fork;將子進程的 eip 設置爲ret_from _fork的首地址,子進程從ret_from_fork開始執行的
進程的建立:
使用gdb跟蹤建立新進程的過程
可執行程序的裝載
------------------
淺析動態連接的可執行程序的裝載
進程切換的關鍵代碼switch_to分析:
每週若是靜下心來學習總結相應課程的話確實會感到有所收穫,但本人以爲雖然內容不錯,每每看完視頻寫完做業就不會記憶深入了,仍是要經常複習,多加以實踐才能掌握linux內核的真正原理。往後遇到實踐複習的機會必定要好好把握,就這半學期的學習來講仍是掌握的很差,深層次的理解遠遠不夠。