操作系統(tǒng)教學(xué)(二)進(jìn)程_第1頁
操作系統(tǒng)教學(xué)(二)進(jìn)程_第2頁
操作系統(tǒng)教學(xué)(二)進(jìn)程_第3頁
操作系統(tǒng)教學(xué)(二)進(jìn)程_第4頁
操作系統(tǒng)教學(xué)(二)進(jìn)程_第5頁
已閱讀5頁,還剩52頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

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è)大的步驟 如圖所示 對(duì)一個(gè)程序段中的多條語句 也存在順序執(zhí)行的問題 如對(duì)于下述三條語句的程序段 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)系 對(duì)一個(gè)作業(yè)的輸入 計(jì)算和打印三個(gè)操作必須順序執(zhí)行 但作業(yè)間不存在Pi Ii 1的關(guān)系 因而對(duì)一批程序進(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í)行 對(duì)于具有下述四條語句的程序段 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í)行 并能對(duì)迸發(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 程序可作為一種軟件資源長(zhǎng)期保存 而進(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)的需要對(duì)換的需要負(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)行條件已具備 但保存在磁盤對(duì)換區(qū)中 一旦對(duì)換入內(nèi)存 即可進(jìn)入活動(dòng)就緒狀態(tài) 可以被調(diào)度程序調(diào)度靜止阻塞 blockedsuspend 進(jìn)程被阻塞 且處于磁盤對(duì)換區(qū)進(jìn)程掛起的特征被掛起的進(jìn)程不會(huì)被調(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)識(shí) 是OS控制和管理迸發(fā)進(jìn)程運(yùn)行的依據(jù) 是調(diào)度進(jìn)程分配CPU的依據(jù) 進(jìn)程控制塊中的信息進(jìn)程標(biāo)識(shí)信息內(nèi)部標(biāo)識(shí)在所有的操作系統(tǒng)中 都為每一個(gè)進(jìn)程賦予一個(gè)惟一的數(shù)字標(biāo)識(shí)符 它通常是一個(gè)進(jìn)程的序號(hào) 設(shè)置內(nèi)部標(biāo)識(shí)符主要是為了方便系統(tǒng)使用 外部標(biāo)識(shí)它由創(chuàng)建者提供 通常是由字母 數(shù)字組成 往往是由用戶 進(jìn)程 在訪問該進(jìn)程時(shí)使用 為了描述進(jìn)程的家族關(guān)系 還應(yīng)設(shè)置父進(jìn)程標(biāo)識(shí)及子進(jìn)程標(biāo)識(shí) 此外 還可設(shè)置用戶標(biāo)識(shí) 以指示擁有該進(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)度和對(duì)換時(shí)的依據(jù) 進(jìn)程優(yōu)先級(jí)進(jìn)程優(yōu)先級(jí) 用于描述進(jìn)程使用處理機(jī)的優(yōu)先級(jí)別的一個(gè)整數(shù) 優(yōu)先級(jí)高的進(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ì)列指針 信號(hào)量等 它們可能全部或部分地放在PCB中 資源清單 指實(shí)現(xiàn)進(jìn)程同步和進(jìn)程通信時(shí)必需的機(jī)制 如消息隊(duì)列指針 信號(hào)量等 它們可能全部或部分地放在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)程 它的編號(hào)為0 所以稱為0 進(jìn)程 該進(jìn)程只在核心態(tài)運(yùn)行 它是Unix唯一只在核心態(tài)運(yùn)行的進(jìn)程 一 Unix進(jìn)程的存儲(chǔ)器圖像進(jìn)程圖象包括多個(gè)方面 但關(guān)鍵部分是存儲(chǔ)器圖象 它由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)先級(jí)charp sig 進(jìn)程接收的中斷信號(hào)ushortp uid 實(shí)際用戶標(biāo)識(shí)數(shù) ushortp suid 有效用戶標(biāo)識(shí) charp time 進(jìn)程駐留時(shí)間charp cpu 進(jìn)程使用CPU的量charp nice 計(jì)算優(yōu)先級(jí)用的偏移值charp pgrp 該進(jìn)程所在進(jìn)程組的首進(jìn)程標(biāo)識(shí)數(shù)charp pid 進(jìn)程標(biāo)識(shí)數(shù) charp ppid 父進(jìn)程標(biāo)識(shí)數(shù) charp sddr 相應(yīng)user結(jié)構(gòu)的起始頁面號(hào) 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)度 等都安排在靠近硬件的軟件層次中 并使其長(zhǎng)駐內(nèi)存 以提高OS的運(yùn)行效率 并對(duì)它們實(shí)施保護(hù) 通常把這一程序?qū)臃Q為內(nèi)核 內(nèi)核是計(jì)算機(jī)硬件的第一層擴(kuò)充軟件 內(nèi)核有兩大功能 支撐功能最基本的支撐是 中斷處理時(shí)鐘管理原語操作 資源管理功能如進(jìn)程管理 存儲(chǔ)管理和設(shè)備管理 2020 4 14 OpratinSystem 26 第五節(jié)進(jìn)程控制 內(nèi)核是有利用原語實(shí)現(xiàn)的原語 由機(jī)器指令組成在運(yùn)行時(shí)不可分割 不可中斷的程序 進(jìn)程控制 是對(duì)系統(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)行中的用戶程序提出某請(qǐng)求 系統(tǒng)將創(chuàng)建一進(jìn)程提供用戶需求的服務(wù) 如打印 將創(chuàng)建打印進(jìn)程為用戶服務(wù) 應(yīng)用請(qǐ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)程 申請(qǐng)空白PCB為新進(jìn)程分配資源 內(nèi)存 目錄 文件 堆棧 外部設(shè)備 包括從父進(jìn)程可繼承的資源初始化進(jìn)程控制塊 初始化進(jìn)程描述信息 進(jìn)程名 用戶標(biāo)識(shí) 進(jìn)程組 進(jìn)程父子關(guān)系 初始化CPU狀態(tài)信息初始化進(jìn)程控制信息 優(yōu)先級(jí)等信息 新進(jìn)程置入就緒隊(duì)列 2020 4 14 OpratinSystem 30 建立進(jìn)程操作順序 申請(qǐng)空白PCB 申請(qǐng)內(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)識(shí)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)場(chǎng)保護(hù) 改變當(dāng)前進(jìn)程狀態(tài) 置入舊緒或阻塞隊(duì)列 進(jìn)程調(diào)度程序選擇一個(gè)舊緒進(jìn)程 設(shè)置該就緒進(jìn)程為運(yùn)行并移出就緒隊(duì)列 恢復(fù)現(xiàn)場(chǎng) 進(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 引起阻塞和喚醒的事件請(qǐng)求系統(tǒng)服務(wù)正在執(zhí)行的進(jìn)程請(qǐng)求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ù)未到對(duì)相互合作的進(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ā)送請(qǐng)求 則將自己阻塞 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原語是一對(duì)作用相反的原語 在某些進(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)程請(qǐng)求將自己或子孫掛起時(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í) 是進(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ī)會(huì) 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 對(duì)優(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通過如下事件獲得對(duì)CPU的控制中斷 處理外部隨機(jī)事件Trap 錯(cuò)誤或異常事件處理訪問管理程序SVC 用戶程序請(qǐng)求調(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)由請(qǐng)求系統(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)場(chǎng)改變被中斷進(jìn)程的PCB的相關(guān)信息 如現(xiàn)場(chǎng)信息 狀態(tài)信息 將被中斷進(jìn)程的PCB移向目標(biāo)隊(duì)列選擇一個(gè)合適的進(jìn)程改變?cè)撨M(jìn)程的PCB的相關(guān)信息 改變?cè)撨M(jìn)程為運(yùn)行狀態(tài) 修改存儲(chǔ)管理的相關(guān)表格按該進(jìn)程的運(yùn)行要求設(shè)置CPU現(xiàn)場(chǎng)由此可見 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ù)庫(kù)管理系統(tǒng) 程序設(shè)計(jì)語言也引入了線程概念 一 線程的引入傳統(tǒng)OS為了實(shí)現(xiàn)進(jìn)程的迸發(fā) 必須 創(chuàng)建新進(jìn)程并為其分配資源 撤消進(jìn)程并回收其資源 為了保證諸進(jìn)程通過競(jìng)爭(zhēng)資源從而迸發(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è)相對(duì)獨(dú)立的 可調(diào)度的執(zhí)行單元 進(jìn)程是獨(dú)立的分配資源的單位 執(zhí)行與分配資源不再是統(tǒng)一的概念 線程應(yīng)具有如下性質(zhì) 線程是進(jìn)程內(nèi)相對(duì)獨(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)小于對(duì)進(jìn)程作同樣操作的開銷小CPU對(duì)線程的切換開銷小于進(jìn)程切換開銷資源共享性好 多個(gè)線程共享進(jìn)程所分配的資源線程機(jī)制增加了通訊的有效性 由于共享內(nèi)存和文件 無須狀態(tài)切換就可信息交換 適應(yīng)多處理器體系結(jié)構(gòu) 運(yùn)行效率更高 方便 簡(jiǎn)化了用戶程序設(shè)計(jì) 線程的缺點(diǎn)跟蹤線程需要CPU的開銷線程間同樣要爭(zhēng)用資源 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)程級(jí)狀態(tài) 進(jìn)程中有多個(gè)線程 單個(gè)線程的阻塞不會(huì)阻塞整個(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) 它的線程控制表或線程對(duì)象沒有實(shí)例化 調(diào)用Start 原語 該線程被實(shí)例化 指出線程的指令地址 系統(tǒng)和用戶堆棧指針 優(yōu)先級(jí) 變量和參數(shù)內(nèi)容等現(xiàn)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(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)論