




已閱讀5頁,還剩52頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
2020 4 14 OpratinSystem 1 第二章 袁俊 進(jìn)程管理 2020 4 14 OpratinSystem 2 本章要點(diǎn) 程序并發(fā)執(zhí)行 順序執(zhí)行的特征及差異進(jìn)程概念進(jìn)程與程序的異同進(jìn)程結(jié)構(gòu)與組織方式進(jìn)程狀態(tài)極其轉(zhuǎn)換原語及進(jìn)程控制線程及其工作機(jī)制 2020 4 14 OpratinSystem 3 第一節(jié)多道程序設(shè)計(jì) 一 程序的順序執(zhí)行計(jì)算機(jī)計(jì)算處理要按一定的順序執(zhí)行 其順序由編程確定 通??蓺w結(jié)無三個(gè)大的步驟 如圖所示 對一個(gè)程序段中的多條語句 也存在順序執(zhí)行的問題 如對于下述三條語句的程序段 S1 a x yS2 b a 5S3 c b 1其中S2必須在a賦值后才能執(zhí)行 同樣 S3也必須在b賦值后才能執(zhí)行 程序順序執(zhí)行的特征 順序性封閉性可再現(xiàn)性 2020 4 14 OpratinSystem 4 第一節(jié)多道程序設(shè)計(jì) 續(xù)一 二 程序的并發(fā)執(zhí)行 上圖中程序的輸入 處理 打印輸出程序間存在著Ii Ci Pi關(guān)系 對一個(gè)作業(yè)的輸入 計(jì)算和打印三個(gè)操作必須順序執(zhí)行 但作業(yè)間不存在Pi Ii 1的關(guān)系 因而對一批程序進(jìn)行處理時(shí)可以使它們迸發(fā)執(zhí)行 該例存在前趨關(guān)系 Ii Ci Ii Ii 1 Ci Pi Ci Ci 1 Pi Pi 1 2020 4 14 OpratinSystem 5 第一節(jié)多道程序設(shè)計(jì) 續(xù)二 而Ii 1和Ci及Pi 1是重疊的即它們可以迸發(fā)執(zhí)行 對于具有下述四條語句的程序段 S1 a x 2S2 b y 4S3 c a bS4 d c d可畫出如右的前趨圖 從該圖可以看出S1和S2可以迸發(fā)執(zhí)行 S3必須在a和b賦值后才能運(yùn)行 S4必須在S3后運(yùn)行 程序迸發(fā)執(zhí)行的特征間斷性 由于共享資源和相互協(xié)作而產(chǎn)生的制約 并發(fā)執(zhí)行的程序總是斷續(xù)執(zhí)行的 2020 4 14 OpratinSystem 6 第一節(jié)多道程序設(shè)計(jì) 失去封閉性并發(fā)執(zhí)行的程序共享各種資源 這些資源的狀態(tài)被多個(gè)程序改變 程序間必然相互影響 不可再現(xiàn)性失去封閉性 程序的執(zhí)行的結(jié)果必然與執(zhí)行速度有關(guān) 即 盡管初始條件和執(zhí)行環(huán)境相同 但可能得到不同的運(yùn)行結(jié)果 因而失去可再現(xiàn)性 2020 4 14 OpratinSystem 7 第二節(jié)進(jìn)程概念 進(jìn)程的描述為使程序在多道程序環(huán)境下能迸發(fā)執(zhí)行 并能對迸發(fā)執(zhí)行的程序加以控制和描述 傳統(tǒng)的 程序 概念已不能揭示這一運(yùn)行機(jī)制的本質(zhì) 因而引入 進(jìn)程 概念 一 進(jìn)程的定義定義 進(jìn)程是可迸發(fā)執(zhí)行的程序在一個(gè)數(shù)據(jù)集合上的一次運(yùn)行過程 是系統(tǒng)進(jìn)行資源分配和調(diào)度的獨(dú)立單位 二 進(jìn)程的特征 動(dòng)態(tài)性 從誕生到死亡 有其生命周期 其間有運(yùn)行 阻塞 撤消狀態(tài)的變化 迸發(fā)性 多個(gè)進(jìn)程實(shí)體同住內(nèi)存 在同一時(shí)間區(qū)間內(nèi)并行運(yùn)行 獨(dú)立性 進(jìn)程是分配資源的基本單位 是系統(tǒng)中能獨(dú)立運(yùn)行的基本單位異步性 由于進(jìn)程間的相互制約 其執(zhí)行過程是間斷的 即按各自獨(dú)立的 不可預(yù)知的速度推進(jìn) 結(jié)構(gòu)性 進(jìn)程由PCB 程序段 數(shù)據(jù)段構(gòu)成 共享性 多個(gè)進(jìn)程共享系統(tǒng)資源 制約性 迸發(fā)進(jìn)程間存在相互制約關(guān)系 2020 4 14 OpratinSystem 8 第二節(jié)進(jìn)程概念 三 進(jìn)程與程序的區(qū)別和聯(lián)系進(jìn)程與程序說明如下 1 進(jìn)程是程序的一次運(yùn)行活動(dòng) 是動(dòng)的概念 程序是指令的有序集合 是靜的概念 2 一個(gè)進(jìn)程可執(zhí)行一個(gè)或幾個(gè)程序 如一個(gè)進(jìn)程進(jìn)行C源程序編譯 它要執(zhí)行前處理 詞法和語法分析 代碼生成和和優(yōu)化等幾個(gè)程序 反之 一個(gè)程序也可被幾個(gè)進(jìn)程同時(shí)執(zhí)行 3 程序可作為一種軟件資源長期保存 而進(jìn)程是動(dòng)態(tài)的啟動(dòng)和終止的 4 進(jìn)程需要一種機(jī)制 CPU 來執(zhí)行 進(jìn)程可被調(diào)度和分配資源 能獨(dú)立運(yùn)行 并與其它進(jìn)程并發(fā)執(zhí)行 而程序僅僅是語句的有序集合 2020 4 14 OpratinSystem 9 第三節(jié)進(jìn)程的狀態(tài)極其轉(zhuǎn)換 一 進(jìn)程的基本狀態(tài)進(jìn)程的三種基本狀態(tài)就緒態(tài) Ready 執(zhí)行態(tài)阻塞態(tài) 進(jìn)程調(diào)度 退出 二 新狀態(tài)和終止?fàn)顟B(tài)不少操作系統(tǒng)在基本狀態(tài)的基礎(chǔ)上又增添了兩種基本狀態(tài) 新 New 狀態(tài) 一個(gè)進(jìn)程剛剛建立尚未進(jìn)入就緒隊(duì)列的狀態(tài) 終止 Terminated 一個(gè)進(jìn)程已經(jīng) 正常 非正常 結(jié)束 os已經(jīng)將其從就緒隊(duì)列中移出 2020 4 14 OpratinSystem 10 第三節(jié)進(jìn)程的狀態(tài)極其轉(zhuǎn)換 但尚未將它撤消時(shí)的狀態(tài) 三 進(jìn)程狀態(tài)的轉(zhuǎn)換進(jìn)程在運(yùn)行期間不斷從一個(gè)狀態(tài)轉(zhuǎn)換到另一個(gè)狀態(tài) 除了新狀態(tài)和終止?fàn)顟B(tài)只能有一次外 可以多次處于其它狀態(tài) 進(jìn)程狀態(tài)轉(zhuǎn)換的原因 新 就緒狀態(tài)就緒 執(zhí)行狀態(tài)執(zhí)行 阻塞狀態(tài)執(zhí)行 就緒狀態(tài)執(zhí)行 終止?fàn)顟B(tài)阻塞 就緒狀態(tài) 2020 4 14 OpratinSystem 11 第三節(jié)進(jìn)程的狀態(tài)極其轉(zhuǎn)換 進(jìn)程的掛起狀態(tài)掛起狀態(tài)的引入終端用戶的需要用戶在自已的程序運(yùn)行期間 發(fā)現(xiàn)可疑問題時(shí) 希望自已進(jìn)程靜止下來 即若進(jìn)程處于執(zhí)行態(tài)則暫停執(zhí)行 若進(jìn)程處于就緒狀態(tài)則暫不接受調(diào)度 以便研究執(zhí)行情況修改程序 我們把這種靜止?fàn)顟B(tài)稱為掛起狀態(tài) 父進(jìn)程的需要父進(jìn)程需要考察和修改子進(jìn)程 或需要協(xié)調(diào)各子進(jìn)程時(shí) 要掛起自已的子進(jìn)程 操作系統(tǒng)的需要對換的需要負(fù)荷調(diào)節(jié)的需要 2020 4 14 OpratinSystem 12 第三節(jié)進(jìn)程的狀態(tài)極其轉(zhuǎn)換 進(jìn)程狀態(tài)的轉(zhuǎn)換引入掛起狀態(tài)后 增加了從掛起 也稱靜止 到非掛起狀態(tài)轉(zhuǎn)換 或者相反 可有以下幾種情況 活動(dòng)就緒 靜止就緒活動(dòng)阻塞 靜止阻塞靜止就緒 活動(dòng)就緒靜止阻塞 活動(dòng)阻塞 活動(dòng)就緒 靜止就緒 執(zhí)行 活動(dòng)阻塞 靜止阻塞 事件出現(xiàn) 具有掛起狀態(tài)的進(jìn)程狀態(tài)圖 退出 掛起 等待事件 掛起 激活 事件出現(xiàn) 創(chuàng)建 提交 2020 4 14 OpratinSystem 13 第三節(jié)進(jìn)程的狀態(tài)極其轉(zhuǎn)換 具有掛起功能的進(jìn)程狀態(tài)轉(zhuǎn)換靜止就緒 readsuspend 表明進(jìn)程運(yùn)行條件已具備 但保存在磁盤對換區(qū)中 一旦對換入內(nèi)存 即可進(jìn)入活動(dòng)就緒狀態(tài) 可以被調(diào)度程序調(diào)度靜止阻塞 blockedsuspend 進(jìn)程被阻塞 且處于磁盤對換區(qū)進(jìn)程掛起的特征被掛起的進(jìn)程不會被調(diào)度執(zhí)行被掛起的進(jìn)程除非被激活 不可能被解掛 不可能由事件而解除掛起狀態(tài) 激活或掛起操作只能由操作系統(tǒng)或父進(jìn)程發(fā)出 2020 4 14 OpratinSystem 14 第三節(jié)進(jìn)程的狀態(tài)極其轉(zhuǎn)換 兩個(gè)進(jìn)程共有代碼結(jié)構(gòu) 進(jìn)程的結(jié)構(gòu) PCB1 數(shù)據(jù)部分 進(jìn)程的物理結(jié)構(gòu) 2020 4 14 OpratinSystem 15 第三節(jié)進(jìn)程的狀態(tài)極其轉(zhuǎn)換 四 進(jìn)程控制塊 PCB 進(jìn)程控制塊是進(jìn)程實(shí)體的一部分 是操作系統(tǒng)最重要的數(shù)據(jù)結(jié)構(gòu) PCB中記錄了OS所需的用于描述進(jìn)程情況和控制進(jìn)程所需的全部信息 進(jìn)程控制塊的作用是進(jìn)程存在的唯一標(biāo)識 是OS控制和管理迸發(fā)進(jìn)程運(yùn)行的依據(jù) 是調(diào)度進(jìn)程分配CPU的依據(jù) 進(jìn)程控制塊中的信息進(jìn)程標(biāo)識信息內(nèi)部標(biāo)識在所有的操作系統(tǒng)中 都為每一個(gè)進(jìn)程賦予一個(gè)惟一的數(shù)字標(biāo)識符 它通常是一個(gè)進(jìn)程的序號 設(shè)置內(nèi)部標(biāo)識符主要是為了方便系統(tǒng)使用 外部標(biāo)識它由創(chuàng)建者提供 通常是由字母 數(shù)字組成 往往是由用戶 進(jìn)程 在訪問該進(jìn)程時(shí)使用 為了描述進(jìn)程的家族關(guān)系 還應(yīng)設(shè)置父進(jìn)程標(biāo)識及子進(jìn)程標(biāo)識 此外 還可設(shè)置用戶標(biāo)識 以指示擁有該進(jìn)程的用戶 處理機(jī)狀態(tài)信息通用寄存器信息指令計(jì)數(shù)器程序狀態(tài)字用戶棧指針 2020 4 14 OpratinSystem 16 第三節(jié)進(jìn)程的狀態(tài)極其轉(zhuǎn)換 處理機(jī)狀態(tài)信息處理機(jī)狀態(tài)信息主要是由處理機(jī)的各種寄存器中的內(nèi)容組成的 通用寄存器 又稱為用戶可視寄存器 它們是用戶程序可以訪問的 用于暫存信息 在大多數(shù)處理機(jī)中 有8 32個(gè)通用寄存器 在RISC結(jié)構(gòu)的計(jì)算機(jī)中可超過100個(gè) 指令計(jì)數(shù)器 其中存放了要訪問的下一條指令的地址 程序狀態(tài)字PSW 其中含有狀態(tài)信息 如條件碼 執(zhí)行方式 中斷屏蔽標(biāo)志等 用戶棧指針 指每個(gè)用戶進(jìn)程都有一個(gè)或若干個(gè)與之相關(guān)的系統(tǒng)棧 用于存放過程和系統(tǒng)調(diào)用參數(shù)及調(diào)用地址 棧指針指向該棧的棧頂 2020 4 14 OpratinSystem 17 第三節(jié)進(jìn)程的狀態(tài)極其轉(zhuǎn)換 進(jìn)程調(diào)度信息進(jìn)程狀態(tài)指明進(jìn)程的當(dāng)前狀態(tài) 作為進(jìn)程調(diào)度和對換時(shí)的依據(jù) 進(jìn)程優(yōu)先級進(jìn)程優(yōu)先級 用于描述進(jìn)程使用處理機(jī)的優(yōu)先級別的一個(gè)整數(shù) 優(yōu)先級高的進(jìn)程應(yīng)優(yōu)先獲得處理機(jī) 事件進(jìn)程調(diào)度所需的其它信息 它們與所采用的進(jìn)程調(diào)度算法有關(guān) 比如 進(jìn)程已等待CPU的時(shí)間總和 進(jìn)程已執(zhí)行的時(shí)間總和等 其它調(diào)度信息 2020 4 14 OpratinSystem 18 進(jìn)程控制信息程序和數(shù)據(jù)地址 程序和數(shù)據(jù)的地址 是指進(jìn)程的程序和數(shù)據(jù)所在的內(nèi)存或外存地 首 址 以便再調(diào)度到該進(jìn)程執(zhí)行時(shí) 能從PCB中找到其程序和數(shù)據(jù) 進(jìn)程同步和通信機(jī)制 指實(shí)現(xiàn)進(jìn)程同步和進(jìn)程通信時(shí)必需的機(jī)制 如消息隊(duì)列指針 信號量等 它們可能全部或部分地放在PCB中 資源清單 指實(shí)現(xiàn)進(jìn)程同步和進(jìn)程通信時(shí)必需的機(jī)制 如消息隊(duì)列指針 信號量等 它們可能全部或部分地放在PCB中 鏈接指針 它給出了本進(jìn)程 PCB 所在隊(duì)列中的下一個(gè)進(jìn)程的PCB的首地址 2020 4 14 OpratinSystem 19 第三節(jié)進(jìn)程的狀態(tài)極其轉(zhuǎn)換 執(zhí)行指針 就緒隊(duì)列指針 阻塞隊(duì)列指針 空閑隊(duì)列指針 PCB鏈接方式示意圖 PCB的組織方式鏈接方式 2020 4 14 OpratinSystem 20 第三節(jié)進(jìn)程的狀態(tài)極其轉(zhuǎn)換 按索引方式組織PCB示意圖 執(zhí)行指針 就緒隊(duì)列指針 阻塞隊(duì)列指針 就緒索引表 阻塞索引表 PCB的組織方式索引方式 2020 4 14 OpratinSystem 21 第三節(jié)進(jìn)程的狀態(tài)極其轉(zhuǎn)換 按索引方式組織PCB示意圖 執(zhí)行指針 就緒隊(duì)列指針 阻塞隊(duì)列指針 就緒索引表 阻塞索引表 2020 4 14 OpratinSystem 22 第四節(jié)Unix的進(jìn)程 Unix的操作系統(tǒng)進(jìn)程與用戶進(jìn)程駐留在內(nèi)存不同的區(qū)域 進(jìn)程在執(zhí)行操作系統(tǒng)程序和用戶程序時(shí)使用的內(nèi)存管理寄存器組不同 使用的某些寄存器 例如棧指針 也不同 Unix中有一個(gè)特殊進(jìn)程 即系統(tǒng)調(diào)度進(jìn)程 它的編號為0 所以稱為0 進(jìn)程 該進(jìn)程只在核心態(tài)運(yùn)行 它是Unix唯一只在核心態(tài)運(yùn)行的進(jìn)程 一 Unix進(jìn)程的存儲器圖像進(jìn)程圖象包括多個(gè)方面 但關(guān)鍵部分是存儲器圖象 它由PCB 進(jìn)程執(zhí)行的程序 數(shù)據(jù) 進(jìn)程運(yùn)行時(shí)使用的工作區(qū)四部分組成 Unix進(jìn)程的PCB包括兩部分常駐內(nèi)存的數(shù)據(jù)結(jié)構(gòu)proc 稱 基本控制塊 另一部分是進(jìn)程不在處理機(jī)上運(yùn)行時(shí)不訪問的數(shù)據(jù)結(jié)構(gòu)user 它是基本控制塊的擴(kuò)充部分 2020 4 14 OpratinSystem 23 Proc結(jié)構(gòu)的組成 Structproc charp stat 進(jìn)程charp flag charp pri 進(jìn)程優(yōu)先級charp sig 進(jìn)程接收的中斷信號ushortp uid 實(shí)際用戶標(biāo)識數(shù) ushortp suid 有效用戶標(biāo)識 charp time 進(jìn)程駐留時(shí)間charp cpu 進(jìn)程使用CPU的量charp nice 計(jì)算優(yōu)先級用的偏移值charp pgrp 該進(jìn)程所在進(jìn)程組的首進(jìn)程標(biāo)識數(shù)charp pid 進(jìn)程標(biāo)識數(shù) charp ppid 父進(jìn)程標(biāo)識數(shù) charp sddr 相應(yīng)user結(jié)構(gòu)的起始頁面號 charp size charp wchan int p textp proc NPROC 2020 4 14 OpratinSystem 24 下圖是UNIX進(jìn)程映像的基本結(jié)構(gòu) 其中 共享正文段 數(shù)據(jù)段和用戶棧段位于用戶態(tài)地址空間 其它部分位于核心態(tài)地址空間 P textpP addr x daddrx caddr 共享正文段 常駐內(nèi)存部分 非常駐內(nèi)存部分 用戶地址空間 proc text UNIX進(jìn)程PCB映像的基本結(jié)構(gòu) 2020 4 14 OpratinSystem 25 第五節(jié)進(jìn)程控制 為防止操作系統(tǒng)及其關(guān)鍵數(shù)據(jù) 如PCB 遭受破壞 將CPU的執(zhí)行狀態(tài)分為系統(tǒng)態(tài)和用戶態(tài) OS內(nèi)核運(yùn)行在系統(tǒng)態(tài) 而進(jìn)程控制是由操作系統(tǒng)內(nèi)核實(shí)現(xiàn)的 所以進(jìn)程控制工作在系統(tǒng)態(tài) 一 操作系統(tǒng)內(nèi)核現(xiàn)代OS是層次結(jié)構(gòu)的 與硬件相關(guān)的模塊如 中斷處理 設(shè)備驅(qū)動(dòng)程序 以及運(yùn)行頻率高的模塊如時(shí)鐘管理 進(jìn)程調(diào)度 等都安排在靠近硬件的軟件層次中 并使其長駐內(nèi)存 以提高OS的運(yùn)行效率 并對它們實(shí)施保護(hù) 通常把這一程序?qū)臃Q為內(nèi)核 內(nèi)核是計(jì)算機(jī)硬件的第一層擴(kuò)充軟件 內(nèi)核有兩大功能 支撐功能最基本的支撐是 中斷處理時(shí)鐘管理原語操作 資源管理功能如進(jìn)程管理 存儲管理和設(shè)備管理 2020 4 14 OpratinSystem 26 第五節(jié)進(jìn)程控制 內(nèi)核是有利用原語實(shí)現(xiàn)的原語 由機(jī)器指令組成在運(yùn)行時(shí)不可分割 不可中斷的程序 進(jìn)程控制 是對系統(tǒng)中的全部進(jìn)程實(shí)施有效的管理 因而必須具備創(chuàng)建進(jìn)程 阻塞進(jìn)程 撤消進(jìn)程的能力 操作系統(tǒng)允許一個(gè)進(jìn)程創(chuàng)建一個(gè)新進(jìn)程 新進(jìn)程稱為子進(jìn)程 子進(jìn)程又可創(chuàng)建新的子進(jìn)程 子子孫孫 構(gòu)成樹型結(jié)構(gòu) 樹型結(jié)構(gòu)的主要優(yōu)點(diǎn) 資源分配嚴(yán)格子進(jìn)程只能分配到父進(jìn)程所擁有的資源 如繼承父進(jìn)程打開的文件 繼承父進(jìn)程分配的緩沖區(qū)等 子進(jìn)程撤消后立即歸還給父進(jìn)程 一個(gè)進(jìn)程家族所占用的資源應(yīng)該在其祖先所擁有的資源范圍內(nèi) 進(jìn)程控制靈活可按需要給進(jìn)程以不同的控制權(quán)利 讓它們并發(fā)執(zhí)行進(jìn)程層次分明 關(guān)系明確 2020 4 14 OpratinSystem 27 第五節(jié)進(jìn)程控制 創(chuàng)建進(jìn)程原語撤消進(jìn)程原語掛起進(jìn)程原語解除掛起進(jìn)程原語改變優(yōu)先數(shù)原語阻塞進(jìn)程原語喚醒進(jìn)程原語進(jìn)程調(diào)度程序 原語 進(jìn)程的控制是通過原語實(shí)現(xiàn)的 有如下原語 2020 4 14 OpratinSystem 28 第五節(jié)進(jìn)程控制 二 進(jìn)程的創(chuàng)建引起進(jìn)程創(chuàng)建的事件 分四類用戶登錄 分時(shí)系統(tǒng)中 用戶登錄 系統(tǒng)為合法用戶建立一進(jìn)程 并將進(jìn)程插入就緒隊(duì)列 作業(yè)調(diào)度 提供服務(wù) 運(yùn)行中的用戶程序提出某請求 系統(tǒng)將創(chuàng)建一進(jìn)程提供用戶需求的服務(wù) 如打印 將創(chuàng)建打印進(jìn)程為用戶服務(wù) 應(yīng)用請求 以上是由系統(tǒng)內(nèi)核為用戶創(chuàng)建新進(jìn)程 而現(xiàn)在是由用戶為自已創(chuàng)建新進(jìn)程以便實(shí)現(xiàn)并發(fā)操作 2020 4 14 OpratinSystem 29 第五節(jié)進(jìn)程控制 OS發(fā)現(xiàn)要求創(chuàng)建進(jìn)程的事件調(diào)用創(chuàng)建進(jìn)程原語 按如下步驟創(chuàng)建進(jìn)程 申請空白PCB為新進(jìn)程分配資源 內(nèi)存 目錄 文件 堆棧 外部設(shè)備 包括從父進(jìn)程可繼承的資源初始化進(jìn)程控制塊 初始化進(jìn)程描述信息 進(jìn)程名 用戶標(biāo)識 進(jìn)程組 進(jìn)程父子關(guān)系 初始化CPU狀態(tài)信息初始化進(jìn)程控制信息 優(yōu)先級等信息 新進(jìn)程置入就緒隊(duì)列 2020 4 14 OpratinSystem 30 建立進(jìn)程操作順序 申請空白PCB 申請內(nèi)存空間 查找外存程序 裝入 棧初始化等準(zhǔn)備工作 分派其它資源 PCB登記 進(jìn)程狀態(tài) 進(jìn)程主程序名等進(jìn)入就緒隊(duì)列 調(diào)用切換程序 或 返回父進(jìn)程或 直接將新進(jìn)程投入運(yùn)行 出錯(cuò)返回 出錯(cuò)返回 出錯(cuò)返回 procedureCreate n S0 k0 M0 R0 acc begingi GetNewInternalName n id i n Priority i k0 Cpustate i S0 MainStore i M0 Resources i R0 Status i Readys Parent i 代表調(diào)用本進(jìn)程的父進(jìn)程內(nèi)部標(biāo)識SetAccountingData 在PCB加入記帳信息Insert RL i 插入到活動(dòng)就緒隊(duì)列end UNIX中 該原語叫Newproc 2020 4 14 OpratinSystem 31 釋放資源 釋放PCB 置入空閑PCB隊(duì)列 調(diào)用切換程序 撤消進(jìn)程操作 現(xiàn)場保護(hù) 改變當(dāng)前進(jìn)程狀態(tài) 置入舊緒或阻塞隊(duì)列 進(jìn)程調(diào)度程序選擇一個(gè)舊緒進(jìn)程 設(shè)置該就緒進(jìn)程為運(yùn)行并移出就緒隊(duì)列 恢復(fù)現(xiàn)場 進(jìn)程切換操作 2020 4 14 OpratinSystem 32 第五節(jié)進(jìn)程控制 三 進(jìn)程的終止1 引起進(jìn)程終止的事件正常結(jié)束異常結(jié)束越界錯(cuò)誤保護(hù)錯(cuò)特權(quán)指令錯(cuò)非法指令錯(cuò)運(yùn)行超時(shí)等待超時(shí)算術(shù)運(yùn)算錯(cuò)I O故障 2 進(jìn)程終止過程在PCB集合中檢索出該進(jìn)程的PCB 若進(jìn)程在執(zhí)行 中止執(zhí)行 設(shè)置調(diào)度標(biāo)志為TRUE終止該進(jìn)程子孫進(jìn)程回收其資源將被終止進(jìn)程的PCB從所在隊(duì)列移出 2020 4 14 OpratinSystem 33 第五節(jié)進(jìn)程控制 四 進(jìn)程的阻塞和喚醒1 引起阻塞和喚醒的事件請求系統(tǒng)服務(wù)正在執(zhí)行的進(jìn)程請求OS服務(wù) 但OS由于某原因不能立即響應(yīng) 該進(jìn)程只能轉(zhuǎn)無阻塞狀態(tài) 啟動(dòng)某操作進(jìn)程啟動(dòng)某設(shè)備后 該設(shè)備執(zhí)行 但進(jìn)程必須等待該設(shè)備完成任務(wù)后才能繼續(xù)工作 則完成前被阻塞 新數(shù)據(jù)未到對相互合作的進(jìn)程若一個(gè)進(jìn)程在得到另一進(jìn)程發(fā)來的數(shù)據(jù)前 不能向前推進(jìn) 只有被阻塞 無新工作可作系統(tǒng)往往設(shè)置一些特殊當(dāng)它們的功能完成后 便把自己阻塞起來等待新任務(wù)到來 如 系統(tǒng)中的發(fā)送進(jìn)程 當(dāng)發(fā)送完數(shù)據(jù)后 只有等待新任務(wù)到來 若無發(fā)送請求 則將自己阻塞 2020 4 14 OpratinSystem 34 第五節(jié)進(jìn)程控制 2 進(jìn)程阻塞過程進(jìn)程調(diào)用block原語將自己阻塞 進(jìn)程阻塞是一種自身的主動(dòng)行動(dòng) 進(jìn)入block過程后 先停止進(jìn)程執(zhí)行 將PCB中的運(yùn)行態(tài)設(shè)置為阻塞態(tài) 將PCB插入阻塞隊(duì)列 若系統(tǒng)設(shè)置了多個(gè)阻塞隊(duì)列 則將該P(yáng)CB置如有相同事件的阻塞隊(duì)列 轉(zhuǎn)進(jìn)程調(diào)度程序 將CPU分配給就緒隊(duì)列中一新的進(jìn)程 3 進(jìn)程喚醒過程被阻塞進(jìn)程期待事件發(fā)生后 則有關(guān)進(jìn)程調(diào)用喚醒原語wakeup將等待該事件的進(jìn)程喚醒 喚醒原語執(zhí)行過程是 將被阻塞進(jìn)程PCB從等待該事件的阻塞隊(duì)列中移出 將PCB中的阻塞態(tài)改為就緒態(tài) 將該進(jìn)程PCB插入就緒隊(duì)列注意 block原語和wakeup原語是一對作用相反的原語 在某些進(jìn)程中使用了阻塞原語則在與之合作的進(jìn)程中必然調(diào)用喚醒原語來喚醒阻塞進(jìn)程 2020 4 14 OpratinSystem 35 第五節(jié)進(jìn)程控制 四 進(jìn)程的掛起和激活1 進(jìn)程的掛起過程用戶進(jìn)程或父進(jìn)程請求將自己或子孫掛起時(shí) 系統(tǒng)利用掛起原語suspend將指定進(jìn)程或處于阻塞狀態(tài)的進(jìn)程掛起 掛起原語的執(zhí)行過程 檢查被掛起進(jìn)程的狀態(tài) 若處于活動(dòng)就緒狀態(tài) 則將其改為靜止就緒狀態(tài) 若處于活動(dòng)阻塞狀態(tài) 則將其改為靜止阻塞狀態(tài) 為了方便用戶或父進(jìn)程考察該進(jìn)程的運(yùn)行情況 把該進(jìn)程的PCB復(fù)制到某指定內(nèi)存區(qū) 若掛起的是正在執(zhí)行的進(jìn)程 則轉(zhuǎn)調(diào)度程序重新調(diào)度 2020 4 14 OpratinSystem 36 第五節(jié)進(jìn)程控制 2 進(jìn)程的激活過程發(fā)生激活事件時(shí) 則產(chǎn)生激活某進(jìn)程的要求 若進(jìn)程駐留在外存上而內(nèi)存有足夠的空間 則可將外存上處于靜止就緒狀態(tài)的進(jìn)程換入內(nèi)存 系統(tǒng)調(diào)用激活原語active將指定進(jìn)程激活 激活原語將進(jìn)程從外存上調(diào)入內(nèi)存 檢查進(jìn)程的現(xiàn)行狀態(tài) 若是靜止就緒 則將其改為活動(dòng)就緒 若是靜止阻塞 則將其改為活動(dòng)阻塞 五 改變進(jìn)程優(yōu)先數(shù)原語優(yōu)先數(shù)代表進(jìn)程優(yōu)先級 是進(jìn)程調(diào)度的重要參數(shù)之一 現(xiàn)代OS都采用動(dòng)態(tài)優(yōu)先數(shù)方法 以便隨時(shí)調(diào)整CPU調(diào)度策略 保證所有的進(jìn)程都有合理的運(yùn)行機(jī)會 2020 4 14 OpratinSystem 37 第五節(jié)進(jìn)程控制 動(dòng)態(tài)優(yōu)先數(shù)與下列因素有關(guān) 靜態(tài)優(yōu)先數(shù) 進(jìn)程類型系統(tǒng)進(jìn)程優(yōu)于用戶進(jìn)程I O類進(jìn)程優(yōu)于CPU計(jì)算進(jìn)程進(jìn)程使用資源數(shù)進(jìn)程等待時(shí)間系統(tǒng)每隔一固定時(shí)間就重新計(jì)算一次進(jìn)程的優(yōu)先數(shù) 以UNIX為例 UNIX最小優(yōu)先數(shù)是 100 最大優(yōu)先數(shù)是127 用戶進(jìn)程的優(yōu)先數(shù)大于100 對優(yōu)先數(shù)大于100的進(jìn)程系統(tǒng)每秒計(jì)算一次 使用公式 Pn min 127 100 Pcpu 16 Pnice Pcpu 當(dāng)前進(jìn)程每運(yùn)行20ms加1 直到255為止 其它進(jìn)程每秒減10 直到小于10為止 Pnice 偏置系數(shù) 通常為正 通過系統(tǒng)調(diào)用nice而設(shè)置 2020 4 14 OpratinSystem 38 第五節(jié)進(jìn)程控制 改變進(jìn)程優(yōu)先數(shù)原語描述程序 procedureChangePriority n begingi GetInternalName n a CalculatePriority i Pri i a ifStatus i Readya thenbeginInsert RL i Pri forallP RunningProcessQueuedoifPri P Pri i thenSCHEDULERendend 根據(jù)進(jìn)程外部名 查找內(nèi)部名I調(diào)用計(jì)算優(yōu)先數(shù)公式 計(jì)算優(yōu)先數(shù)登記優(yōu)先數(shù)到PCB 按進(jìn)程i優(yōu)先數(shù)插入到就緒隊(duì)列適當(dāng)位置 2020 4 14 OpratinSystem 39 第五節(jié)進(jìn)程控制 六 進(jìn)程的控制執(zhí)行1 進(jìn)程獲得CPU控制的時(shí)機(jī)OS通過如下事件獲得對CPU的控制中斷 處理外部隨機(jī)事件Trap 錯(cuò)誤或異常事件處理訪問管理程序SVC 用戶程序請求調(diào)用OS系統(tǒng)功能CPU工作狀態(tài) 運(yùn)行用戶進(jìn)程時(shí) 系統(tǒng)處于用戶態(tài)產(chǎn)生中斷時(shí) 若響應(yīng)中斷 則OS獲得CPU控制權(quán) 系統(tǒng)工作在核心態(tài)在用戶態(tài)與管態(tài)間必然產(chǎn)生 模式切換 但切換的開銷較小 因?yàn)?用戶態(tài)由請求系統(tǒng)功能調(diào)用而進(jìn)入核心態(tài) 此時(shí)的系統(tǒng)進(jìn)程是為用戶進(jìn)程服務(wù)的 兩個(gè)進(jìn)程使用同一個(gè)PCB 僅執(zhí)行的代碼不同 使用的堆棧不同 中斷 2020 4 14 OpratinSystem 40 第五節(jié)進(jìn)程控制 CPU在進(jìn)行進(jìn)程間的狀態(tài)轉(zhuǎn)換時(shí) 由于需要 保存被中斷的進(jìn)程現(xiàn)場改變被中斷進(jìn)程的PCB的相關(guān)信息 如現(xiàn)場信息 狀態(tài)信息 將被中斷進(jìn)程的PCB移向目標(biāo)隊(duì)列選擇一個(gè)合適的進(jìn)程改變該進(jìn)程的PCB的相關(guān)信息 改變該進(jìn)程為運(yùn)行狀態(tài) 修改存儲管理的相關(guān)表格按該進(jìn)程的運(yùn)行要求設(shè)置CPU現(xiàn)場由此可見 CPU在進(jìn)行進(jìn)程切換時(shí)產(chǎn)生較大開銷 2020 4 14 OpratinSystem 41 注 處理機(jī)狀態(tài)信息 處理機(jī)狀態(tài)信息主要是由處理機(jī)的各種寄存器中的內(nèi)容組成的 通用寄存器 又稱為用戶可視寄存器 它們是用戶程序可以訪問的 用于暫存信息 在大多數(shù)處理機(jī)中 有8 32個(gè)通用寄存器 在RISC結(jié)構(gòu)的計(jì)算機(jī)中可超過100個(gè) 指令計(jì)數(shù)器 其中存放了要訪問的下一條指令的地址 程序狀態(tài)字PSW 其中含有狀態(tài)信息 如條件碼 執(zhí)行方式 中斷屏蔽標(biāo)志等 用戶棧指針 指每個(gè)用戶進(jìn)程都有一個(gè)或若干個(gè)與之相關(guān)的系統(tǒng)棧 用于存放過程和系統(tǒng)調(diào)用參數(shù)及調(diào)用地址 棧指針指向該棧的棧頂 2020 4 14 OpratinSystem 42 第五節(jié)進(jìn)程控制 2 OS的執(zhí)行方式OS的執(zhí)行方式有三種 非進(jìn)程的內(nèi)核模式OS完全處于內(nèi)核 在所有進(jìn)程之外運(yùn)行 并與它們是分離的 用戶程序作為進(jìn)程在其上層運(yùn)行 每當(dāng)運(yùn)行的用戶進(jìn)程被中斷或要求訪問管理程序 如SVC中斷 系統(tǒng)服務(wù)調(diào)用 控制轉(zhuǎn)交OS 執(zhí)行內(nèi)核模式 老式OS采用的方式進(jìn)程概念僅適應(yīng)于用戶進(jìn)程切換效率底 操作系統(tǒng) 進(jìn)程A 進(jìn)程N(yùn) 2020 4 14 OpratinSystem 43 第五節(jié)進(jìn)程控制 在用戶進(jìn)程內(nèi)部執(zhí)行小型機(jī) 微機(jī)OS使用的方式 由于每個(gè)進(jìn)程都要使用OS的服務(wù)功能 根據(jù)虛擬機(jī)技術(shù)設(shè)想 假設(shè)每個(gè)用戶進(jìn)程都有一個(gè)OS OS與用戶進(jìn)程上下文相關(guān) OS地址空間包含于每個(gè)進(jìn)程地址空間內(nèi)當(dāng)執(zhí)行OS內(nèi)核時(shí) 是在用戶進(jìn)程地址空間內(nèi)執(zhí)行 沒有進(jìn)程間的切換 僅有模式切換 運(yùn)行效率遠(yuǎn)高于前一方式UNIX使用這一方式 操作系統(tǒng) 進(jìn)程AOS功能 進(jìn)程N(yùn) 進(jìn)程N(yùn)OS功能 2020 4 14 OpratinSystem 44 第五節(jié)進(jìn)程控制 操作系統(tǒng)進(jìn)程方式操作系統(tǒng)各種功能作為 系統(tǒng)進(jìn)程 運(yùn)行 操作系統(tǒng)是這些進(jìn)程集合運(yùn)行的結(jié)果 稱為服務(wù)器 服務(wù)進(jìn)程 與用戶進(jìn)程構(gòu)成C S模式 這種方式的優(yōu)點(diǎn)是便于用軟件工程的原則OS設(shè)計(jì) 使之模塊化 高內(nèi)聚 低偶合適合多機(jī)系統(tǒng) 分布式系統(tǒng)Windows系統(tǒng)使用這種方式 操作系統(tǒng) 進(jìn)程A OS進(jìn)程1 進(jìn)程N(yùn) OS進(jìn)程J 2020 4 14 OpratinSystem 45 第六節(jié)線程 20世紀(jì)80年代提出線程概念 是為了提高系統(tǒng)的迸發(fā)能力 從而提高系統(tǒng)的吞吐率 現(xiàn)代OS都引入了線程 甚至數(shù)據(jù)庫管理系統(tǒng) 程序設(shè)計(jì)語言也引入了線程概念 一 線程的引入傳統(tǒng)OS為了實(shí)現(xiàn)進(jìn)程的迸發(fā) 必須 創(chuàng)建新進(jìn)程并為其分配資源 撤消進(jìn)程并回收其資源 為了保證諸進(jìn)程通過競爭資源從而迸發(fā)執(zhí)行 必須控制進(jìn)程的狀態(tài)切換 而應(yīng)該盡可能減少切換所消耗CPU的時(shí)間 以及資源 由于進(jìn)程是資源的擁有者 在創(chuàng)建 撤消和狀態(tài)轉(zhuǎn)換時(shí) 將付出較大的時(shí)間 空間開銷 因此 系統(tǒng)中不可設(shè)置過多的進(jìn)程進(jìn)程切換頻率不可太高但 這一限制導(dǎo)致系統(tǒng)的迸發(fā)程度降低 與OS的設(shè)計(jì)原則不符 2020 4 14 OpratinSystem 46 第六節(jié)線程 為了克服這一限制 引入線程概念 二 線程及其應(yīng)該具備的性質(zhì)線程是進(jìn)程內(nèi)一個(gè)相對獨(dú)立的 可調(diào)度的執(zhí)行單元 進(jìn)程是獨(dú)立的分配資源的單位 執(zhí)行與分配資源不再是統(tǒng)一的概念 線程應(yīng)具有如下性質(zhì) 線程是進(jìn)程內(nèi)相對獨(dú)立的可執(zhí)行單元 線程是OS的基本調(diào)度單元 創(chuàng)建進(jìn)程時(shí) 至少需要同時(shí)為其創(chuàng)建一個(gè)初始線程線程可以創(chuàng)建其它線程進(jìn)程是分配資源的基本單位 同一個(gè)進(jìn)程內(nèi)的多個(gè)線程共享該進(jìn)程的資源 但不擁有它們 僅僅使用而已 由于共享資源 線程需要同步和通行機(jī)制線程有生命周期 在生命周期中有狀態(tài)的變化線程本身通常不是完整的程序 它不能運(yùn)行自己 只能在程序中運(yùn)行 2020 4 14 OpratinSystem 47 第六節(jié)線程 三 使用線程的優(yōu)點(diǎn)創(chuàng)建線程 撤消線程的開銷遠(yuǎn)小于對進(jìn)程作同樣操作的開銷小CPU對線程的切換開銷小于進(jìn)程切換開銷資源共享性好 多個(gè)線程共享進(jìn)程所分配的資源線程機(jī)制增加了通訊的有效性 由于共享內(nèi)存和文件 無須狀態(tài)切換就可信息交換 適應(yīng)多處理器體系結(jié)構(gòu) 運(yùn)行效率更高 方便 簡化了用戶程序設(shè)計(jì) 線程的缺點(diǎn)跟蹤線程需要CPU的開銷線程間同樣要爭用資源 2020 4 14 OpratinSystem 48 第六節(jié)線程 四 線程的狀態(tài)由于線程是調(diào)度和執(zhí)行的基本單位 在線程的生命周期中有狀態(tài)變化 但由于各種OS設(shè)計(jì)目標(biāo)不同 調(diào)度方法不同因而設(shè)計(jì)的狀態(tài)也不同 但下面幾個(gè)基本狀態(tài)是共有的 就緒狀態(tài)線程已具備執(zhí)行條件 等待分配CPU運(yùn)行運(yùn)行狀態(tài)線程正在CPU上運(yùn)行等待 阻塞 狀態(tài)線程正等待某事件發(fā)生注意 線程不是資源擁有者 不應(yīng)有決定進(jìn)程或自身從主存中撤除的權(quán)力 不能有掛起操作 掛起 操作屬于進(jìn)程級狀態(tài) 進(jìn)程中有多個(gè)線程 單個(gè)線程的阻塞不會阻塞整個(gè)進(jìn)程 2020 4 14 OpratinSystem 49 Java線程的生命周期 起始狀態(tài) 可執(zhí)行狀態(tài) 終止?fàn)顟B(tài) 非可執(zhí)行狀態(tài) start stop stop SleepWaitIO操作 Notify stop 線程結(jié)束 創(chuàng)建線程 Newthread 2020 4 14 OpratinSystem 50 第六節(jié)線程 一個(gè)Java線程序調(diào)用Newthread 原語創(chuàng)建線程 該線程就處于新線程 起始狀態(tài) 狀態(tài) 它的線程控制表或線程對象沒有實(shí)例化 調(diào)用Start 原語 該線程被實(shí)例化 指出線程的指令地址 系統(tǒng)和用戶堆棧指針 優(yōu)先級 變量和參數(shù)內(nèi)容等現(xiàn)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 城市社區(qū)外包合同
- 2025年中國外墻瓷磚面膩?zhàn)邮袌霈F(xiàn)狀分析及前景預(yù)測報(bào)告
- 2025年中國雙面印花男套裝項(xiàng)目投資可行性研究報(bào)告
- 2025年旅游景區(qū)開發(fā)建設(shè)項(xiàng)目社會穩(wěn)定風(fēng)險(xiǎn)評估與旅游信息化建設(shè)研究報(bào)告
- 2025年文化旅游演藝項(xiàng)目觀眾滿意度提升與運(yùn)營優(yōu)化報(bào)告
- 2025特色小鎮(zhèn)綠色建筑產(chǎn)業(yè)培育資金申請方案報(bào)告
- 農(nóng)業(yè)面源污染治理技術(shù)革新與2025年政策實(shí)施前景展望報(bào)告
- 工業(yè)廢氣處理2025年催化燃燒技術(shù)市場調(diào)研報(bào)告
- 2025年工業(yè)互聯(lián)網(wǎng)平臺IPv6技術(shù)升級與工業(yè)設(shè)備生命周期管理優(yōu)化與應(yīng)用報(bào)告
- 2025年健康養(yǎng)生食品行業(yè)健康食品包裝創(chuàng)新與消費(fèi)者購買行為研究報(bào)告
- 2025年安全教育培訓(xùn)考試題庫(基礎(chǔ)強(qiáng)化版)應(yīng)急救援知識試題
- 2025年公民科學(xué)素質(zhì)知識競答考試題庫資料500題(含答案)
- 第二節(jié)清潔消毒滅菌講解
- 內(nèi)蒙古赤峰歷年中考語文現(xiàn)代文閱讀之非連續(xù)性文本閱讀7篇(截至2024年)
- 2023年普通高等學(xué)校招生全國統(tǒng)一考試新課標(biāo)全國Ⅰ卷數(shù)學(xué)真題(解析版)
- 出廠試驗(yàn)大綱
- 應(yīng)聘后勤園長簡歷
- 結(jié)構(gòu)鑒定合同范例
- 《跨境電子商務(wù)基礎(chǔ)》課件-國際市場調(diào)研內(nèi)容
- 教育部《中小學(xué)校園食品安全和膳食經(jīng)費(fèi)管理工作指引》知識培訓(xùn)
- 【MOOC】大學(xué)生心理健康-廈門大學(xué) 中國大學(xué)慕課MOOC答案
評論
0/150
提交評論