Linux——进程系列知识详述(操作系统、PCB进程控制块、查看进程状态等)
文章目錄
- 一、馮諾依曼體系
- 二、操作系統(tǒng)(OS)
- 1.概念
- 2.設(shè)計(jì)OS的目的
- 3.如何“管理”
- 3.系統(tǒng)調(diào)用函數(shù)和庫(kù)函數(shù)
- 三、進(jìn)程
- 1.基本概念
- 2.描述進(jìn)程-PCB
- task_struct-PCB的一種
- task_ struct內(nèi)容分類
- 3.查看進(jìn)程
- 1.ps命令
- 2.`/proc`文件夾
一、馮諾依曼體系
了解進(jìn)程之前,首先了解一些基本知識(shí),如——馮諾依曼體系:我們常見(jiàn)的計(jì)算機(jī),如筆記本。不常見(jiàn)的計(jì)算機(jī)、如服務(wù)器,大部分都服從馮諾依曼體系。
主要由五大部件組成:
1.存儲(chǔ)器用來(lái)存放數(shù)據(jù)和程序
2.運(yùn)算器主要運(yùn)行算數(shù)運(yùn)算和邏輯運(yùn)算,并將中間結(jié)果暫存到運(yùn)算器中
3.控制器主要用來(lái)控制和指揮程序和數(shù)據(jù)的輸入運(yùn)行,以及處理運(yùn)算結(jié)果
4.輸入設(shè)備用來(lái)將人們熟悉的信息形式轉(zhuǎn)換為機(jī)器能夠識(shí)別的信息形式,常見(jiàn)的有鍵盤,鼠標(biāo)等
5.輸出設(shè)備可以將機(jī)器運(yùn)算結(jié)果轉(zhuǎn)換為人們熟悉的信息形式,如打印機(jī)輸出,顯示器輸出等
輸入單元:包括鍵盤,鼠標(biāo),掃描儀,寫板等;
中央處理器(CPU):含有運(yùn)算器和控制器等;
輸出單元:打印機(jī)、顯示器等。
關(guān)于馮諾依曼體系,需強(qiáng)調(diào):
- 這里的存儲(chǔ)器指的是內(nèi)存
- 不考慮緩存情況,這里的CPU能且只能對(duì)內(nèi)存進(jìn)行讀寫,不能訪問(wèn)外設(shè)(輸入或輸出設(shè)備
- 外設(shè)(輸入或輸出設(shè)備)要輸入或者輸出數(shù)據(jù),也只能寫入內(nèi)存或者從內(nèi)存中讀取。
- 一句話,所有設(shè)備都只能直接和內(nèi)存打交道。
特點(diǎn):
- 馮諾依曼體系結(jié)構(gòu)的指令和數(shù)據(jù)均采用二進(jìn)制碼表示;
- 指令在存儲(chǔ)器中按順序存放,通常指令是按順序執(zhí)行的,特定條件下,可以根據(jù)運(yùn)算結(jié)果或者設(shè)定的條件改變執(zhí)行順序;
- 指令和數(shù)據(jù)以同等地位存放于存儲(chǔ)器中,均可按地址尋訪;
- 指令由操作碼和地址碼組成,操作碼用來(lái)表示操作的性質(zhì),地址碼用來(lái)表示操作數(shù)所在存儲(chǔ)器中的位置;
二、操作系統(tǒng)(OS)
1.概念
任何計(jì)算機(jī)系統(tǒng)都包含一個(gè)基本的程序集合,稱為操作系統(tǒng)(OS)。籠統(tǒng)的理解,操作系統(tǒng)包括:
- 內(nèi)核(進(jìn)程管理,內(nèi)存管理,文件管理,驅(qū)動(dòng)管理)
- 其他程序(例如函數(shù)庫(kù),shell程序等等)
2.設(shè)計(jì)OS的目的
- 與硬件交互,管理所有的軟硬件資源(操作系統(tǒng)也是‘軟件’)
- 為用戶程序(應(yīng)用程序)提供一個(gè)良好的執(zhí)行環(huán)境
在整個(gè)計(jì)算機(jī)軟硬件架構(gòu)中,操作系統(tǒng)的定位是:一款純正的“搞管理”的軟件,所以說(shuō),操作系統(tǒng)最重要的作用也就是“管理”
3.如何“管理”
首先,操作系統(tǒng)實(shí)現(xiàn)管理可以分為兩部分—— 描述(結(jié)構(gòu)體)+組織(鏈表)
描述使用自定義數(shù)據(jù)類型,如struct結(jié)構(gòu)體
組織:使用雙向鏈表對(duì)描述的內(nèi)容進(jìn)行組織
通過(guò)下圖觀察操作系統(tǒng)在計(jì)算機(jī)中的定位:
可以看到操作系統(tǒng)所在位置正是整個(gè)計(jì)算機(jī)的中間位置,起到了承上啟下的作用。
3.系統(tǒng)調(diào)用函數(shù)和庫(kù)函數(shù)
在上面的圖中,我們看到操作系統(tǒng)上面的部分叫做系統(tǒng)調(diào)用接口,因此接下來(lái)就解釋一下系統(tǒng)調(diào)用接口和庫(kù)函數(shù)的區(qū)別。
系統(tǒng)調(diào)用接口:由操作系統(tǒng)內(nèi)核為程序員提供的一系列內(nèi)核函數(shù),調(diào)用這些函數(shù)可以使用操作系統(tǒng)管理的資源;
庫(kù)函數(shù):系統(tǒng)調(diào)用在使用上,功能比較基礎(chǔ),對(duì)用戶的要求相對(duì)也比較高,所以,有心的開(kāi)發(fā)者可以對(duì)部分系統(tǒng)調(diào)用進(jìn)行適度封裝,從而形成庫(kù),有了庫(kù),就很有利于更上層用戶或者開(kāi)發(fā)者進(jìn)行二次開(kāi)發(fā)。
查看函數(shù)類別
在linux系統(tǒng)中,我們可以使用man -函數(shù)名命令查看函數(shù)是系統(tǒng)調(diào)用函數(shù)/庫(kù)函數(shù),如果是系統(tǒng)調(diào)用函數(shù),左上角顯示(2),庫(kù)函數(shù)左上角顯示(3)。
三、進(jìn)程
1.基本概念
首先了解程序:程序是經(jīng)過(guò)源代碼編譯出來(lái)的文件,這個(gè)文件是靜態(tài)的。
其次了解進(jìn)程:進(jìn)程是程序執(zhí)行的一個(gè)實(shí)例,是正在執(zhí)行的程序、是動(dòng)態(tài)的,從內(nèi)核的角度看,進(jìn)程是操作系統(tǒng)分配資源的實(shí)體。
2.描述進(jìn)程-PCB
- 進(jìn)程信息被放在一個(gè)叫做進(jìn)程控制塊的數(shù)據(jù)結(jié)構(gòu)中,可以理解為進(jìn)程屬性的集合。
- 課本上稱之為PCB(process control block),Linux操作系統(tǒng)下的PCB是: task_struct。
task_struct-PCB的一種
- 在Linux中描述進(jìn)程的結(jié)構(gòu)體叫做task_struct。
- task_struct是Linux內(nèi)核的一種數(shù)據(jù)結(jié)構(gòu),它會(huì)被裝載到RAM(內(nèi)存)里并且包含著進(jìn)程的信息。
task_ struct內(nèi)容分類
- 標(biāo)示符(pid): 描述本進(jìn)程的唯一標(biāo)示符,用來(lái)區(qū)別其他進(jìn)程。(使用top命令可查看進(jìn)程pid)
- 狀態(tài): 任務(wù)狀態(tài),退出代碼,退出信號(hào)等。
進(jìn)程狀態(tài)可分為:
R:運(yùn)行狀態(tài)
S:可中斷睡眠狀態(tài)
D:不可中斷睡眠狀態(tài)
T:暫停狀態(tài)
?? ctrl+z:使得一個(gè)進(jìn)程變成暫停狀態(tài),暫停后進(jìn)程任然是存在,不同于ctrl+c
t:跟蹤狀態(tài)
?? 在gdb調(diào)試的時(shí)候會(huì)出現(xiàn)
X:死亡狀態(tài)
Z:僵尸狀態(tài) - 優(yōu)先級(jí): 相對(duì)于其他進(jìn)程的優(yōu)先級(jí)。
- 程序計(jì)數(shù)器: 程序中即將被執(zhí)行的下一條指令的地址。
- 內(nèi)存指針: 包括程序代碼和進(jìn)程相關(guān)數(shù)據(jù)的指針,還有和其他進(jìn)程共享的內(nèi)存塊的指針
- 上下文數(shù)據(jù): 進(jìn)程執(zhí)行時(shí)處理器的寄存器中的數(shù)據(jù)[休學(xué)例子,要加圖CPU,寄存器]。
- I/O狀態(tài)信息: 包括顯示的I/O請(qǐng)求,分配給進(jìn)程的I/O設(shè)備和被進(jìn)程使用的文件列表。
- 記賬信息: 可能包括處理器時(shí)間總和,使用的時(shí)鐘數(shù)總和,時(shí)間限制,記賬號(hào)等。
- 其他信息
3.查看進(jìn)程
1.ps命令
可以通過(guò)ps aux命令和ps-ef命令查看進(jìn)程狀態(tài)。也可以配合管道查看想觀察的進(jìn)程,如ps aux|grep [可執(zhí)行程序],使用該命令可以查看指定進(jìn)程的狀態(tài)
2./proc文件夾
/proc`文件夾保存了當(dāng)前操作系統(tǒng)維護(hù)的所有進(jìn)程信息,每一個(gè)進(jìn)程都是一個(gè)文件夾。該文件夾下的文件以pid命名,代表每個(gè)進(jìn)程。
總結(jié)
以上是生活随笔為你收集整理的Linux——进程系列知识详述(操作系统、PCB进程控制块、查看进程状态等)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C++——入门知识点汇总(命名空间、缺省
- 下一篇: linux shell 脚本 svn自动