Linux 程序概念

2021-09-19 11:46:23 字數 2417 閱讀 9753

什麼是程序?

就是執行中的程式,而系統將程序的全部資訊放在乙個結構體–pcb,在linux系統下的pcb就是一 個叫做task_struct的結構體

task_struct包含資訊:

pid(識別符號):描述程序的唯一識別符號,用來區別與其他程序

狀態:任務狀態、退出**、退出訊號

優先順序:相對於其他程序的優先級別

程式計數器:記錄即將被執行的下一條指令的位址空間

記憶體指標:包括程式**和程序相關資料的指標、和其他程序共享的記憶體塊的指標

上下文資料:程序在執行是處理器的暫存器中的資料

i/o狀態資訊:包括顯示的i/o請求,分配給程序的i/o裝置和被程序使用的檔案列表

記賬資訊:可能包括處理器的時間總和、使用的時鐘數總和、時間限制、記賬號

其他資訊

建立程序:

fork()—通過複製呼叫程序(父程序)建立乙個新的程序(子程序)

複製:複製父程序的pcb建立子程序—**共享(執行位置相同) 資料獨有

fork()函式有倆個返回值

父程序則返回子程序的pid(便於控制子程序),這個pid>0;子程序則返回0

為什麼要建立子程序?

分攤壓力 執行其他任務

程序狀態:

r(running):程序在執行或在執行佇列裡

s(sleeping):可中斷睡眠,程序在等待事件完成

d(disk sleep):不可中斷睡眠,程序通常會等待io的結束

t(stopped):可以通過傳送sigstop訊號給程序來停止程序。這個暫停的程序可以通過傳送sigcont訊號讓程序繼續執行

x(dead):這個狀態只是乙個返回狀態,不會在任務列表中看到這個程序

z(殭屍程序):處於僵死狀態的程序(程序退出了,但資源未被釋放)

產生原因:子程序先於父程序退出,退出原因儲存在pcb中,然後系統通知父程序子程序已退出,趕緊獲取子程序退出資訊,但由於父程序由於某種原因未能及時處理,而系統不敢隨意釋放子程序所有資源。

解決方法:在父程序使用waitpid和wait 作用都是收集殭屍程序留下的資訊

建立乙個個殭屍程序的例子:

t(孤兒程序):父程序先於子程序退出,子程序成為孤兒程序執行在後台,而其父程序變為1號程序(孤兒院)

同樣來乙個孤兒程序的例子:

優先順序:

資源分配的優先分配評級(數字) — 決定資源的優先分配權

pri即代表程序可被執行的優先順序,其值越小優先順序越高

ni代表這個程序的nice值,可以通過nice值改變程序優先順序 pri = pri+ni ni -19~20

環境變數:儲存作業系統執行環境引數的變數—作業系統執行配置更加方便

命令: env(檢視環境變數) set(臨時變數 和環境變數) echo

export 設定或宣告乙個環境變數 unset

常見環境變數: home shell path

**中的使用/特性:

命令列的第三個引數:

int main(int argc,char* ar**,char* env)

int

main()

return0;

}

通過第三r方變數environ獲取:

extern char**environ;

int

main

(int argc,

char

* ar**)

return0;

}

通過系統呼叫獲取特定的環境變數

char* getenv(char* name)

int

main()

Linux 程序概念

任何計算機系統都包含乙個基本的程式集合,成為作業系統 os 它包括 作業系統是管管理的軟體 使用者操作 使用者操作介面 shell,lib,指令等 作業系統 驅動程式 硬體 作業系統管理硬體 系統呼叫 在開發者角度,作業系統會對外表現為乙個整體,但是會暴露自己的一部分介面供上層開發者使用,這部分由作...

Linux 程序概念

程序排程演算法 在早期作業系統的排程方式大多數是非剝奪的,這是由於早期的應用一般是科學計算或事務處理,不太把人機互動的響應時間指標放在首要位置。在這種情況下,正在執行的程序可一直占用cpu直到程序阻塞或終止。這種方式的排程演算法可以很簡單,且比較適用對於響應時間不關心或者關心甚少的批處理科學計算或事...

Linux 程序概念

調研程序的排程演算法.短程序優先演算法,對預計執行時間短的程序優先分派處理機。通常後來的短程序不搶先正在執行的程序。演算法優點 相比fcfs 演算法,該演算法可改善平均周轉時間和平均帶權周轉時間,縮短程序的等待時間,提高系統的吞吐量。演算法缺點 對長程序非常不利,可能長時間得不到執行,且未能依據程序...