第三章讀書筆記

2022-08-31 11:33:10 字數 1889 閱讀 5722

程序管理

3.1程序

程序就是處於執行期的程式(目標碼存放在某種儲存介質上)

但程序並不僅僅侷限於一段可執行程式**。

執行執行緒,執行緒,是程序活動的物件。

兩種虛擬機制:虛擬處理器和虛擬記憶體。

最終,程式通過exit()系統呼叫退出執行。

3.2程序描述及任務結構

核心把程序的列表存放在叫做任務佇列的雙向迴圈鍊錶中。

task_struct相對較大,在32位機器上,它大約有1.7kb。

3.2.1分配程序描述符

結構中task域中存放的是指向該任務實際task_struct的指標。

3.2.2 程序描述符的存放

核心通過乙個唯一的程序標識值或pid來標識每個程序。

這個最大值很重要,因為它實際上就是系統中允許同時存在的程序的最大數目

3.2.3 程序狀態

系統中的程序都必然處於五個程序中狀態中的一種。

task_running(執行)——程序是可執行的。

task_interruptible(可中斷)——程序正在睡眠(也就是說它被阻塞)。

task_uninterruptible(不可中斷)——使用的較少。

_task_traced——被其他程序跟蹤的程序。

_task_stopped(停止)——程序停止執行。

3.2.4 設定當前程序狀態

核心經常需要調整某個程序的狀態。

參看中對這些相關函式實現的說明。

3.2.5程序上下文

系統呼叫和異常處理程式是對核心明確定義的介面。

3.2.6程序家族樹

unix系統的程序之間存在明顯的繼承關係。

linux系統也是如此

在乙個擁有大量程序的系統中通過重複來遍歷所有的程序的代價是很大的。

因此,沒有足夠的理由,不要這樣做。

3.3程序建立

unix的程序建立很不同

分解到兩個單獨的函式中去執行:

fork()

exec()

3.3.1寫時拷貝

傳統fork()系統呼叫直接把所有的資源複製給新建立的程序。

fork的實際開銷就是複製父程序的頁表

給子程序建立唯一的程序描述符,這個優化很重要。

3.3.2fork()

1.fork()、vfork()、__clone()都根據各自需要的引數標誌呼叫clone()。

2.由clone()去呼叫do_fork()。

3.do_fork()呼叫copy_process()函式,然後讓程序開始執行。

4.返回do_fork()函式,如果copy_process()函式成功返回,新建立的子程序被喚醒並讓其投入執行。

3.3.3vfork()

1.呼叫copy_process()是,task_struct的vfor_done成員被設定為null。

2.執行do_fork()時,如果給定特定標誌,則vfor_done會指向乙個特定位址。

3.子程序先開始執行後,父程序不是馬上恢復執行,而是一直等待,知道子程序通過vfor_done指標向它傳送訊號。

4.在呼叫mm_release()時,該函式用於程序退出記憶體位址空間,並且檢查vfor_done是否為空,如果不為空,則會向父程序傳送訊號。

5.回到do_fork(),父程序醒來並返回。

3.4執行緒在linux中實現

3.4.1建立執行緒

3.4.2核心執行緒

核心執行緒沒有獨立的位址空間,只在核心空間執行,從來不切換到使用者空間,可以被排程和被搶占。

3.5程序終結

1.刪除程序描述符

2孤兒程序造成進退維谷

第三章讀書筆記

本章是講了git的使用入門,為學習本書的人展示了git的基本用法。儘管git並不是學習android移植和linux核心 驅動開發必須掌握的技術。但對於深入研究這些底層技術的人來說,git將成為學習過程中必不可少的工具。git是什麼,git就是乙個開源的分布式版本控制系統,用以有效 高速的處理從很小...

UNP讀書筆記第三章

網路位元組序和主機位元組序大小端不一樣。linux提供了4個轉換函式 include uint16 t htons uint16 t value uint32 t htonl uint 32t value uint16 t ntohs uin16 t value uint32 t ntohl uin...

C Primer 讀書筆記 第三章

2010 09 14 19 58 68人閱讀收藏 舉報讀書 c string 第 章 標準庫型別 標準庫bitset型別 以下下標和位數均為 size t 型 定義在標頭檔案 cstddef 中,unsigned 整型 bitset 是一種類模板,用於儲存位集,並提供測位和置位操作 定義和初始化 b...