《操做系統》之進程

線程與進程:算法

  1. 傳統進程機制:進程是資源分配、調度的基本單位
  2. 引入線程後:進程是資源分配的基本單位,線程是資源調度的基本單位

進程的狀態:編程

  • 五狀態:建立態、終止態,運行態,就緒態,阻塞態
  • 七狀態:五狀態、就緒掛起、阻塞掛起

  說明:內存不足的時候,能夠將就緒態的進程鏡像放到外存,同理,阻塞態進程鏡像放到外存中,當事件知足後就能夠將轉換成就緒掛起;若是運行態時間片使用完等緣由後能夠將進程鏡像直接轉換成就緒掛起數組

 

調度安全

  • 三層調度:高級調度(做業調度)、中級調度(內存調度)、低級調度(進程調度)

 

進程調度的方式數據結構

  • 非剝奪調度方式(非搶佔方式),只容許進程主動放棄處理機,在運行過程當中即使有更緊迫的任務到達,當前進程依然會繼續使用處理機,直到該進程終止或主動要求進入阻塞態
  • 剝奪調度方式(搶佔方式),當一個進程正在處理機上執行時,若是有一個更重要或更緊迫的進程須要使用處理機,即當即暫停正在執行的進程,將處理機分配給更重要緊迫的那個進程

調度算法的評價指標併發

  • cpu利用率、系統吞吐量、週轉時間(週轉時間、平均週轉時間、帶權週轉時間、平均帶權週轉時間)、等待時間、響應時間
  • cpu利用率 = cpu忙碌時間/總時間
  • 系統吞吐量 = 總完成的做業數/花費的總時間
  • 週轉時間 = 做業完成時間 - 做業提交時間;平均週轉時間 = 做業週轉時間和/做業數;帶權週轉時間 = 做業週轉時間/做業實際運行時間;                      平均帶權週轉時間 = 做業帶權週轉時間之和/做業數
  • 等待時間 = 做業處於等待處理機狀態時間的總和
  • 響應時間 = 提出請求到首次產生響應須要的時間

調度算法操作系統

  • 先來先服務(FCFS)、短做業優先(SJF)、高響應比優先(HRRN)、時間片輪轉(RR)、優先級調度算法
  • 先來先服務(用於做業/進程調度):根據做業/進程的前後順序進行服務 | 非搶佔式算法 | 優勢:公平、算法簡單 | 缺點:對短做業不利 | 不會致使飢餓
  • 短做業優先(用於做業/進程調度):最短做業/進程優先進行服務 | 非搶佔式(SJF)、搶佔式(最短剩餘時間優先算法 SRTN)都有 | 優勢:最短的平均等待時間、平均週轉時間 | 缺點:對長做業不利 | 不斷有短做業進入,會致使長做業飢餓
  • 高響應比優先(用於做業/進程調度):根據響應比從高到低進行服務(響應比=(等待時間 + 要求服務時間)/要求服務時間)| 非搶佔式算法 | 優勢:避免長做業飢餓問題 | 不會致使飢餓
  • 時間片輪轉(只用於進程調度):進程根據順序和時間片大小輪流使用處理機,時間片內未處理完的進程排到隊尾 | 搶佔式算法 | 優勢:公平、響應快 | 缺點:頻繁的切換進程,會有必定的開銷,而且系統沒法區分系統的緊急程度 | 不會致使飢餓
  • 優先級調度算法(用於做業/進程調度):根據做業/進程的優先級從高到低進行 | 非搶佔(靜態優先級調度)、搶佔式(動態優先級調度)都有 | 優勢:根據緊急程度,能夠靈活地調整做業/進程的順序 | 缺點:對於優先級低的做業/進程,可能會致使飢餓 | 會發生飢餓
  • 多級反饋隊列調度算法(用於做業/進程調度):做業/進程會在一個隊列中用FCFS算法和RR算法進行,當一個時間片用完以後尚未執行完的話,就將該做業/進程放到第二個對列表中,第二個隊列指定的時間片是第一個的兩倍,如此往復,可能會致使多個對列 | 搶佔式算法 | 整合了以前的調度算法的優勢 | 可能會發生飢餓

進程互斥遵循原則線程

  • 空閒讓進:臨界區空閒時,能夠容許一個請求進入臨界區的進程當即進入臨界區
  • 忙則等待:當已有進程進入臨界區時,其餘試圖進入臨界區的進程必須等待
  • 有限等待:對請求訪問的進程,應保證能在有限時間內進入臨界區(保證不會飢餓)
  • 讓權等待:當進程不能進入臨界區時,應當即釋放處理機,防止進程忙等待

進程互斥代碼實現blog

  • 單標誌法:兩個進程在訪問完臨界區後會把使用臨界區的權限轉交給另外一個進程 | 違背「空閒讓進「原則
  • 雙標誌先檢查:設置一個布爾型數組flag[],數組中各個元素用來標記各進程想進入臨界區的意願 | 違背」忙則等待「原則
  • 雙標誌後檢查:雙標誌先檢查法的改版,先檢查法是先檢查後上鎖,後檢查法是先上鎖後檢查 | 違背了」空閒讓進「、」有限等待「原則
  • Peterson算法:雙標誌後檢查法是進程間爭搶着想進入臨界區,Peterson算法是經過主動讓對方先使用臨界區的方式使用臨界區 | 未遵循」讓權等待「原則

進程互斥硬件實現(缺點:沒法實現「讓權等待」)隊列

  • 中斷屏蔽:進程開始訪問臨界區到訪問結束不容許中斷,不使發生進程切換 | 優勢:簡單高效 | 不適用於多處理機,只適用於操做系統內核進程,由於只有內核態才能執行開/關中斷指令
  • TestAndSet(TS指令/TSL指令):指令是用硬件實現的,執行過程不容許被中斷,能夠適用於多處理機 
  • Swap指令(XCHG指令):指令經過硬件實現的,執行過程不容許被中斷

信號量機制

  • 定義:用戶進程能夠經過使用操做系統提供的一對原語來對信號量進行操做,從而實現進程互斥、進程同步
  • 整型信號量:用一個整數型的變量做爲信號量,用來表示系統中某種資源的數量 | 缺點:不知足「讓權等待」原則,會發生「忙等」
  • 記錄型信號量:用記錄型數據結構表示的信號量(遵循了「讓權等待」原則,解決了整型信號量」忙等「的問題)
  • 原語:wait(P操做,試圖使用資源)、signal(V操做,釋放資源)
  • P操做:必定先S.value++,以後可能執行block原語(S是資源數量,block是阻塞)
  • V操做:必定先S.value--,以後可能執行wakeup原語(wakeup是喚醒)
  • 同步信號量的初始值通常爲0,互斥信號量的初始值通常爲1

信號量實現進程互斥

  • 劃定臨界區,設置互斥信號量mutex,初值爲1
  • 臨界區以前執行P(mutex)
  • 臨界區以後執行V(mutex)

信號量實現進程同步

  • 分析須要進行同步的操做,設置同步信號量S,初始爲0
  • 在「前操做」以後執行V(S)
  • 在「後操做」以前執行P(S)

信號量機制實現前驅關係

  • 爲每一對前驅關係各設置一個同步信號量,初始值爲0
  • 在「前操做」以後對相應的同步變量執行V操做
  • 在「後操做」以前對響應的同步變量執行P操做

生產者-消費者

  • 生產者與消費者共享一個初始爲空,大小爲m的緩衝區
  • 只有緩衝區沒滿時,生產者才能把產品放入緩衝區,不然必須等待
  • 只有緩衝區不空時,消費者才能從緩衝區中取出產品,不然必須等待
  • 緩衝區時臨界資源,進程必須互斥訪問

多生產者-多消費者

  • 生產者-消費者的升級版本
  • 須要考慮每一個事件的先後順序

讀者-寫者

  • 容許多個讀者能夠同時對文件執行讀操做
  • 只容許一個寫者往文件中寫信息
  • 任一寫着在完成寫操做以前不容許其餘讀者或寫着工做
  • 寫者執行寫操做前,應讓已有的讀者和寫者所有退出

哲學家進餐問題與防「死鎖」方案

  • 描述:哲學家圍坐在桌子上吃飯,每一個人左右兩邊各一支筷子,當哲學家拿到左右兩支筷子才能吃飯
  • 防「死鎖」方案一:最多隻容許n-1個哲學家吃飯(n表示哲學家的總數),當其中一個哲學家吃完飯,就會釋放資源
  • 防「死鎖」方案二:爲哲學家編號,要求奇數位的哲學家優先拿起左邊的筷子,偶數位的哲學家優先拿起右邊的筷子

管程

  • 組成部分:局部於管程的共享數據結構說明;對該數據結構進行操做的一組過程;對局部於管程的共享數據設置初始值的語句;管程的名稱
  • 基本特徵:局部於管程的數據只能被局部於管程的過程所訪問;一個進程只有經過管程內的過程才能進入管程訪問共享數據;每次僅容許一個進程在管程內執行某  個內部過程
  • 能夠解決的問題:生產者-消費者問題;

死鎖

相似概念:飢餓:因爲長期得不到資源,某進程沒法向前推動的現象;死循環:某進程執行過程當中一直跳不出某個循環的現象

  • 定義:在併發環境下,各進程因競爭資源而形成的一種互相等待對方手裏資源,致使各進程都阻塞,都沒法向前推動的現象,叫作「死鎖」
  • 產生的必要條件:互斥條件;不可剝奪;請求和保持條件;循環等待條件
  • 處理策略:預防死鎖(靜態策略);避免死鎖(動態策略);死鎖的檢測和解除

預防死鎖(靜態策略)

  • 破壞互斥條件:將臨界資源改造爲可共享使用的資源(如SPOOLing技術)| 缺點:可行性不高,不少時候沒法破壞互斥條件
  • 破壞不可剝奪條件:方案一:申請的資源得不到知足時,當即釋放擁有的全部資源 | 方案二:申請的資源被其餘進程佔用時,由操做系統協助剝奪(考慮u優先級)| 缺點:實現複雜;剝奪資源可能致使部分工做失效;反覆申請和釋放致使系統開銷大;可能致使飢餓
  • 破壞請求和保持條件:運行前分配好全部須要的資源,以後一直保持 | 缺點:資源利用率低;可能致使飢餓
  • 破壞循環等待條件:給資源編號,必須按編號從小到大的順序申請資源 | 缺點:不方便增長新設備;會致使資源浪費;用戶編程麻煩

避免死鎖(動態策略)

  • 避免死鎖使用銀行家算法能夠解決,經過多個進程按照安全序列順序執行
  • 銀行家算法:①檢查這次申請是否超過了以前生命的最大需求數;②檢查這次系統剩餘的可用資源是否還能知足此次請求;③試探着分配,更改各數據結構;④用安全性算法檢查這次分配是否會致使系統進入不安全狀態

死鎖的檢測和解除

  • 檢測:依次消除與不阻塞進程相連的邊,直到無邊可消;所謂不阻塞進程是指其申請的資源數還足夠的進程;死鎖定理:若資源分配圖是不可徹底簡化的,說明發生了死鎖
  • 解除:資源剝奪法;撤銷進程法(終止進程法);進程回退法

 

第一篇:當前博客是《操做系統》的第一篇博客

下一篇:暫無下一篇博客

相關文章
相關標籤/搜索