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