os——第三章 進(jìn)程描述和控制

3.1進(jìn)程

3.1.1

在進(jìn)程執(zhí)行時(shí)虹脯,任意給定一個(gè)時(shí)間蔫慧,進(jìn)程都包含如下信息:

  1. 標(biāo)識(shí)符
    進(jìn)程id,用于區(qū)別其他進(jìn)程
  2. 狀態(tài)
    進(jìn)程的運(yùn)行態(tài)
  3. 優(yōu)先級(jí)
    相對(duì)于其他進(jìn)程的優(yōu)先級(jí)
  4. 程序計(jì)數(shù)器
    程序中江北執(zhí)行的下一跳指令地址
  5. 內(nèi)存指針
    包含程序代碼和進(jìn)程相關(guān)數(shù)據(jù)的指針备埃,還有其他進(jìn)程共享內(nèi)存塊的指針
  6. 上下文數(shù)據(jù)
    程序執(zhí)行是處理器的寄存器中的數(shù)據(jù)
  7. IO狀態(tài)信息
    包含顯式的IO請(qǐng)求节槐,分配給進(jìn)程的IO設(shè)備和被晉城市用的文件列表
  8. 記賬信息
    可能包含處理器綜合,使用的時(shí)鐘總和锯仪,時(shí)間限制疯汁,記賬號(hào)

上述信息被存放在一個(gè)成為程序控制塊PCB中。
進(jìn)程控制塊張包含了陳芬的信息卵酪,進(jìn)程控制塊能夠支持多進(jìn)程和提供多重處理技術(shù)的關(guān)鍵工具。

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

3.2.1兩狀態(tài)進(jìn)程模型

在任何時(shí)刻進(jìn)程或者正在執(zhí)行谤碳,或者沒(méi)有執(zhí)行溃卡。一個(gè)進(jìn)程可以出于一下兩種狀態(tài)之一:運(yùn)行態(tài)或未運(yùn)行太(還有其他狀態(tài))
當(dāng)操作系統(tǒng)創(chuàng)建一個(gè)新進(jìn)程時(shí),將該進(jìn)程以未運(yùn)行太加入到系統(tǒng)中蜒简,操作系統(tǒng)指導(dǎo)這個(gè)進(jìn)程的存在瘸羡,并正在等待執(zhí)行機(jī)會(huì)。

兩狀態(tài)進(jìn)程模型

3.2.2進(jìn)程創(chuàng)建和終止

進(jìn)程的創(chuàng)建

當(dāng)一個(gè)新進(jìn)程被添加到那些正在被管理的進(jìn)城集合中區(qū)搓茬,操作系統(tǒng)需要建立用于管理該進(jìn)程的數(shù)據(jù)結(jié)構(gòu)犹赖,并在內(nèi)存中給他分配地址空間。
一下四種情況會(huì)導(dǎo)致進(jìn)程創(chuàng)建

  1. 新的批處理作業(yè)
    位于磁帶或磁盤(pán)中的批處理作業(yè)控制流被提供給操作系統(tǒng)
  2. 用戶登錄
    終端用戶登錄到系統(tǒng)
  3. 操作系統(tǒng)因?yàn)樘峁┮豁?xiàng)服務(wù)而創(chuàng)建
    表示用戶執(zhí)行一個(gè)功能
  4. 由現(xiàn)有進(jìn)程派生
    用戶程序只是創(chuàng)建多個(gè)進(jìn)程卷仑。
    當(dāng)操作系統(tǒng)相應(yīng)一個(gè)進(jìn)程顯式的請(qǐng)求創(chuàng)建一個(gè)新進(jìn)程時(shí)峻村,該動(dòng)作成為進(jìn)程派生。
    此時(shí)有父子進(jìn)程產(chǎn)生

進(jìn)程終止

進(jìn)程終止的原因有:

  1. 正常完成
    進(jìn)程自行執(zhí)行一個(gè)操作系統(tǒng)服務(wù)調(diào)用锡凝,exec族粘昨,表示它已經(jīng)結(jié)束運(yùn)行
  2. 超過(guò)時(shí)限
    進(jìn)程運(yùn)行時(shí)間超過(guò)規(guī)定的時(shí)限
    包括總的運(yùn)行時(shí)間,花費(fèi)在執(zhí)行上的時(shí)間窜锯,
  3. 無(wú)可用內(nèi)存
    系統(tǒng)無(wú)法滿足進(jìn)程需要的內(nèi)存空間
  4. 越界
    進(jìn)程試圖訪問(wèn)不允許訪問(wèn)的內(nèi)存單元
  5. 保護(hù)錯(cuò)誤
    進(jìn)程試圖使用不孕不育的資源或文件张肾,或者試圖以一種不正確的方式使用,向只讀文件中寫(xiě)入
  6. 算數(shù)錯(cuò)誤
    如除0或存儲(chǔ)大于硬件可以接納的數(shù)子
  7. 時(shí)間超出
    進(jìn)程等待某一事件發(fā)生的時(shí)間超過(guò)了規(guī)定的最大值
    8.IO失敗
    在輸出或輸入期間發(fā)生錯(cuò)誤锚扎。
    找不到指定文件吞瞪,或者嘗試多次以后仍然讀寫(xiě)失敗或者無(wú)效操作,例如從打印機(jī)中讀取數(shù)據(jù)
  8. 無(wú)效指令
    司徒執(zhí)行一個(gè)不存在的指令
  9. 特權(quán)指令
    試圖使用未操作系統(tǒng)保留的指令
  10. 數(shù)據(jù)無(wú)用
    錯(cuò)誤類型或?yàn)槌跏蓟囊粔K數(shù)據(jù)
  11. 操作員或操作系統(tǒng)干涉
    由于某些原因驾孔,操作員終止進(jìn)程
  12. 父進(jìn)程終止
    當(dāng)父進(jìn)程終止芍秆,操作系統(tǒng)可能終止進(jìn)程的所有子進(jìn)程
  13. 父進(jìn)程請(qǐng)求
    父進(jìn)程終止其后代惯疙,或者是其他進(jìn)程終止別的進(jìn)程

3.2.3 五狀態(tài)模型

無(wú)狀態(tài)模型

無(wú)狀態(tài):

  1. 運(yùn)行態(tài)
    該進(jìn)程正在執(zhí)行
  2. 就緒態(tài)
    進(jìn)程做好了準(zhǔn)備,只要有機(jī)會(huì)就開(kāi)始執(zhí)行
  3. 阻塞等待態(tài)
    進(jìn)程在等待某事件浪听,例如IO操作
  4. 新建態(tài)
    剛創(chuàng)建的進(jìn)城螟碎,操作系統(tǒng)還沒(méi)有把他加入到可執(zhí)行進(jìn)程組中。通常是進(jìn)程快已經(jīng)創(chuàng)建但是還沒(méi)有加載金內(nèi)存中的新進(jìn)程
    5.退出態(tài)
    操作系統(tǒng)可從執(zhí)行進(jìn)程組中釋放出的進(jìn)程
    或是終止迹栓,或是被取消掉分。

處于新建態(tài)是,操作系統(tǒng)所需要的關(guān)于該進(jìn)程的信息保存在內(nèi)存的進(jìn)程表中克伊,但是進(jìn)程本身還未進(jìn)入內(nèi)存酥郭,也就是進(jìn)程的程序代碼不在內(nèi)存中,操作系統(tǒng)也沒(méi)有為這個(gè)程序相關(guān)的數(shù)據(jù)分配空間愿吹。代碼和數(shù)據(jù)保存在磁盤(pán)中

狀態(tài)轉(zhuǎn)換

  1. 空->新建
    穿件一個(gè)新進(jìn)程
  2. 新建->就緒
    操作系統(tǒng)準(zhǔn)備好在接納一個(gè)晉城市不从,吧一個(gè)進(jìn)程從新建態(tài)轉(zhuǎn)換到就緒態(tài)。
  3. 就緒->運(yùn)行
    需要選擇一個(gè)新進(jìn)程運(yùn)行時(shí)犁跪,操作系統(tǒng)選擇一個(gè)處于就緒態(tài)的進(jìn)城椿息。
    由調(diào)度器或分配器工作。
  4. 運(yùn)行->退出
    如果當(dāng)前運(yùn)行進(jìn)程表示自己已完成或取消坷衍,他將被操作系統(tǒng)終止寝优。
  5. 運(yùn)行->就緒
    正在運(yùn)行的進(jìn)程達(dá)到了允許不中斷執(zhí)行的最大時(shí)間段。也就是一個(gè)進(jìn)程達(dá)到了該進(jìn)程被分配的運(yùn)行時(shí)間枫耳。
  6. 運(yùn)行->阻塞
    進(jìn)程請(qǐng)求他必須等待某些事件時(shí)乏矾,則進(jìn)入阻塞太。
  7. 阻塞->就緒
    當(dāng)?shù)却臅r(shí)間發(fā)生時(shí)迁杨,處于阻塞態(tài)的進(jìn)城轉(zhuǎn)換到了就緒態(tài)
  8. 就緒->退出
    父進(jìn)程可以再任何時(shí)刻終止一個(gè)子進(jìn)程
  9. 阻塞->退出
    同上

3.2.4被掛起的進(jìn)程

交換

沒(méi)有使用虛擬內(nèi)存的操作系統(tǒng)的進(jìn)城都必須全部載入內(nèi)存钻心,所有進(jìn)程必須都在內(nèi)存中。
為了能夠容納更多進(jìn)程:

  1. 增加內(nèi)存
    但是相對(duì)的進(jìn)程增加速度更加快
  2. 交換

把內(nèi)存中某個(gè)進(jìn)程的一部分或全部移動(dòng)到磁盤(pán)中铅协,當(dāng)內(nèi)存中沒(méi)有處于就緒狀態(tài)的晉城市捷沸,操作系統(tǒng)就把被阻塞的進(jìn)城換出到磁盤(pán)中的掛起隊(duì)列中,暫時(shí)保存從內(nèi)存中被驅(qū)逐出來(lái)的進(jìn)程隊(duì)列狐史,或者是被掛起的進(jìn)程隊(duì)列亿胸。
操作系統(tǒng)在此后取出掛起隊(duì)列中的另一個(gè)進(jìn)城或僅售一個(gè)新進(jìn)程的請(qǐng)求,將其納入內(nèi)存運(yùn)行预皇。
交換是一個(gè)IO操作侈玄,因此可能是問(wèn)題更加惡化。由于換出到的磁盤(pán)一般是系統(tǒng)中運(yùn)行最快的IO設(shè)備吟温,因此會(huì)提高性能序仙。
因此模型再加入掛起態(tài)。

一個(gè)掛起態(tài)模型


僅掛起在阻塞的進(jìn)程

兩個(gè)掛起態(tài)進(jìn)程


掛起阻塞和**就緒**狀態(tài)進(jìn)程

這種模型中鲁豪,新建進(jìn)程可能直接掛起潘悼,也可能就緒律秃。
因此就多了兩個(gè)狀態(tài)。

  1. 阻塞->掛起/掛起
    當(dāng)操作系統(tǒng)確定正在運(yùn)行的進(jìn)程需要更多內(nèi)存空間或是為了維護(hù)基本性能治唤,會(huì)出現(xiàn)這種轉(zhuǎn)換棒动。
  2. 阻塞/掛起->就緒/掛起
    如果程序阻塞的事件發(fā)生了,就被轉(zhuǎn)化為就緒掛起
  3. 就緒/掛起->就緒
    內(nèi)存中沒(méi)有就就緒態(tài)進(jìn)程宾添,操作系統(tǒng)需要調(diào)入一個(gè)進(jìn)程繼續(xù)執(zhí)行船惨。
    就緒/掛起態(tài)進(jìn)程比任何出于就緒態(tài)的任何進(jìn)程優(yōu)先級(jí)都要高的時(shí)候
  4. 就緒->就緒/掛起
    當(dāng)掛起阻塞進(jìn)程仍然不夠內(nèi)存時(shí),就掛起就緒進(jìn)程缕陕。
  5. 新建->就緒/掛起 和 新建->就緒
    當(dāng)內(nèi)存中沒(méi)有足夠的內(nèi)存粱锐,那么需要進(jìn)入就緒/掛起狀態(tài)
  6. 阻塞/掛起->阻塞
    一個(gè)進(jìn)程終止,釋放了內(nèi)存空間扛邑,阻塞/掛起隊(duì)列中的優(yōu)先級(jí)比其他進(jìn)程優(yōu)先級(jí)都搞怜浅,那么就發(fā)生此狀態(tài)轉(zhuǎn)換
  7. 運(yùn)行->就緒/掛起
    當(dāng)分配給一個(gè)進(jìn)程的時(shí)間期滿時(shí),就發(fā)生這個(gè)轉(zhuǎn)換蔬崩。

因此恶座,進(jìn)程如果從就緒到掛起,是因?yàn)閮?nèi)存不夠沥阳。如果從阻塞/掛起到阻塞是因?yàn)閮?yōu)先級(jí)跨琳。

掛起進(jìn)程概念與不在內(nèi)存中的進(jìn)程概念是等價(jià)的。
當(dāng)如下特點(diǎn)是會(huì)掛起進(jìn)程:

  1. 進(jìn)程不能立即執(zhí)行
  2. 進(jìn)程在等待一個(gè)時(shí)間沪袭,阻塞時(shí)間的發(fā)生不會(huì)是進(jìn)程立即被執(zhí)行
  3. 為了阻止一個(gè)進(jìn)程的執(zhí)行,可以通過(guò)代理把進(jìn)程置于掛起狀態(tài)樟氢。
  4. 除非代理顯式的命令系統(tǒng)進(jìn)行狀態(tài)轉(zhuǎn)換冈绊,否則進(jìn)程一直在代理中

通過(guò)掛起程序,程序員可以修改程序或數(shù)據(jù)埠啃,進(jìn)行調(diào)試死宣。

導(dǎo)致進(jìn)程被掛起的原因:

  1. 交換
    需要是房租購(gòu)的內(nèi)存空間
  2. 其他os原因
    操作系統(tǒng)可能掛起后臺(tái)進(jìn)程或工具程序進(jìn)程
  3. 交互式用戶請(qǐng)求
    用戶掛起程序,進(jìn)行調(diào)試或與一個(gè)資源的使用進(jìn)行連接
  4. 定時(shí)
    一個(gè)進(jìn)程可能會(huì)周期執(zhí)行碴开,而且可能在等待下一個(gè)時(shí)間間隔被掛起
  5. 父進(jìn)程請(qǐng)求
    父進(jìn)程掛起子進(jìn)程毅该,然后修改掛起進(jìn)程

3.3進(jìn)程描述

操作系統(tǒng)為處理器執(zhí)行進(jìn)程,而且進(jìn)行調(diào)度和分配資源潦牛,并相應(yīng)用戶程序的基本服務(wù)請(qǐng)求眶掌。
操作系統(tǒng)是管理系統(tǒng)資源的實(shí)體。

操作系統(tǒng)的控制結(jié)構(gòu)

操作系統(tǒng)構(gòu)造并維護(hù)它所管理的每個(gè)實(shí)體的信息表:

  1. 內(nèi)存
  2. IO
  3. 文件
  4. 進(jìn)程

內(nèi)存表

用于更總內(nèi)存(物理內(nèi)存)和外存巴碗。內(nèi)存的某些部分為操作系統(tǒng)保修朴爬,剩余部分是進(jìn)程可以使用的。保存在虛擬內(nèi)存中的進(jìn)程使用頁(yè)進(jìn)行簡(jiǎn)單的交換橡淆。
內(nèi)存表包含:

  1. 分配給進(jìn)程的內(nèi)存
  2. 分配給進(jìn)程的外存
  3. 內(nèi)存塊或虛擬內(nèi)存的任何保護(hù)屬性召噩,例如共享內(nèi)存區(qū)域
  4. 管理虛擬內(nèi)存所需要的任何信息

IO表

用于管理計(jì)算機(jī)系統(tǒng)內(nèi)的IO設(shè)備和通道母赵,在任何給定的時(shí)刻,一個(gè)IO設(shè)備或是可用的具滴,或者是已經(jīng)分配給某個(gè)特定的進(jìn)城凹嘲。

文件表

提供關(guān)于文件是否存在,文件在外存(磁盤(pán))中的作用构韵,當(dāng)前狀態(tài)和其他屬性的信息周蹭。

進(jìn)程表

后面詳細(xì)講

3.3.2 進(jìn)程控制結(jié)構(gòu)

操作系統(tǒng)管理和控制進(jìn)城,需要知道進(jìn)城的位置贞绳,和屬性谷醉。

進(jìn)程位置

一個(gè)進(jìn)程至少包括足夠內(nèi)存空間,用來(lái)保存該進(jìn)程的代碼和數(shù)據(jù)冈闭,還有棧椌隳幔空間,還有進(jìn)程的屬性萎攒。通常的屬性集合稱為進(jìn)程控制塊PCB遇八。
程序、數(shù)據(jù)耍休、棧刃永、屬性的集合稱為進(jìn)程映像。

進(jìn)程映像包括:

  1. 用戶數(shù)據(jù)
    用戶空間中可修改的部分:程序數(shù)據(jù)羊精,用戶棧斯够,可修改的程序
  2. 用戶程序
    將被執(zhí)行的程序,代碼
  3. 系統(tǒng)棧
    每個(gè)進(jìn)程有一個(gè)或多個(gè)系統(tǒng)棧喧锦,用于保存參數(shù)读规,過(guò)程調(diào)用地址和系統(tǒng)調(diào)用地址。
  4. 進(jìn)程控制塊
    操作系統(tǒng)控制進(jìn)程所需要的數(shù)據(jù)

進(jìn)程屬性

進(jìn)程屬性的集合稱為進(jìn)程塊
包括:
進(jìn)程標(biāo)志信息燃少,進(jìn)程控制信息束亏,進(jìn)程狀態(tài)信息。

進(jìn)程標(biāo)志信息

  1. 標(biāo)識(shí)符
    進(jìn)程的標(biāo)識(shí)符阵具,創(chuàng)建該進(jìn)程的父進(jìn)程碍遍,用戶標(biāo)識(shí)符(userID)

處理器狀態(tài)信息

  1. 用戶課件寄存器
    處于用戶態(tài)處理器執(zhí)行語(yǔ)言可以訪問(wèn)的寄存器,通常有8~32個(gè)阳液。
  2. 控制和狀態(tài)存儲(chǔ)器
    程序計(jì)數(shù)器:包含將要取得下一條指令地址怕敬。
    條件碼:最近的算術(shù)或邏輯運(yùn)算的結(jié)果,符號(hào)帘皿,零赖捌,進(jìn)位。等于。溢出
    狀態(tài)信息:包括終端允許禁用的標(biāo)志越庇,異常模式
  3. 棧指針
    每個(gè)進(jìn)程有一個(gè)或多個(gè)相關(guān)聯(lián)的后進(jìn)先出系統(tǒng)棧罩锐。棧用于保存參數(shù)和過(guò)程調(diào)用或是系統(tǒng)調(diào)用的地址,棧指針指向棧頂卤唉。

進(jìn)程控制信息

  1. 調(diào)度和狀態(tài)信息
    進(jìn)程狀態(tài):運(yùn)行態(tài)涩惑,就緒態(tài),等待態(tài)桑驱,停止太
    優(yōu)先級(jí)用于描述進(jìn)程調(diào)度的一個(gè)或多個(gè)域竭恬。在某些系統(tǒng)中,需要多個(gè)值:默認(rèn)熬的,當(dāng)前痊硕,最高許可。
    調(diào)度相關(guān)信息取決于調(diào)度算法押框。例如進(jìn)程等待時(shí)間總量和進(jìn)程上一次運(yùn)行時(shí)執(zhí)行時(shí)間總量
    事件:進(jìn)程在繼續(xù)執(zhí)行前等待的時(shí)間標(biāo)識(shí)
  2. 數(shù)據(jù)結(jié)構(gòu)
    進(jìn)程可以一隊(duì)列環(huán)或別的結(jié)構(gòu)與其他進(jìn)程進(jìn)行連接岔绸。
    標(biāo)識(shí)某一特定優(yōu)先級(jí)且處于等待狀態(tài)進(jìn)程可以連接到一個(gè)隊(duì)列中,父子進(jìn)程關(guān)系橡伞,因此需要包含指向其他進(jìn)程的指針
  3. 進(jìn)程間通信
    與兩個(gè)獨(dú)立進(jìn)程間通信相關(guān)聯(lián)的各種標(biāo)記信號(hào)和信息盒揉。
  4. 進(jìn)程特權(quán)
    進(jìn)程根據(jù)其可以訪問(wèn)的內(nèi)存空間以及可移植性的指令類型被賦予各種特權(quán)
  5. 存儲(chǔ)管理
    指向分配給進(jìn)程的虛擬內(nèi)存空間的段表和頁(yè)表的指針
  6. 資源和所有權(quán)的使用情況
    表示打開(kāi)的文件,包括處理器或是其他資源的使用歷史兑徘,調(diào)度器需要著細(xì)信息

標(biāo)識(shí)符的作用

表示主進(jìn)程表中的一個(gè)索引刚盈,因此需要一個(gè)銀蛇,使系統(tǒng)可以genuine進(jìn)程標(biāo)識(shí)符定位相應(yīng)的標(biāo)挂脑,進(jìn)程間相互通信可以終止通信的目標(biāo)藕漱,指明父子進(jìn)程

處理器狀態(tài)信息

當(dāng)進(jìn)程運(yùn)行時(shí),信息存在寄存器中崭闲,當(dāng)進(jìn)程被中斷時(shí)肋联,所有寄存器信息被保存,使得進(jìn)程恢復(fù)被執(zhí)行時(shí)這些信息可以被恢復(fù)镀脂。
寄存器組包括寄存器牺蹄、控制和狀態(tài)寄存器和棧指針忘伞。

所有處理器設(shè)計(jì)都包括一個(gè)或一組程序狀態(tài)字(Program status word psw)寄存器薄翅。包括所有的狀態(tài)信息。psw包含條件碼和其他狀態(tài)信息氓奈。

寄存器

進(jìn)程控制信息

每個(gè)進(jìn)程映像包括一個(gè)進(jìn)程控制塊翘魄、用戶棧、進(jìn)程專用地址空間以及別的進(jìn)程共享的其他內(nèi)存空間舀奶。

虛擬內(nèi)存中的用戶進(jìn)程
進(jìn)程鏈表

進(jìn)程控制塊的作用

進(jìn)程控制塊是錯(cuò)做系統(tǒng)中最重要的數(shù)據(jù)結(jié)構(gòu)暑竟,每個(gè)進(jìn)程控制塊包含操作系統(tǒng)做需要的關(guān)于進(jìn)程的所有信息。

操作系統(tǒng)多個(gè)程序需要訪問(wèn)進(jìn)程控制塊,因此需要保護(hù)但荤。

3.4進(jìn)程控制

3.4.1執(zhí)行模式

用戶程序通常在用戶態(tài)模式下運(yùn)行罗岖。
特權(quán)態(tài)成為系統(tǒng)態(tài)、控制態(tài)或是內(nèi)核態(tài)腹躁。同一個(gè)名字桑包。
使用兩種模式可以保護(hù)操作系統(tǒng)重要的操作系統(tǒng)表(如進(jìn)程控制塊)不守用戶程序的干涉。用戶態(tài)下纺非,軟件具有對(duì)處理器以及所有指令哑了、寄存器和內(nèi)存的控制能力。而這些能力對(duì)用戶程序不是必須的烧颖。
程序狀態(tài)字中有一位表示執(zhí)行模式弱左,處理器使用該位來(lái)判斷是程序運(yùn)行在什么態(tài)中。
這一位對(duì)應(yīng)某些事件的要求而改變炕淮,當(dāng)用戶調(diào)用一個(gè)系統(tǒng)服務(wù)觸發(fā)系統(tǒng)例程的執(zhí)行時(shí)拆火,執(zhí)行模式設(shè)置成內(nèi)核態(tài),當(dāng)從系統(tǒng)服務(wù)返回到用戶進(jìn)程時(shí)鳖悠,執(zhí)行模式被設(shè)置成用戶態(tài)榜掌。

3.2.2進(jìn)程創(chuàng)建

進(jìn)程創(chuàng)建的步驟:

  1. 給新進(jìn)程分配一個(gè)唯一的進(jìn)城標(biāo)識(shí)符
    主進(jìn)程表中增加一個(gè)新表項(xiàng),表中的每個(gè)表項(xiàng)對(duì)應(yīng)一個(gè)進(jìn)程
  2. 進(jìn)程分配空間
    包括進(jìn)程映像中的所有元素(代碼乘综,數(shù)據(jù)憎账,棧屬性),因此操作系統(tǒng)需要知道私有用戶地址空間和用戶棧需要多少空間卡辰。
    如果一個(gè)進(jìn)程由另一個(gè)進(jìn)城生成胞皱,則父進(jìn)程可以吧所需的值作為進(jìn)程創(chuàng)建請(qǐng)求的一部分傳遞給操作系統(tǒng)。如果任何現(xiàn)有的地址空間被這個(gè)新進(jìn)程共享九妈,那么必須建立正確的連接反砌。最后,必須給進(jìn)程控制塊分配空間萌朱。
  3. 初始化進(jìn)程控制塊
    進(jìn)程標(biāo)識(shí)符包括進(jìn)程ID和其他相關(guān)ID宴树,如父進(jìn)程ID等。
    處理器狀態(tài)信息部分的絕大多出項(xiàng)目通常初始化為0.但程序計(jì)數(shù)器被設(shè)置為程序入口點(diǎn)晶疼、系統(tǒng)棧指針用來(lái)定義程序邊界除外酒贬。
    進(jìn)程控制信息部分的初始化:基于標(biāo)準(zhǔn)默認(rèn)值和為該進(jìn)程所請(qǐng)求的屬性。例如進(jìn)程狀態(tài)翠霍,優(yōu)先級(jí)锭吨。資源(如果不請(qǐng)求或者父進(jìn)程繼承,那么不擁有資源)
  4. 設(shè)置正確的連接
    操作系統(tǒng)把調(diào)度丟了都保存成鏈表寒匙,新進(jìn)程必須防止在就緒或就緒/掛起鏈表中
  5. 創(chuàng)建或擴(kuò)充其他數(shù)據(jù)結(jié)構(gòu)
    記賬等零如。

3.4.3進(jìn)程切換

系統(tǒng)中斷分為兩種類型:中斷,陷阱。

中斷

是與當(dāng)前進(jìn)程A無(wú)關(guān)的某種類型的外部事件相關(guān)考蕾,例如別的進(jìn)程B進(jìn)行IO請(qǐng)求的時(shí)候交出控制權(quán)祸憋,進(jìn)程A開(kāi)始執(zhí)行,當(dāng)進(jìn)程B的IO操作完成時(shí)肖卧,進(jìn)程A被中斷夺衍。
控制需要先移交給中斷處理器,然后轉(zhuǎn)到已經(jīng)發(fā)生的特定類型的中斷相關(guān)的操作系統(tǒng)例程喜命。
例如:

  1. 系統(tǒng)中斷
    操作系統(tǒng)確定當(dāng)前正在運(yùn)行進(jìn)程的執(zhí)行時(shí)間已經(jīng)超過(guò)了最大允許時(shí)間段(時(shí)間片)沟沙。此時(shí)進(jìn)程必須切換到就緒態(tài),另一個(gè)進(jìn)程切換到運(yùn)行態(tài)
  2. IO中斷
    操作系統(tǒng)將所有對(duì)應(yīng)的阻塞態(tài)進(jìn)程轉(zhuǎn)換到就緒態(tài)(阻塞/掛起也一樣)壁榕。
    并不執(zhí)行對(duì)應(yīng)的進(jìn)程矛紫,只是設(shè)置其狀態(tài)
  3. 內(nèi)存失效/缺頁(yè)中斷
    處理器訪問(wèn)虛擬地址時(shí),此地址黨員不在內(nèi)存中牌里,操作系統(tǒng)必須從外存中把包含這個(gè)引用的內(nèi)存塊調(diào)入內(nèi)存颊咬。在發(fā)生調(diào)入內(nèi)存塊的IO請(qǐng)求后,操作系統(tǒng)可能會(huì)執(zhí)行一個(gè)進(jìn)程切換牡辽,已恢復(fù)另一個(gè)進(jìn)程的執(zhí)行喳篇,發(fā)生缺頁(yè)的進(jìn)城被置為阻塞態(tài)。當(dāng)想要的塊調(diào)入內(nèi)存重視态辛,該進(jìn)程被置為就緒態(tài)

陷阱

當(dāng)前運(yùn)行進(jìn)程所產(chǎn)生的錯(cuò)誤或異常條件麸澜。如非法文件訪問(wèn)。
操作系統(tǒng)確定異常調(diào)教是否指明奏黑,如果致命炊邦,當(dāng)前運(yùn)行的金恒被轉(zhuǎn)換到退出態(tài),并發(fā)生進(jìn)程切換熟史。如果不致命馁害,操作系統(tǒng)的動(dòng)作取決于錯(cuò)誤的種類和操作系統(tǒng)的設(shè)計(jì)。

系統(tǒng)調(diào)用

一個(gè)用戶進(jìn)程正在運(yùn)行蹂匹,并且請(qǐng)求一個(gè)IO操作碘菜,該調(diào)用會(huì)使進(jìn)程陷入內(nèi)核態(tài),通常系統(tǒng)調(diào)用會(huì)導(dǎo)致吧童虎進(jìn)程置為阻塞限寞。

場(chǎng)景切換

當(dāng)存在未處理的中斷忍啸,處理器需要做一下工作,例如模式切換
模式切換:

  1. 把程序計(jì)數(shù)器設(shè)置成中斷處理程序的開(kāi)始地址
  2. 從用戶態(tài)切換到內(nèi)核態(tài)昆烁,使得中斷處理代碼可以包含特權(quán)的指令

同時(shí)還需要保存進(jìn)程上下文吊骤。
此時(shí)的上下文稱為中斷上下文缎岗,作用在于:所有中斷處理可能改變的信息和恢復(fù)被中斷程序時(shí)所需要的信息静尼。包含程序計(jì)時(shí)器,其他處理器寄存器和棧信息

中斷處理程序:通常是執(zhí)行一些與中斷相關(guān)的基本任務(wù)的小程序。

進(jìn)程狀態(tài)的變化

模式切換和進(jìn)程切換不同鼠渺,發(fā)生模式切換可以不改變正處于運(yùn)行態(tài)的進(jìn)程狀態(tài)鸭巴,在這種情況下,保存上下文環(huán)境和以后恢復(fù)上下文環(huán)境需要很少的開(kāi)銷拦盹,但是進(jìn)程切換鹃祖,如果當(dāng)前正在運(yùn)行的進(jìn)城被切換到另一狀態(tài),則操作系統(tǒng)使其環(huán)境產(chǎn)生實(shí)質(zhì)性的變化普舆。

進(jìn)程切換步驟:

  1. 保存處理器上下文恬口,包括程序計(jì)數(shù)器和其他寄存器
  2. 更新當(dāng)前處于運(yùn)行態(tài)進(jìn)程的進(jìn)城控制塊,包括江金城狀態(tài)改變到另一個(gè)狀態(tài)(就緒態(tài)沼侣,阻塞態(tài)等等)祖能。還必須更新相關(guān)域,包括離開(kāi)運(yùn)行態(tài)的原因和記賬信息
  3. 將進(jìn)程的進(jìn)城控制塊移到相應(yīng)的隊(duì)列(就緒蛾洛,事件i處阻塞养铸、就緒)。
  4. 選擇另一個(gè)進(jìn)程執(zhí)行(需要調(diào)度算法)
  5. 更新所選擇進(jìn)程的進(jìn)程控制塊轧膘,包括將進(jìn)程的狀態(tài)變?yōu)檫\(yùn)行態(tài)
  6. 跟新內(nèi)存管理的數(shù)據(jù)結(jié)構(gòu)钞螟,取決于如何管理地址轉(zhuǎn)換,(后面講
  7. 恢復(fù)處理器在被選擇進(jìn)程最后一次切換出運(yùn)行狀態(tài)時(shí)的上上下文谎碍,可以通過(guò)載入程序計(jì)數(shù)器和其他寄存器以前的值來(lái)實(shí)現(xiàn)

進(jìn)程切換涉及狀態(tài)變化鳞滨,因而比模式切換需要更多的工作。
因此上下文只是寄存器的值蟆淀,是否包括棧太援??扳碍?提岔??笋敞?碱蒙??夯巷?赛惩??

3.5操作系統(tǒng)的執(zhí)行

操作系統(tǒng)

無(wú)進(jìn)程內(nèi)核

內(nèi)核運(yùn)行不是以進(jìn)程的形式存在趁餐。當(dāng)進(jìn)程被中斷或產(chǎn)生一個(gè)系統(tǒng)調(diào)用時(shí)喷兼,該進(jìn)程的模式上下文被保存,控制權(quán)交給內(nèi)核后雷。操作系統(tǒng)有自己的內(nèi)存區(qū)域和系統(tǒng)棧季惯,用于控制過(guò)程調(diào)用和返回吠各。

內(nèi)核在用戶進(jìn)程中執(zhí)行

進(jìn)程映像包含內(nèi)核的程序數(shù)據(jù)和棧結(jié)構(gòu)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末勉抓,一起剝皮案震驚了整個(gè)濱河市贾漏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌藕筋,老刑警劉巖纵散,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異隐圾,居然都是意外死亡伍掀,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)暇藏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)硕盹,“玉大人,你說(shuō)我怎么就攤上這事叨咖〈窭” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵甸各,是天一觀的道長(zhǎng)垛贤。 經(jīng)常有香客問(wèn)我,道長(zhǎng)趣倾,這世上最難降的妖魔是什么聘惦? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮儒恋,結(jié)果婚禮上善绎,老公的妹妹穿的比我還像新娘。我一直安慰自己诫尽,他們只是感情好禀酱,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著牧嫉,像睡著了一般剂跟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上酣藻,一...
    開(kāi)封第一講書(shū)人閱讀 51,274評(píng)論 1 300
  • 那天曹洽,我揣著相機(jī)與錄音,去河邊找鬼辽剧。 笑死送淆,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的怕轿。 我是一名探鬼主播偷崩,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼辟拷,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了环凿?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤放吩,失蹤者是張志新(化名)和其女友劉穎智听,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體渡紫,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡到推,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了惕澎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片莉测。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖唧喉,靈堂內(nèi)的尸體忽然破棺而出捣卤,到底是詐尸還是另有隱情,我是刑警寧澤八孝,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布董朝,位于F島的核電站,受9級(jí)特大地震影響干跛,放射性物質(zhì)發(fā)生泄漏子姜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一楼入、第九天 我趴在偏房一處隱蔽的房頂上張望哥捕。 院中可真熱鬧,春花似錦嘉熊、人聲如沸遥赚。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)鸽捻。三九已至,卻和暖如春泽腮,著一層夾襖步出監(jiān)牢的瞬間御蒲,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工诊赊, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留厚满,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓碧磅,卻偏偏與公主長(zhǎng)得像碘箍,于是被迫代替她去往敵國(guó)和親遵馆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 又來(lái)到了一個(gè)老生常談的問(wèn)題丰榴,應(yīng)用層軟件開(kāi)發(fā)的程序員要不要了解和深入學(xué)習(xí)操作系統(tǒng)呢货邓? 今天就這個(gè)問(wèn)題開(kāi)始,來(lái)談?wù)劜?..
    tangsl閱讀 4,124評(píng)論 0 23
  • 11.1進(jìn)程的概念 進(jìn)程的定義 進(jìn)程是指一個(gè)具有一定獨(dú)立功能的程序在一個(gè)數(shù)據(jù)集合上的一次動(dòng)態(tài)執(zhí)行過(guò)程 精髓:正在執(zhí)...
    龜龜51閱讀 474評(píng)論 0 1
  • 進(jìn)程和線程 進(jìn)程線程的區(qū)別1四濒、進(jìn)程是什么换况?是具有一定獨(dú)立功能的程序、它是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位盗蟆,重點(diǎn)...
    HeartGo閱讀 1,209評(píng)論 0 4
  • 最近這幾天一直在忙著為APP的改版做前期的規(guī)劃戈二,包括產(chǎn)品的定位,核心用戶喳资,核心痛點(diǎn)觉吭,痛的程度,圍繞這些問(wèn)題一直在思...
    charm豬閱讀 1,636評(píng)論 0 5
  • 《你為什么要考研究生?》 敲下這個(gè)標(biāo)題的那一刻节值,我的內(nèi)心是復(fù)雜的绒北!對(duì)于升學(xué)、深造這類型的字眼察署,很長(zhǎng)一段時(shí)間已經(jīng)在心...
    青楓蒲閱讀 1,215評(píng)論 4 4