軟考筆記(1)--操作系統

 前言

操作系統模塊屬於基本知識範疇,通常會在單選題中出現,約佔2~5分左右。主要知識結構如下圖示:

 

 

一、基本知識點

操作系統是計算機系統中的核心繫統軟件,負責管理和控制計算機系統中硬件和軟件資源,合理地組織計算機工作流程和有效利用資源,在計算機和用戶之間起接口的作用。

操作系統的特徵包括:併發性、共享性、虛擬性、不確定性

操作系統的功能包括:進程管理、文件管理、存儲管理、設備管理和作業管理

1.1、操作系統類型

大型機操作系統 大型機操作系統,通常體積比極大,主要面向多個作業多同時處理,具有強大的I/O能力
服務器操作系統 服務器操作系統用戶應用服務的服務器,通常爲若干用戶服務,允許用戶共享硬件和軟件資源
多處理器操作系統 將多個CPU連接成單個操作系統,通常需要採用的操作系統是配有通信、連接和一致性等專門功能等操作系統
個人計算機操作系統 個人計算機的操作系統,用於服務單個用戶的作業處理
掌上計算機操作系統 PAD、手機等掌上電子產品使用的操作系統
嵌入式操作系統 嵌入式操作系統常應用於家電等功能單一的設備,不允許用戶安裝軟件,而是嵌入到硬件中
傳感器節點操作系統 傳感器是內建有無線電的電池驅動的小型計算機,通常由事件驅動,可以響應外部事件或者內部週期性事件
實時操作系統 實時操作系統特點是將時間作爲關鍵參數,實時收集數據並用有關數據控制機器,通常還必須滿足嚴格的最終時限
智能卡操作系統 智能卡是一種包含一塊CPU芯片的信用卡,有非常嚴格的運行能耗和存儲空間限制,通常只有單項功能,如電子支付

1.2、操作系統結構

單體系統 整個操作系統在內核中以單一程序的方式運行,整個操作系統以過程集合的方式編寫,鏈接成一個大型的可執行二進制程序,各個過程之間可能會相互影響,任何一個過程崩潰可能會導致整個系統崩潰
層次式系統 將操作系統分成多層次,上層基於下層提供的服務來實現上層的功能,不需要關心下層是如何實現的
微內核 層次式系統大多數層次都在內核,微內核結構是隻將核心的微內核模塊運行在內核,其餘模塊作爲普通用戶進程運行在用戶空間
客戶端-服務器模式 微內核思想的變體是將進程劃分爲服務器和客戶端兩類,服務器提供某種服務,客戶端使用服務,客戶端使用服務時構造一個消息發給合適的服務器,通常服務器和客戶端不在一個計算機器上
虛擬機 在裸機上運行並且具備了多道程序功能,該系統向上層提供若干虛擬機,每臺虛擬機和裸機相同,所以在每臺虛擬機上都可以運行一臺裸機所能夠運行的任何類型的操作系統
外核 與虛擬機克隆真實機器不同,另一種策略是對機器進行分區。外核的程序在內核態運行,任務是爲虛擬機分配資源,並確保每個虛擬機使用的資源不會被其他虛擬機使用

1.3、典型操作系統

1.3.1、批處理系統

原理:通過把用戶提交的作業分類,將一批中的作業編成一個作業執行序列

特證:用戶脫機使用計算機、成批處理、多道程序運行

 

1.3.2、分時操作系統

原理:採用分時技術、使多個用戶同時以會話方式控制自己程序運行,每個用戶都感到各自獨立的系統。分時技術把處理器的運行時間分成很短的時間片,按時間片輪流把處理器分配給各聯機作業使用。若某個作業在分配給它的時間片內不能完成其計算,則該作業中斷,把處理器讓給另一個作業使用,等待下一輪時再繼續運行

特徵:交互性、多用戶同時性、獨立性

 

1.3.3、實時操作系統

原理:實時操作系統往往是專用的,系統與應用很難分離,緊密結合在一起。實時系統不強調資源利用率,而更關心及時性、可靠性和完整性

特徵:提供即時響應、高可靠性

 

1.3.4、網絡操作系統

原理:按照網絡架構的各個協議標準進行開發、包括網絡管理、通信、資源共享、系統安全和多種網絡應用服務等。在網絡系統中,各計算機等操作系統可以互不相同,它需要有一個支撐異種計算機系統之間進程通信等網絡環境,以實現協同工作和應用集成

特徵:互操作性、協作處理

 

1.3.5、分佈式操作系統

分佈式操作系統要求有個統一的操作系統,實現操作系統的統一性,負責全系統的資源分配和調度,爲用戶提供統一的界面。它是一個邏輯是緊密耦合的系統,目前還沒有真正實現的網絡操作系統 

 

二、進程管理

2.1、進程及狀態變化

2.1.1、進程和程序

進程是程序的一次執行,是一個動態的概念,程序是靜態的概念,是指令的集合,具有動態性和併發性;程序是進程運行所對應的運行代碼,一個進程對應於一個程序,一個程序可以同時對應於多個進程。

2.1.2、進程的組成

進程是進程資源分配、調度和管理的最小單位,進程由程序、數據和進程控制塊(Process Controll Block,PCB)組成,進程是計算機狀態的一個有序集合。

進程控制塊:PCB是進程存在的唯一標識,PCB描述了進程的基本情況,包括:調度信息和執行信息,PCB隨着進程的建立而產生,隨着進程的完成而銷燬。

2.1.3、三態模型和五態模型

三態模型是將進程劃分爲三種狀態:

運行態:佔有處理器正在運行

就緒態:具備運行條件,等待系統分配處理器執行

阻塞態(等待態):不具備運行條件,正在等待某個事件的完成

通常各個狀態之間可能會相互轉換

運行態-》等待態:等待使用資源

等待態-》就緒態:進程所需要的資源得到滿足,或某個事件已經發生

運行態-》就緒態:CPU時間片結束,或者出現更高優先級的進程

就緒態-》運行態:CPU空閒選擇一個就緒態的進程運行

 

五態模型

五態模型相比於三態模型,分別在就緒和阻塞狀態加了一個掛起(靜止)狀態,實際場景中,進程不會一直在內存中,有時需要將進程掛起,對換到磁盤鏡像區中,使之暫時不參與進程調度,起到平滑系統操作負荷的目的。

掛起就緒和掛起阻塞狀態表示進程目前不在內存中,而是在二級存儲器(外存、外存儲器、輔存)中,只有當它被對換到內存中才會被調度執行。

阻塞態-》掛起阻塞態:如果當前不存在活躍就緒進程,那麼至少有一個等待態進程將被對換出去稱爲掛起阻塞態;操作系統根據當前資源狀況和性能要求,可以決定把阻塞態進程對換出去稱爲掛起阻塞態;

掛起阻塞態-》掛起就緒態:引起進程等待的事件發生後,相應的掛起阻塞態進程轉換成掛起就緒態;

掛起就緒態-》就緒態:當內存中沒有活躍就緒態進程,或者掛起就緒態進程具有比活躍就緒態進程更高優先級,系統把掛起就緒態進程轉成就緒態;

就緒態-》掛起就緒態:操作系統根據當前資源狀況和性能要求,可以決定把就緒態進程對換出去成掛起就緒態;

掛起阻塞態-》阻塞態:當一個進程等待一個事件時,原則是不需要把它調入內存,當一個進程退出後,內存有了一大塊自由空間,而某個阻塞態進程具有較高的優先級,並且操作系統已經得知導致它阻塞的事件即將結束,此時可以發生狀態變化

 

2.2、前驅圖

前驅圖是一個由結點和有向邊構成的有向無循環圖。該圖通常用於表現事務之間先後順序的制約關係。

結點:可以表示一個語句、一個程序段或是一個進程

有向邊:結點間的有向邊表示兩個結點之間存在的前趨關係

在計算機中,經常採用流水線方式執行指令,每一條指令都可以分解爲取指、分析 和執行三步。

取指操作爲 Ai,分析操作爲 Bi 和執行操作爲 Ci(i=1,2,3)。

如圖 2-4 所示爲三個任務各程序段併發執行的前驅圖。

開始結點:A1 沒有前趨結點,不受任何制約,可以直接執行;終止結點: C3 沒有後繼結點;

直接制約:同操作中,多個步驟之間的制約關係,也可以說是“同步的進程之間的制約關係”。如圖 A1、B1、C1 是一條指令的取指、分析、執行的三個步驟,所以它們之間的關係是直接制約。

間接制約:多個操作之間,相同步驟的制約關係,也可以說是“互斥的進程之間的制約關係”。如圖A1、A2、A3 之間就存在間接制約的關係。 

並行執行: B1和A2、C1和B2和A3、  C2和B3,

2.3、PV操作

PV操作是實現進程同步與互斥的常用方法。

P操作的定義:S=S-1,如S>=0,則執行P操作的進程繼續執行;如S<0,則置該進程爲阻塞狀態(因爲無可用資源),並將其插入阻塞隊列。

V操作的定義:S=S+1,如S>0,則執行V操作的進程繼續執行;如S<=0,則從阻塞狀態喚醒一個進程,並將其插入就緒隊列,然後執行V操作的進程繼續。

PV操作控制進程的併發執行時,在前驅圖中,一條路徑對應一個信號量,在路徑的源端進程中,應該對與該路徑對應的信號量做V操作,而在路徑的終端進程中,應該對與該路徑對應的信號量做P操作。 

2.3.1、利用PV操作實現互斥

互斥控制是爲了保護共享資源,不讓多個進程同時訪問這個共享資源,也就是阻止多個進程同時進入訪問這些資源的代碼段,這個代碼段稱爲臨界區,這種只允許一個進程訪問的資源稱爲臨界資源。

僞代碼如下:P(信號量) -》 臨界區 -》V(信號量)

互斥操作只允許一個進程進入,所以信號量S初始值爲1,S的值表示可允許進入的進程數,當S < 0時,其絕對值就是等待使用臨界資源的進程數,也就是等待隊列中的進程數。當一個進程從臨界區出來執行V操作(S = S + 1),此時喚醒一個等待的進程。

2.3.2、利用PV操作實現同步

最簡單的同步形式是進程A在另一個進程B到達L2之前,不應前進到超過點L1,這樣就可以僞代碼如下:

進程A:...... -》L1:P(信號量)-》......

進程B:...... -》L2:V(信號量)-》......

要確保進程B執行V操作之前,不讓進程A的運行超過L1,就要設置信號量S的初始值爲0,這樣如果進程A先執行到L1,那麼執行P操作(S=S-1)後,S<0,則停止執行。直到進程B執行到L2時,執行V操作(S=S+1),喚醒A以繼續執行。

 

2.4、管程和線程

管程由管程名、局部子管程和變量說明、使用共享資源並在數據集上進行操作的若干進程,以及對變量賦初值的語句4個基本部分組成。

執行過程:每一個管程管理一個臨界資源,當有幾個進程調用某管程時,僅允許一個進程進程進入管程,其他調用着必須等待。方法是通過調用特定的管程入口進入管程,然後通過管程中的一個過程使用臨界資源。當某進程通過調用請求訪問某臨界資源而能滿足時,管程調用相應同步原語使該進程等待,並將它排在等待隊列上,當使用臨界資源的進程訪問完該臨界資源並釋放之後,管程又調用相應的同步原語喚醒等待隊列中的隊首進程,爲了表示不同的等待原因,設置條件變量,條件變量不能取任何值,只是一個排隊棧。

線程是進程的活動成分,是處理器分配資源的最小單位,它可以共享進程的資源與地址空間,通過線程的活動,進程可以提供多種服務或實現子任務並行。採用線程機制的最大優點是節省開銷、創建時間短。

  

三、內存管理

3.1、基本概念

地址空間

進程用於尋址內存的一套地址集合,每個進程都有屬於自己的地址空間,並且這個地址空間獨立於其他進程的地址空間

虛擬內存

每個程序擁有自己的地址空間,這個空間被分割成多個塊,每個塊稱作一頁,每頁都是連續的地址範圍。這些頁映射到物理內存,但並不是所有的頁都必須在內存中才能運行程序。當程序引用到一部分在物理內存中的地址空間時,由硬件立刻執行必要的映射。當程序引用到一部分不在物理內存的地址空間時,由操作系統負責將缺少的部分裝入物理內存並重新執行失敗的指令。

邏輯地址

相對地址,相當於指向主存物理真實地址的指針,是一個相對地址

物理地址

物理中真實存在的絕對地址

地址重定位

邏輯地址轉換成主存的物理地址的過程叫地址重定位,主要有靜態重定位和動態重定位

靜態重定位:在程序執行之前進行地址重定位,即裝入內存時重定位

動態重定位:在程序執行期間,在每次存儲訪問之前進行地址重定位

 

3.2、內存管理的方法

內存管理分爲連續分配和離散分配兩種方式,連續分配方式是分區方式管理;離散分配是頁式、段式或者段頁式管理;

1、分區管理

固定分區:將主存空間劃分成若干個連續區域進行管理,每個連續區域大小不定,不過一旦分配好後主存中的分區個數和大小就不會再變。在固定分區方式下,每個分區用來裝入一個作業,由於主存中有多個分區,就可以同時在每個分區裝入一個作業,適用於多到程序系統。優點是實現簡單、無外部碎片

可變分區:不預先劃分內存分區,在進程裝入內存時根據進程的大小動態建立分區,並使分區的大小正好適合進程的需求,所以系統分區的個數和大小是不固定的

2、分頁管理

虛擬地址空間按照固定大小劃分成若干個頁面,在物理內存中對應的單元成爲頁框,頁面和頁框的大小通常是一樣的。RAM和磁盤之間的交換總是以整個頁面爲單元進行的。

 

分頁的存儲步驟爲:先將邏輯空間等分爲頁,並從0開始編號;再將物理空間等分爲頁幀或者叫塊或頁框,大小和頁一致;分配內存時以塊爲單位將進程中的若干頁面裝入多個可以不相鄰的塊中。

頁內地址包含頁號和偏移量(頁內地址),頁內地址位數決定頁的大小;

邏輯地址=頁號&偏移量;(&號是連接符號,是將頁號作爲邏輯地址的最高位)

頁表是用於虛擬地址到物理地址的映射,虛擬地址包括頁號和偏移量,虛擬頁號可以作爲頁表的索引,以找到該虛擬頁面對應的頁表項,由頁表項可以找到頁框號,然後把頁框號拼接到偏移量的高位端,以替換掉虛擬頁號,形成內存中的物理地址。

頁表的作用就是將虛擬頁面映射爲頁框,頁表就是一個函數,參數是虛擬頁號,結果是物理頁框號,虛擬地址中將虛擬頁號替換爲物理頁框號就形成了物理地址。

3、分段管理

段是信息的邏輯單位,含有一組完整的信息,分段的目的是爲了滿足用戶的需求。分段的作業地址空間是二維的,程序員在標識一個地址時,既需要給出段名又需要給出段內地址。

分頁時頁大小是固定的,分段時段段大小不固定,依據邏輯信息組的長度而定,每個段內都是一個完整的邏輯信息組。

段的地址結構包括段號和偏移量(段內地址),段內地址的位數決定了段的大小。

邏輯地址=段號&偏移量;

分段的邏輯地址轉換爲物理地址是,是相當於段號&段內地址轉換爲基址 + 段內地址

段表和頁面的邏輯類似,存儲了段號到物理地址到基址到映射關係。物理地址是基址+段內地址,而不是基址&段內地址,由邏輯地址得到段號、段內地址,再根據段號和段表求出基址,再由基址+段內地址即可得物理地址。

4、段頁式管理

 段頁式管理方式是先將程序進行分段,然後在每個段內再進行分頁處理,原理和分段、分頁的一致。

段頁式地址結構爲:段號、段內頁號、頁內地址

地址映射時通過段號可以從段表中找到物理地址的基址,也就是頁表的起始地址;

通過段內頁號+頁表起始地址可以得到頁塊的地址;

再通過頁塊地址+頁內地址就可以得到完整的物理地址。

分段、分頁和段頁方式的比較

  段式 頁式 段頁式
劃分方式 分段(段不定長),每個作業一張段表 分頁(頁定長),每個進程一張也表 先將內存分爲等長頁,每個作業一張段表,每段對應一組頁表
虛地址 段內偏移,(S, d) 頁內偏移,(P,d) 段號,段內頁號,頁內偏移(S,P,d)
虛實轉換 段表內找出起始地址,加段內偏移 頁表內找出起始地址,然後加頁內偏移 先在段表中找到頁表的起始地址,然後在表中找到起始地址,最後加頁內偏移
優點 簡化了任意增長和收縮的數據段管理,利用進程間共享過程和數據 消除了頁外碎片 結合了段式和頁式的優點,便於控制存取訪問
缺點 段外碎片降低了利用率 存在頁內碎片 提高複雜度,增加硬件存在頁內碎片

3.3、連續內存可變分區分配算法

1、首次適配算法(最先適配算法)

存儲管理器沿着段鏈表進行搜索,從開始沿後一直搜索直到找到第一個合適的空閒區,如果空閒區比實際需要的大則進行分割一部分給程序使用。

2、下次適配算法

在首次適配算法的基礎上進行來優化,每次找到空閒區後記錄當前的位置,下次查詢時直接在上一次的位置處開始查詢即可

3、最佳適配算法

從頭到尾搜索整個鏈表找到可以容納進程的最小空閒區,缺點是會產生大量的小空閒區無法分配,產生較多的碎片

4、最差適配算法

和最佳適配算法相反,每次都是找出最大的空閒區進行分配,避免產生較多的碎片,保證比較大的程序可以分配

5、快速適配算法

針對常用大小的空閒區維護單獨的鏈表,比如4K、8K、12K等,這樣在需要分配內存時就可以快速的找到對應大小的空閒區的位置

 

3.4、頁面置換算法

當發生斷頁中斷時,操作系統必須在內存中選擇一個頁面將其換出內存,以便爲即將調入的頁面騰出空間。如果要換出的頁面在內存駐留期間已經被修改過,就必須把它寫會磁盤以更新該頁面在磁盤上的副本,如果該頁面沒有被修改過,那麼它在磁盤上的副本已經是最新的,不需要回寫。直接用調入的頁面覆蓋被淘汰的頁面就可以了。

當發生缺頁中斷時,雖然可以隨機選擇一個頁面來置換,但是如何每次都選擇不經常使用的頁面會提升系統的性能,如果一個被頻繁使用的頁面被置換出內存,很可能它在很短時間內又要被調入內存,會帶來不必要的開銷。

1、最優頁面置換算法

 最優頁面置換算法是將每個頁面首次被訪問前所需要執行的指令數作爲標記,當需要置換時,優先置換需要執行指令數最多的頁面,相當於按指令順序進行排序,最後被訪問的頁面最先被置換。目前該算法還無法實現只能理論存在,因爲操作系統無法知道每個頁面下一次訪問的時機。

2、最近未使用頁面置換算法(NRU)

大部分操作系統爲每一個頁面設置了兩個狀態位。當頁面被訪問(讀或寫)時設置R位;當頁面被寫入(修改)時設置M位,這些位包含在每個頁表項中。

NRU算法隨機地從類編號最小的非空類中挑選一個頁面淘汰。含義是在最近一個時鐘滴答中淘汰一個沒有被訪問的已修改頁面比淘汰一個被頻繁使用的乾淨頁面要好。NRU算法主要優點是易於理解和能夠有效被實現。

3、先進先出頁面置換算法(FIFO)

開銷最小的頁面置換算法是FIFO算法,由操作系統維護一個所有當前在內存中的頁面的鏈表,最先進入的頁面放在表尾,最早進入的放在表頭。當發生缺頁中斷時。淘汰表頭的頁面並把新調入的最新進入的頁面放在表尾。

4、第二次機會頁面置換算法

FIFO算法可能會把經常使用的頁面置換出去,第二次機會頁面置換算法進行了優化,檢測最老頁面的R位,如果R位爲0,那麼這個頁面又老又沒使用,可以立刻置換掉;如果是1,就將R位清0,並把該頁面放到連表的尾部,修改它的裝入時間使他就像剛裝入的一樣,然後繼續搜索,第二次機會算法就是尋找一個在最近的時鐘間隔內沒有被訪問過的頁面,如果所有頁面都沒有被訪問過,該算法就是FIFO算法。

5、時鐘頁面置換算法

第二次機會算法經常需要在鏈表中移動頁面,既降低了效率又不是很有必要,一個更好的辦法是將所有的頁面都保存在一個類似鐘面的環形鏈表中,一個錶針指向最老的頁面,發生缺頁中斷時,首先檢查錶針指向的頁面,如果R位是0就淘汰該頁面,並把新的頁面插入這個位置,然後把錶針前移一個位置;如果R位是1就清除R位並把錶針前移一位,重複這個過程直到找到一個R位爲0的頁面爲止。

6、最近最少使用頁面置換算法(LRU)

在前面幾條指令中頻繁使用的頁面很可能在後面的幾條指令中被使用。反過來說已經很久沒有使用的頁面很可能在未來較長時間內不會被使用。當缺頁中斷時,置換未使用時間最長的頁面。

實現LRU需要在內存中維護一個所有頁面的鏈表,最近最多使用的頁面在表頭,最近最少使用的頁面在表尾。困難的是在每次訪問內存時都必須要更新整個鏈表。在鏈表中找到一個頁面,刪除它,然後把它移動到表頭是一個比較耗時的操作。

四、文件管理

普通文件分爲ASCII文件和二進制文件,ASCII文件由多行正文組成,最大優勢是可以顯示打印,還可以用任何文本編輯器進行編輯,而二進制文件打印出來是無法理解的、充滿混亂字符的一張表。二進制文件有一定的內部結構,只有相應的程序才瞭解內部結構。

文件訪問方式有順序訪問和隨機訪問

順序訪問:進程從頭按順序讀取文件的全部字節或記錄,不能跳過某一些內容,也不能不按順序讀取,順序訪問是可以返回到起點的,需要時可多次讀取該文件。

隨機訪問:可以不按順序讀取文件中的字節或記錄,或者按照關鍵字而不是位置來訪問記錄。

4.1、磁盤

磁盤和內存相比每個二進制位的成本低了兩個數量級,而且空間還要大兩個數量級,但是磁盤唯一的問題就是隨機訪問數據的時間大約慢了三個數量級,低速的原因時磁盤上一種機械裝置。

 

磁盤涉及的概念如下:

磁盤:磁盤的表面由一些磁性物質組成,這些磁性物質可以用來存儲二進制數據

磁道:磁盤的盤面被劃分成一個個同心圓,每一個同心圓就是一個磁道

磁頭:讀取磁盤內容的設備,一個機械臂上通常有多個磁頭,多個磁頭是共同進退的

扇區:磁道上一個弧形是一個扇區

柱面:多個盤面上相同大小的磁道形成一個柱面,或者說多個磁頭轉一圈的範圍就是一個柱面

4.2、磁盤空間管理

磁盤存儲文件通常是分塊存儲,因爲連續存儲的話當文件擴大時,需要在磁盤上移動文件,效率比較低。

4.3、磁盤碎片整理

4.4、磁盤臂調度算法

磁盤讀寫耗時主要涉及三個要素:尋道時間(將磁盤臂移動道適當的柱面的時間)、旋轉延遲(等待適當扇區旋轉道磁頭的時間)、傳輸時間

其中尋道時間佔據大多數時間,所以提高磁盤讀寫效率的方式就是提高尋道的效率。

假設磁盤請求的柱面的順序爲98,183,37,122,14,124,65,67,且當前磁頭處於53柱面

主要的尋道算法有以下幾種:

4.4.1、先來先服務算法(FCFS)

按每次接收請求的順序處理請求,該算法比較簡單,處理順序就是請求的順序。

則處理順序爲:98->183->37->122->14->124->65->67, 尋道的總距離爲45 + 85 + 146 + 85 + 108 + 110 + 59 + 2 = 640

 

 

 

4.4.2、最短尋道優先算法(SSF)

SSF算法的原則是每次從請求隊列中找到最近的位置去訪問,但是可能會存在“飢餓”現象,也就是請求較早但是距離較遠的訪問請求要到最後才能處理。

按照SSF算法,案例的處理順序爲:65->67->37->14->98->122->124->183,尋道的總距離爲:12 + 2 + 30 + 23 + 84 + 24 + 2 + 59 = 236

 

4.4.3、掃描算法(Scan)(電梯算法)

掃描算法類似於電梯的運行算法,即每次按一個方向到達頂端之後開始轉向往另一個頂端開始掃描。這樣就避免了處於距離較遠的位置很難訪問到的情況。

按照掃描算法的原則,且假設當前的方向是從大到小的方向,則案例的處理順序爲:37->14->0->65->67->98->122->124->183, 尋道總距離爲:16 + 23 + 14 + 65 + 2 + 31 + 24 + 2 + 59 = 53 + 183 = 236

 

4.4.4、循環掃描算法

循環掃描算法是在掃描算法的基礎上進行了改進,是每次掃描都是按小到大一個方向進行掃描,當掃描到最大位置時立馬從0開始進行掃描。

 

按照循環掃描算法的原則,處理順序爲:65->67->98->122->124->183->199->0->14->37,尋道總距離爲:12 + 2 + 84 + 24 + 2 + 59 + 16 + 199 + 14 + 23 = 382

 

五、I/O管理

 

六、死鎖

系統資源分爲可搶佔資源和不可搶佔資源。可搶佔資源可以從擁有它的進程中搶佔而不會產生任何副作用,存儲器就是一類可搶佔的資源;不可搶佔資源是指在不引起相關的計算失敗的情況下,無法把它從佔有的進程處搶佔過來。

6.1、死鎖簡介

死鎖的定義爲:如果一個進程集合中的每個進程都在等待只能由該進程集合中的其他進程才能引發的事件,那麼該進程集合就是死鎖的。

死鎖的必要條件:

1、互斥條件:每個資源要麼已經分配給了一個進程,要麼就是可用的,不能同時分配給多個進程;

2、佔有和等待條件:已經得到了某個資源的進程可以再請求新的資源,佔有的資源不會被釋放;

3、不可搶佔條件:已經分配給一個進程的資源不能強制性地被搶佔,它只能被佔有它的進程顯式地釋放;

4、環路等待條件:若干進程形成環形鏈,每個都佔有對方要申請的下一個資源

以上四個條件任何一個不滿足就無法形成死鎖。

6.2、死鎖的檢測和恢復

死鎖的恢復可以通過利用搶佔來恢復、利用回滾恢復和殺死進程恢復等方式

6.3、死鎖的避免和預防

死鎖的避免可以通過銀行家算法來避免;

死鎖的預防可以採用破壞死鎖的幾大必要條件的方式

1、破壞互斥條件

2、破壞佔有並等待條件

3、破壞不可搶佔條件

4、破壞環路等待條件

6.4、銀行家算法和鴕鳥算法

6.4.1、銀行家算法

銀行家算法是指在分配資源之前先看清楚資源分配後釋放會導致系統死鎖,如果會死鎖,則不分配;否則就分配。按照銀行家算法思想,當進程請求資源時,系統就按如下原則分配資源:

1、當一個進程對資源的最大需求量不超過系統的資源數時,可以接納該進程;

2、進程可以分期請求資源,但請求的總數不能超過最大需求量;

3、當系統現有的資源不能滿足進程尚需資源數時,對進程的請求可以推遲分配,但總能式進程在有限的時間裏得到資源;

4、當系統現有的資源能滿足進程尚需資源數時,必須測試系統現存的資源能否滿足該進程尚需的最大資源數,若能滿足則按當前的申請量分配資源;否則也要推遲分配

 

6.4.2、鴕鳥算法

鴕鳥算法是把鴕鳥頭埋到沙子裏,假裝根本沒有問題發生。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章