ch2-2.3進(jìn)程及其實(shí)現(xiàn) NJU_第1頁(yè)
ch2-2.3進(jìn)程及其實(shí)現(xiàn) NJU_第2頁(yè)
ch2-2.3進(jìn)程及其實(shí)現(xiàn) NJU_第3頁(yè)
ch2-2.3進(jìn)程及其實(shí)現(xiàn) NJU_第4頁(yè)
ch2-2.3進(jìn)程及其實(shí)現(xiàn) NJU_第5頁(yè)
已閱讀5頁(yè),還剩38頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

2.3進(jìn)程及其實(shí)現(xiàn)進(jìn)程的定義和屬性進(jìn)程的狀態(tài)和轉(zhuǎn)換進(jìn)程的描述進(jìn)程切換與模式切換進(jìn)程的控制實(shí)例研究:UNIX

SVR4進(jìn)程管理實(shí)例研究:Linux進(jìn)程管理2.3.1進(jìn)程的定義和性質(zhì)進(jìn)程是一個(gè)可并發(fā)執(zhí)行的具有獨(dú)立功能的程序關(guān)于某個(gè)數(shù)據(jù)集合的一次執(zhí)行過程,也是操作系統(tǒng)進(jìn)行資源分配和保護(hù)的基本單位。進(jìn)程是一個(gè)既能用來共享資源,又能描述程序并 發(fā)執(zhí)行過程的一個(gè)基本單位。操作系統(tǒng)引入進(jìn)程的概念從理論角度看,是對(duì)正在運(yùn)行的程序過程的抽象;從實(shí)現(xiàn)角度看,是一種數(shù)據(jù)結(jié)構(gòu),目的在于清晰地刻劃動(dòng)態(tài)系統(tǒng)的內(nèi)在規(guī)律,有效管理和調(diào)度進(jìn)入計(jì)算機(jī)系統(tǒng)主存儲(chǔ)器運(yùn)行的程序。操作系統(tǒng)為什么要引入進(jìn)程概念?原因1-刻畫系統(tǒng)的動(dòng)態(tài)性,發(fā)揮系統(tǒng)的并發(fā)性,提高資源利用率。原因2-它能解決系統(tǒng)的“共享性”,正確描述程序的執(zhí)行狀態(tài)。“可再用”程序

“可再入”程序“可再入”程序具有的性質(zhì)進(jìn)程的屬性結(jié)構(gòu)性:共享性:動(dòng)態(tài)性:獨(dú)立性:制約性:并發(fā)性:“可再入”程序舉例編譯程序P(P的入口,處理源程序乙)(P把源程序甲的信息記盤等磁盤完成)AB源程序甲源程序乙2.3.2進(jìn)程的狀態(tài)和轉(zhuǎn)換進(jìn)程三態(tài)模型及其狀態(tài)轉(zhuǎn)換運(yùn)行態(tài)就緒態(tài)等待態(tài)選中落選出現(xiàn)等待事件等待事件結(jié)束進(jìn)程五態(tài)模型及其轉(zhuǎn)換運(yùn)行態(tài)就緒態(tài)等待態(tài)選中落選出現(xiàn)等待事件等待事件結(jié)束新建態(tài)終止態(tài)進(jìn)程的掛起為什么要有“掛起”狀態(tài)?由于進(jìn)程的不斷創(chuàng)建,系統(tǒng)資源已不能滿足進(jìn)程運(yùn)行的要求,就必須把某些進(jìn)程掛起(suspend),對(duì)換到磁盤鏡像區(qū)中,暫時(shí)不參與進(jìn)程調(diào)度,起到平滑系統(tǒng)操作負(fù)荷的目的。進(jìn)程的掛起原因(1)系統(tǒng)中的進(jìn)程均處于等待狀態(tài),需要把一些阻塞進(jìn)程對(duì)換出去,騰出足夠內(nèi)存

裝入就緒進(jìn)程運(yùn)行。進(jìn)程競(jìng)爭(zhēng)資源,導(dǎo)致系統(tǒng)資源不足,負(fù)荷過重,需要掛起部分進(jìn)程以調(diào)整系統(tǒng)

負(fù)荷,保證系統(tǒng)的實(shí)時(shí)性或讓系統(tǒng)正常運(yùn)行。定期執(zhí)行的進(jìn)程(如審計(jì)、監(jiān)控、記賬程序)對(duì)換出去,以減輕系統(tǒng)負(fù)荷。進(jìn)程的掛起原因(2)用戶要求掛起自己的進(jìn)程,以便進(jìn)行某些調(diào)試、檢查和改正。父進(jìn)程要求掛起后代進(jìn)程,以進(jìn)行某些檢查和改正。操作系統(tǒng)需要掛起某些進(jìn)程,檢查運(yùn)行中資源使用情況,以改善系統(tǒng)性能;或當(dāng)系統(tǒng)出現(xiàn)故障或某些功能受到破壞時(shí),需要掛起某些進(jìn)程以排除故障。具有掛起功能的進(jìn)程狀態(tài)及其轉(zhuǎn)換掛起等待事件結(jié)束出現(xiàn)等待事件解除掛起掛起落選選中運(yùn)行態(tài)就緒態(tài)等待事件結(jié)束終止態(tài)新建態(tài)掛起就緒態(tài)解除掛起掛起掛起等待態(tài)等待態(tài)提交提交具有掛起進(jìn)程功能的進(jìn)程狀態(tài)進(jìn)程增加了兩個(gè)新狀態(tài):掛起就緒態(tài)(ready

suspend)表明進(jìn)程具備運(yùn)行條件但目前在二級(jí)存儲(chǔ)器中,當(dāng)它被對(duì)換到主存才能被調(diào)度執(zhí)行。掛起等待態(tài)(blocked

suspend)表明進(jìn)程正在等待某一個(gè)事件且在二級(jí)存儲(chǔ)器中。掛起進(jìn)程具有如下特征該進(jìn)程不能立即被執(zhí)行。掛起進(jìn)程可能會(huì)等待事件,但所 等待事件是獨(dú)立于掛起條件的, 事件結(jié)束并不能導(dǎo)致進(jìn)程具備執(zhí) 行條件。進(jìn)程進(jìn)入掛起狀態(tài)是由于操作系 統(tǒng)、父進(jìn)程或進(jìn)程本身阻止它的 運(yùn)行。結(jié)束進(jìn)程掛起狀態(tài)的命令只能通 過操作系統(tǒng)或父進(jìn)程發(fā)出。2.3.3進(jìn)程的描述操作系統(tǒng)核心控制結(jié)構(gòu)是進(jìn)程結(jié)構(gòu),資源管理的數(shù)據(jù)結(jié)構(gòu)將圍繞進(jìn)程結(jié)構(gòu)展開。操作系統(tǒng)的控制表分為四類,

進(jìn)程控制表,存儲(chǔ)控制表,I/O控制表和文件控制表。操作系統(tǒng)控制表的通用結(jié)構(gòu)MemoryDevicesFilesProcessesMemory

TablesI/O

TablesFile

TablesPrimary

Process

TableProcess

NProcess

1Process

2……Process

ImageProcess

1Image……Process

NImage進(jìn)程映像操作系統(tǒng)中把進(jìn)程物理實(shí)體和支持進(jìn)程運(yùn)行的環(huán)境合稱為進(jìn)程上下文(context)。當(dāng)系統(tǒng)調(diào)度新進(jìn)程占有處理器時(shí),

新老進(jìn)程隨之發(fā)生上下文切換。進(jìn)

程的運(yùn)行被認(rèn)為是在上下文中執(zhí)行。進(jìn)程上下文組成用戶級(jí)上下文:由用戶程序塊、用 戶數(shù)據(jù)塊和用戶堆棧組成的進(jìn)程地 址空間。系統(tǒng)級(jí)上下文:包括進(jìn)程的標(biāo)識(shí)信息、現(xiàn)場(chǎng)信息和控制信息,進(jìn)程環(huán)境塊,及系統(tǒng)堆棧等組成的進(jìn)程地址空間。寄存器上下文:由PSW寄存器和各類控制寄存器、地址寄存器、通用寄存器組成。進(jìn)程有四個(gè)要素組成?進(jìn)程程序塊?進(jìn)程數(shù)據(jù)塊?系統(tǒng)堆棧?用戶堆棧用戶進(jìn)程在虛擬內(nèi)存中的組織進(jìn)程標(biāo)識(shí)信息進(jìn)程現(xiàn)場(chǎng)信息進(jìn)程控制信息用戶堆棧用戶私有地址空間(代碼、數(shù)據(jù))進(jìn)程控制塊共享地址空間進(jìn)程控制塊進(jìn)程控制塊P

C

B,是操作系統(tǒng)用于記錄和刻劃進(jìn)程狀態(tài)及有關(guān)信息的數(shù)據(jù)結(jié)構(gòu)。也是操作系統(tǒng)掌握進(jìn)程的唯一資料結(jié)構(gòu),它包括了進(jìn)程執(zhí)行時(shí)的情況,以及進(jìn)程讓出處理器后所處的狀態(tài)、斷點(diǎn)等信息。進(jìn)程控制塊包含三類信息 標(biāo)識(shí)信息現(xiàn)場(chǎng)信息控制信息進(jìn)程管理處于同一狀態(tài)的所有PCB鏈接在一起的數(shù)據(jù)結(jié)構(gòu)稱為進(jìn)程隊(duì)列

(Process

Queues)。同一狀態(tài)進(jìn)程的PCB既可按先來

先到的原則排成隊(duì)列;也可按優(yōu)先數(shù)或其它原則排成隊(duì)列。單向鏈接與雙向鏈接隊(duì)列標(biāo)志系統(tǒng)為每個(gè)隊(duì)列設(shè)置一個(gè)隊(duì)列標(biāo)志:單向鏈接時(shí),隊(duì)列標(biāo)志指引元指向隊(duì)列中第一個(gè)進(jìn)程的隊(duì)列指引元的位置;雙向鏈接時(shí),隊(duì)列標(biāo)志的后向指引元指向隊(duì)列中第一個(gè)進(jìn)程的后向隊(duì)列指引元的位置;隊(duì)列標(biāo)志的前向指引元指向隊(duì)列中最后一個(gè)進(jìn)程的前向隊(duì)列指引元的位置進(jìn)程控制塊的鏈接隊(duì)列標(biāo)志隊(duì)列標(biāo)志00后向0 前向(a)單向連接(b)雙向連接是隊(duì)列指引元隊(duì)列管理和狀態(tài)轉(zhuǎn)換示意圖處理器提交 指派超時(shí)事件1等待隊(duì)列事件2等待隊(duì)列事件n等待隊(duì)列就緒隊(duì)列 完成……等待事件1等待事件2等待事件n事件1出現(xiàn)事件2出現(xiàn)事件n出現(xiàn)表格法組織PCB表格法組織PCB。所有進(jìn)程的

PCB都組織在一個(gè)線性表中,進(jìn)程調(diào)度時(shí)需要查找整個(gè)PCB表;也可以把相同狀態(tài)進(jìn)程的PCB組織在一個(gè)線性表中,系統(tǒng)有多個(gè)線性表,這樣可縮短查表時(shí)間。2.3.4進(jìn)程切換與CPU模式切換進(jìn)程切換是讓處于運(yùn)行態(tài)的進(jìn)程中斷運(yùn)行,讓出處理器,這時(shí)要做一次進(jìn)程上下文切換、即保存老進(jìn)程狀態(tài)而裝入被保護(hù)了的新進(jìn)程的狀態(tài),以便新進(jìn)程運(yùn)行進(jìn)程切換的步驟保存被中斷進(jìn)程的處理器現(xiàn)場(chǎng)信息修改被中斷進(jìn)程的進(jìn)程控制塊的有關(guān)信息,如進(jìn)程狀態(tài)等把被中斷進(jìn)程的進(jìn)程控制塊加入有關(guān)隊(duì)列選擇下一個(gè)占有處理器運(yùn)行的進(jìn)程修改被選中進(jìn)程的進(jìn)程控制塊的有關(guān)信息

根據(jù)被選中進(jìn)程設(shè)置操作系統(tǒng)用到的地址轉(zhuǎn)換和存儲(chǔ)保護(hù)信息根據(jù)被選中進(jìn)程恢復(fù)處理器現(xiàn)場(chǎng)調(diào)度和切換時(shí)機(jī)問題

請(qǐng)求調(diào)度的事件發(fā)生后,就會(huì)運(yùn)行低級(jí)調(diào)度程序,低級(jí)調(diào)度程序選中新的就緒進(jìn)程后,就會(huì)進(jìn)行上下文切換。實(shí)際上,由于種種原因,調(diào)度和切換并不一定能一氣呵成。

通常的做法是,由內(nèi)核置上請(qǐng)求調(diào)度標(biāo)志,延遲到上述工作完成后再進(jìn)行調(diào)度和進(jìn)程

上下文切換,Linux進(jìn)程調(diào)度標(biāo)志位need-resched, Windows延遲過程調(diào)用DPC/dispatch軟件 中斷。CPU模式切換當(dāng)中斷發(fā)生時(shí),暫時(shí)中斷正在執(zhí) 行的用戶進(jìn)程,把進(jìn)程從用戶狀 態(tài)切換到內(nèi)核狀態(tài),去執(zhí)行操作 系統(tǒng)例行程序以獲得服務(wù),這就 是一次模式切換,內(nèi)核在被中斷了的進(jìn)程的上下文 中對(duì)這個(gè)中斷事件作處理,即使 該中斷可能不是此進(jìn)程引起的模式切換的步驟保存被中斷進(jìn)程的處理器現(xiàn)場(chǎng) 信息。根據(jù)中斷號(hào)置程序計(jì)數(shù)器。把用戶狀態(tài)切換到內(nèi)核狀態(tài), 以便執(zhí)行中斷處理程序。CPU模式切換與進(jìn)程上下文切換模式切換不同于進(jìn)程切換,它并不引起進(jìn)程狀態(tài)變化,也不一定引起進(jìn)程的切換,在完成了中斷調(diào)用之后,完全可以再通過一次逆向的模式切換來繼續(xù)執(zhí)行用戶進(jìn)程。UNIX中進(jìn)程上下文切換和模式切換核心態(tài)運(yùn)行斷(隱含模式切換)模式切換用戶態(tài)運(yùn)行系統(tǒng)調(diào)用或中等待狀態(tài)就緒狀態(tài)發(fā)生事件喚醒調(diào)度進(jìn)程中斷、中斷返回允許的上下文切換切換2.3.5進(jìn)程的控制處理器管理的一個(gè)主要工作是對(duì)進(jìn)程的控制,包括:創(chuàng)建進(jìn)程、阻塞進(jìn)程、喚醒進(jìn)程、掛起進(jìn)程、激活進(jìn)程、終止進(jìn)程和撤銷進(jìn)程等。這些控制和管理功能由操作系統(tǒng)中的原語(yǔ)實(shí)現(xiàn)。原語(yǔ)(Primitive)是在管態(tài)下執(zhí)行、完成系統(tǒng)特定功能的過程。原語(yǔ)和機(jī)器指令類似,其特點(diǎn)是執(zhí)行過程中不允許被中斷,是一個(gè)不可分割的基本單位,原語(yǔ)的執(zhí)行是順序的而不可能是并發(fā)的。2.3.6實(shí)例研究:UNIX

SVR4的進(jìn)程管理UNIXSVR4采用基于用戶進(jìn)程的運(yùn)行模型,操作系統(tǒng)功能在用戶進(jìn)程的環(huán)境中執(zhí)行,需要在用戶和內(nèi)核模式間切換。UNIXSVR4允許兩類進(jìn)程:用戶進(jìn)程和系統(tǒng)進(jìn)程。系統(tǒng)進(jìn)程在內(nèi)核模式下執(zhí)行,完成系統(tǒng)的一些重要功能。用戶進(jìn)程在用戶模式下執(zhí)行用戶程序,系統(tǒng)調(diào)用、中斷和異常將引起模式切換。UNIX

SVR4

進(jìn)程狀態(tài)user

running:?

kernel

running:preempted:?

ready

to

run,

in

memory:Asleep

in

memory:

?

ready

to

run,

swapped:sleeping,

swapped:

?

zombie:UNIX

SVR4進(jìn)程狀態(tài)及其轉(zhuǎn)換內(nèi)存就緒用戶態(tài)運(yùn)行內(nèi)核態(tài)運(yùn)行就緒換出被剝奪 創(chuàng)建內(nèi)存睡眠睡眠換出僵死返回用戶模式系統(tǒng)調(diào)用或中斷返回剝奪選中退出中斷,中斷返回內(nèi)存空間足夠內(nèi)存空間不足喚醒喚醒換出換進(jìn)換出睡眠ForkUNIX

SVR4的進(jìn)程描述UNIX進(jìn)程由三部分組成:proc結(jié)構(gòu)、數(shù)據(jù)段和正文段,合稱進(jìn)程映像,UNIX中把進(jìn)程定義為映像的執(zhí)行。PCB由基本控制塊proc結(jié)構(gòu)和擴(kuò)充控制塊

user結(jié)構(gòu)組成。proc結(jié)構(gòu)存放一個(gè)進(jìn)程最基本、必需的信息,常駐內(nèi)存;user結(jié)構(gòu)存放進(jìn)程運(yùn)行時(shí)才用到的數(shù)據(jù)和狀態(tài)信息,當(dāng)進(jìn)程暫時(shí)不在處理機(jī)上運(yùn)行時(shí),就把它放在磁盤的對(duì)換區(qū)中,進(jìn)程的user結(jié)構(gòu)總和進(jìn)程的數(shù)據(jù)段一起,在主存和磁盤

對(duì)換區(qū)之間換進(jìn)/換出UNIX

SVR4進(jìn)程組成processstructureuserstructurekernelstacktextstructurestackdatatextSystem

data

structureuser

spaceSwappable

process

imageResident

tablesUNIX

SVR4的進(jìn)程創(chuàng)建fork()創(chuàng)建子進(jìn)程,系統(tǒng)執(zhí)行操作:為子進(jìn)程分配進(jìn)程表。為子進(jìn)程分配進(jìn)程標(biāo)識(shí)符。復(fù)制父進(jìn)程的進(jìn)程映像,但不復(fù)制共享 內(nèi)存區(qū)。增加父進(jìn)程所打開文件的計(jì)數(shù),表示新 進(jìn)程也在使用這些文件。把子進(jìn)程置為ready

to

run狀態(tài)。返回子進(jìn)程標(biāo)識(shí)符給父進(jìn)程,把0值返回 給子進(jìn)程。2.3.7實(shí)例研究:Linux進(jìn)程管理Linux的進(jìn)程概念與傳統(tǒng)操作系統(tǒng)中的進(jìn)程概念完全一致,進(jìn)程是操作系統(tǒng)調(diào)度的最小單位。用戶態(tài)稱進(jìn)程,核心態(tài)稱任務(wù),實(shí)質(zhì)上是一個(gè)實(shí)體Linux的進(jìn)程狀態(tài)TASK_RUNNING:TASK_INTERRUPTIBLE:TASK_UNINTERRUPTIBLE:TASK_ZOMBIE:TASK_STOPPED:TASK_SWAPPING:Linux的進(jìn)程狀態(tài)轉(zhuǎn)換僵死TASK_ZOMBIE就緒TASK_RUNNING可中斷

TASK_INTERRUPTIBLE停止TASK_STOPPED占有CPU運(yùn)行schedulle時(shí)間片到申請(qǐng)資源未果,調(diào)用

interruptible_sleep_on()申請(qǐng)資源未果,調(diào)用

sleep_on()申請(qǐng)資源可用后

wake_up()不可中斷

TASK_UNINTERRUPTIBLE調(diào)度申請(qǐng)資源可用,收到信號(hào)、wake_up()wake_up_interruptible()執(zhí)行do_exit()跟蹤系統(tǒng)調(diào)用,執(zhí)行

syscall_trace()sys_exit()schedulle()創(chuàng)建do_fork()收到SIG_KILL或SIG_CONT后,執(zhí)行wake_up()Linux創(chuàng)建進(jìn)程sys_fork()和sys_clone都通過調(diào)用do_fork()函數(shù)來完成進(jìn)程的創(chuàng)建。分配進(jìn)程控制塊task_struct的內(nèi)存和

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論