linux程序管理

2021-09-30 16:25:57 字數 3045 閱讀 2602

無論是windows還是linux系統都涉及程序和執行緒的概念。程序是系統排程的最小單位,執行緒是系統資源分配的最小單位。程序/執行緒排程(低階排程)的效能直接影響作業系統的效能。以下主要想討論以下linux系統的程序管理。

linux系統中通過呼叫fork()系統呼叫建立新程序的,該系統呼叫通過複製乙個現有的程序來建立乙個新程序。fork()系統呼叫從核心返回兩次:一次回到父程序,另一次回到新的子程序。

通常,建立新的程序都是為了馬上執行!在linux中,呼叫exec*()這族函式可以建立新的位址空間,並把新的程序載入。程序通過呼叫exit()系統呼叫退出執行。

linux核心把程序存放在任務佇列(task list)雙向鍊錶中。鍊錶中每一項都是task_struct型別,稱為程序描述符的結構,祥見linux/sched.**件

// 這裡是任務(程序)資料結構,或稱為程序描述符。

// *************************=

// long state 任務的執行狀態(-1 不可執行,0 可執行(就緒),>0 已停止)。

// long counter 任務執行時間計數(遞減)(滴答數),執行時間片。

// long priority 執行優先數。任務開始執行時counter = priority,越大執行越長。

// long signal 訊號。是點陣圖,每個位元位代表一種訊號,訊號值=位偏移值+1。

// struct sigaction sigaction[32] 訊號執行屬性結構,對應訊號將要執行的操作和標誌資訊。

// long blocked 程序訊號遮蔽碼(對應訊號位圖)。

// --------------------------

// int exit_code 任務執行停止的退出碼,其父程序會取。

// unsigned long start_code **段位址。

// unsigned long end_code **長度(位元組數)。

// unsigned long end_data **長度 + 資料長度(位元組數)。

// unsigned long brk 總長度(位元組數)。

// unsigned long start_stack 堆疊段位址。

// long pid 程序標識號(程序號)。

// long father 父程序號。

// long pgrp 父程序組號。

// long session 會話號。

// long leader 會話首領。

// unsigned short uid 使用者標識號(使用者id)。

// unsigned short euid 有效使用者id。

// unsigned short suid 儲存的使用者id。

// unsigned short gid 組標識號(組id)。

// unsigned short egid 有效組id。

// unsigned short sgid 儲存的組id。

// long alarm 報警定時值(滴答數)。

// long utime 使用者態執行時間(滴答數)。

// long stime 系統態執行時間(滴答數)。

// long cutime 子程序使用者態執行時間。

// long cstime 子程序系統態執行時間。

// long start_time 程序開始執行時刻。

// unsigned short used_math 標誌:是否使用了協處理器。

// --------------------------

// int tty 程序使用tty 的子裝置號。-1 表示沒有使用。

// unsigned short umask 檔案建立屬性遮蔽位。

// struct m_inode * pwd 當前工作目錄i 節點結構。

// struct m_inode * root 根目錄i 節點結構。

// struct m_inode * executable 執行檔案i 節點結構。

// unsigned long close_on_exec 執行時關閉檔案控制代碼位圖標誌。(參見include/fcntl.h)

// struct file * filp[nr_open] 程序使用的檔案表結構。

// --------------------------

// struct desc_struct ldt[3] 本任務的區域性表描述符。0-空,1-**段cs,2-資料和堆疊段ds&ss。

// --------------------------

// struct tss_struct tss 本程序的任務狀態段資訊結構。

// *************************=

struct task_struct

;

每個程序的核心棧底部還分配了乙個thread_info的結構資料,使在彙編**中計算其偏移量變得相對簡單。thread_info結構定義在asm/thread_info.**件中。

current_thread_info()->task

在linux中,程序有五種狀態:(在linux/sched.**件中定義)

// 這裡定義了程序執行可能處的狀態。

#define task_running 0 // 程序正在執行或已準備就緒。

#define task_interruptible 1 // 程序處於可中斷等待狀態。

#define task_uninterruptible 2 // 程序處於不可中斷等待狀態,主要用於i/o 操作等待。

#define task_zombie 3 // 程序處於僵死狀態,已經停止執行,但父程序還沒發訊號。

#define task_stopped 4 // 程序已停止。

[img]

在task_struct的state域中儲存程序的狀態。設定某程序的狀態,可以通過set_task_state(task,state)函式完成。當然也可以使用set_current_state(state)。

LINUX程序管理

1.程序是什麼?乙個程序就是出於執行期的程式,包括 可執行程式 段 開啟的檔案,掛起的訊號,核心內部資料,處理器狀態,位址空間,乙個或多個執行執行緒,當然還包括用來存放全域性變數的資料段,等等.2.什麼是執行緒?它和程序的關係是什麼樣的?執行緒在linux中具體是怎麼樣實現的?是在程序中活動的物件,...

linux程序管理

程序的監控 使用ps aux 檢視當前所有程序。可以使用top檢視當前程序自動更新列表,在top中m 按記憶體大小排列,p 按cpu佔用率排列 終止和管理程序 程序之間通過訊號來進行通訊 top和kill都用於向程序傳送訊號。kill l顯示訊號編號表。kill 9 pid kill pid 向pi...

Linux 程序管理

1.linux程序管理工具,包括ps pgrep top kill killall pkill 等 常用 ps aux 或lax輸出的解釋 user 程序的屬主 pid 程序的id ppid 父程序 cpu 程序占用的cpu百分比 mem 占用記憶體的百分比 ni 程序的nice值,數值大,表示較少...