1. 程式人生 > 其它 >Linux知識心得17 Linux 程序管理初瞭解

Linux知識心得17 Linux 程序管理初瞭解

筆記

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的能力。

​`````````````````````````````````````````````````````````````````````````````````

程序狀態切換