Linux知識心得17 Linux 程序管理初瞭解
阿新 • • 發佈:2021-07-15
筆記
1、程序
程式:存放程式碼的⽂件=》靜態
程序:程式的運⾏過程=》動態
2、檢視程序(ps)
格式: ps [引數] 引數: -a : 顯示一個終端的所有程序 -u : 顯示使用者、CPU使用率以及記憶體使用率 -x : 顯示命令執行的路徑及系統後臺執行的程序 常用組合體:ps -aux 和 ps -ef 注:檢視CPU和記憶體使用情況時建議使用:ps -aux, 如果檢視父程序則使用:ps -ef 例1:顯示當前終端所有的程序 [root@localhost 7]# ps -a PID TTY TIME CMD 85528 pts/0 00:00:00 sleep 85529 pts/1 00:00:00 ps 例2:顯示終端所有程序的使用者及CPU使用率 [root@localhost 7]# ps -au USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1339 0.0 0.1 115544 1980 tty1 Ss+ Jul06 0:00 -bash root 24373 0.0 0.2 115680 2244 pts/0 Ss 08:48 0:02 -bash 注: USER : 使用者名稱 PID : 程序ID號 %CPU : CPU使用率 %MEM : 記憶體使用率 VSZ : 虛擬記憶體 RSS :實際記憶體 TTY :終端 STAT :程序狀態 START:啟動時間 TIME :佔用CPU的時間 COMMAND : 執行的命令 程序狀態 R : 正在執行 S : 可中斷睡眠 D : 植物人狀態 T : 暫停狀態 Z : 僵死狀態 N : 優先順序低 s : 包含子程序 + : 前臺執行 < : 優先順序較⾼的程序 l : 以執行緒的⽅式運⾏ 程序、執行緒以及協程 ````````````````````````````````````````````````````````````````````````````````` 一、程序 程序(Process)是計算機中的程式關於某資料集合上的一次執行活動,是系統進行資源分配和排程的基本單位,是作業系統結構的基礎。在早期面向程序設計的計算機結構中,程序是程式的基本執行實體;在當代面向執行緒設計的計算機結構中,程序是執行緒的容器。程式是指令、資料及其組織形式的描述,程序是程式的實體。 組成 程序是一個實體。每一個程序都有它自己的地址空間,一般情況下,包括文字區域(text region)、資料區域(data region)和堆疊(stack region)。文字區域儲存處理器執行的程式碼;資料區域儲存變數和程序執行期間使用的動態分配的記憶體;堆疊區域儲存著活動過程呼叫的指令和本地變數。 特徵 動態性:程序的實質是程式在多道程式系統中的一次執行過程,程序是動態產生,動態消亡的。 併發性:任何程序都可以同其他程序一起併發執行 獨立性:程序是一個能獨立執行的基本單位,同時也是系統分配資源和排程的獨立單位; 非同步性:由於程序間的相互制約,使程序具有執行的間斷性,即程序按各自獨立的、不可預知的速度向前推進 結構特徵:程序由程式、資料和程序控制塊三部分組成。 多個不同的程序可以包含相同的程式:一個程式在不同的資料集裡就構成不同的程序,能得到不同的結果;但是執行過程中,程式不能發生改變。 ````````````````````````````````````````````````````````````````````````````````` ````````````````````````````````````````````````````````````````````````````````` 二、執行緒 執行緒,有時被稱為輕量級程序(Lightweight Process,LWP),是程式執行流的最小單元。一個標準的執行緒由執行緒ID,當前指令指標(PC),暫存器集合和堆疊組成。另外,執行緒是程序中的一個實體,是被系統獨立排程和分派的基本單位,執行緒自己不擁有系統資源,只擁有一點兒在執行中必不可少的資源,但它可與同屬一個程序的其它執行緒共享程序所擁有的全部資源。 執行緒是程式中一個單一的順序控制流程。程序內有一個相對獨立的、可排程的執行單元,是系統獨立排程和分派CPU的基本單位指令執行時的程式的排程單位。在單個程式中同時執行多個執行緒完成不同的工作,稱為多執行緒。 特點 在多執行緒OS中,通常是在一個程序中包括多個執行緒,每個執行緒都是作為利用CPU的基本單位,是花費最小開銷的實體。執行緒具有以下屬性。 1)輕型實體 執行緒中的實體基本上不擁有系統資源,只是有一點必不可少的、能保證獨立執行的資源。 執行緒的實體包括程式、資料和TCB。執行緒是動態概念,它的動態特性由執行緒控制塊TCB(Thread Control Block)描述。TCB包括以下資訊: (1)執行緒狀態。 (2)當執行緒不執行時,被儲存的現場資源。 (3)一組執行堆疊。 (4)存放每個執行緒的區域性變數主存區。 (5)訪問同一個程序中的主存和其它資源。 用於指示被執行指令序列的程式計數器、保留區域性變數、少數狀態引數和返回地址等的一組暫存器和堆疊。 2)獨立排程和分派的基本單位。 在多執行緒OS中,執行緒是能獨立執行的基本單位,因而也是獨立排程和分派的基本單位。由於執行緒很“輕”,故執行緒的切換非常迅速且開銷小(在同一程序中的)。 3)可併發執行。 在一個程序中的多個執行緒之間,可以併發執行,甚至允許在一個程序中所有執行緒都能併發執行;同樣,不同程序中的執行緒也能併發執行,充分利用和發揮了處理機與外圍裝置並行工作的能力。 4)共享程序資源。 在同一程序中的各個執行緒,都可以共享該程序所擁有的資源,這首先表現在:所有執行緒都具有相同的地址空間(程序的地址空間),這意味著,執行緒可以訪問該地址空間的每一個虛地址;此外,還可以訪問程序所擁有的已開啟檔案、定時器、訊號量機構等。由於同一個程序內的執行緒共享記憶體和檔案,所以執行緒之間互相通訊不必呼叫核心。 ````````````````````````````````````````````````````````````````````````````````` ````````````````````````````````````````````````````````````````````````````````` 三、協程 協程與子例程一樣,協程(coroutine)也是一種程式元件。相對子例程而言,協程更為一般和靈活,但在實踐中使用沒有子例程那樣廣泛。協程源自 Simula 和 Modula-2 語言,但也有其他語言支援。 協程不是程序或執行緒,其執行過程更類似於子例程,或者說不帶返回值的函式呼叫。 一個程式可以包含多個協程,可以對比與一個程序包含多個執行緒, 因而下面我們來比較協程和執行緒。我們知道多個執行緒相對獨立,有自己的上下文,切換受系統控制;而協程也相對獨立,有自己的上下文,但是其切換由自己控制,由當前協程切換到其他協程由當前協程來控制。 協程和執行緒區別:協程避免了無意義的排程,由此可以提高效能,但也因此,程式設計師必須自己承擔排程的責任,同時,協程也失去了標準執行緒使用多CPU的能力。 `````````````````````````````````````````````````````````````````````````````````