操作系統原理提綱

以下是我閱讀Abraham Silbershatz《Oprating system concepts》(第七版)時做的提綱。目前僅包括前十三章。標註(略)的部分是暫時跳過的。

第一章 導論

1.1 操作系統做什麼(略)

1.2 計算機系統組織

1.2.1 計算機系統操作

現代通用計算機系統由一個或多個CPU和若干設備通過共同的總線相連而成,該總線提供了對共享內存的訪問。

事件的發生通常通過硬件或軟件中斷來表示。系統調用也能觸發中斷。

1.2.2 存儲結構

內存通常是用DRAM實現的。

存儲設備層次:寄存器、高速緩存、主存、電子磁盤、磁盤

1.2.3 I/O結構(略)

1.3 計算機系統體系結構

1.3.1 單處理器系統

1.3.2 多處理器系統

1.3.3 集羣系統

1.4 操作系統結構(略)

1.5 操作系統操作

1.5.1 雙重模式操作

內核模式和用戶模式 系統開始引導時,硬件處於內核模式。接下來裝入操作系統開始在用戶模式下執行用戶進程。一旦出現陷阱或中斷,硬件會從用戶模式切換到內核模式。 如果試圖在用戶模式下執行特權指令,那麼硬件並不執行該指令,而是認爲該指令非法,並將其以陷阱的形式通知操作系統。

特權指令:I/O控制、定時器管理和中斷管理。

1.5.2 定時器

防止程序進入死循環,或者不將控制權返回給操作系統

1.6 進程管理

創建和刪除用戶進程和系統進程

掛起和重啓進程

提供進程同步機制

提供進程通信機制

提供死鎖處理機制

1.7 內存管理

記錄內存的哪部分正在被使用以及被誰使用

當有內存空間時,決定哪些進程可以裝入內存

根據需要分配和釋放內存空間

1.8 存儲管理

1.8.1 文件系統管理

創建和刪除文件

創建和刪除目錄

提供操作文件和目錄的原語

1.8.2 大容量存儲器管理

空閒空間管理

存儲空間分配

硬盤調度

1.8.3 高速緩存(略)

1.8.4 I/O系統

通用設備驅動器接口

硬件設備驅動程序

第二章 操作系統結構

2.1 操作系統服務

用戶界面、程序執行、I/O操作、文件系統操作、通信、錯誤檢測、資源分配、統計、保護和安全

2.2 操作系統的用戶界面

2.2.1 命令解釋程序

2.2.2 圖形用戶界面

2.3 系統調用

系統調用提供了操作系統提供的有效服務界面

2.4 系統調用類型

進程控制、文件管理、設備管理、信息維護和通信

2.5 系統程序

包括但不限於系統調用的簡單接口

文件管理、狀態信息、文件修改、程序語言支持、程序裝入與執行、通信

2.6 操作系統設計與實現(略)

2.7 操作系統結構

簡單結構(MS-DOS)、分層、微內核、模塊(Linux、 Mac OS X)

2.8 虛擬機

把單個計算機的硬件抽象爲幾個不同的執行部件,使得每個獨立的執行環境似乎都在自己的計算機上運行

2.9 系統生成(略)

2.10 系統啓動

CPU啓動後,具有預先定義內存位置的指令寄存器被重新裝載,並在此開始執行。該位置就是初始引導程序的所在。初始引導程序裝入一個較複雜的引導程序,而後再裝入內核。

手機在ROM中保存完整的操作系統

第三章 進程

3.1 進程概念

3.1.1 進程

進程包括程序代碼、程序計數器的值、寄存器的內容、進程堆棧段、數據段。

3.1.2 進程狀態

創建、運行、等待、就緒、終止

3.1.3 進程控制塊

進程狀態、程序計數器、寄存器、CPU調度信息、內存管理信息、I/O信息

3.1.4 線程(略)

3.2 進程調度

3.2.1 調度隊列

分爲作業隊列和就緒隊列

3.2.2 調度程序

長期調度程序:從緩衝池中選擇進程,並裝入內存。

中期調度程序:將進程從內存中移出和重新放入。

短期調度程序:決定誰能獲得CPU。

3.2.3 上下文切換

保存當前進程的狀態並恢復另一個進程的狀態

進程上下文用進程的PCB表示

3.3 進程操作

3.3.1 進程創建

3.3.2 進程終止

3.4 進程間通信

3.4.1 共享內存系統

生產者和消費者問題

3.4.2 消息傳遞系統(略)

3.5 IPC系統實例(略)

3.6 客戶機服務器通信

3.6.1 Socket

3.6.2 遠程過程調用

RPC(Remote Procedure Call ProtocoL) 遠程過程調用協議,它是一種通過網絡從遠程計算機程序上請求服務,而不需要了解底層網絡技術的協議。

3.6.3 遠程方法調用

RMI, Remote method invocation是一個類似於RPC的Java特性。RMI允許線程調用遠程對象的方法。如果對象位於不同的JVM上,就認爲它是遠程的。

在RPC中,遠程過程的參數是普通數據結構,而RMI可以將對象作爲參數傳遞給遠程方法。

第4章 線程

4.1 概述

線程是CPU使用的基本單元,它由線程ID、程序計數器、寄存器集合和棧組成

4.2 多線程模型

4.2.1 多對一模型

將許多用戶級線程映射到一個內核級線程。如果一個線程執行了阻塞系統調用,那麼整個進程會阻塞。

4.2.2 一對一模型

將每個用戶線程映射到一個內核線程

4.2.3 多對多模型

多路複用了許多用戶線程到同樣數量或更小數量的內核線程上

4.3 線程庫

爲程序員提供創建和管理線程的API

4.4 多線程問題

4.4.1 系統調用fork()和exec()

UNIX有兩種形式的fork(),一種複製所有線程,另一種只複製調用了系統調用fork()的線程。

4.4.2 取消線程

異步取消和延遲取消

4.4.3 信號處理

4.4.4 線程池

在進程開始時創建一定數量的進程,並放入池中以等待工作。 當服務器收到請求時喚醒池中的一個線程。 如果池中沒有可用的線程,那麼服務器會一直等待直到有空線程爲止。

4.4.5 線程特定數據

4.5 操作系統實例

4.5.1 Windows XP線程

4.5.2 Linux線程

Linux並不區分進程和線程,通常統稱爲任務。

第五章 CPU調度

5.1 基本概念

5.1.1 CPU-I/O區間週期

進程執行從CPU區間開始,之後是I/O區間,如此循環往復。

5.1.2 CPU調度程序

5.1.3 搶佔調度和非搶佔調度

5.1.4 分派程序

用來將CPU交給短期調度程序選擇的進程

5.2 調度準則

CPU使用率、吞吐量、週轉時間、等待時間、響應時間

5.3 調度算法

先到先服務

最短作業優先

優先級調度

輪轉法調度

多級隊列調度:分成多個獨立隊列,每個有自己的調度算法

多級隊列反饋調度:根據CPU使用時間,允許進程在不同隊列之間移動

5.4 多處理器調度(略)

5.5 線程調度(原書缺頁)

5.6 操作系統實例

5.6.1 Solaris

5.6.2 Windows XP

5.6.3 Linux

Linux調度程序是搶佔的、基於優先級的算法、Linux給較高優先級的任務較長的時間片。

每個運行隊列包括兩個優先級隊列:活動的和到期的。當所有任務都耗盡其時間片時, 兩個優先級隊列相互交換。

5.7 算法評估(略)

第六章 進程同步

6.1 背景

多個進程併發訪問和操作同一數據且執行結果和訪問發生的特定順序有關,稱爲競爭條件。

6.2 臨界區問題

6.3 Peterson算法

int turn

boolean flag[2]

turn表示哪個進程可以進入臨界區,flag表示哪個進程想要進入臨界區

6.4 硬件同步

TestAndSet指令:在進入臨界區之前,首先用TS指令測試s,如果沒有進程在臨界區內,則可以進入,否則必須循環測試直到TS(s)爲true

swap指令:交換兩個字的內容,爲每個臨界區設置一個布爾鎖變量,當其值爲false時表示無進程在臨界區

6.5 信號量

6.5.1 用法

計數信號量的值域不受限制,而二進制信號量的值只能爲0或者1。

有的系統把二進制信號量稱爲互斥鎖

6.5.2 實現

忙等待:這種類型的信號量也被稱爲自旋鎖,因爲在等待時鎖還在運行

爲了克服忙等待,可以修改信號量操作wait()和signal()的定義。當一個進程執行wait()操作時,發現信號量不爲正,則它必須等待。然而,該進程不是忙等而是阻塞自己。

阻塞操作將一個進程放入到與信號量相關的等待隊列中,並將其狀態切換爲等待。

6.5.3 死鎖與飢餓

6.6 經典同步問題

6.6.1 有限緩衝問題:若緩衝爲空,則消費者必須等待;若緩衝爲滿,則生產者必須等待

6.6.2 讀者和寫者問題

進程共享以下數據結構:

semaphore mutex, wrt;

int readcount;

寫者進程結構:

do{

wait(wrt);

...

//writing is performed

...

signal(wrt);

}while(true);

讀者進程結構:

do{

wait(mutex);

readcount++;

if(readcount == 1)

wait(wrt);

signal(mutex);

...

//reading is performed

...

wait(mutex);

readcount--;

if(readcount == 0)

signal(wrt);

signal(mutex);

}while(TRUE);

6.6.3 哲學家吃通心粉問題

6.7 管程

6.7.1 使用

管程類型提供了一組由程序員定義的、在管程內互斥的操作。

管程類型的表示包括一組變量的聲明和對這些變量操作的子程序和函數的實現。

管程結構確保一次只有一個進程能在管程內活動。

6.7.2 哲學家吃通心粉問題的管程解決方案

6.7.3 基於信號量的管程實現

對每個管程,都有一個信號量mutex。進程在進入管程之前必須執行wait(mutex), 在離開管程之後必須執行signal(mutex)。

6.8 同步實例

6.8.1 Solaris同步

6.8.2 Windows XP同步

6.8.3 Linux同步

Linux內核提供自旋鎖和信號量,以進行內核加鎖。Linux通過兩個簡單的系統調用preempt_disable()與preempt_enable(),用於禁止與允許內核搶佔。如果內核模式的任務佔有鎖,那麼內核不能被搶佔。

自旋鎖、內核搶佔只有在短期佔有鎖時,纔可用於內核。

6.9 原子事務

第七章 死鎖

7.1 系統模型

7.2 死鎖特徵

7.2.1 必要條件

互斥、佔有並等待、非搶佔、循環等待

7.2.2 資源分配圖

7.3 死鎖處理方法

避免死鎖、檢測並修復死鎖、忽視死鎖問題

7.4 死鎖預防

只要確保四個條件至少有一個不成立,就能避免死鎖的發生

7.4.1 互斥:例如只讀文件,不需要互斥

7.4.2 佔有並等待:當一個進程申請一個資源時,它不能佔有其他資源

7.4.3 非搶佔:如果一個進程佔有資源並申請另一個不能立即釋放的資源,那麼其現已分配的資源都可被搶佔

7.4.4 循環等待:要求每個進程按遞增順序申請資源

7.5 死鎖避免

7.5.1 安全狀態:如果系統能按某個順序爲每個進程分配資源並能避免死鎖,那麼系統狀態就是安全的。

7.5.2 資源分配圖算法

除了申請邊和分配邊外,引入一新類型的邊,稱爲需求邊。 只有在將申請邊變成分配邊而不會導致資源分配圖形成環時,才允許申請。

7.5.3 銀行家算法

銀行家算法數據結構

1)可利用資源向量Available   

是個含有m個元素的數組,其中的每一個元素代表一類可利用的資源數目。如果Available[j]=K,則表示系統中現有Rj類資源K個。   

2)最大需求矩陣Max   

這是一個n×m的矩陣,它定義了系統中n個進程中的每一個進程對m類資源的最大需求。如果Max[i,j]=K,則表示進程i需要Rj類資源的最大數目爲K。   

3)分配矩陣Allocation   

這也是一個n×m的矩陣,它定義了系統中每一類資源當前已分配給每一進程的資源數。如果Allocation[i,j]=K,則表示進程i當前已分得Rj類資源的 數目爲K。 

4)需求矩陣Need。   

這也是一個n×m的矩陣,用以表示每一個進程尚需的各類資源數。如果Need[i,j]=K,則表示進程i還需要Rj類資源K個,方能完成其任務。   

Need[i,j]=Max[i,j]-Allocation[i,j] 

 

算法 的實現

一、初始化

由用戶輸入數據,分別對可利用資源向量矩陣AVAILABLE 、 最大需求矩陣MAX 、分配矩陣ALLOCATION、 需求矩陣NEED 賦值。

二、銀行家算法

在避免死鎖的方法中,所施加的限制條件較弱,有可能獲得令人滿意的系統性能。在該方法中把系統的狀態分爲安全狀態和不安全狀態,只要能使系統始終都處於安全狀態,便可以避免發生死鎖。

銀行家算法的基本思想是分配資源之前, 判斷系統是否是安全的; 若是, 才分配。它是最具有 代表性的避免死鎖的算法。

設進程cusneed 提出請求REQUEST [i] ,則銀行家算法按如下規則進行判斷。

(1) 如果REQUEST [cusneed] [i]<= NEED[cusneed][i] ,則轉(2) ;否則,出錯。

(2) 如果REQUEST [cusneed] [i]<= AVAILABLE[cusneed][i] ,則轉(3) ;否則,出錯。

(3) 系統試探分配資源,修改相關數據:

        AVAILABLE[i]-=REQUEST[cusneed][i];

          ALLOCATION[cusneed][i]+=REQUEST[cusneed][i];

          NEED[cusneed][i]-=REQUEST[cusneed][i];

(4) 系統執行安全性檢查,如安全,則分配成立;否則試探險性分配作廢,系統恢復 原狀, 進程等待。

三、安全性檢查算法

(1) 設置兩個工作向量Work=AVAILABLE;FINISH

(2) 從進程集合中找到一個滿足下述條件的進 程,

FINISH==false;

NEED<=Work;

如找到,執行(3) ; 否則,執行(4)

(3) 設進程獲得資源,可順利執行,直至完 成,從而釋放資源。

Work+=ALLOCATION;

Finish=true;

GOTO 2

(4) 如所有的進程Finish= true ,則表 示安全;否則系統不安全。

操作系統安全狀態和不安全狀態:   

安全序列是指一個進程序列{P1,…,Pn}是安全的,如果對於每一個進程Pi(1≤i≤n),它以後尚需要的資源量不超過系統當前剩餘資源量與所有進程Pj (j < i )當前佔有資源

量之和。

如果存在一個由系統中所有進程構成的安全序列P1,…,Pn,則系統處於安全狀態。安全狀態一定是沒有死鎖發生。

不存在一個安全序列。不安全狀態不一定導致死鎖。

7.6 死鎖檢測

7.6.1 每種資源類型只有單個實例

當且僅當資源分配圖中有一個環時,系統中存在死鎖

7.6.2 每種資源類型可有多個實例(略)

7.6.3 應用檢測算法

何時調用檢測算法?取決於兩個因素:

死鎖發生的可能頻率是多少?

當死鎖發生時,有多少進程會受影響?

7.7 死鎖恢復

7.7.1 進程終止

終止所有死鎖進程

一次取消一個進程直至死鎖消失爲止

7.7.2 資源搶佔

如何選擇犧牲品?如何回滾?如何確保不會發生飢餓?

第八章 內存管理

8.1 背景

8.1.1 基本硬件

寄存器(基地址寄存器、界限地址寄存器)、高速緩存、內存

8.1.2 地址綁定

源程序中的地址通常是用符號表示的。編譯器通常將這些符號是指綁定在可重定位的地址。 連接程序或加載程序再將這些可重定位的地址綁定成絕對地址。

可分爲編譯時、加載時、執行時

8.1.3 邏輯地址空間和物理地址空間

8.1.4 動態加載

一個子程序只有在被調用時纔會被加載

8.1.5 動態連接和共享庫

動態鏈接:把鏈接延遲到執行時

8.2 交換

進程可以暫時從內存中交換到備份存儲上,當需要再次執行時再調回到內存中。

8.3 連續內存分配

8.3.1 內存映射與保護(?)

8.3.2 內存分配

固定分區、可變分區

首次適應、最佳適應、最差適應

8.3.3 碎片

外部碎片:進程之間的小片段

內部碎片:塊內部的小片段

緊縮

8.4 分頁

8.4.1 基本方法

將物理內存分爲固定大小的塊,稱爲幀;將邏輯內存也分爲同樣大小的塊,稱爲頁。

CPU生成的每個地址分爲兩個部分:頁號和頁偏移。

每個進程可能有半頁的內部碎片,因此構造小一些的頁較好

頁表中的每一項也有一定的開銷,因此構造大一些的頁較好

8.4.2 硬件支持

最簡單的方法:使用專用寄存器

頁表較大時:使用頁表基寄存器

延遲過長的標準解決方案:使用專用的硬件緩衝(轉換表緩衝區,TLB)

8.4.3 保護

只讀、讀寫、只執行

有效-無效位

8.4.4 共享頁

用於共享公共代碼的頁,代碼在執行期間不會改變

8.5 頁表結構

8.5.1 層次頁表

將頁表再分頁,將頁號分爲頁碼和頁偏移

也可使用多級分頁方案

8.5.2 哈希頁表

用鏈表處理碰撞

8.5.3 反向頁表

對於每個真正的頁或幀纔有一個條目, 每個條目包含保存在真正內存位置的頁的虛擬地址以及擁有該頁的進程的信息

8.6 分段

8.6.1 基本方法

一個C編譯器可能會創建如下段: 代碼、全局變量、堆、每個線程採用的棧、標準的C庫函數

8.6.2 硬件

段表

8.7 實例

第九章 虛擬內存

9.1 背景

虛擬內存將用戶邏輯內存和物理內存分開。 這在現有物理內存有限的情況下,爲程序員提供了巨大的虛擬內存。

虛擬內存也允許文件和內存通過共享頁而爲兩個或多個進程所共享。

9.2 按需調頁

只有在程序需要時才載入頁

9.3 寫時複製

允許父進程和子進程開始時共享同一頁面。 如果任何一個進程需要對頁進行寫操作,那麼就創建一個共享頁的副本。

很多操作系統爲此類請求提供了空閒緩衝池。

9.4 頁面置換

9.4.1 基本頁置換

如果有空閒幀,則選用空閒幀。否則用置換算法選擇一個犧牲幀

修改位:指示是否已修改。如已修改,則重新寫回到硬盤上

9.4.2 FIFO頁置換

Belady異常:對有的頁置換算法,頁錯誤率可能隨着所分配的幀數的增加而增加

9.4.3 最優置換

9.4.4 LRU頁置換

9.4.5 近似LRU頁置換

頁表內每一項都關聯着一個引用位,每當引用一個頁時,相應頁表的引用位就被硬件置位。

9.4.6 基於計數的頁置換

最不經常使用頁置換算法

最常使用頁置換算法

9.4.7 頁緩衝算法

保留一個空閒幀緩衝池。在犧牲幀寫出之前,所需要的頁就從緩衝池中讀到空閒內存。

維護一個已修改頁的列表。每當調頁設備空閒時,就選擇一個修改頁並寫到磁盤上。

保留一個空閒幀池,該幀被重用之前如果需要使用原來頁,就直接從空閒幀池中取出來使用。

9.5 幀分配

9.5.1 幀的最少數量(略)

9.5.2 分配算法

平均分配、按比例分配(根據進程大小而非優先級)

9.5.3 全局分配和局部分配

全局分配允許進程從另一個進程中拿到幀,而局部置換不允許

9.6 系統顛簸

9.6.1 原因

在頁面置換時所有頁都在使用,而導致反覆換頁

9.6.2 工作集合模型

檢查最近delta個頁的引用,將這些頁的集合稱爲工作集合

9.6.3 頁錯誤頻率

如果頁錯誤率太低,從進程中移走幀,否則爲進程分配更多的幀

9.7 內存映射文件

9.7.1 基本機制

使用虛擬內存技術將文件I/O作爲普通內存訪問

9.7.2 Win32 API中的共享內存(略)

9.7.3 內存映射I/O

一組內存地址專門映射到設備寄存器,對這些內存地址讀寫就如同對設備寄存器的讀寫

9.8 內核內存的分配(略)

9.9 其他考慮

9.9.1 預調頁

同時將工作集合中的所有頁一起調入到內存中,以避免大量的頁錯誤

9.9.2 頁大小(略)

9.9.3 TLB範圍

TLB範圍指通過TLB可訪問的內存量,等於TLB條數與頁大小之積

理想狀況下,一個進程所有的工作集合應當位於TLB中

增加TLB範圍可以增加條數,增加頁的大小或提供多種頁大小

現代趨勢是軟件來管理TLB和操作系統提供對多種頁大小的支持

9.9.4 反向頁表

9.9.5 程序結構(略)

9.9.6 I/O互鎖

在使用請求頁面調度時,有時需要允許有些頁在內存中被鎖住。

這種情況之一是需要對用戶的內存進行I/O。

一種解決方法是隻對系統內存和I/O設備進行I/O,不對用戶內存進行。

另一種方法是增加一個鎖住位。

9.10 操作系統實例

9.10.1 Windows XP

9.10.2 Solaris

第十章 文件系統接口

10.1 文件概念

10.1.1 文件屬性

名稱、標示符、類型、位置、大小、保護、時間日期和用戶標識

10.1.2 文件操作

創建、讀、寫、刪除、截短

每個打開文件有如下相關信息:

文件指針、文件打開計數器、文件磁盤位置、訪問權限、共享鎖、專用鎖

10.1.3 文件類型

10.1.4 文件結構(略)

10.2 訪問方法

10.2.1 順序訪問

10.2.2 直接訪問

10.2.3 其他訪問方式

可建立在直接訪問方式之上

創建文件索引、對文件索引再創建索引

10.3 目錄結構

10.3.1 存儲結構

存儲文件系統的一大塊空間稱爲卷,卷可以存放多個操作系統,使系統運行多個操作系統

系統上文件的信息保存在設備目錄或卷表中

10.3.2 目錄概述

10.3.3 單層結構目錄

所有文件包含在同一目錄中

10.3.4 雙層結構目錄

爲每個用戶創建獨立目錄

10.3.5 樹狀結構目錄

10.3.6 無環圖目錄

同一文件或子目錄可出現在兩個不同目錄中

10.3.7 通用圖目錄

允許目錄中有環存在

10.4 文件系統安裝(略)

10.5 文件共享

10.5.1 多用戶

10.5.2 遠程文件系統

遠程文件共享方式:在機器間人工傳輸文件、使用分佈式文件系統、使用互聯網傳輸

10.5.3 一致性語義

一致性語義是多用戶同時訪問共享文件時的語義,規定了一個用戶所修改的數據何時對另一用戶可見。

10.6 保護

使信息不受物理損壞和非法訪問。

10.6.1 訪問類型

讀、寫、添加、刪除、執行、列表清單

10.6.2 訪問控制

實現基於身份訪問的最爲普通的方法是爲每個文件和目錄增加一個訪問控制列表, 給定每個用戶名及其所允許的訪問類型。

現在最爲常用的方法是將訪問控制列表與更爲常見的用戶、組和其他成員訪問控制方案一起組合使用

10.6.3 其他保護方式

爲每個文件加上密碼

第十一章 文件系統實現

11.1 文件系統結構

I/O控制爲最底層,由設備驅動程序和中斷處理程序組成,實現內存和磁盤之間的信息傳輸。

基本文件系統只需要向合適的設備驅動程序發送一般命令就可對磁盤上的物理塊進行讀寫。

文件組織模塊知道文件及其邏輯塊和物理塊。

邏輯文件系統管理元數據。

以上設計中的每層利用較低層的功能創建新的功能來爲更高層服務。

11.2 文件系統實現

11.2.1 概述

每個卷的引導控制塊包括系統從該卷引導操作系統所需要的信息。

卷控制塊包括卷的詳細信息,如分區的塊數、塊的大小、空閒塊的數量和指針、空閒FCB的數量和指針等。

每個文件的FCB包括很多該文件的詳細信息,如文件權限、擁有者、大小和數據塊的位置。

11.2.2 分區與安裝

分區可以是“生的”,即沒有文件系統,或者“熟的”即含有文件系統。

根分區包括操作系統內核或其他系統文件,在引導時裝入內存。

11.2.3 虛擬文件系統

11.3 目錄實現

11.3.1 線性列表

11.3.2 哈希表

根據文件名得到一個值,並返回一個指向線性列表中元素的指針

11.4 分配方法

爲文件分配空間的方法

11.4.1 連續分配

11.4.2 鏈接分配

11.4.3 索引分配

11.4.4 性能

11.5 空閒空間管理

11.5.1 位向量

每塊用一位表示。如果一塊爲空閒,那麼其位爲1;如果一塊已分配,那麼其位爲0。

11.5.2 鏈表

11.5.3 組

將前n個空閒塊的地址存在第一個空閒塊中,而最後一塊包含另外n個空閒塊的地址。

11.5.4 計數

記錄第一塊的地址和緊跟第一塊的連續空閒塊的數量n。

11.6 效率與性能(略)

11.7 恢復

確保系統失敗不會引起數據丟失和數據的不一致

11.7.1 一致性檢查

將目錄結構數據與磁盤數據塊相比較,試圖糾正所發現的不一致。

11.7.2 備份與恢復

11.8 基於日誌結構的文件系統

11.9 NFS

NFS是用於通過局域網訪問遠程文件的軟件系統實現和規範。

第十二章 大容量存儲器的結構

12.1 大容量存儲器結構簡介

12.1.1 磁盤

磁頭與磁臂相連,磁臂能將所有磁頭作爲一個整體一起移動。

磁盤片的表面被劃分成圓形磁道,磁道再進一步劃分爲扇區。 

位於同一磁臂位置的磁道集合形成了柱面。

磁頭飛行於極薄的空氣層上,所以磁頭有與磁盤表面接觸的危險。這種現象稱爲磁頭碰撞。

12.1.2 磁帶

12.2 磁盤結構

12.3 磁盤附屬

12.3.1 主機附屬存儲

12.3.2 網絡附屬存儲

12.3.3 存儲區域網絡

12.4 磁盤調度

12.4.1 FCFS

12.4.2 SSTF

12.4.3 SCAN

12.4.4 C-SCAN

12.4.5 LOOK

SCAN的實際實現:只移動到一個方向上最遠的請求爲止

12.4.6 磁盤調度算法的選擇

12.5 磁盤管理

12.5.1 磁盤格式化

12.5.2 引導塊

在計算機開始運行時,它需要運行一個初始化程序。 該初始化自舉程序初始化系統的各個方面,接着啓動操作系統。 自舉程序應找到磁盤上的操作系統內核,裝入內存,並轉到起始地址,開始操作系統的執行。

12.5.3 壞塊

對於簡單磁盤,可以手工處理壞塊。

對於複雜的磁盤,控制器可以用備用塊來邏輯地替代壞塊。

12.6 交換空間管理

當物理內存的數量達到臨界低點,進程從內存移到交換空間以釋放內存空間。

12.6.1 交換空間的使用

12.6.2 交換空間位置

交換空間可有兩個位置:交換空間在普通文件系統上加以創建,或者是在一個獨立的磁盤分區上進行。

12.7 RAID空間結構

12.7.1 通過冗餘改善可靠性

12.7.2 通過並行處理改善性能

12.7.3 RAID級別

RAID 0: 按塊分散的磁盤陣列,但沒有冗餘

RAID 1: 磁盤鏡像

RAID 2: 每個字節都有一個相關奇偶位用於錯誤檢測

差錯糾正方案:存儲兩個或多個額外位,可以糾錯

RAID 3: 如果一個扇區損壞,通過計算其他磁盤扇區相應位的奇偶值可得出損壞位究竟是1還是0

與RAID 2相比,RAID 3政治需要一個額外磁盤

RAID 4:採用與RAID 0一樣的塊級分散,另外在一獨立磁盤上保存其他N個磁盤相應塊的奇偶塊

RAID 5、RAID 6(略)

12.8 穩定存儲實現

需要在多個具有獨立出錯模式的設備上覆制所需信息

12.9 三級存儲結構

12.9.1 三級存儲設備

三級存儲是用可移動介質製造的,主要特徵是低價格

包括CD、DVD、磁帶等

12.9.2 操作系統支持(略)

12.9.3 性能

速度、可靠性和價格

第十三章 I/O系統

13.1 概述

13.2 I/O硬件

13.2.1 輪詢

用於協調控制器和主機之間的生產者和消費者的關係

13.2.2 中斷

CPU硬件有一條中斷請求線(IRL)。CPU每執行完一條指令後,都將檢測IRL。

如檢測到中斷信號,則跳轉到內存固定位置的中斷處理程序。

中斷機制接受一個地址,對絕大多數體系結構,這個地址是一個稱爲中斷向量的表中偏移量。

13.2.3 直接內存訪問

使用專用的處理器完成內存訪問

13.3 I/O應用接口

從詳細而不同的I/O設備中抽象出一些通用類型。

13.3.1 塊與字符設備

13.3.2 網絡設備

13.3.3 時鐘與定時器

13.3.4 阻塞與非阻塞I/O

13.4 I/O內核子系統

13.4.1 I/O調度(略)

13.4.2 緩衝

13.4.3 高速緩存

13.4.4 假脫機(spooling)與設備預留

簡單來說就是在內存中形成緩衝區,在高級設備形成輸出井和輸入井, 傳遞的時候,從低速設備傳入緩衝區,再傳到高速設備的輸入井, 再從高速設備的輸出井,傳到緩衝區,再傳到低速設備。

13.4.5 I/O處理

13.4.6 I/O保護

定義所有I/O指令爲特權指令,用戶無法直接發出I/O指令,必須通過操作系統進行。

13.5 把I/O操作轉換成硬件操作(略)

13.6 流

13.7 性能


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