? ?進(jìn)程的定義和PCB
? ? ? 什么是進(jìn)程?進(jìn)程就是一個運(yùn)行起來(也就是說加載到內(nèi)存)的一個程序。而程序的本質(zhì)就是文件,當(dāng)我們寫完代碼保存,它便形成了一個保存在磁盤上的二進(jìn)制代碼文件。由于馮諾伊曼體系,cpu只和存儲進(jìn)行數(shù)據(jù)交流,因此要想cpu執(zhí)行,必須先將外存上的文件載入內(nèi)存中,而磁盤上文件加載到了內(nèi)存時也就變成了進(jìn)程。
? ? PCB:事實(shí)上由于在內(nèi)存中同時運(yùn)行的進(jìn)程很多,操作系統(tǒng)需要對所有的進(jìn)程進(jìn)行一個統(tǒng)一的管理調(diào)度,就例如大學(xué)校園里學(xué)校將每個學(xué)生的學(xué)號,姓名,年齡通過excel管理在一張表上,操作系統(tǒng)在內(nèi)部定義了一個PCB(Process Control Block)進(jìn)程控制塊。? PCB本質(zhì)上就是一個內(nèi)核用c語言定義的結(jié)構(gòu)體。?當(dāng)一個進(jìn)程進(jìn)入到內(nèi)存時,操作系統(tǒng)就對應(yīng)的創(chuàng)建一個進(jìn)程控制塊PCB對該進(jìn)程進(jìn)行管理,每個PCB都有一個唯一的PID。所謂創(chuàng)建進(jìn)程,其實(shí)就是創(chuàng)建PCB。
? ? 類似的,PCB將進(jìn)程的各種特征通過一個struck結(jié)構(gòu)體保存,操作系統(tǒng)通過結(jié)構(gòu)體指針對進(jìn)程進(jìn)行操作。類似于:
struct task_struct {
//進(jìn)程所有屬性
//進(jìn)程所對應(yīng)的代碼和地址
struct tast_struct *next;//指向下一個進(jìn)程的指針
}
struct tast_struct *p1 = malloc(struct task_struct);
p1->進(jìn)程屬性;
而同時內(nèi)存為了管理不同的PCB,操作系統(tǒng)創(chuàng)建了一個數(shù)據(jù)結(jié)構(gòu)對PCB進(jìn)行管理。將PCB依次首尾相連構(gòu)建成一個鏈表。
其好處是,對進(jìn)程管理就簡化成對進(jìn)程的PCB整個鏈表進(jìn)行管理。進(jìn)程控制就變?yōu)榱藢CB鏈表這個內(nèi)核數(shù)據(jù)結(jié)構(gòu)的增刪查改。
(有的內(nèi)核版本管理PCB的數(shù)據(jù)結(jié)構(gòu)可能不是鏈表,還可以是數(shù)組,索引表等數(shù)據(jù)結(jié)構(gòu))
如圖所示,可以更好的理解PCB,進(jìn)程,文件之間的關(guān)系。進(jìn)程 = 該進(jìn)程的代碼 + 指向該進(jìn)程的進(jìn)程控制塊(PCB)。
windows任務(wù)管理器就是一個直觀的例子。
通過一個例子具體觀察一下linux操作系統(tǒng)中的進(jìn)程,我們可以編寫一個可執(zhí)行程序myproc,讓它顯示自己的pid:
此時我將它保存,它成為一個保存在磁盤上的一個文件而已,并沒有進(jìn)入內(nèi)存,因此并不是進(jìn)程:
通過make編譯形成可執(zhí)行文件,再運(yùn)行該可執(zhí)行文件,它就形成了一個內(nèi)存上的進(jìn)程:
關(guān)閉進(jìn)程再開啟時,進(jìn)程pid會改變。
此時,在操作系統(tǒng)下有一個/proc目錄,目錄下所有子目錄名均為數(shù)字,每個數(shù)字都代表一個進(jìn)程的PID。很顯然,進(jìn)程在操作系統(tǒng)內(nèi)核中是以文件顯示出來的。
每當(dāng)新進(jìn)程加載進(jìn)入內(nèi)存時,操作系統(tǒng)都會在/proc目錄下創(chuàng)建一個目錄名為進(jìn)程PID的文件夾,同理,退出進(jìn)程會將其對應(yīng)的目錄刪除。我們找到目錄名為3271的目錄,也就是我上面所執(zhí)行的進(jìn)程的PID:
文章來源:http://www.zghlxwxcb.cn/news/detail-793821.html
其指向的路徑是磁盤上我剛創(chuàng)建的可執(zhí)行程序。文章來源地址http://www.zghlxwxcb.cn/news/detail-793821.html
到了這里,關(guān)于操作系統(tǒng)進(jìn)程定義和PCB詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!