進(jìn)程
進(jìn)程是操作系統(tǒng)的核心
進(jìn)程由以下三部分組成:
- 一個(gè)可執(zhí)行的程序笋妥。
- 該程序所需的相關(guān)數(shù)據(jù)(變量祷蝌,工作空間痒钝,緩沖區(qū))
- 該程序的執(zhí)行上下文(context)婉支。
上下文是必不可少的鸯隅。所有操作系統(tǒng)用來管理進(jìn)程和處理器執(zhí)行進(jìn)程的信息都包括在執(zhí)行上下文中。這個(gè)上下文包括寄存器的內(nèi)容向挖,進(jìn)程的優(yōu)先級(jí)以及進(jìn)程是否等待I/O事件的完成滋迈。
操作系統(tǒng)設(shè)計(jì)和層次結(jié)構(gòu)
層名字 | 對(duì)象 |
---|---|
13 外殼 | 用戶程序設(shè)計(jì)環(huán)境 |
12 用戶進(jìn)程 | 用戶進(jìn)程 |
11 目錄 | 目錄 |
10 設(shè)備 | 外設(shè),打印機(jī)户誓,顯示器等 |
9 文件系統(tǒng) | 文件 |
8 通信 | 管道 |
7 虛擬存儲(chǔ)器 | 段饼灿,頁 |
6 局部輔存 | 數(shù)據(jù)塊,設(shè)備通道 |
5 進(jìn)程原語 | 進(jìn)程原語帝美,信號(hào)量碍彭,就緒隊(duì)列 |
4 中斷 | 中斷處理程序 |
3 過程 | 過程,調(diào)用棧悼潭,顯示 |
2 指令集 | 演算棧庇忌,微程序解釋器 |
1 電子線路 | 寄存器,邏輯門舰褪,總線等 |
第一層:由電路組成皆疹,其中的對(duì)象是寄存器,村粗單元和邏輯門占拍,對(duì)這些對(duì)象的操作是一些動(dòng)作如清除寄存器或讀取內(nèi)存單元等略就。
第二層:是處理器的指令集,這一層的操作是那些機(jī)器語言指令集所允許的一些指令晃酒,入ADD表牢,SUBTRACT,LOAD,STORE等。
第三層:這一層加入過程概念贝次,包括調(diào)用返回操作崔兴。
第四層:中斷時(shí)處理器保存當(dāng)前內(nèi)容并調(diào)用中斷處理程序。
這四層并不是操作系統(tǒng)的一部分蛔翅,但他們組成了處理器硬件敲茄,然而,操作系統(tǒng)中的一些元素山析,如中斷處理程序堰燎,已在這一層出現(xiàn)。
第五層:進(jìn)程作為程序的執(zhí)行在本層出現(xiàn)盖腿。w為了支持多進(jìn)程爽待,對(duì)操作系統(tǒng)而言基本的要求包括要有掛起和重新執(zhí)行進(jìn)程的能力。這就要求保存寄存器和值以便從一個(gè)進(jìn)程切換到另一個(gè)進(jìn)程翩腐。
第六層:處理計(jì)算機(jī)的輔存鸟款,這一層的主要功能有讀/寫扇區(qū),進(jìn)行定位茂卦,以及傳輸數(shù)據(jù)塊何什。第六層依靠第五層的調(diào)度操作。
第七層:為進(jìn)程創(chuàng)建邏輯空間等龙。真一層將虛擬空間組織成塊处渣,并在主,輔存之間調(diào)度蛛砰,當(dāng)一個(gè)所需塊不在主存中時(shí)罐栈,本層將邏輯地要求第六層傳輸。
第八層:處理進(jìn)程間的信息和消息通信泥畅。其最有利的工具之一就是管道(pipe)荠诬。管道是進(jìn)程間數(shù)據(jù)流的一個(gè)邏輯通道,它也可用來將外部設(shè)備和文件同進(jìn)程連起來位仁。
第九層:支持長(zhǎng)期存儲(chǔ)文件柑贞。
第十層:利用標(biāo)準(zhǔn)接口,提供對(duì)外部設(shè)備的訪問聂抢。
第十一層:負(fù)責(zé)保存系統(tǒng)資源和對(duì)象的外部和內(nèi)部定義間的聯(lián)系钧嘶。外部定義是應(yīng)用程序和用戶可以使用的名字。內(nèi)部定義是能夠被操作系統(tǒng)底層部分用來控制一個(gè)對(duì)象的地址或其他指示符琳疏。
第十二層:這一層支持所有管理進(jìn)程所必須的信息有决,這包括進(jìn)程虛擬地址空間,與該進(jìn)程由相互作用的進(jìn)程和對(duì)象表列空盼,創(chuàng)建該進(jìn)程時(shí)傳遞的參數(shù)等疮薇。
第十三層:在操作系統(tǒng)同用戶間提供一個(gè)界面。他被成為“外殼(shell)”我注,這是因?yàn)樗麑⒂脩艉筒僮飨到y(tǒng)具體實(shí)現(xiàn)分開并使操作系統(tǒng)就像一個(gè)功能的集合按咒。這個(gè)外殼接受用戶命令,解釋后根據(jù)需要?jiǎng)?chuàng)建并控制進(jìn)程但骨。
進(jìn)程狀態(tài)
有2種進(jìn)程狀態(tài)模型:
- 每個(gè)進(jìn)程只有2種狀態(tài):運(yùn)行励七,非運(yùn)行。
- 有一個(gè)進(jìn)程隊(duì)列奔缠,操作系統(tǒng)從這個(gè)對(duì)列中分派任務(wù)掠抬。
進(jìn)程的產(chǎn)生和終止
當(dāng)有一個(gè)新進(jìn)程要加入當(dāng)錢進(jìn)程隊(duì)列時(shí),操作系統(tǒng)產(chǎn)生一個(gè)控制進(jìn)程的數(shù)據(jù)結(jié)構(gòu)校哎,并且為該進(jìn)程分配地址空間两波,這樣瞳步,新進(jìn)程就產(chǎn)生了。
通常有4種事件會(huì)導(dǎo)致產(chǎn)生新的進(jìn)程:
- 新批處理任務(wù)
- 交互式登錄
- OS產(chǎn)生以提供服務(wù)
- 由已存在進(jìn)程產(chǎn)生腰奋。
進(jìn)程的終止:
- 正常結(jié)束
- 超時(shí)限制
- 內(nèi)存不足
- 超界(進(jìn)程試圖對(duì)不允許接近的區(qū)域進(jìn)行操作)
- 保護(hù)錯(cuò)誤(例如對(duì)只讀文件進(jìn)行寫操作)
- 算術(shù)錯(cuò)誤(例如除以零)
- 超越時(shí)限(進(jìn)程等待時(shí)間超過了某事件發(fā)生的制定時(shí)間)
- I/O失敗
- 非法指令
- 特權(quán)指令(進(jìn)程試圖執(zhí)行一個(gè)保留給OS使用的指令)
- 錯(cuò)誤使用數(shù)據(jù)(數(shù)據(jù)類型出錯(cuò)或數(shù)據(jù)為初始化)
- 操作員或OS干預(yù)
- 父進(jìn)程終止
- 父進(jìn)程需要(父進(jìn)程擁有終止所有子孫進(jìn)程的權(quán)利)
現(xiàn)代操作系統(tǒng)中最基本的組件就是進(jìn)程单起。操作系統(tǒng)的重要功能就是創(chuàng)建,管理和終止進(jìn)程劣坊。當(dāng)進(jìn)程處于活動(dòng)狀態(tài)時(shí)嘀倒,操作系統(tǒng)必須保證每一進(jìn)程都分到處理器執(zhí)行時(shí)間,還要協(xié)調(diào)他們的活動(dòng)局冰,管理沖突請(qǐng)求测蘑,并分配系統(tǒng)資源給這些進(jìn)程。要履行其進(jìn)程管理職能康二,操作系統(tǒng)還必須維持對(duì)每一進(jìn)程的描述碳胳。每個(gè)進(jìn)程是由一個(gè)進(jìn)程映像來表示的,它包括進(jìn)程執(zhí)行的地址空間和一個(gè)進(jìn)程控制塊沫勿。后者包含了操作系統(tǒng)管理該進(jìn)程所需的全部信息固逗,包括其目前的狀態(tài),分配給他的資源藕帜,優(yōu)先級(jí)及其他有關(guān)數(shù)據(jù)烫罩。
在進(jìn)程生命周期中,他會(huì)在很多狀態(tài)之間移動(dòng)洽故。這些狀態(tài)中最重要的是就緒贝攒,運(yùn)行和阻塞。就緒進(jìn)程是指目前并未執(zhí)行但一旦得到操作系統(tǒng)調(diào)度就準(zhǔn)備運(yùn)行的進(jìn)程时甚。運(yùn)行進(jìn)程是指當(dāng)前正被處理器執(zhí)行的進(jìn)程隘弊。在多處理其系統(tǒng)中,可有不止一個(gè)進(jìn)程處于該狀態(tài)荒适。阻塞進(jìn)程是等待某件事完成(比如I/O操作)的進(jìn)程梨熙。
運(yùn)行進(jìn)程可能被中斷或執(zhí)行操作系統(tǒng)的訪管而終止,所謂中斷是指發(fā)生在進(jìn)程之外并可被處理器所識(shí)別的事件刀诬。在這兩種情況下咽扇,處理器都將執(zhí)行切換操作,將控制轉(zhuǎn)交給操作系統(tǒng)例程陕壹。在完成所需工作后质欲,曹組系統(tǒng)可能恢復(fù)被終止的進(jìn)程或切換到另一進(jìn)程。
一些操作系統(tǒng)區(qū)分了進(jìn)程和線程的概念糠馆,前者與資源的擁有有關(guān)嘶伟,而后者與程序的執(zhí)行有關(guān)。