進(jìn)程,即process,到底是什么?
OSTEPv1.01第4.1節(jié)對其定義如下:
The abstraction provided by the OS of a running program is something we will call a process.
Abstraction在計算機科學(xué)和程序開發(fā)中是一個相當(dāng)重要的概念和工具,它表示對于具體細(xì)節(jié)的忽略和封裝。說進(jìn)程是OS提供的abstraction,說明所有的(至少是現(xiàn)代的)操作系統(tǒng),不管其底層實現(xiàn)如何,都有這么個相同的概念,用以代表一個正在運行的程序。
那么在這個共有的“進(jìn)程”概念下,包括了哪些相通的組成部分呢?換句話說,不管在什么操作系統(tǒng),任一時刻,某個進(jìn)程都有一個狀態(tài),那么這個狀態(tài)包括哪些內(nèi)容呢?
- 內(nèi)存地址空間:該進(jìn)程此刻所能訪問的內(nèi)存區(qū)域,以及該區(qū)域內(nèi)的大小、具體數(shù)據(jù)等
- 寄存器:包括程序計數(shù)器(program counter, PC)
- IO信息:比如說該進(jìn)程此刻打開的文件、socket等
- 運行狀態(tài):該進(jìn)程此刻是否正在CPU上運行,是否在等待IO事件等等
- 其他信息,如該進(jìn)程當(dāng)前棧幀的位置
在每個OS的具體實現(xiàn)層面,就必須
- 為上面這些數(shù)據(jù)設(shè)計相應(yīng)的數(shù)據(jù)結(jié)構(gòu),除此之外OS還會定義其它的用于管理進(jìn)程的數(shù)據(jù)結(jié)構(gòu)
- 開發(fā)操作這些數(shù)據(jù)結(jié)構(gòu)及管理進(jìn)程的邏輯(函數(shù)),這部分屬于OS的內(nèi)部邏輯
- 提供OS用戶使用的操作進(jìn)程的API(system calls)