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