【北航操作系統筆記(完整版)】

0. 簡介

操作系統是一組管理計算機硬件資源的軟件集合,它向計算機程序提供共性的服務。即是使用者,也是資源管理者。

馮·諾依曼體系結構:輸入、輸出、存儲器、控制器、運算器
哈佛結構:指令存儲與數據儲存分離,防止互相干擾。
流水線結構:加快速度。

計算機儲存結構:

寄存器
L1高速緩存(SRAM)
L2高速緩存(SRAM)
L3高速緩存(SRAM)
=================以上爲處理器芯片內部,以下爲處理器芯片外部
主存(DRAM)(內存)
本地二級存儲(本地磁盤)(外存)
遠程二級存儲(分佈式文件系統、web服務器)(外存)

1946年,電子管 第一臺計算機ENIAC
1955年,晶體管 & 監控系統
1965年,集成電路 & 多道程序設計
1980年,PC機 & 微機操作系統
1990年,分佈式與嵌入式系統

1954年,第一個高級語言FORTRAN誕生,實現軟件和硬件的分離。

批處理技術:同時輸入多個作業,作業調度程序自動選擇作業運行。
聯機批處理系統:作業的輸入輸出和運行都由CPU完成
脫機批處理系統:作業的輸入輸出由輸入機、輸出機完成,運行由CPU完成,加入磁帶做中間傳遞物

多道程序系統:同一時間內存中可以有多個程序,同一時間(交替)CPU可以處理多個程序。一道程序因I/O請求而暫停運行時,CPU遍立即轉去運行另一道程序。

多道批處理系統:結合批處理技術和多道程序系統

分時系統:多個用戶分時。
分時技術:把處理機的運行時間分成很短的時間片,按時間片輪流把處理及分配給各聯機作業使用。

嵌入式系統和實時系統:及時響應,高可靠性和安全性,整體性強

操作系統的特徵:
併發:指兩個或多個事件在同一時間間隔內發生。通過分時得以實現。
並行:多個CPU同時運行,處理多個程序。
共享:系統中的資源(硬件資源和信息資源)可被多個併發執行的程序共同 使用。兩種方式:互斥訪問和同步訪問。
虛擬:虛擬性是一種管理技術,把物理上的一個實體變成邏輯上的多個對應 物,或把物理上的多個實體變成邏輯上的一個對應物。
虛擬處理機技術:利用多道程序技術,爲每道程序建立一個進程。
虛擬設備技術:將一臺物理I/O設備虛擬爲邏輯上多臺I/O設備。
不確定(異步):由於執行不是一貫到底,所以速度和完成時間不確定。


1. 啓動過程boot

x86啓動過程:
跳轉到BIOS(固件)地址
運行POST(BIOS自檢)
讀取啓動順序
讀取、裝入MBR

MBR限制只能有4個主分區
硬盤分區三種:主磁盤分區、擴展磁盤分區、邏輯分區。
一個硬盤主分區1-4個,擴展分區0-1個。主分區+擴展分區1-4個。邏輯分區若干個。
主分區只有一個是激活的(active),其餘是inactive

X86下Linux系統引導過程:
Boot Loader:初始化硬件設備、建立內存空間映射圖(LILO、GRUB)
加載內核:讀取內存映像(壓縮文件),將解壓後的內核放在內存中,運行初始化函數(bootsect.S setup.S video.S)
用戶層init依據initatb文件設定運行等級
執行rc.sysinit
啓動內核模塊
執行不同運行級別的腳本程序
執行rc.local
執行login程序,進入登錄狀態


2. 存儲管理1-2

基石(目的):地址獨立,地址保護

解決的問題:分配和回收

​ 編譯(.c -> .o):由編譯程序將用戶源程序編譯成若干個目標模塊
​ 鏈接(.o -> .exe / .sh等):由鏈接程序將目標模塊和相應的庫函數鏈接成可轉載模塊(可執行文件)
​ 裝入:由裝載程序將可轉載模塊裝入內存

靜態鏈接:將共享庫的函數代碼直接鏈接入程序代碼中。
動態鏈接:當程序運行中需要某些目標模塊時,纔將共享庫的函數代碼鏈接入程序代碼中。高效且節省內存空間,但運行時慢。
-c 編譯不鏈接
-o 編譯+鏈接(默認)

​ 裝入一般採用動態運行時裝入:程序在內存中的位置經常會變,所以在裝入內存時,保留程序內的所有相對地址,運行時改爲絕對地址。這種方式需要一個重定位寄存器,進行地址轉換。

ELF(可執行文件格式)(.o / .obj)
e-_ident: 頭部爲魔數,頭四個字節:‘0x7f‘,‘E’,’L‘,’F‘
ELF3_Rel: 內含Pelocation entry(重定位節)
PS:內含Type爲Load的segment,是需要被加載到內存中的部分,如果文件中的大小小於在內存中的大小,那麼在內存中補零

objdump 指令可以反彙編ELF文件,readelf可以查看ELF文件

shell調用fork()系統調用,創建出一個子進程,子進程調用execve()加載program

跟蹤內存的使用:位圖表示法(空間開銷固定,時間開銷低、容錯性差)、鏈表表示法(空間開銷隨程序數量變化、時間開銷大、容錯性高)

  1. 單道程序存儲管理:可以用靜態地址翻譯(用戶程序的地址在運行之前就可以計算)
  2. 多道程序的存儲管理:固定(靜態)式分區分配(分 單一隊列的分配方式 和 多隊列的分配方式 )、可變(動態)式分區分配
    分配內存:當剩餘分區大小《size時,不再進一步分割。即:當申請空間加上size後大於分區大小,則整個分區分配出去。
    算法:
    First Fit(首次適應算法)、Next Fit(下次適應算法)、Best Fit(最佳適應算法)、Worst Fit(最壞適應算法)、快速適應算法(把空閒分區按大小分類、建立多個空閒鏈表)
    回收分區要合併
  3. (linux系統在用)夥伴系統:所有分區大小均爲2的整數次冪。系統初啓時,只有一個最大的內存塊。分配時,總是分配出去最小的內存塊,若大內存塊則分成兩份(一對夥伴),直到不能再分。
    回收時,夥伴能合併則合併。

消除外部碎片:緊湊技術(可重定位分區分配)

多重分區分配:將程序分爲子程序、主程序、數據組,不需要連續片段了。
保護方法:界限寄存器方法、儲存保護鍵方法。

解決大作業在小內存中運行的問題:覆蓋技術和交換技術


3. 儲存管理3-5

​ 程序是靜止的,進程是動態的(系統進程和用戶進程)。一個程序可以有多個進程,一個進程也可以運行多個程序。
​ 一個作業包括程序、數據和操作說明書,一個進程由進程控制塊(PCB)、程序和數據集合組成。

分頁式儲存管理:
頁(頁面):大小相等的作業(虛擬)地址空間
儲存塊(頁框):大小相等的主存(物理)地址空間
頁表:每個進程有一個頁表,每一個頁表項存儲了每個頁面及其對應的儲存塊。
地址轉換機構

一級頁表、二級頁表、多級頁表、哈希頁表、反置頁表
快表(TLB)
有效內存訪問時間(EAT):
TLB查詢時間 = s
單次內存訪問時間 = t
TLB命中率:a
EAT =(t + s)* a + (2 * t + s)*(1 - a)
= 2 t + s - t * a

段式儲存管理:
按邏輯將作業分段(每段大小由用戶程序決定),方便編程和管理,動態鏈接,動態增長,信息保護方便。
段表寄存器:段表始址、段表長度

段頁式存儲管理(x86):
用分段方法來分配和管理虛擬存儲器;用分頁方法來分配和管理實(物理)存儲器。

虛擬存儲:
程序裝入時,只要將當前需要執行的部分頁或段讀入到內存中,就可以開始執行程序。
程序執行時,如果需要的指令或數據不在內存中(缺頁或缺段),則將相應的頁或段從輔存中調入內存(請求調入功能),若內存已滿則替換某個頁或段(置換功能)。
交換分區:大小與物理內存大小保持線性比例關係(交換分區更大)
請求式分頁管理的頁表:駐留位(是否在內存中)、保護爲、修改位、訪問(統計)位。
預調頁(提前調入小文件的所有頁)、按需調入。
缺頁錯誤處理機制:詳見(part5-19)

頁面置換策略:(局部置換策略:對於一個進程內的頁面而言)
最優置換(Optimal):最長時間不需要訪問的頁面(前提:提前知道將來的頁面使用時間)
先進先出算法(FIFO):(Belady現象:隨着物理頁面增多,缺頁率提高) 改進1(Second chance):如果頁面被再次訪問過,則給該頁面第二 次保留的機會。
改進2(Clock和前一個幾乎一樣,除了環形隊列):
若沒有缺頁錯誤,當前頁置1,指針不動。
若有缺頁錯誤,若當前頁爲1,則置0,指針前移,重複直至當前 頁爲0
若當前頁爲0,替換,置1,指針前移。
最近最少使用算法(LRU)

更新:
file backed 類型,且未被修改,則直接丟棄。
file backed 類型,但已被修改,直接寫回。
anonymous 類型,若是第一次換出且未被修改,則寫入swap區,若非第一次則丟棄。
anonymous 類型,且已被修改,則寫入swap區。

可變分配策略:
缺頁率高則增加進程的駐留集,缺頁率低則減少進程的駐留集。

內存初始分配方法:
等分法、比例法、優先權法

(全局置換策略:對於多個進程內的頁面而言):工作集算法、缺頁率算法

工作集、駐留集
抖動問題:駐留集不斷減小,突然缺頁率急劇上升。
解決:工作集算法、預留部分頁面。
負載控制:進程太多或太少都會效率低
L= S 準則,發生兩次缺頁之間的平均時間L,處理一次缺頁需要的平均時間S。此時效率最大。
50% 準則,當分頁單元的利用率保持在50%左右時,處理機的利用率最大。

頁面清除策略:何時把被置換的頁面寫回外存。
頁緩衝:先保存在緩衝區,當時機合適再寫回外存。(類FIFO的頁面緩衝算法)

寫時複製技術:
兩個進程共享一塊物理內存,每個頁面都被標記成寫時複製。寫入時,會在內存中複製一個頁面,進行寫操作,其他進程不可見。

內存映射文件:
可以實現多個線程共享一個文件。

對換系統:
雙指針輪轉置換算法:

內核存儲分配器:
惰性動態分區算法(湊夠一定大小才合併)

頁目錄自映射機制


4. 進程與線程

並行和併發

併發性的確定——Bernstein條件:
含有寫的操作

​ 原語(不可分割的指令序列,必須在內核態執行,(與系統調用的區別)不可中斷)

​ 子進程中fork()返回0,父進程中fork()返回新創建的子進程ID,出現錯誤返回負值。getid()返回當前進程的id。

進程三種基本狀態:就緒狀態、執行狀態、阻塞狀態(掛起狀態、掛起阻塞狀態)

linux 中的 task_struct 就是一個PCB

PCB組織方式:線性表、鏈接方式、索引方式。

​ 上下文切換(Process Context Switch)的開銷大於陷入內核(mode switch)(只用保存一些寄存器)

資源擁有者是進程(Proess),可執行單元是線程(Thread)。
每個進程都有PCB,每個線程都有自己的棧。
創建一個線程比進程快10-100倍,在多核CPU/多CPU系統更有優勢

UNIX多進程,但單線程;JAVA單進程,但多線程;

用戶級線程(創建、撤銷、調度不需要內核支持)、內核級線程(內核感知)、混合式線程

在只有用戶級線程的系統內,CPU調度以進程爲單位;但在有內核級線程的系統內,CPU調度以線程爲單位。
在現代操作系統中,資源的分配單位是進程,而處理機的調度單位是線程。

基於前兩種線程,有不同的混合式線程模型:
多對一模型,多個用戶級線程對應一個內核級線程
 一對一模型,一個用戶級線程對應一個內核級線程
 多對多模型,多個用戶級線程對應多個內核級線程

fork() 創建普通進程,clone創建線程,kernel_thread創建新的內核進程

調度算法的評價準則:
週轉時間:進程從提交到完成所經歷的時間
平均週轉時間 = All(週轉時間) / 進程數
帶權週轉時間 = 週轉時間/CPU執行時間
平均帶權週轉時間 = All(帶權週轉時間) / 進程數
  響應時間:從進程提交到首次被響應的時間
  等待時間:進程在就緒隊列中等待的時間總和
  吞吐量:單位時間內所完成的進程數
  CPU利用率


5. 同步和互斥2-4

競爭:多個進程對同一共享對象同時訪問。
競爭條件:多個進程併發訪問同一數據的執行結果與訪問的特定順序有關。
臨界資源:一次僅允許一個進程訪問的資源。
臨界區:每個進程中訪問臨界資源的代碼。

進程互斥(間接制約關係):
多個進程不能同時進入同一個共享資源的臨界區。

進程同步(直接制約關係):
多個進程有效地共享資源和相互合作(有序訪問)。

空閒讓進
忙則等待
有限等待
讓權等待(長時間不能進入臨界區,則應釋放處理機)

實現互斥的軟件方案:
Dekker算法:不需要嚴格輪換的互斥算法。
Peterson算法:不需要輪換的互斥算法。
Bakery算法:支持任意數量進程。
實現互斥的硬件方案:
中斷屏蔽(危險)
TestAndSet 指令(只能一個進程執行)(不會被中斷的原子指令)
自旋鎖Spinlocks(利用TestAndSet 指令)
swap指令(不會被中斷的原子指令)(換個)

上述方案共性問題:
忙等待:浪費CPU時間
優先級反轉:先拿到鎖的進程優先級低。

實現同步的方案:
忙等–>阻塞(sleep,wakeup)

信號量:
一個二元組(s,q),s是一個非負初值的整型變量,q是初始狀態爲空的隊列。
s爲正,則s值等於發出P操作後可立即執行的進程數量;s爲0,則發出P操作後,該進程被繼續執行完;s爲負,則發出P操作後,該進程被阻塞,-s是被阻塞的進程數。
q是隊列,當有進程被阻塞時,進入此隊列。
二元信號量(0或1)、一般信號量
強信號量(進程從p釋放時用FIFO)、弱信號量(沒規定順序)

P(S)、V(S)操作(也叫semWait、semSignal操作)S是信號變量
P(S) : while (S <= 0) do skip
S = S - 1
v(S) : S = S + 1
互斥應用:
通常使用二元信號量實現互斥
先P進臨界區,後V出臨界區。應靠近臨界區,且臨界區內不能有死循環。
互斥信號量(s)的初值一般爲1
有限併發應用:
n(n < c)個進程併發執行一個資源。
互斥信號量(s)的初值一般爲c。
進程同步應用:
進程Pi想執行ai操作時,只在Pj執行完aj後,纔會執行aj。
互斥信號量(s)的初值一般爲0。
Pi執行ai操作前,P(s),Pj執行aj操作後,V(s)

​ 先P進臨界區,後V出臨界區。應靠近臨界區,且臨界區內不能有死循環。
​ 互斥信號量(s)的初值一般爲1

前驅關係

一種低級通信原語:屏障Barries
用於進程組的同步
用PV操作實現
維護一個count

  1. 那些是併發的
  2. 其中那些是互斥的、同步的
  3. 按互斥、同步規則設置信號量,說明含義和初值
  4. 用P、V操作寫出程序

AND型信號量集:多個共享資源

管程:
條件變量(不變)
一個進入管程的進程執行等待操作時,釋放管理的使用權。
當進入管程的進程執行喚醒操作時:
Hoare管程:
入口等待隊列,緊急等待隊列(喚醒進程的進程)
多個條件變量,即多個隊列x.wait():x是條件變量
MESA管程:
被喚醒的進程等待

進程間通信(IPC):
管道:無名管道(父子進程或兄弟進程)、有名管道(無限制)
消息隊列

安全狀態:系統存在一個進程執行序列<P1, P2, …, Pn>可順利完成。
不安全狀態:系統不存在上述的序列。(滿足任意個發生死鎖的必要條件(共四個),但不一定死鎖)
死鎖狀態:包含在不安全狀態內。

銀行家算法:
Max,Allocation,Need,Available
試圖找出一個上述序列

死鎖的四個必要條件:
互斥條件:資源排它性使用
請求和保持條件:進程保持已有的資源,請求更多的資源
不可剝奪條件:已有的資源使用完前,不得釋放
環路等待條件:進程-資源的環形鏈(資源分配圖 / 進程-資源圖)

活鎖:任務或者執行者沒有被阻塞,由於某些條件沒有滿足,導致一直重複嘗試—失敗—嘗試—失敗的過程。處於活鎖的實體是在不斷的改變狀態,活鎖有可能自行解開。
飢餓:進程由於資源分配的不公平導致長時間的等待。

死鎖解除:剝奪資源 / 撤銷進程


6. IO系統

接入IO設備的主要方式:主線(Bus)(Control、Data、Address)

將硬件設備抽象爲控制器,其中包含控制寄存器、狀態寄存器,以及一些數據寄存器。

塊設備:以數據塊爲單位儲存、傳輸信息。速率高,可尋址(隨機尋址)
字符設備:以字符爲單位儲存、傳輸信息。速率低,不可尋址
網絡設備

獨佔設備:一段時間內只能由一個進程使用的設備。打印機、磁帶機
共享設備:在一段時間內允許多個進程共同使用的設備。硬盤
虛設備:在一類設備上模擬另一類設備。(用共享設備模擬獨佔設備,用高速設備模擬低速設備)

I/O端口地址:接口電路中每個寄存器有唯一的地址。共同組成I/O端口的地址空間(受OS保護)。I/O指令形式與I/O地址是互相關聯的,主要形式如下:
內存映像模式(內存映像I/O模式):控制器內存作爲內存空間的一部分
I/O獨立編址(I/O專用指令):Intel體系架構in/out指令

I/O控制方式:
程序控制I/O(輪詢或查詢方式I/O):輪詢忙等。
中斷驅動:有一個設備狀態表,CPU向設備發出請求並記錄在設備狀態表後,執行其他工作,設備完成一個數據傳輸後向CPU發出中斷信號
直接儲存訪問方式(DMA):程序設置DMA控制器中的寄存器(CR,MAR,DR,DC)值,發起I/O操作,DMA完成一批數據交換後發出中斷。可同時控制若干個同類設備。
I/O通道控制方式:I/O通道時專門處理輸入輸出的處理器,獨立於CPU,有自己的指令體系,一般放在內存裏。可同時控制若干個不同類設備。
一步步減少CPU的佔用率

​ 設備獨立性:程序中使用邏輯設備,系統實際執行時用物理設備,通過設備映射表(LUT)映射(每個表目包含邏輯 設備名、物理設備名、設備驅動入口)(在整個系統設立一個LUT / 每個用戶設立一個LUT)。
​ 每個設備驅動程序處理一種設備類型。組成:自動配置和初始化子程序、I/O操作子程序、中斷服務子程序。共性:核心代碼、核心接口、核心機制與服務、動態可加載、動態性
​ 驅動程序和應用程序的不同:沒有main,不能用標準C庫,完成初始化不再運行,等待系統調用。

I/O緩衝管理:
專用緩衝:單緩衝、雙緩衝、環形緩衝。
緩衝池,其中有多個可供若干個進程共享的緩衝區
收容輸入:在輸入進程輸入時,調用Getbuf(emp),從空緩衝隊列的隊首取出一個空緩衝區,作爲收容輸入工作緩衝hin,輸入數據,裝滿後調用 Putbuf(inq,hin),將該緩衝區掛在輸入隊列末尾。
提取輸入:在計算進程輸入時,調用Getbuf(inq),從輸入隊列的隊首 出一個緩衝區,作爲提取輸入工作緩衝sin,提取數據,取空後調用 Putbuf(emp,sin),將該緩衝區掛在空緩衝隊列末尾。
收容輸出:在計算進程輸出時,調用Getbuf(emp),從空緩衝隊列的隊首取出一個空緩衝區,作爲收容輸入工作緩衝hout,輸出數據,裝滿後調用 Putbuf(outq,hout),將該緩衝區掛在輸出隊列末尾。
提取輸出:在輸出進程輸出時,調用Getbuf(outq),從輸出隊列的隊首 出一個緩衝區,作爲提取輸出工作緩衝sout,提取數據,取空後調用 Putbuf(emp,sout),將該緩衝區掛在空緩衝隊列末尾。

I/O緩衝管理:
設備控制表(DCT):每個設備一張,描述設備特性和狀態。
設備隊列隊首指針:指向設備請求隊列的隊首PCB(進程控制塊)
設備狀態:使用狀態,置1
控制器表指針:指向COCT
重複執行次數:發生錯誤時應重複執行的次數
控制器控制表(COCT)每個設備控制器一張,記錄I/O控制器的狀態,如DMA佔用的終端號、CHCT等
通道控制表(CHCT)每個通道一張,描述通道工作狀態
系統設備表(SDT),記錄所有設備的狀態及其DCT入口。表項含有DCT指針,設備使用進程標識,DCT信息。

​ 單(多)通路I/O系統的設備分配:一個設備對若干個控制器,一個控制器對若干個通道。
​ 分配設備:
​ 在SDT中找到物理設備名對應的DCT,如果忙,進入等待隊列, 否則,計算是否產生死鎖,進行分配
​ 分配設備控制器:
​ 在DCT中找到COCT,如果忙,等待隊列,否則分配
​ 分配通道:
​ 在COCT中找到CHCT,如果忙,等待隊列,否則分配

SPOOLing技術(假脫機技術):
獨享設備轉共享設備(虛設備),提高設備利用率。
應用程序I/O操作,與SPOOLing程序(虛擬I/O)交換數據。
組成:
輸入井和輸出井:分別暫存I/O設備輸入數據 & 用戶程序和輸出數據
輸入緩衝區和輸出緩衝區
輸入進程SPi和輸出進程SPo:模擬脫機I/O時的外圍控制機。

同步阻塞I/O,調用結果返回前,當前進程掛起。
同步非阻塞I/O,調用結果返回前,當前進程進行其他操作。
I/O複用,可以接受並管理多個I/O請求,阻塞在多個I/O上,效率較高
事件驅動I/O,內核記住那個進程調用的,完成後通知改進程。
異步I/O,只有數據全部複製完成時,才通知進程OK。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-yCaroo9N-1593673174022)(C:\Users\dreamer\AppData\Roaming\Typora\typora-user-images\1559901876084.png)]


7. 磁盤系統

1956年第一個磁盤
磁盤分軟盤、硬盤,以前用軟盤,現在都用硬盤。

扇區、磁道、柱面,每個磁盤有兩個面,每面有一個磁頭
磁盤分固件區、工作區(硬盤標定容量的扇區)、保留區
P表:永久缺陷列表
G表:增長缺陷列表(磁介質性能變弱)

Flash Disk(比硬盤快)的兩種技術:NOR、NAND(讀寫以頁爲單位,寫時先擦除整個塊,寫入特定頁)

主引導扇區MBR、分區表DPT、分區引導扇區DBR

CHS模式:
磁頭數NH(Heads / H):也就是盤片數,最多256個(8位儲存)
柱面數NC(Cylinders / C):也就是磁道數,最多1024個(10位儲存)
扇區數NS(Sectors / S):由於0扇區放固件以及一些專用文件,所以最多63個(6位儲存),用戶可見扇區從1開始。
最大8.46 / 7.88 GB

LBA模式:(計算時,NH最大255)
LBA = (NH * NS * C) + (NS * H) + (S - 1)
C = LBA / (NS * NH)
H = (LBA / NS) mod NH
S = (LBA mod NS) + 1

尋道時間:啓動磁盤時間s,磁頭移動n條磁道, Ts = m * n + s
旋轉延遲時間:旋轉速度r,Tr = 1 / (2 * r)
傳輸時間:讀/寫的字節數b,磁道字節數N,旋轉速度r,Tt = b / (r * N)
訪問時間:Ta = Ts + Tr + Tt

磁盤調度算法:
先來先服務(FCFS)、最短尋道時間優先算法(SSTF)、掃描算法(SCAN)、循環掃描算法(CSCAN)(到達最後一個柱面,立即返回0號柱面,返回時不服務)

磁盤空間的管理:位圖、空閒表法(表項:起始塊號、塊數)、空閒鏈表法、成組鏈接法

RAID:廉價冗餘磁盤陣列
RAID0:條帶化存儲,有N個磁盤組成的RAID0是單個磁盤讀寫速度的N倍,但沒 有數據冗餘。連續以位或字節爲單位分割數據。
RAID1:鏡像存儲,實現數據冗餘,單位成本最高,但數據安全性和可用性很 高。
RAID2:海明碼(多磁盤儲存)校驗+條帶存儲,條塊單位爲位或字節,使用海明 編碼進行錯誤檢測和糾正,是多磁盤易出錯環境下的有效選擇。
RAID3:奇偶校驗(XOR)(單磁盤儲存)校驗+條帶存儲,條塊單位爲字節,在 大量連續數據環境下的可提供很好的傳輸率。隨機數據時,寫操作有瓶頸。
獨寫要訪問組中所有的盤,每一組中有一個校驗盤。
將一組磁盤中的數據加起來,放入冗餘盤,若某盤出錯,則,將冗餘盤 數據減去其他盤數據,得到的是該盤的正確數據。
RAID4:奇偶校驗(XOR)(單磁盤儲存)校驗+條帶存儲,條塊單位爲塊,每次 寫操作都要訪問奇偶盤。寫操作有瓶頸。
RAID5:奇偶校驗(XOR)(單磁盤儲存)校驗+條帶存儲,條塊單位爲塊,奇偶 盤與數據盤交叉放置。寫操作有損失。適合小數據塊和隨機讀寫的數據。
雙盤出錯,則該RAID不能再使用。
RAID6:奇偶校驗(XOR)(單磁盤儲存)校驗+條帶存儲,條塊單位爲塊,奇偶 盤與數據盤交叉放置,有兩個獨立的奇偶校驗盤。寫操作有很大損失。適合 小數據塊和隨機讀寫的數據。
可容忍雙盤出錯。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-iuLSyq48-1593673174028)(C:\Users\dreamer\AppData\Roaming\Typora\typora-user-images\1559922691897.png)]

緩存:LRU置換算法


8. 文件系統

文件作爲數據儲存和訪問的單位,看作是對待用戶數據的邏輯抽象。
文件可視爲一個單獨的連續的邏輯地址空間。
保存在磁盤、光盤等外部儲存設備上。
實際上是一組字節序列。
包括兩部分:文件體(內容)和文件說明(文件名、內部標識、儲存地址、訪問權限、訪問時間)。
用戶視角:邏輯文件;操作系統視角:物理文件。用戶視角:邏輯文件;操作系統視角:物理文件。

文件系統模型的三個層次:
文件系統的接口:
命令行接口、程序接口
對象操作管理的軟件集合:
核心部分,文件各類管理。
對象及其屬性:
文件、目錄、磁盤儲存空間

文件名.擴展名
文件類型:有無結構、內容、用途、屬性、文件組織(順序、索引)
文件邏輯結構:以字節爲單位流式結構、記錄式文件、樹形結構
目錄:迅速定位文件、防止重名、允許別名、分組功能
單級文件目錄(命名衝突、不利於實現共享)、二級文件目錄(解決)、多級文件目錄(更好、級別過多會增加路徑檢索時間)

數據項:
基本數據項:字段
組合數據項:由若干個數據項組成

磁盤:
主引導區、分區表、分區(引導區、超級數據塊、空閒區管理、根目錄區)

文件元信息:
基本信息:
文件名、物理位置、文件邏輯結構(無結構、記錄、流式文件)、文件 物理結構(順序、索引等)
訪問控制信息:
文件所有者
使用信息:
創建時間、上一次修改時間、當前使用信息

文件物理結構:
連續(順序)結構:
易出現磁盤碎片、適用於變化不大的順序訪問的文件
串聯(鏈接)結構:
隨機存取效率低、可靠性差(一個指針出錯,後面文件都丟失)
索引結構:
每個文件有一個索引表、大小固定 / 不固定、在文件目錄 / 開頭,索引表佔用更多的空間
鏈接模式、多級模式、綜合模式

目錄:
直接法:
目錄項=文件名+文件元信息
間接法:
目錄項=文件名+文件元信息的地址(索引號)
長文件名:
固定255字節(浪費)、目錄項長度可變、目錄項本身定長,長度可變的文件名放在末尾
查詢技術:
順序查詢法、Hash方法

文件的共享:
硬鏈接:複製”指針“,源文件修改,該文件也修改,反之亦然。
軟鏈接:複製內容,源文件修改,該文件不修改。可以對不存在的文件創建。
保護文件:
建立副本、定時轉儲、規定文件權限
文件性能:
塊高速緩存(Block Cache)(文件緩存、磁盤高速緩存)
雙向鏈表

基於日誌結構的文件系統
LFS:新的數據塊和元數據(inode、目錄)先以segment爲單位放在緩存中,填滿後寫入到硬盤。文件邏輯結構

文件邏輯結構

目錄:迅速定位文件、防止重名、允許別名、分組功能

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