1. 程式人生 > >Linux進程精講

Linux進程精講

style 指向 理論 存在 描述 header 秒級 切換 掌握

進程相關概念

程序和進程

程序,是指編譯好的二進制文件,在磁盤上,不占用系統資源(cpu、內存、打開的文件、設備、鎖....)

進程,是一個抽象的概念,與操作系統原理聯系緊密。進程是活躍的程序,占用系統資源。在內存中執行。(程序運行起來,產生一個進程)

程序 → 劇本() 進程 → 戲(舞臺、演員、燈光、道具...)

同一個劇本可以在多個舞臺同時上演。同樣,同一個程序也可以加載為不同的進程(彼此之間互不影響)

如:同時開兩個終端。各自都有一個bash但彼此ID不同。

並發

並發,在操作系統中,一個時間段中有多個進程都處於已啟動運行到運行完畢之間的狀態任一個時刻點上仍只有一個

進程在運行。

例如,當下,我們使用計算機時可以邊聽音樂邊聊天邊上網。 若籠統的將他們均看做一個進程的話,為什麽可以同時運行呢,因為並發。

技術分享圖片

分時復用cpu

單道程序設計

所有進程一個一個排對執行。若A阻塞,B只能等待,即使CPU處於空閑狀態。而在人機交互時阻塞的出現時必然的。所有這種模型在系統資源利用上及其不合理,在計算機發展歷史上存在不久,大部分便被淘汰了。

多道程序設計

在計算機內存中同時存放幾道相互獨立的程序,它們在管理程序控制之下,相互穿插的運行。多道程序設計必須有硬件基礎作為保證。

時鐘中斷即為多道程序設計模型的理論基礎。 並發時,任意進程在執行期間都不希望放棄

cpu。因此系統需要一種強制讓進程讓出cpu資源的手段。時鐘中斷有硬件基礎作為保障,對進程而言不可抗拒。 操作系統中的中斷處理函數,來負責調度程序執行。

在多道程序設計模型中,多個進程輪流使用CPU (分時復用CPU資源)。而當下常見CPU為納秒級,1秒可以執行大約10億條指令。由於人眼的反應速度是毫秒級,所以看似同時在運行。

1s = 1000ms, 1ms = 1000us, 1us = 1000ns 1000000000

實質上,並發是宏觀並行,微觀串行! -----推動了計算機蓬勃發展,將人類引入了多媒體時代。

CPUMMU

技術分享圖片

中央處理器(CPU)

技術分享圖片

內存管理單元MMU

進程控制塊
PCB

我們知道,每個進程在內核中都有一個進程控制塊(PCB)來維護進程相關的信息,Linux內核的進程控制塊是task_struct結構體。

/usr/src/linux-headers-3.16.0-30/include/linux/sched.h文件中可以查看struct task_struct 結構體定義。其內部成員有很多,我們重點掌握以下部分即可:

* 進程id。系統中每個進程有唯一的id,在C語言中用pid_t類型表示,其實就是一個非負整數。

* 進程的狀態,有就緒、運行、掛起、停止等狀態。

* 進程切換時需要保存和恢復的一些CPU寄存器。

* 描述虛擬地址空間的信息。

* 描述控制終端的信息。

* 當前工作目錄(Current Working Directory)。

* umask掩碼。

* 文件描述符表,包含很多指向file結構體的指針。

* 和信號相關的信息。

* 用戶id和組id

* 會話(Session)和進程組。

* 進程可以使用的資源上限(Resource Limit)。

進程狀態

進程基本的狀態有5種。分別為初始態,就緒態,運行態,掛起態與終止態。其中初始態為進程準備階段常與就緒態結合來看

技術分享圖片

Linux進程精講