深入理解Linux核心 程序

2021-09-08 11:11:20 字數 1528 閱讀 4618

1、程序的靜態特性

程序:程式執行時的乙個例項

程序描述符(task_struct): 程序的基本資訊(thread_info)、指向記憶體區描述符的指標(mm_struct)、程序相關的tty(tty_struct)、當前目錄(fs_struct)、指向              檔案描述符的指標(files_struct)、所接收的訊號(signal_struct)

程序狀態:1、可執行狀態(task_running):正在執行或者準備執行

2、可中斷的等待狀態(task_interruptible):程序掛起,產生硬體中斷、接收到訊號被喚醒進入task_running狀態

3、不可中斷的等待狀態(task_uninterruptible):類似上述;不能被中斷

4、暫停狀態(task_stopped):程序的執行被暫停

5、跟蹤狀態(task_traced):

6、僵死狀態(exit_zombie):程序的執行被終止,但是父程序沒有發布wait()類系統呼叫,核心不能丟棄包含在死程序描述符中的資料

7、僵死撤銷狀態(exit_dead):父程序發布wait()類系統呼叫,程序由系統刪除。為了避免其他程序的競爭,將程序由僵死狀態改為僵死撤銷狀態。

pid:程序描述符processid,32位系統預設上限32767,64位系統預設上限4194303。用位圖表決pid的閒置狀態

魔數常量:將2^32做**分割,取最接近這個值的乙個素數。即0x9e370001(2 654 404 609)= 2^31 + 2^29 - 2^25 + 2^22 - 2^19 - 2^16 +1

程序資源限制:linux中,程序對系統資源的占用受到一些限制,避免使用者過分使用系統資源;cpu時間、位址空間、檔案大小、堆大小、棧大小、程序數等等

2、核心如何進行程序切換

硬體上下文:每個程序有自己有位址空間,但是必須共享cpu暫存器;程序恢復前必須裝入暫存器的一組資料稱為硬體上下文(hardware context)。

程序切換前,需要先切換硬體上下文;被切換打硬體上下文儲存在程序描述符的字段thread_struct的thread欄位中。另外通用暫存器的值保留在核心堆疊中。

程序切換:1、切換頁全域性目錄以安裝乙個新的位址;2、切換核心堆疊和硬體上下文

另外還有一些其他的暫存器或者協處理器:fpu(算術浮點單元)、mmx(multi media extension 多**擴充套件指令集)、sse/sse2(streaming simd extensions)等需要考慮切換; simd(single - instruction multiple-data 單指令多資料)

3、程序的建立

4、程序的撤銷

exit(): 系統呼叫,用來終止某乙個程序

exit_group(): 系統呼叫,終止整個執行緒組

殭屍程序:產生掉乙個原因是父程序已死,無法呼叫wait函式結束子程序,釋放其程序描述符。這個時候需要強制子程序稱為init程序的子程序,由init來通知釋放

5、linux對多執行緒程式多支援

深入理解Linux核心 程序位址空間

給核心分配記憶體和給使用者態程序分配記憶體是有區別的 1 核心的優先順序最高,如果某個核心函式請求動態記憶體,不會被延時 2 核心信任自己,不必保護措施 3 使用者態程序對動態記憶體的請求被認為不是緊迫的,總是被盡量推遲分配 4 使用者程序總是不可信任的 程序的位址空間 1 由允許程序使用的全部線性...

深入理解Linux核心 核心同步

核心基本的同步機制 搶占核心的主要特點 乙個在核心態執行的程序,可能在執行核心函式期間被另外乙個程序取代。核心搶占 linux 2.6允許使用者在編譯核心的時候配置十分啟用 程序臨界區 每個程序中訪問臨界資源 一次僅允許乙個程序使用的共享資源 的那段 稱為臨界區。優化屏障 保證編譯程式不會混淆放在原...

深入理解linux核心手記

linux的段式管理是對應於程式結構的,是一種自然的想法,linux共有6個段暫存器,其中有3個專門的段暫存器 cs 段暫存器 ss 程式棧段暫存器 ds 資料段暫存器 程式需要6個段 bss 存放未初始化資料,只有名稱和大小 段 資料段 存放已初始化資料 棧段,堆段。段式管理段缺點 相比喻頁式管理...