linux下的程序管理

2021-06-17 23:56:38 字數 2412 閱讀 7587

linux核心設計與實現學習筆記

程序管理

程序 fork()

父程序                          子程序

exec() 引導程式

exit():程序退出執行,處於僵死狀態

負責程序記憶體銷毀(task_struct

保留)

wait4()::子程序退出執行或子程序在

ptrace下中斷而出發

wait4

負責檢視子程序的task_struct並

銷毀它,銷毀後子程序徹底消失

程序建立過程

fork(),vfork(),__clone() -> clone() -> do_fork() -> copy_process() ->dup_task_struce()

1.dup_task_struct() 

為新程序建立乙個核心執行緒,

thread_info,

和task_struct

,新建的結構值和父程序完全一樣。

2.檢查新程序建立後,使用者擁有的程序數是否超出給他分配的資源限制

3.程序描述符的大多成員被賦值為初始值(這是父程序與子程序區別開來),程序描述符的大多數資料都是共享的(比如程序開啟的檔案描述符)

4.子程序的狀態被設定為

task_uninterruptible

5.copy_process()呼叫

copy_flags()

設定程序的一些標誌位

6.呼叫

get_pid()

為程序獲取乙個

pid

7.根據傳遞給

clone()

的引數標誌,

copy_process()

拷貝或共享開啟的檔案,檔案系統資訊,訊號處理函式,程序位址空間和命名空間等

程序的退出do_exit()

1、將task_struce

中的標誌成員設定為

pf_exiting

2、呼叫del_timer_syne()

刪除任一核心定時器(掛起)

3、呼叫_exit_mm()

放棄程序占用的

mm_struct

,(mm_struct

的共享計數

-1,如果為

0則徹底釋放他)

4、呼叫exit_sem()

退出程序通訊,如果程序排隊等候

ipc,它離開佇列

5、呼叫_exit_files()

遞減檔案描述符

6、呼叫_exit_fs()

檔案系統資料

7、呼叫exit_namespace()

程序名字空間

8、呼叫exit_sighand()

訊號處理函式的引用計數

9、將task_struct

中的exit_code

碼標示為

exit()

提供的引數

10、呼叫exit_notify()

向父程序發出訊號,將本身的狀態設定為

task_zombie

11、呼叫schedule()

切換到其他程序

注:處於zombie

狀態的程序不會再被呼叫,他占用的資源僅為核心站、

thread_info,task_struct.

程序描述符的終結

父程序呼叫wiat()

,他的基本動作是掛起呼叫他的程序,直到其中的乙個子程序退出,此時函式會返回該子程序的

pid。

wait4會呼叫

release_task()

呼叫一下函式完成程序描述符的釋放工作:

1、呼叫free_uid

來減少程序擁有者的程序計數

2、呼叫unhash_process()

從pidhash

上刪除該程序,同時也要從

task_list

中刪除該程序

3、如果程序正在被

ptrace

跟蹤,release_task()

將跟蹤的附近橫重設為其最初的父程序並將其在

ptrace_list

中刪除

4、呼叫

put_task_struct()

釋放程序核心棧和

thread_info

結構所占用的頁,釋放

task_struct

所占用的

slab

快取記憶體

程式的執行:將可執行檔案載入到程序的位址空間執行,一幫的命令是在使用者空間執行,在程式呼叫了系統呼叫或觸發了異常則會陷入核心空間。

linux下程序和執行緒的區別:

linux沒有具體劃分程序和執行緒,處理器執行的基本單位是程序,而所謂的「程序的多個執行緒」是指共享位址空間但是有獨自的程序描述符的程序組

0 給主人留下些什麼吧!~~

Linux系統下的程序管理

top命令內部的引數 top命令內部指令作用p 根據cpu使用的百分比進行排序 m根據記憶體排序 t累計占用cpu時間排序 l關閉 開啟uptime資訊 t關閉 開啟cpu task s指定重新整理頻率 k對程序進行操作 u檢視指定使用者程序 作用 系統是多工多用的操作模式,任務的重要性是有區分的,...

linux系統下程序的管理

ps precess status 命令引數說明 ps a 顯示現終端機下的所有程式 ps u 以使用者為主的格式來顯示程式狀況 ps x 不以終端機來區分 示例 ps aux root localhost ps aux head 2 user pid cpu mem vsz rss tty sta...

Linux程序的管理

1.1 多工 多工作業系統就是能同時併發地互動執行郭哥程序的作業系統。在單處理機器上,這會產生多個程序在同時執行的錯覺。在多處理機上,著會使多個程序在不同機器上真正同時,並行地執行。無論在單處理機還是多處理器機器上,多工作業系統都能使多個程序處於堵塞或者睡眠的狀態,也就是說,實際上並沒有被真正的投入...