作業系統筆記

小花护符發表於2024-07-14

作業系統

第一章

1.1作業系統定義

作業系統:指控制和管理整個計算機系統的硬體和軟體資源(是軟體,管理軟體硬體),併合理地組織排程計算機的工作和資源的分配;以提供給使用者和其他軟體方便的介面和環境;它是計算機系統中最基本的系統軟體。

image-20240504203018918

作業系統向上層提供的服務:

​ 1.GUI:圖形化使用者介面

​ 2.聯機命令介面(互動式命令介面):特點:輸入一個命令執行一個命令

​ 3.離線命令介面(批處理命令介面):特點:一次執行一堆命令

​ 4.程式介面:可以在程式中進行系統呼叫來使用程式介面,普通使用者不可直接使用

image-20240504204105289

作業系統實現對硬體的擴充

​ 將CPU、記憶體、磁碟、顯示器、鍵盤等硬體合理地組織起來,讓各種硬體能夠相互協調配合,實現更多更復雜的功能

小結

image-20240504204456072

1.2作業系統特徵

​ 作業系統包含併發、共享、虛擬、非同步四個基本特徵,其中併發和共享是最基本的特徵,並且二者互為存在條件。

image-20240504204753569
併發

​ 併發:指兩個或者多個事件在同一時間間隔內發生。(宏觀上是同時發生、微觀上是交替發生)

​ 作業系統的併發性:指作業系統中 ‘’同時‘’ 執行著多個程式,在宏觀上看是同時執行的,在微觀上看是交替執行的。

​ 區別 並行:兩個或多個事件在同一時刻發生。單核Cpu同一時刻只能執行一個程式,程式只能併發執行;多核Cpu可以同時執行多個程式,程式間可以並行執行。

共享

​ 共享即資源共享,指系統中資源可以供記憶體中多個併發執行的程序共同使用。

共享的兩種方式

​ 1.互斥共享:系統中的某些資源,雖然可以提供給多個程序使用,但一個時間段內只允許一個程序訪問該資源。
​ 2.同時共享:系統中的某些資源,允許一個時間段內由多個程序“同時”對它們進行訪問。

虛擬

​ 虛擬是指把一個物理上的實體變為若干個邏輯上的對應物。物理實體 是實際存在的,而邏輯上 對應物 是使用者感受到的。

​ 虛擬技術:1.空間多工技術 2.分時多工技術

非同步

​ 非同步是指,在多道程式環境下,允許多個程式併發執行,但由於資源有限,程序的執行不是一貫到底的,而是走走停停,以不可預知的速度向前推進,這就是程序的非同步性。

小結
image-20240504210645712

1.2作業系統的發展和分類

image-20240505203616451
手工操作階段

​ 使用者獨佔全機,人機速度矛盾導致資源利用率極低

批處理階段

​ 1.單道批處理系統:引入了離線 輸入/輸出 技術 , 由監督程式負責輸入輸出。
​ 優點:緩解了一定程度的人機速度矛盾,資源利用率得到提升。
​ 缺點:記憶體中同一時間只能有一道程式執行,CPU有大量時間等待I/O完成。 源利用率仍然很低

​ 2.多道批處理系統:作業系統正式誕生,可以一次向記憶體中讀入多到程式。
​ 優點:多道程式併發執行、共享計算機資源,資源利用率大幅度提升
​ 缺點:沒有人機互動功能

分時作業系統

​ 計算機以時間片為單位,輪流為各個程序提供服務,使用者可以與計算機進行互動。

​ 優點:使用者的請求可以及時被響應解決了人機互動問題,允許多個使用者公用一臺計 算機,各個使用者對計算機的作業系統相互獨立。
​ 缺點:作業系統對每個程序是絕對公平的,不能優先處理一些緊急任務

實時作業系統

​ 優點:可以優先響應一些緊急任務

​ 在實時作業系統的控制下,計算機系統接收到外部訊號後及時進行處理,並且要在嚴格的時限內處理完事件。實時作業系統的主要特點及時性可靠性

image-20240505210107069
其他作業系統
image-20240505210148317
小結

image-20240505210221863

1.3.1作業系統的執行機制

​ 指令:CPU能夠識別、執行的最基本的命令(二進位制機器指令)

​ 負責實現作業系統的程式稱為核心程式,許多的核心程式稱為作業系統核心,簡稱核心,核心是最接近硬體的部分。其他的程式稱為應用程式(QQ)

特權指令和非特權指令

​ 特權指令:不允許使用者直接使用的指令,如:記憶體清零指令、關中斷指令等。特權指令 只允許核心程式使用

​ 非特權指令:允許使用者直接使用的指令,如加法指令、減法指令等。

​ CPU在設計和生產的時候就劃分了特權指令和非特權指令。

核心態 和使用者態

​ 當CPU處於核心態時,此時執行的程式是核心程式,可以執行特權指令。
​ 當CPU處於使用者態時,此時執行的程式是應用程式,只能執行非特權指令。

​ 在CPU中有一個暫存器叫程式狀態字暫存器(PSW),其中一個二進位制位 來區分狀態。

​ 從核心態轉化到使用者態是透過執行一條特權指令——修改PSW 來實現的。作業系統主動讓出CPU使用權。

​ 從使用者態轉化位為核心態是由中斷引發的,硬體自動完成變態過程。作業系統強行奪走CPU使用權。

小結
image-20240505212507989

1.3.2中斷和異常

​ 中斷是作業系統核心 奪回CPU使用權的唯一途徑。

中斷的型別

​ 內中斷:與當前執行的指令有關,中斷訊號來指CPU內部(如應用程式執行特權指令、除數為零、應用系統執行陷入指令

​ 外中斷:與當前執行的指令無關,中斷訊號來自CPU外部(如時鐘中斷)

image-20240506200858450

​ 不同的中斷訊號,需要用不同的中斷處理程式來處理。當CPU檢測到中斷訊號後,會根據中斷訊號的型別去查詢“中斷向量表”,以此來找到相應的中斷處理程式在記憶體中的存放位置。

小結
image-20240506201025185

1.3.3系統呼叫

​ 系統呼叫是應用程式請求作業系統核心服務的途徑。

​ 作業系統核心對共享資源進行同一管理,並向上提供系統呼叫,程序要使用共享資源只能透過系統呼叫向核心發出請求。凡是與共享資源有關的操作都需要進行系統呼叫(比如儲存分配,I/O操作、檔案管理)

系統呼叫的過程

​ 1.傳遞系統呼叫引數
​ 2.執行陷入指令(使用者態)
​ 3.執行相應的核心程式處理系統呼叫(核心態)
​ 4.返回應用程式

小結
image-20240506202423193

1.4作業系統的體系結構

​ 大核心 (單核心)結構: 既保留了與硬體緊密接觸的部分又保留一些對系統資源管理的功能

​ 微核心結構:核心只保留與硬體緊密接觸的部分

image-20240506203139001image-20240506203445265

區別
image-20240506203747603

分層結構:分為分多次,每層可以單向呼叫更低一層的結構

​ 優點:便於除錯和驗證、便於擴充和維護、各層呼叫介面清晰固定
​ 缺點:只能呼叫相鄰低層,難以合理定義各層邊界、不可跨層呼叫,效率低

模組化結構:將核心劃分為多個模組,核心=主模組+可載入模組;主模組:只負責 核心功能如程序排程、記憶體管理;可載入模組:可以動態載入新模組到 核心無需重新編譯整個核心。

​ 優點:模組間邏輯清晰易於維護,確定模組間介面後可多模組同時開發。 支援動態載入新的核心模組,增強OS適應性任何模組之間可以直 接呼叫其他模組,效率高。

​ 缺點:模組之間相互依賴難以除錯驗證。模組之間介面的定義未必合理實用

大核心結構:所有系統功能都放在核心裡

​ 優點:效能高,核心內部各種功能可以直接呼叫。

​ 缺點:核心龐大功能複雜,難以維護。大核心中某個模組出錯可能導致整個 系統崩潰

微核心結構:只把中斷、原語、程序通訊等核心功能放入核心。把程序管理、檔案管 理、裝置管理等功能以使用者程序形式執行在使用者態。

​ 優點:核心小功能少易於維護,核心可靠性高核心某個功能模組出錯不會 導致整個系統崩潰

​ 缺點:效能低,需要頻繁切換使用者態/核心態使用者態下的各個功能模組不 能直接相互呼叫,需要透過核心的“訊息傳遞”來間接通訊

外核:核心負責程序排程,程序通訊等功能,外核負責為使用者程序分配未經抽象的硬體 資源,且由外核保證資源使用安全

​ 優點:分配“不抽象”的硬體資源使得程序可以更加靈活的使用硬體資源。減 少了虛擬硬體資源的“對映層”,提升了效率

​ 缺點:降低了系統的一致性,使系統更加複雜

1.5作業系統的引導

引導過程

​ 1.CPU從一個特定的主存地址開始,取指令,執行ROM中的載入程式(進行硬體自檢、開機)

​ 2.將磁碟的第一塊(主開機記錄)讀入記憶體,執行磁碟載入程式,掃描分割槽表

​ 3.從活動分割槽(又叫主分割槽,即安裝了作業系統的分割槽)讀入分割槽引導記錄並執行程式

​ 4.從根目錄下找到作業系統初始化程式(啟動管理器)並執行,完成開機的一系列動作

image-20240507200020261

1.6虛擬機器

​ 虛擬機器:使用虛擬化技術,將一臺物理機器虛擬化為多型虛擬機器,每臺虛擬機器都可以獨立執行一個作業系統。需要用到虛擬機器管理程式。

兩類虛擬機器管理程式VMM

​ 第一類VMM:直接執行在硬體上,把硬體資源分配給不同的作業系統。

​ 只有虛擬機器管理程式執行在核心態,可以使用特權指令,作業系統執行在使用者態,當作業系統需要使用特權指令時需要被VMM截獲,轉化 ,然後再返回給作業系統。

image-20240507202904954

第二類VMM:執行在一個宿主作業系統上

​ 這類VMM想要給客戶作業系統分配資源時,只能向宿主作業系統請求資源分配,然後由VMM進行再分配。

image-20240507203640715

區別:

image-20240507204755787

第二章程序與執行緒

2.1.1程序的概念

​ 程式:靜態的,是存放在磁碟裡的可執行檔案即一系列指令的集合

​ 程序:動態的,是程式的一次執行過程

程序程序實體的執行過程,是系統進行資源分配和排程的一個獨立單位

2.1.2程序的組成

​ 程序由PCB、程式段和資料段組成。

PCB

​ 作業系統管理程序時,會把程序的相關資訊儲存到PCB中。

PCB時程序儲存在的唯一標誌,當程序被建立時,作業系統為其建立PCB,當程序結束時,會對PCB進行回收

image-20240508203825754
程式段和資料段

程式段、資料段是程序給程序自己使用的,與程序自身的執行邏輯有關。

image-20240508204035928

2.1.3程序的特徵

image-20240508204809901
小結
image-20240508205041828

2.1.4程序的狀態與轉換

程序的狀態

建立態:程序被建立時狀態為建立態,在這個階段作業系統會為程序分配資源。

就緒態:程序被建立完成後進入就緒態,此時程序已經具備執行條件,但是沒有CPU資 源,暫時不能執行。

執行態:一個程序在CPU上執行時處於執行態,CPU會執行該程序對應的程式。

阻塞態:在程序執行過程中,可能會 請求等待某個事件發生(如資源分配、其他程序響 應)。在這個事件之前程序無法繼續進行,系統會停止該程序的CPU使用,程序 進入阻塞態。

終止態:程序在執行完成時可以發出 exit指令 請求系統終止該程序,此時程序會進入終 止態,作業系統會讓該程序下CPU,並且回收記憶體空間等資源,最後還要回收 該程序的PCB。

就緒態、執行態、阻塞態是程序的三種基本狀態。

程序狀態的轉化

image-20240508212108334

image-20240508212222879image-20240508212123670image-20240508212130619

image-20240508212423458
程序的組織

​ 為了把處於同一個狀態下的各個程序統一管理,作業系統會將各個程序的PCB組織起來。

連結方式

​ 將不同的指標指向狀態相同的不同程序

image-20240508212735240
索引方式

​ 作業系統會給不同狀態的程序建立索引表,每個索引表的表項會指向相應的PCB

image-20240508212916459 image-20240508212929645
小結
image-20240508213013611

2.1.5程序通訊

​ 程序通訊指的是程序之間產生資料互動。一個程序不可以直接訪問其他程序的記憶體地址空間,所有程序通訊需要有作業系統的支援。

共享儲存

​ 程序可以申請一片共享空間,其他程序也可以訪問此區域,程序之間可以在此區域實現資源共享。為了避免出錯,各個程序對共享空間的訪問是互斥的(一個訪問的時候其他不能訪問)

​ 基於儲存區共享:作業系統在記憶體中劃分一塊共享儲存區,資料的形式、儲存位置都由通訊程序控制而不是作業系統,這種共享方式通訊速度很快,屬於高階通訊方式。

​ 基於資料結構共享:共享空間是一個資料結構比如一個陣列,這種共享方式速度慢,限制多,屬於低階通訊方式。

image-20240509204807217
訊息傳遞

​ 程序之間的資料交換會以格式化的訊息為單位,程序透過作業系統提供的”傳送訊息“/”接收訊息“兩個原語進行資料交換。

​ 格式化資訊:image-20240509204928363

直接通訊方式:傳送者需要指明接收程序的ID。

間接通訊方式:透過”信箱“進行間接通訊。

管道通訊

​ 管道:是一種特殊的共享檔案 (pipe檔案)實際是在記憶體區中開闢大小固定的緩衝區。管道只能採取半雙工通訊,某段時間內只能實現單向傳輸,如果要實現雙向通訊,需要同時設定兩個管道。各個程序只能互斥的訪問管道(由作業系統實現)。

​ 當管道寫滿時,”寫程序“ 將阻塞直到 ”讀程序“將管道中的資料取走,可以喚醒”寫程序“

​ 當管道讀空時,”讀程序“ 將阻塞直到 ”寫程序“向管道中寫入資料,可以喚醒”讀程序“

管道中的資料一旦被讀出就會徹底消失,當多個程序讀同一個管道時可能會發生錯亂。一個管道允許多個”寫程序“,一個讀程序; 也允許多個寫程序,多個讀程序但是系統會讓讀程序輪流從管道中讀取資料

​ 與共享空間通訊方式不同的是,管道通訊遵循先進先出式存取檔案,而共享空間可以在任意位置存取檔案。

image-20240509205923861
小結
image-20240509211509819

2.1.6執行緒的概念和特點

​ 沒有引入執行緒的時候,程式執行流的最小單位是程序。引入執行緒之後程式執行流的最小單位是執行緒。

​ 執行緒是基本的CPU執行單元,也是程式執行流的最小單位。引入執行緒之後,程序可以併發,而且程序內的各個執行緒也可以併發,提高了系統的併發性。引入執行緒之後,程序只作為除CPU之外的系統資源分配單元(把記憶體資源、印表機資源分配至程序,而不分配給執行緒)。

引入執行緒機制後的變化

image-20240625130519309

執行緒的屬性

image-20240625130956910

執行緒的實現方式

使用者級執行緒:只支援程序,不支 持執行緒。執行緒是由執行緒庫來實現的

image-20240625131440442

​ 執行緒的管理是由應用程式透過執行緒庫來完成的。執行緒切換不需要CPU的變態。作業系統只能感受到程序的存在,而不能意識到程序的存在。

​ 優點:使用者級執行緒的切換在使用者空間既可以完成,不需要切換到核心態,執行緒管理系統開銷小,效率高。

​ 缺點:一個執行緒被阻塞,整個程序會被阻塞,併發度不高,多個執行緒不可以在多核處理器上並行執行。

核心級執行緒:作業系統支援的執行緒。

image-20240625132709644

​ 執行緒的管理工作由作業系統完成。執行緒切換會引起CPU的變態,作業系統可以意識到核心級執行緒的存在。

​ 優點:當一個執行緒被阻塞之後,其他執行緒可以繼續執行,併發能力強,多執行緒可以在多核處理機上併發執行。

​ 缺點:一個程序可能會對應多個核心級執行緒,執行緒切換由作業系統核心完成,需要變態,因此執行緒管理的成本高,開銷大。

多執行緒模型

一對一模型:一個使用者級執行緒對映到一個核心級執行緒,每個使用者程序有著與使用者級執行緒同樣數量的核心級執行緒

image-20240625133744294

​ 優點;當一個執行緒被阻塞之後其他執行緒還可以繼續執行。併發能力強,多執行緒可以在多核處理及上並行執行。

​ 缺點:一個使用者程序會佔用多個核心級執行緒,執行緒切換由作業系統核心完成,需要切換到核心態,因此執行緒管理的成本高,開銷大。

多對一模型:多個使用者級執行緒對映到一個核心級執行緒。且一個程序只被分配一個核心級執行緒。

image-20240625134108038

​ 優點:使用者級執行緒的切換在使用者空間即可完成,不需要切換到核心態,執行緒管理的系統開銷小,效率高

​ 缺點:當一個使用者級執行緒被阻塞後,整個程序都會被阻塞,併發度不高。多個執行緒不可在多核處理機上並行執行

​ 作業系統只“看得見”核心級執行緒,因此只有核心級執行緒才是處理機分配的單位

多對多模型:n使用者及執行緒對映到m個核心級執行緒(n >= m)。每個使用者程序對應m個核心級執行緒。

image-20240625134511157

​ 優點:克服了多對一模型併發度不高的缺點(一個阻塞全體阻塞),又克服了一對一模型中一個使用者程序佔用太多核心級執行緒,開銷太大的缺點。

小結
image-20240625134723785

2.1.7執行緒的狀態與轉換

​ 類似於程序的狀態轉換,主要關注就緒態、執行態、阻塞態

image-20240626141630023

類似於程序的PCB,每個執行緒都有儲存執行緒資訊的TCB

image-20240626142105660

2.2.1處理機排程

​ 排程:當有一堆任務需要處理,但是由於資源有限、無法對任務同時處理、所以需要確定某種規則來決定處理任務的順序

排程層次
高階排程(作業排程):

​ 按照一定原則從外存的作業預備佇列中選擇一個作業進入記憶體,並建立程序,每個作業只調入一次,調出一次,作業調入時會建立PCB、調出時會撤銷PCB。

低階排程(程序排程/處理機排程):

​ 按照某種策略,從就緒佇列中選擇一個程序,將處理及分配給這個程序。

中級排程(記憶體排程):

​ 記憶體不足時, 可以將某些程序資料調出記憶體, 等到記憶體空閒或者程序需要執行時再重新調入記憶體。暫時調到外存中的程序狀態為掛起狀態, 被掛起的程序PCB會被組成掛起佇列。

​ 按照某種策略決定哪個處於掛起狀態的程序重新調入記憶體就是中級排程。一個程序可能會被多次調入、調出記憶體,因此中級排程發生的頻率要比高階排程頻率更高。

三層排程的聯絡和對比
image-20240626144955393

五狀態模型:(408要求)

image-20240626143658174

七狀態模型:(一些自命題要求)

image-20240626143913222

小結
image-20240626145205648
2.2.2排程演算法評價指標

​ 排程演算法評價指標包括:CPU利用率、系統吞吐量、週轉時間、等待時間、響應時間等.

CPU利用率:指CPU處於忙碌時間佔總時間的比例。
利用率= 忙碌時間 / 總時間

​ 例:image-20240626145727817

系統吞吐量:單位時間內完成的作業的數量。
系統吞吐量 = 總共完成的作業數量 / 總共花費時間。

​ 例:image-20240626145951965

系統週轉時間:指作業被提交給系統開始,到作業完成的時間間隔。
​ 週轉時間 = 完成時間 - 提交時間
​ 平均週轉時間 = 各個作業週轉時間和 / 作業數量
​ 帶權週轉時間 = 作業的週轉時間 / 實際執行的時間 (帶權週轉時間大 於等於1且數值越小越好)

​ 平均帶權週轉時間 = 各個作業 帶權週轉時間和 / 作業數量

等待時間:指作業/程序處於等待狀態的時間之和,但是程序再等待I/O完成的時間其實也在被服務,所以不算入等待時間。對於作業來說不僅要考慮建立程序後的等待時間,還要加上在外村後備佇列中的等待時間。

響應時間:指使用者從提交請求首次產生響應的時間。

小結

image-20240626151659852

2.2.3程序排程的時機、切換

​ 程序排程即低階排程,是按照某種演算法從就緒佇列中選擇一個程序為其分配處理機。

需要進行程序排程的情況:

​ 1.當前執行的程序主動放棄了處理機(正常中止、發生異常、請求阻塞)
​ 2.當前執行的程序被動放棄了處理機(時間片用完、有優先順序更高的程序)

不可進行程序排程的情況:

​ 1.在處理中斷的過程中:中斷處理過程複雜、與硬體密切相關、很難做到中斷處理過 程中進行程序切換。

​ 2.程序在作業系統核心程式臨界區中。

​ 3.在原子操作過程中(原語)。原子操作不可中斷。

​ 臨界資源:一個時間段內只允許一個程序使用的資源,各個程序互斥的訪問臨界資源。

​ 臨界區:訪問臨界資源的程式碼

​ 核心程式臨界區:用來訪問某種核心資料結構的,比如程序的就緒佇列

程序排程的方式
非剝奪排程方式(非搶佔式):

​ 只允許程序主動放棄處理機,在執行過程中即使有更緊迫的任務到達,當前程序仍然會使用處理機,直到程序終止或者主動阻塞。

​ 系統開銷小,無法處理緊急任務,適用於早期的批處理系統。

剝奪排程方式(搶佔式):

​ 當一個程序正在處理機上執行時,如果有一個更緊迫的程序需要使用處理機,那麼會立即暫停正在執行的程序,將處理機分配給更緊迫的程序。

​ 可以優先處理緊急程序,也可以讓各個程序按照時間片流轉執行功能,適用於分時作業系統、實時作業系統。

image-20240626155736486
小結:
image-20240626155914758

2.2.3 排程器/排程程式

​ 排程器/排程程式用來轉換就緒態和執行態 (②和③),排程程式決定排程演算法和時間片大小。

image-20240628144237499

什麼情況下會觸發排程程式:

​ 1.建立新程序(程序建立後排程程式會檢查是否讓新程序搶佔處理機)
​ 2.程序退出(退出後處理機空閒,排程程式決定哪個程序轉為執行態)
​ 3.執行程式進行阻塞(阻塞後排程程式決定哪個程序上處理機)
​ 4.I/O中斷髮生(會讓某些阻塞態程序回到就緒態,排程程式判斷是否要搶佔處理機)

​ 當採用非搶佔式的排程策略時,只要程序阻塞或者退出才會觸發排程程式工作。
​ 當採用搶佔式的排程策略時,每個時鐘中斷或K個時鐘中斷會觸發排程程式。

​ 在不支援執行緒的作業系統中,排程程式處理的物件是程序。
​ 在指出執行緒的作業系統中,排程程式處理的物件是執行緒。

閒逛程序

​ 排程程式在沒有其他程序就緒時,會執行閒逛程序。

閒逛程序的特點:

​ 1.優先順序最低
​ 2.可以是 0 地址指令,佔一個完整的指令週期(指令週期末尾例行檢查中斷)
​ 3.能耗低

2.2.4排程演算法

先來先服務演算法(FCFS)

​ 按照作業/程序到達的先後順序進行服務。用於作業排程時考慮哪個作業先到達後備佇列。當用於程序排程時考慮哪個程序先到達就緒佇列

​ 先來先服務演算法是非搶佔式演算法。不會導致作業飢餓(某程序/作業長時間得不到服務)

​ 優點:公平、演算法實現簡單
​ 缺點:排在時間長的作業後的時間短的作業帶權週轉時間大,需要等待很長時間,對短 時間作業來說使用者體驗差。(FCFS對長作業有利、對短作業不利

image-20240628151848881

短作業優先演算法(SJF)

​ 演算法追求最短的平均等待時間、最少的平均週轉時間、最少的平均帶權週轉時間。服務用時最短的作業/程序優先得到服務。既可以用於作業排程,也可以用於程序排程。

​ 短作業優先演算法,預設是非搶佔式的演算法,但是也有搶佔式的版本(最短剩餘時間優先演算法)

​ 優點:最短的平均等待時間、平均週轉時間
​ 缺點:不公平,對短作業有利,對長作業不利,可能產生飢餓現象(不停的有短程序加入,會導致長程序飢餓)。程序的執行時間是由使用者提供的,不一定真實,不一定能做到真正的短作業優先。

image-20240628152932964

​ 當採用最短剩餘時間優先的演算法時,需要在有新任務加入就緒佇列時判斷是否需要搶佔處理機。時間分配如下:

image-20240628155457412

高響應比優先演算法(HRRN)

​ 綜合考慮作業/程序的等待時間和服務時間。在每次排程時先計算各個作業/程序的響應比,選擇響應比高的作業/程序進行服務。響應比大於1。既可以用於作業排程也可以用於程序排程。

image-20240628162059305

​ 高響應比優先演算法是非搶佔式的演算法。只有當程序主動放棄處理機時才需要排程。

​ 優點:綜合考慮了等待時間和執行時間,等待時間相同時,要求服務時間短的優先,要求服務時間相同時,等待時間長的優先。對於長作業來說,隨著等待時間增加,響應比也會增加,避免造成飢餓

image-20240628162512523
對比
image-20240628165705027

這三種演算法主要關心使用者的公平性、平均週轉時間、平均等待時間等評價整體效能的指標,但是不關心響應時間、也不區分任務緊急程度,互動性很差,因此一般適合早期的批處理系統。

時間片輪轉排程演算法

​ 演算法思想:公平輪流的為各個程序服務,讓每個程序在一定時間間隔內都可以得到響應。

​ 演算法規則:按照各個程序到達就緒佇列的順序,輪流讓每個程序執行一個時間片,若程序未在一個時間片內執行完成,則剝奪處理機,將程序重新放到就緒佇列重新排隊。

​ 程序未能在時間片內完成功能會被強行剝奪處理機的使用許可權,因此屬於搶佔式演算法,由時鐘裝置發出時鐘中斷來通知時間片已到。

image-20240701152037845

​ 當某一時刻有程序新加入就緒佇列並且由程序時間片用完也要加入就緒佇列時,一般把新加入佇列的程序放到時間片用完的程序之前。如時間片為2時,程序P1時間片用完,程序P2加入就緒佇列,此時就緒佇列應該為 P1 , P2 。

​ 當時間片設定太大時,所有程序都可以在一個時間片內完成任務,時間片輪轉演算法就退化成了先來先服務演算法,增大程序的響應時間,因此時間片不能太大。
​ 另一方面,程序排程、切換是有時間代價的,如果時間片太小,程序切換過於頻繁,系統會浪費大量時間,導致實際用於 程序執行 的時間比例減少,因此時間片不能太小。

​ 優點:公平,響應快,適用於分時作業系統。
​ 缺點:高頻率的程序切換,會有一定的時間開銷。不區分任務的緊急程度。

​ 時間片輪轉演算法:只用於程序排程不會造成飢餓

優先順序排程演算法

​ 演算法思想:根據任務的緊急程度決定任務的處理順序。

​ 演算法思想:為每個作業/程序設定一個優先順序,在每次排程的時候選擇優先順序最高的作業/程序。

​ 優先順序排程演算法既可以用於作業排程,也可以用於程序排程可能引發飢餓

​ 優先順序排程演算法既有搶佔式也有非搶佔式。做題時的區別在於:非搶佔式只需在程序主動放棄處理機時進行排程即可,而搶式還需在就緒佇列變化時,檢查是否會發生搶佔。

​ 優點:用優先順序區分緊急程度、重要程度、適用於實時作業系統。可以靈活的調整對各種作業/程序的偏好程度。
​ 缺點:如果有源源不斷的高優先順序程序到來會導致飢餓。

image-20240701154345928

image-20240701154526407

image-20240701154708853

image-20240701154730763

多級反饋佇列排程演算法

​ 多級反饋佇列排程演算法是對其他排程演算法的折中權衡

​ 演算法規則:1.設定多級就緒佇列,各級佇列優先順序從高到低,時間片從小到大
​ 2.新程序到達時先進入第1級佇列,按FCFS原則排隊等待被分配時間 片,若用完時間片程序還未結束,則程序進入下一級佇列隊尾。如果 此時已經是在最下級的佇列,則重新放回該佇列隊尾
​ 3.只有第k級佇列為空時,才會為k+1級隊頭的程序分配時間片

一般用於程序排程如果不停有程序加入可能會導致飢餓。

​ 多級反饋佇列排程演算法是一種搶佔式的演算法,在K級佇列中的進執行過程中,如果更上級的佇列中進入了一個新程序,那麼這個優先順序更高的程序會搶佔處理機,原來的程序放回K級佇列隊尾。

​ 優點:對各型別程序相對公平(FCFS的優點);
​ 每個新到達的程序都可以很快就得到響應(RR的優點);
​ 短程序只用較少的時間就可完成(SPF的優點);
​ 不必實現估計程序的執行時間(避免使用者作假);
​ 可靈活地調整對各類程序的偏好程度,比如CPU密集型程序、I/O密集型程序

image-20240701155848193

區別

image-20240701160433090

​ 這三種演算法適用於互動式作業系統

2.3.1同步和互斥

程序同步:同步 又叫做 直接約束關係 它是指為完成某種任務而建立的兩個或者多個進 程,這些程序因為需要在某些位置上協調他們的工作次序而產生的制約關係。 程序間 的直接制約關係就是源於他們之間的互相合作。

程序互斥:我們把一個時間段內只允許一個程序使用的資源稱為臨界資源。對臨界資源的 訪問,必須互斥地進行。互斥,亦稱間接制約關係。程序互斥指當一個程序訪 問某臨界資源時,另一個想要訪問該臨界資源的程序必須等待。當前訪問臨界 資源的程序訪問結束,釋放該資源之後,另一個程序才能去訪問臨界資源。

對臨界資源的互斥訪問可以分為以下四個部分:

​ 進入區:檢查是否可以進入臨界區,如果可以進入則設定 正在訪問臨界資源標誌(上鎖)
​ 以阻止其他程序同時進入臨界區。

​ 臨界區:實際訪問臨界資源的程式碼

​ 退出區:負責解除 正在訪問臨界資源的標誌(解鎖)

​ 剩餘區:負責其他處理

為了實現對臨界資源的互斥訪問,同時保證系統整體效能,需要遵循以下原則:

​ 1.空閒讓進:臨界區空閒時,可以允許一個請求進入臨界區的程序立即進入臨界區;
​ 2.忙則等待:當已有程序進入臨界區時,其他試圖進入臨界區的程序必須等待;
​ 3.有限等待:對請求訪問的程序,應保證能在有限時間內進入臨界區(保證不會飢餓);
​ 4.讓權等待:當程序不能進入臨界區時,應該立即釋放處理機,防止程序忙等待;

小結
image-20240701163254799

2.3.2程序互斥的軟體實現方法

單標誌法

​ 兩個程序在訪問完臨界區後會把使用臨界區的許可權轉交給另一個程序,也就是說每個進程進入臨界區的許可權只能被另一個程序遠端賦予。

image-20240701164736599

​ 當某個程序一直不訪問臨界區時,即使臨界區空閒,其他進行也無法使用臨界資源,所以單標誌法的主要問題是違反了空閒讓進的原則。

雙標誌先檢查法

​ 演算法思想:設定一個布林陣列,陣列中各個元素用來標記各個程序想進入臨界區的意願,falg[0]=true表示P0程序想要進入臨界區,每個程序在進入臨界區之前要檢查當前有沒有別的程序想進入臨界區,如果沒有可以把自身對應的陣列值設定為true,然後開始訪問臨界區。

image-20240701165219484

​ 如果兩個程序併發執行,可能會導致兩個程序同時進入臨界區,違反了忙則等待的原則。同時進入臨界區的原因是進入區的 “檢查” 和 “上鎖”並不是同時進行的,在兩個步驟之間可能發生程序切換。

雙標誌後檢查法

對於雙標誌先檢查法進行了最佳化,調整了‘’ 檢查 ‘’ 和“上鎖 ”的順序。

image-20240701165830260

​ 雙標誌後檢查法解決了忙則等待的問題,但是由於併發,兩個程序可能會同時轉換標誌,違反空閒讓進和有限等待的原則。並且雙方都無法進入臨界區會產生飢餓現象。

Peterson演算法

​ 結合了雙標誌法和單標誌法的思想,如果雙方都爭著進入臨界區那麼讓程序進行許可權轉交。

image-20240701171902049

​ Peterson演算法可以解決程序互斥問題,遵循了空閒讓進,忙著等待,有限等待三個原則,但是未遵循讓權等待的原則。

小結

image-20240701175353488

2.3.3程序互斥的硬體實現方法

中斷遮蔽方法

​ 利用開/關中斷指令(類似原語,利用關中斷使得程序不能發生切換,當訪問完臨界區之後再開中斷,允許程序切換)

​ 優點:簡單、高效
​ 缺點:1.不適用於多處理機;2. 只適用於作業系統核心程序,不適用使用者程序(因為開/關中斷指令只能執行在核心態)

TestAndSet指令

​ 簡稱為TS指令或者TSL指令(TestAndSetLock)

​ TSL指令是由硬體實現的,執行的過程中不允許被中斷。

image-20240702102114367

image-20240702102421786

​ 優點:實現簡單,無需像軟體實現方法一樣檢查邏輯漏洞,適用於多處理機環境
​ 缺點:不滿足讓權等待原則,暫時無法進入臨界區的程序會佔用CPU並迴圈TSL指 令,導致忙等。

Swap指令

​ Swap指令也是硬體實現的,執行過程中不允許被中斷。

image-20240702102612816

image-20240702102620775

​ 優點:實現簡單,無需像軟體實現方法一樣檢查邏輯漏洞,適用於多處理機環境
​ 缺點:不滿足讓權等待原則,暫時無法進入臨界區的程序會佔用CPU並迴圈Swap指 令,導致忙等。

小結

image-20240702102746021

2.3.4互斥鎖

​ 解決臨界區最簡單的工具就是互斥鎖,一個程序在進入臨界區時上鎖,在退出臨界區時解鎖。上鎖和解鎖的執行必須是原子操作,因此互斥鎖通常採用硬體機制來實現。

image-20240702103701274

​ 互斥鎖的主要缺點是忙等待,當有其他程序使用臨界區時,程序必須迴圈呼叫上鎖函式,當多個程序共享同一個CPU時,會造成CPU的浪費,因此互斥鎖常用於多處理器系統,
一個程序在一個處理機上等待不會影響其他程序的執行。

​ 需要連續迴圈忙等的互斥鎖都可以被叫做自旋鎖,如TSL指令、Swap指令、單標誌法

特性

​ 1.需忙等,程序時間片用完才下處理機,違反“讓權等待”

​ 2.優點:等待期間不用切換程序上下文,多處理器系統中,若上鎖的時間短,則等待代價 很低

​ 3.常用於多處理器系統,一個核忙等,其他核照常工作,並快速釋放臨界區

​ 4.不太適用於單處理機系統,忙等的過程中不可能解鎖

2.4.1訊號量機制

​ 使用者可以透過使用作業系統提供的一對原語( wait(S)原語 和 signal(S)原語)來對訊號量進行操作,從而很方便的實現程序同步、程序互斥。

​ 訊號量其實就是一個變數、可以用一個訊號量來表示系統中的某種資源的數量。

​ 原語是一種特殊的程式段,執行過程不可被打斷,原語是由開/關中斷指令實現的

​ Wait、Signal原語常常被稱為 P、V操作,所以常常把Wait(S)、Signal(S)操作簡稱為P(S)操作和V(S)操作。(題目中出現P、V操作時,若無特殊說明,一般指記錄型訊號量

整形訊號量

​ 用一個整數型的變數作為訊號量,用來表示系統中某種資源的數量

image-20240702105929264

​ wait語句是原語,在P1使用wait語句時不會進行程序切換,所以不會出現多個程序同時使用臨界資源的狀況

​ 整形訊號量存在的問題:不滿足讓權等待原則,會發生忙等

記錄型訊號量

image-20240702110725301

​ block語句的作用是讓某個程序主動進入阻塞態,放棄CPU資源。wakeup語句是讓程序從阻塞態進入就緒態。

​ 如果wait語句判斷 value值小於0,則表示此時無臨界資源,那麼會讓程序L進入阻塞佇列,當有一個程序使用完成臨界資源,系統會判斷Value的值,如果小於0表示還有程序需要使用臨界資源,系統會把阻塞佇列對頭的程序喚醒,並分配臨界資源。

image-20240702111231400

image-20240702111245061

小結

image-20240702111323211

2.4.2利用訊號量機制實現互斥、同步、前驅關係

實現程序互斥操作

步驟:

​ 1.需要分析程序的關鍵活動,劃分臨界區
​ 2.設定一個 互斥訊號量 mutex 初始值為1(表示允許進入臨界區的程序數量為1)
​ 3.在進入區 P(mutex) 申請資源
​ 4.在退出區 V(mutex) 釋放資源

注意:

​ 對不同的臨界資源需要設定不同的 互斥訊號量 (mutex1 mutex2 .......)

​ P、V操作必須同時出現,確實P操作無法保證臨界資源的互斥訪問。缺少V操作會導致資 源永遠不會被釋放,等待程序永遠不會被喚醒。

實現程序同步操作

​ 程序同步:使各個併發的程序按照要求 有序的推進。

步驟:

​ 1.分析什麼地方需要實現同步關係,即必須保證一前一後執行的兩個操作。
​ 2.設定一個 同步訊號量S 初始值為0.
​ 3.在 前操作 之後執行 V(S)
​ 4.在 後操作 之前執行 P(S)

image-20240702113205630

訊號量機制實現前驅關係

​ 前驅關係問題本質上是多級同步問題。

image-20240702114228374

image-20240702114121566

最終的程序實現過程中的P、V操作如下所示

image-20240702114252356

小結

image-20240702114425141

2.3.5管程

管程是一種特殊的軟體模組,有以下部分組成:
1.區域性於管程的 共享資料結構 說明(比如 :緩衝區)
2.對該共享資料結構進行操作的一組過程(過程也就是函式)
3.對區域性與管程的共享資料設定初始值的語句
4.管程名字

管程的基本特徵:
1.區域性於管程的資料 只能被區域性與管程的過程所訪問
2.一個程序只有透過呼叫管程內的過程才能進入管程訪問共享資料
3.每次僅允許一個程序在管程內執行某個內部過程(各個程序互斥的進入管程的過程, 是由編譯器負責實現的)

image-20240703090845461image-20240703090853328

小結

image-20240703091229453

2.3.6生產者消費者問題

image-20240703092020647 image-20240703092211078

image-20240703092201427

實現互斥操作的PV操作是在一個程序中的
實現同步操作的PV操作是在兩個不同程序中的

image-20240703092950891

實現互斥的P操作必須在實現同步的P操作之後,如

image-20240703093306478

​ 此時如果產品已滿,執行生產者操作:P(mutex)使得生產者進入臨界區,P(empty)使得生產者阻塞,轉換到消費者,消費者會被卡在P(mutex) 中,兩個程序相互等待產生死鎖。
​ 實現同步的V操作和實現互斥的V操作順序變化不會影響死鎖。

2.3.7多生產者-多消費者

image-20240703094333751

互斥同步關係分析

image-20240703094504105

image-20240703094600506

互斥、同步關係圖:

image-20240703095131330

初始值設定:

image-20240703094806098

程序設計:

image-20240703101107808

​ 在此問題中,不設定互斥操作也可以完成程序設計,不會產生死鎖,原因是臨界區資源為1,在程序進入臨界區時最多會有一個程序的P操作不會被阻塞。但是當臨界區資源增加到2時,程序dad 和程序 mom可能會一起進入緩衝區,可能會導致資料被覆蓋。因此,當緩衝區大小大於1就必須設定一個互斥訊號量來保證程序可以互斥的訪問緩衝區,等於1的時候可能不需要,也可能需要(建議直接加)。

2.3.8吸菸者問題

image-20240703101218140

互斥、同步關係分析:

​ 互斥關係:桌子資源是臨界區資源,每次能容納一個資料。
image-20240703101351251

互斥、同步關係圖:

image-20240703102033663

初始值設定:

image-20240703102208225

程序設計:

image-20240703102339365image-20240703102430034

2.3.9讀者寫者問題

image-20240703143313803

互斥、同步關係分析:

image-20240703145438661

訊號值設定:

image-20240703145816869

程序設計:

image-20240703145834426image-20240703145844662

​ rw資源表示檔案互斥訪問臨界區,
​ 在寫程序前後 加入 P( rw ) 和 V( rw )可以保證一個時間內只有寫程序與其他寫程序和讀程序互斥。
​ 在讀程序前後加入 P( rw ) 和 V( rw ) 可以保證讀程序與寫程序互斥,但是此時讀程序與讀程序也互斥,違反題目,於是新增計數變數 count 只有第一個讀程序開始讀取的時候才會觸發 P( rw ),保證了讀程序與寫程序的互斥,其他讀程序讀取的時候會跳過if語句,只有最後一個讀程序讀取完畢後寫程序才有可能寫檔案,保證了多個讀程序可以一起讀取、讀程序與寫程序互斥。
​ 新增count之後 在if 判斷語句 和 P(rw) 語句之間可能會發生程序切換,導致第二個讀程序修改rw值進行讀取,第一個讀程序阻塞在 p(rw)語句上。於是在if判斷條件之前加入一個互斥訊號量 mutex,使得各個讀程序互斥的訪問count變數。
​ 此時互斥性得到了保障,但是當讀程序讀取時有源源不斷的讀程序加入的話,會導致寫程序的飢餓,於是新增訊號量w。當多個寫程序需要寫檔案時,保證了同一時間只有一個寫程序;當多個讀程序需要讀檔案時,保證了各個程序互斥的訪問count變數,且多個讀程序可以一起讀取;當讀程序和寫程序同時像訪問臨界區時,讀程序和寫程序會在P(w)操作處阻塞,並且根據到來時間在阻塞佇列中排序,當寫程序完成 V(W)操作或者所有讀程序完成V(w)時,會根據阻塞佇列喚醒程序。如果喚醒的是寫程序,寫程序會被阻塞在P(rw)並且V(w)不會被釋放,其他讀程序被阻塞到P(w)保證了在讀取完成後寫程序可以寫檔案寫完後釋放V(w)讀程序可以讀取檔案。如果喚醒的是讀程序,則會同時讀取檔案並喚醒下一個阻塞佇列中的程序。

2.3.10哲學家進餐問題

image-20240703152448807

互斥關係分析:

	五位哲學家與左右鄰居對中間的筷子的訪問關係,是互斥關係。

訊號值設定:

​ 用陣列實現對5個筷子的互斥訪問設定陣列 chopstick[5] = {1,1,1,1,1},並對哲學家和筷子進行 0-4編號,哲學家 左邊的筷子編號與哲學家編號相同 右邊的筷子編號為(i+1)%5

image-20240703155957146

如果讓每個人以此拿取左邊筷子、右邊筷子,此時程序設計如下:

image-20240703160130538

​ 此時如果每個人在執行 拿左邊筷子的P操作時進行程序切換,則所有人都會拿起左邊筷子並且在拿起右邊筷子時發生阻塞,造成系統死鎖。

防止死鎖發生的方法:
1.對拿起筷子的人的數量進行限制,如:最多有四個人同時拿起筷子,那麼總會有一個人不會被阻塞,程序不會死鎖(用一個大小為4的訊號量實現)

​ 2.規定奇數編號的人優先拿起左邊筷子、偶數編號的人優先拿起右邊筷子。(在程序開始時先判定編號是奇數還是偶數, if ---- else)

​ 3.設定一個互斥訊號量,使得一個人拿筷子時,其他人不會拿筷子:

image-20240703160814476

​ 這樣保證了各個人拿筷子會互斥的進行,即使一個人只拿了一個筷子被阻塞時其他人也不會拿筷子,被阻塞的人等待別人用完可以解除阻塞拿起筷子。

3.1.1記憶體

​ 記憶體用來儲存資料,程式執行之前需要先放入記憶體中才能被CPU處理,記憶體用來緩和CPU和硬碟之間的速度矛盾。
​ 記憶體劃分為一個一個的小的儲存單元,記憶體地址從0開始,每個地址對應一個儲存單元,如果計算機按位元組編址,那麼每個儲存單元大小就是一位元組(1B),即八個二進位制位。如果按字編址,那麼一個儲存單元大小就是一個字,需要根據題目大小判斷字的大小確定儲存單元的大小。

裝入方法

​ 裝入:由程式將裝入模組放入記憶體中執行 的過程。

image-20240704105810715

絕對裝入:在編譯時,如果知道程式要放到記憶體中的哪個位置,編譯程式會將指令中的相對地址轉化為絕對地址,裝入程式按照絕對地址將資料和程式裝入記憶體。

​ 如:指令0表示要往相對地址為79的儲存單元中裝入資料,且已知指令0的地址為100,那麼編譯程式可以直接把指令0 中的79的相對地址改為179的絕對地址。存入記憶體的指令是修改過的指令。

image-20240704102958554image-20240704103014259image-20240704103837163

​ 缺點:只適用於單道程式環境;不靈活(直接修改了指令,無法一直到其他計算機中使用。)

可重定位裝入(靜態重定位):指令中的地址依然是從0開始的相對地址,重定位的工作在裝入模組裝入記憶體時處理,在裝入時會根據起始程式的開始地址得到絕對地址,原來指令不會改變,但是裝入記憶體的指令經過了修改。image-20240704104109933

​ 缺點:在程序裝入記憶體時,所分配的地址空間必須時連續的,必須分配其要求的全部記憶體空間,記憶體空間不足則無法進行裝入。作業一旦進入記憶體後,在執行期間就不能移動(因為裝入記憶體中的指令地址已經固定),也不能申請空間。

動態執行時裝入(動態重定位):指令中的地址是相對地址,裝入記憶體中的地址也是相對地址,在裝入程式時需要藉助 重定位暫存器找到絕對地址。重定位暫存器中存放了指令存入的起始位置,在CPU執行指令時會將相對地址和起始地址i相加,得到絕對地址。

image-20240704104951985

特點:可以將程式分配到不連續的儲存區中;在程式執行前只需要裝入部分程式碼即可運 行,在執行期間可以根據需要動態申請分配記憶體; 便於程式段的共享,可以向使用者 提供一個比儲存空間大的多的地址空間。

連結方式

​ 連結:由連結程式將編譯後形成的目標模組以及庫函式連結在一起, 形成完整的裝入模組的過程。

image-20240704105840694

靜態連結:在程式執行之前將各個目標模組以及庫函式連結成一個完整的可執行檔案(裝 入模組),之後不再拆開。

image-20240704110307382

裝入時動態連結:在將各個目標模組裝入記憶體時才進行連結,一邊裝入,一邊連結。

image-20240704110354087

執行時動態連結:在程式執行過程中需要某個目標模組時,將該模組裝入記憶體,不需要的 模組就不進行裝入(比如需要模組1,將模組1裝入,等到需要模組2再 將模組2裝入,如果不需要模組3,就不需要裝入)

​ 特點:便於修改和更新,便於實現對目標模組的共享

image-20240704110437040

小結
image-20240704111001699

3.1.2記憶體管理

作業系統對記憶體進行的管理

​ 1.作業系統負責記憶體空間的分配與回收。
​ 2.作業系統需要提供某種技術從邏輯上對記憶體空間進行擴充(虛擬技術)。
​ 3.作業系統需要提供地址轉換功能,負責程式的邏輯地址與實體地址的轉換。(一般是可 重定位裝入(早期多道批處理作業系統) 和 動態執行時裝入(現代作業系統) 兩種方法, 絕對裝入 是單道程式階段,還沒產生作業系統,由編譯器實現或者寫程式時完成)
​ 4.作業系統要提供記憶體保護功能,保證各個程序在各自儲存空間內執行,互不干擾。
​ 方法一:設定一對上限、下限暫存器,分別存放程序的上限、下限地址,程序只能訪 問這個區域內的地址,由CPU負責檢查是否越界。
​ 方法二:採用重定位暫存器 和 界地址暫存器 來進行越界檢查。重定位暫存器存放起 始絕對地址,界地址暫存器存放最大的相對地址(如 0-179 存放179),在程 序執行時,CPU會把指令中的相對地址與界地址暫存器中的最大相對地址進 行比較,沒有越界時會將此相對地址與重定位暫存器存的絕對地址相加,越 界後會丟擲越界異常。

小結

image-20240704112650168

3.1.3程序的記憶體映像

image-20240704113805640

3.1.4覆蓋與交換

覆蓋技術

​ 覆蓋技術:用來解決程式大小超過實體記憶體綜合的問題

​ 思想:把程式分為多個段(多個模組),常用的段常駐記憶體,不常用的段在需要時調入記憶體
​ 記憶體中分為 一個固定區 和若干個 覆蓋區。常駐記憶體的段放在固定區中就不再 調出(除非執行程式結束)不常用的段放入覆蓋區,需要時調入記憶體,不需要 時調出記憶體

image-20240704114643784

​ 覆蓋結構需要由程式設計師宣告,作業系統來完成自動覆蓋。缺點:對使用者不透明,增加了使用者程式設計負擔。覆蓋技術一般用於早期的作業系統。

交換技術

​ 思想:在記憶體空間執行緊張時,系統將記憶體中某些程序暫時換出外存,把外村中的某 些已經具備執行條件的程序換入記憶體(程序在記憶體與磁碟之間動態排程)。

​ 中級排程就是負責程序調入調出記憶體

​ 暫時調出外存的程序狀態成為掛起狀態(可以進一步分為就緒掛起、阻塞掛起)

image-20240704115523697 image-20240704115547799 image-20240704115615785

​ PCB是會常駐記憶體的,並不會被換出外存

image-20240704115731437
覆蓋與交換的區別

​ 覆蓋是指同一個程式或程序,在記憶體不足時程序的一部分將另一部分覆蓋。
​ 交換是指不同的程序,在記憶體緊張時,把某些程序換入外存。

小結

image-20240704115845884

3.1.5連續分配管理方式

​ 連續分配:使用者程序分配的必須是一個連續的記憶體空間。

單一連續分配

​ 在單一連續分配方式中,記憶體被分為系統區和使用者區。系統區通常位於記憶體的低地址部分,用來儲存作業系統相關資料;使用者區用於存放使用者程序相關資料。
​ 採用單一連續分配方式,記憶體中只能有一道使用者程式,不支援多道程式併發執行,使用者程式獨佔整個使用者區

​ 優點:實現簡單:無需外部碎片;可以採用覆蓋技術擴充記憶體 ;不一定需要記憶體保護
​ 缺點:只能用於單使用者、單任務的作業系統中 ;有內部碎片(分配給某程序的記憶體區 域中,有部分沒有用上,就是記憶體碎片) ; 儲存器利用率極低

image-20240705085412795 image-20240705085802967

固定分割槽分配

​ 將使用者區劃分為若干個大小固定的分割槽,在每個分割槽中只裝入一道作業。

​ 分割槽大小相等:缺乏靈活性(小程序會造成記憶體浪費、大程序無法裝入),但是適合 於用一臺計算機控制多個相同物件的場景(如:控制多個鍊鋼模組)

​ 分割槽大小不等:增加了靈活性,可以滿足不同大小程序需求,通常根據系統執行的作 業大小情況進行劃分

​ 固定分割槽分配的優點:實現簡單,不會產生外部碎片
​ 缺點:1.當一個程式太大,所有分割槽都無法滿足需求,必需採用覆蓋 技術解決問題,造成效能降低
​ 2.會產生內部碎片,記憶體利用率低

image-20240705090016546

​ 作業系統需要建立一個資料結構:分割槽說明表,來實現各個分割槽的分配與回收。每個表項對應一個分割槽,通常按分割槽大小排列。每個表項包括對應分割槽的大小、起始地址、狀態(是否已分配)。

image-20240705090511305

動態分割槽分配

​ 又稱為可變分割槽分配,這種分配方式不會預先劃分記憶體分割槽,而是在程序裝入記憶體時。根據程序大小動態的建立分割槽,並使分割槽內的大小正好適合程序需要,因此分割槽的大小和數目是可以改變的。

image-20240705091221109

​ 作業系統會使用空閒分割槽表 / 空閒分割槽鏈來記錄作業系統記憶體的使用情況

空閒分割槽表:記錄空閒的分割槽,每個空閒分割槽對應一個表項,包括分割槽號、分割槽大小、起始地址、狀態等等

image-20240705091326778

空閒分割槽鏈:每個分割槽的起始部分和結尾部分分別是指前向和後向指標,起始部分還可以記錄分割槽大小等資訊。

image-20240705091531090

動態分割槽分配演算法

​ 動態分割槽分配演算法需要解決的問題是,當有多個空閒區間可以被分配時,將哪個空間分配給程序的問題。

​ 1.首次適應演算法:每次從低地址查詢,找到的第一個能滿足大小的空閒分割槽進行分配。
​ 實現:將空閒分割槽按照地址遞增的次序進行排列,每次分配記憶體時順序查詢 空閒分割槽鏈 / 空閒分割槽表。

​ 2.最佳適應演算法:為了保證 大程序到來時能夠有連續的大片空間,可以儘可能多的留下 大片的空閒區,即優先使用更小的空閒區
​ 實現:將空閒分割槽按照容量遞增次序進行排列,每次分配記憶體時按照順序查 找空閒分割槽鏈/空閒分割槽表,找到大小能滿足的第一個空閒分割槽
​ 缺點:每次分配和釋放後記憶體空間會改變,需要重新進行排序。每次都選最 小的記憶體進行分配,會產生越來越多的很小的記憶體塊,產生很多外部 碎片。

​ 3.最壞適應演算法:為了避免留下過多的外部碎片,在每次分配時優先使用最大空閒區
​ 實現:把空閒區按照容量遞減的順序排列,每次分配時按照順序查詢空閒分 區鏈/空閒分割槽表
​ 缺點:每次分配和釋放後記憶體空間會改變,需要重新進行排序。每次都選用 最大的分割槽進行分配,雖然可以讓剩餘的空閒區更大,產生的外部碎 片更少,但是當大程序到達後可能不會有空閒的記憶體分割槽進行分配

​ 4.臨近適應演算法:低地址適應演算法總是在表頭開始查詢,可能會導致低地址部分出現很 多很小的分割槽,但是查詢時每次都需要比較這些分割槽大小,會導致查 詢開銷增大,臨近適應演算法在查詢時每次都在上次查詢結束的位置進 行檢索。
​ 實現:把空閒分割槽 按照地址遞增的順序排列(為了方便可以排成迴圈連結串列), 每次分配記憶體時從上次查詢結束的位置開始查詢空閒分割槽鏈,找到大 小能滿足要求的第一個空閒分割槽
​ 對比:首次適應演算法從頭開始找,會導致低地址分割槽很小,但是每次查詢都 從低地址查,查詢開銷大且有外部碎片。但是也更有可能把高地址的 大分割槽保留下來,等到大程序來時分配
​ 臨近適應演算法,從上次查詢結束的地方開始找,解決了查詢開銷問題 和低地址外部碎片的問題,但是也導致了高地址的大分割槽更可能被劃 分為小分割槽,在大程序來時無大分割槽可用。

image-20240705102508675

分配和回收策略

​ 假如有一個程序需要分配空間,如果空閒區間的記憶體大於程序記憶體大小,那麼只需要在空閒分割槽表中修改分割槽大小和起始地址即可

image-20240705092224120 image-20240705092243318

​ 如果空閒分割槽的大小等於程序大小,那麼需要在空閒分割槽表中刪除此空閒表項

image-20240705092348814 image-20240705092414695

​ 假如有一個程序執行結束,在對記憶體空間進行回收時,如果此程序後面有一塊空閒記憶體分割槽,那麼把相鄰的空閒分割槽進行合併,並在空閒分割槽表中更改記憶體大小和起始地址。

image-20240705092812846 image-20240705092829924

​ 前面有空閒分割槽的情況類似:但是不需要修改起始地址

image-20240705092952503 image-20240705093007835

​ 前後都有的情況:把空閒分割槽表中的兩項進行合併,並修改大小,起始地址

image-20240705093113738 image-20240705093127029

​ 前後都沒有空閒分割槽的話,那麼新新增一項表項

image-20240705093232643 image-20240705093243987

小結
image-20240705093646376

3.1.6基本分頁儲存

​ 基本分頁儲存是非連續分配的方式。

​ 分頁儲存:系統將記憶體空間分為大小相等的分割槽,每個分割槽是一個頁框(頁幀、記憶體塊、物理塊、物理頁面)每個頁框都有一個編號,即頁框號,從0開始。作業系統把程序的邏輯地址空間分成與頁框大小相等的一個個部分,每個部分稱為 頁(頁面),每個頁也有一個編號,即頁號,從0開始。
image-20240705103356084 image-20240705103659829→劃分為→image-20240705103530077

​ 作業系統以頁框為單位,為各個程序分配記憶體空間,程序的每個頁面放入一個頁框中,程序的頁面與 記憶體的頁框有一 一對應關係。各個頁面不必要連續存放,可以存放到不相鄰的頁框中。

image-20240705103755456

​ 頁表:為了能知道程序的頁面在記憶體中的存放位置,作業系統要為每個程序建立一張頁表。頁表通常存放到PCB中

image-20240705104601549

1.一個程序對應一張頁表
2.程序的每個頁面對應一個頁表項
3.每個頁表項由“頁號”和“塊號”組成
4.頁表記錄程序頁面和實際存放的記憶體塊之間的對映關係

image-20240705104833969

只有記錄頁框號(塊號)需要佔據儲存空間,頁號是可以隱藏的不需要佔據空間。

分頁儲存的地址轉換

​ 分頁儲存的各個頁面在記憶體中是離散儲存的,但是在各個頁面內部的指令是連續存放的。

​ 如果要訪問一個指令 A 進行地址轉換的步驟:
​ 1.確定指令的頁號
2.根據頁號 在頁表中 找到在記憶體中的起始位置
​ 3.找到邏輯地址對應的實體地址(等於記憶體的起始地址+頁內偏移量)

image-20240705110756024
小結
image-20240705111413733

3.1.7基本地址變換機構

​ 基本地址變換結構 可以藉助程序的頁表將邏輯地址轉換為實體地址。

​ 通常會在系統中設定一個 頁表暫存器,存放頁表在記憶體中的起始地址F 和頁表長度M

​ 程序未執行時,頁表的初始地址和 頁表程度放在 程序控制塊(PCB)中,當程序被調 度,作業系統核心會把他們放到頁表暫存器中。

系統進行地址變換的過程

​ 1.根據邏輯地址計算出 頁號、頁內偏移量
​ 2.判斷頁號是否越界(頁號(從零開始)是否小於頁表長度,大於等於頁表長度需要進行越 界中斷)
​ 3.查詢頁表、找到頁號對應的頁表項,確定頁面存放的記憶體塊號
​ 4.用記憶體塊號和頁內偏移量得到實體地址。

image-20240706144023878 image-20240706144405434
小結

image-20240706144617252

3.1.8具有快表的地址交換機構

​ 快表:又稱為聯想暫存器(TLB),是一種訪問速度比記憶體快的多的快取記憶體(TLB不是記憶體),用來存放 最近訪問的頁表項的副本,可以加速地址變換的速度。於此對應的記憶體中的頁表被稱為慢表。快表不會存放程序的全部頁表項,只會存放部分頁表項。在程序切換時快表會被清空。

使用快表查詢的步驟

假設依次訪問(0,0)(0,4)這幾個邏輯地址

1.訪問頁號為0 偏移量為0 的地址

image-20240706150116519

2.訪問頁號為0,偏移量為4的地址

image-20240706150541676

image-20240706150843896

image-20240706151226794

​ 為什麼快表只有部分頁表項卻能提高這麼多效率呢:區域性性原理

image-20240706151748145

image-20240706151855754

3.1.9兩級頁表

單級頁表存在的問題

image-20240706153849592

​ 1.分配如此多的連續的空間很困難並且違反了記憶體離散分配的特點

​ 2.根據區域性性原理可知,很多時候,程序在一段時間內只需要訪問某幾個頁面就可以 正常執行了。因此沒有必要讓整個頁表都常駐記憶體。

​ 存在問題一:頁表必須連續存放,當頁表很大時需要佔用多個連續的頁框
​ 存在問題二:沒必要讓整個頁表常駐記憶體,因為在一段時間內可能只需要訪問某幾個 特定頁面

為了解決頁表必須連續儲存的問題,把頁表再進行分組,使每個記憶體塊剛剛好可以放入一個分組,然後在將各個組離散的放到各個記憶體塊中。另外為了知道各個分組之間的先後順序,還要為離散分配的頁表再建立一張頁表,稱為頁目錄表或者外層頁表或者頂層頁表

image-20240706155207492

image-20240706155833604

image-20240706160414328

解決頁表常駐問題:在需要訪問頁面時才把頁面調入記憶體(虛擬儲存技術)。可以在頁表項中增加一個標誌位,用於表示該頁面有沒有調入記憶體。如果想訪問的頁面不在記憶體中,則會產生缺頁中斷(內中斷),然後將目標頁面從外存調入記憶體。

要求:
image-20240706162028550 image-20240706162050968
小結
image-20240706162240505

3.1.10基本分段儲存管理方式

​ 分段:程序的地址空間會按照自身的邏輯關係劃分為若干個段,每個段都有一個段名。每段從0開始編址。

​ 記憶體分配規則:以段為單位進行分配,每個段在記憶體中佔據連續空間,但是各個段之間可以不相鄰。

image-20240706162916526

段號的位數決定了每個程序最多可以分幾個段

段內地址位數決定了每個段的最大長度是多少

image-20240706163143437 image-20240706163353897
段表

​ 程式分為多個段,各個段離散的裝入記憶體,為了保證程式能正常執行,就必須能從實體記憶體中找到各個邏輯段的存放位置,所以要建立一張段 對映表 即 段表

image-20240706163825526

​ 每個段會對應一個段表項,記錄了段在記憶體中的起始位置和段的長度。

​ 每個段表項 的長度是相同的,即每個段表項所佔據的記憶體空間是相同的

image-20240706164557249

地址轉換過程:

​ 1.根據邏輯地址得到段號、段內地址
​ 2.判斷段號是否產生越界,若S>=M則執行越界中斷,否則繼續執行(段號從0開始)
​ 3.查詢段表,找到對應的段表項,段表項的存放地址為F+S*段表項長度
​ 4.檢查段內地址是否超過了此段的段長 若超過則會產生越界中斷(用頁儲存時不用)
​ 5.計算實體地址
​ 6.訪問目標單元

分段和分頁的對比

​ 頁是資訊的物理單位,分頁時只考慮每個頁面的物理大小。分頁的主要目的是為了實現離散分配,提高記憶體利用率。分頁僅僅是系統管理上的需要,完全是系統行為,對使用者是不可見的。

​ 段是資訊的邏輯單位,分段時需要考慮模組的邏輯關係,把一個完整的模組劃分為一個段。分段的主要目的是更好地滿足使用者需求。一個段通常包含著一組屬於一個邏輯模組的資訊。分段對使用者是可見的,使用者程式設計時需要顯式地給出段名。

​ 頁的大小固定且由系統決定。段的長度卻不固定,決定於使用者編寫的程式。

​ 分頁的使用者程序地址空間是一維的,程式設計師只需給出一個記憶符即可表示一個地址。
​ 分段的使用者程序地址空間是二維的,程式設計師在標識一個地址時,既要給出段名,也要給出段內地址。

​ 分段比分頁更容易實現資訊的共享和保護。

​ 不能被修改的程式碼稱為純程式碼或可重入程式碼(不屬於臨界資源),這樣的程式碼是可以共享的。可修改的程式碼是不能共享的(比如,有一個程式碼段中有很多變數,各程序併發地同時訪問可能造成資料不一致)

image-20240706170449849
小結
image-20240706170517840

3.1.11段頁式管理方法

image-20240706172003681

​ 段頁式管理方式結合了兩種方法的優點,先將程序按照邏輯分成不同的段,再將各個段分成不同的頁。記憶體空間也會被劃分成大小相同的記憶體塊(頁框)

image-20240706172642562 image-20240706172708940

​ 段號的位數決定了每個程序最多可以分幾個段
​ 頁號位數決定了每個段最大有多少頁
​ 頁內偏移量決定了頁面大小、記憶體塊大小是多少

​ “分段”對使用者是可見的,程式設計師程式設計時需要顯式地給出段號、段內地址。而將各段“分頁”對使用者是不可見的。系統會根據段內地址自動劃分頁號和頁內偏移量。因此段頁式管理的地址結構是二維的

段表、頁表
image-20240706173711627

​ 每個段對應一個段表項,每個段表項由段號、頁表長度、頁表存放塊號(頁表起始地址)組成。每個段表項長度相等,段號是隱含的。

​ 每個頁面對應一個頁表項,每個頁表項由頁號、頁面存放的記憶體塊號組成。每個頁表項長度相等,頁號是隱含的。

進行地址轉換的過程

​ 1.根據邏輯地址得到段號、頁號、頁內偏移量
​ 2.判斷段號是否越界,若段號大於等於段表長度,則產生越界中斷,否則繼續執行
​ 3.查詢段表,找到相應的段表項,段表項存放地址為 段表起始地址+段號*段表項長度
​ 4.檢查頁號是否越界,若頁號>=頁表長度,執行越界中斷,否則繼續執行。
​ 5.根據頁表存放塊號找到頁表,根據1中頁號找到頁表項
​ 6.根據記憶體塊號、頁內偏移量得到最終地址
​ 7.訪問記憶體單元

也可引入快表機構,用段號和頁號作為查詢快表的關鍵字。若快表命中則僅需一次訪存

小結

image-20240706180607830

3.2.1虛擬記憶體

傳統儲存管理方式的特點:

​ 一次性:作業必須一次性全部裝入記憶體後才可以開始執行,當作業過大時不能全部裝入記憶體,導致大作業無法執行。當大量作業要執行時,記憶體無法容納所有作業,只能有少量作業能夠執行,導致多道程式併發度下降。
​ 駐留性:一旦作業放入記憶體,就會一直留在記憶體中,直到作業結束。實際上在一段時間內,只需要訪問作業的一小部分資料即可正常執行,這就導致了記憶體中會出現大量的,暫時用不到的資料,造成記憶體浪費。

虛擬記憶體

​ 基於區域性性原理,在程式裝入時,可以將程式中很快會被用到的部分裝入記憶體,暫時用不到的部分留在外存,然後開始執行程式,在執行過程中當訪問的資訊不再記憶體時,由作業系統負責將所需資訊從外村調入記憶體,然後繼續執行程式。如果記憶體空間不夠由作業系統負責將暫時不用的資訊換出到外存。在作業系統的管理下,記憶體容量似乎比實際容量大的多,這就叫做虛擬記憶體。

虛擬記憶體特徵

​ 多次性:無需作業執行時一次性全部裝入記憶體,而是允許被分成多次調入記憶體。

​ 對換性:在作業執行時無需一直常駐記憶體,允許在作業執行過程中將作業換入、換出

​ 虛擬性:從邏輯上擴充了記憶體的容量

虛擬記憶體技術的實現

​ 虛擬記憶體技術允許一個作業分多次調入記憶體,如果採用連續的分配方式,會不方便實現,因此虛擬記憶體的實現是建立在離散分配的記憶體管理方式基礎上。在傳統的 基本分頁儲存管理、基本分段儲存管理、基本段頁式儲存管理的基礎上增加虛擬儲存技術,實現 請求分頁儲存管理、請求分段儲存管理、請求段頁式儲存管理。

image-20240707161428380

小結
image-20240707161637725

3.2.2請求分頁管理方式

​ 與基本分頁管理相比,請求分頁管理中,為了實現“請求調頁”,作業系統需要知道每個頁面是否已經調入記憶體;如果還沒調入,那麼也需要知道該頁面在外存中存放的位置。

​ 當記憶體空間不夠時,要實現“頁面置換”,作業系統需要透過某些指標來決定到底換出哪個頁面:有的頁面沒有被修改過,就不用再浪費時間寫回外存。有的頁面修改過,就需要將外存中的舊資料覆蓋,因此,作業系統也需要記錄各個頁面是否被修改的資訊。

image-20240707163031934

缺頁中斷機構

​ 在請求分頁系統中,每當要訪問的頁面不在記憶體時,便產生一個缺頁中斷,然後由作業系統的缺頁中斷處理程式處理中斷。此時缺頁的程序阻塞,放入阻塞佇列,調頁完成後再將其喚醒,放回就緒佇列。 如果記憶體中有空閒塊則為程序分配一個空閒塊,將所缺頁面裝入該塊,並修改頁表中相應的頁表項。如果記憶體中沒有空閒塊則由頁面置換演算法選擇一個頁面淘汰若該頁面在記憶體期間被修改過,則要將其寫回外存。未修改過的頁面不用寫回外存。

​ 缺頁中斷是內中斷

image-20240707164138034 image-20240707164458418
頁面置換演算法

​ 頁面置換演算法目的是決定應該換出哪個頁面

最佳置換演算法(OPT)

​ 最佳置換演算法:在每選擇淘汰的頁面 是以後最長時間不再訪問或者以後永遠不訪問的頁面,這樣可以保證最低的缺頁率。

image-20240707165314319image-20240707165317067

​ 首先訪問 7 ,記憶體塊有空閒,放到 記憶體塊1

​ 然後訪問 0 ,記憶體塊有空閒,放到 記憶體塊2

​ 然後訪問 1 ,記憶體塊有空閒,放到 記憶體塊3

​ 然後訪問 2 ,記憶體已滿,採用最佳置換演算法,7在14步後才再用,0在1步後再用,1在10步後再用,於是淘汰頁面7,將頁面2放入 7 所在的位置,後面類似

缺頁中斷髮生了9次,頁面置換髮生了六次(多的是剛開始時的中斷)

缺頁率 =缺頁中斷次數 / 總共訪問頁面次數 = 9 / 20 = 45%

​ 最佳置換演算法前提條件是要知道接下來的頁面訪問序列,但是在實際情況中系統並不知道訪問序列,因此最佳置換演算法是一種理想化的演算法,無法實現。

先進先出置換演算法(FIFO)

​ 先進先出淘汰演算法:每次淘汰的頁面是最早進入記憶體的頁面

​ 實現方法: 把調入記憶體的頁面根據調入的先後順序排成一個佇列,需要換出頁面時選擇隊頭頁面即可。佇列的最大長度取決於系統為程序分配了多少個記憶體塊。

image-20240707170123744

​ 首先訪問3,記憶體塊空閒,裝入並將頁面號記錄在隊頭。其次是2,空閒,裝入,記錄在隊尾。然後是1,空閒,裝入,記錄在隊尾。

​ 然後訪問0,此時記憶體塊已滿,對頭元素是3,於是把頁面0放到 3 所在的記憶體塊,並將隊頭刪掉,隊尾加上0

​ 後面類似

Belady異常:增加記憶體塊數量,但是導致缺頁中斷次數增加的異常現象。只有FIFO演算法會出現Belady異常

​ 先進先出演算法雖然實現簡單,但是演算法與實際執行時的規律不符,所以演算法效能很差。

最近最久未使用置換演算法(LRU)

​ 最近最久未使用置換演算法:每次淘汰最近最久未使用的頁面

​ 實現方法:賦予每個頁面對應的頁表項中,用訪問欄位記錄該頁面自上次被訪問以來 所經歷的時間t。當需要淘汰一個頁面時,選擇現有頁面中t值最大的,即 最近最久未使用的頁面。

image-20240707171120310

​ 記憶體塊空閒,依次裝入1、8、7、2

​ 然後訪問到3時,缺頁中斷,向前查詢,7是最久未使用頁面,進行替換,把頁面3放入頁面7的記憶體塊位置

​ 後面類似

​ 最近最久未使用置換演算法的實現需要專門的硬體雖然演算法效能好,但是實現困難,開銷大。(最近最久未使用置換演算法效能上是最接近最佳置換演算法的)

時鐘置換演算法(CLOCK)

​ 最佳置換演算法效能最好,但無法實現;先進先出置換演算法實現簡單,但演算法效能差;最近最久未使用置換演算法效能好,是最接近OPT演算法效能的,但是實現起來需要專門的硬體支援,演算法開銷大。時鐘置換演算法是一種效能和開銷較均衡的演算法,又稱CLOCK演算法,或最近未用演算法(NRU)

簡單的時鐘置換演算法:

為每個頁面設定一個訪問位,再將記憶體中的頁面都透過連結指標連結成一個迴圈佇列。當某頁被訪問時,其訪問位置為1當需要淘汰一個頁面時,只需檢查頁的訪問位。如果是0,就選擇該頁換出;如果是1,則將它置為0,暫不換出,繼續檢查下一個頁面,若第一輪掃描中所有頁面都是1,則將這些頁面的訪問位依次置為0後,再進行第二輪掃描(第二輪掃描中一定會有訪問位為o的頁面,因此簡單的CLOCK 演算法選擇一個淘汰頁面最多會經過兩輪掃描)

image-20240707173744071

​ 依次訪問 1、3、4、2、5並放入佇列中,並且標記為1

image-20240707173804936

​ 接下來訪問6,此時佇列已滿,從指標位置依次掃描,遇到1變0,遇到0替換,但是佇列中沒有0,於是掃描一遍到5,將所有標誌置為0,此時指標回到1,標記為0,於是將6放到1的位置,並且標記為1,指標指向下一個。

image-20240707174123315 image-20240707174351845

​ 然後訪問3、4改為1(當頁面在佇列中時,只把標記改為1,指標不移動),訪問7,此時指標在3,改為0。指向4,標記改為0,指向2,標記本來就為0,進行替換

image-20240707174919590 image-20240707175013179image-20240707175128930image-20240707175207191

改進的時鐘置換演算法

​ 簡單的時鐘置換演算法僅考慮到一個頁面最近是否被訪問過。事實上,如果被淘汰的頁面沒有被修改過就不需要執行I/O操作寫回外存。只有被淘汰的頁面被修改過時,才需要寫回外存。因此,除了考慮一個頁面最近有沒有被訪問過之外,作業系統還應考慮頁面有沒有被修改過在其他條件都相同時,應優先淘汰沒有修改過的頁面,避免I/O操作。這就是改進型的時鐘置換演算法的思想。修改位=0,表示頁面沒有被修改過;修改位=1,表示頁面被修改過。(淘汰順序:沒訪問沒修改、沒訪問修改、訪問沒修改、訪問修改)

​ 演算法規則:
​ 首 先:將所有可能被置換的頁面排成一個迴圈佇列用(訪問位、修改位)表示各 個頁面狀態
​ 第一輪:從當前位置開始掃描到第一個(0,0)的幀用於替換。本輪掃描不修改任 何標誌位
​ 第二輪:若第一輪掃描失敗,則重新掃描,查詢第一個(0,1)的幀用於替換。 輪將所有掃描過的幀訪問位設為0
​ 第三輪:若第二輪掃描失敗,則重新掃描,查詢第一個(0,0)的幀用於替換。 輪掃描不修改任何標誌位
​ 第四輪:若第三輪掃描失敗,則重新掃描,查詢第一個(0,1)的幀用於替換。

​ 由於第二輪已將所有幀的訪問位設為0,因此經過第三輪、第四輪掃描一定會有一個幀被選中,因此改進型CLOCK置換演算法選擇一個淘汰頁面最多會進行四輪掃描

小結
image-20240707164617038

3.2.3頁面分配策略

​ 駐留集:指 請求分頁儲存管理 中 給程序分配的記憶體塊(頁框)的集合。在採用了虛擬儲存技術的系統中,駐留集的大小一般小於程序總大小

​ 駐留集太小會導致頻繁缺頁,系統會花費大量時間處理缺頁中斷,程序執行時間很少
​ 駐留集太大會導致多道程式併發度下降,資源利用率降低

駐留集大小:

​ 固定分配:作業系統為每個程序分配一組固定數目的記憶體塊,在程序執行期間不再改 變,即駐留集大小不變。
​ 可變大小:先為每個程序分配一定數目的記憶體塊,在程序執行期間根據具體情況進行 增加或者減少,即駐留集大小可變。

進行頁面置換的範圍:

​ 區域性置換:發生缺頁時只能與程序自己的記憶體塊進行置換
​ 全域性置換:可以將作業系統保留的空閒物理塊分配給缺頁程序,也可以將別的程序持 有的物理塊置換到外存,分配給缺頁程序

置換策略

​ 根據駐留集大小分配和頁面置換的範圍可以產生三種置換策略

image-20240707203026123

1.固定分配區域性置換:

​ 系統為每個程序分配一定數量的物理塊,在整個執行期間都不改變。若程序在執行中發生缺頁,則只能從該程序在記憶體中的頁面中選出一頁換出,然後再調入需要的頁面。這種策略的缺點是:很難在剛開始就確定應為每個程序分配多少個物理塊才算合理。(採用這種策略的系統可以根據程序大小、優先順序、或是根據程式設計師給出的引數來確定為一個程序分配的記憶體塊數)

2.可變分配全域性置換

​ 剛開始會為每個程序分配一定數量的物理塊。作業系統會保持一個空閒物理塊佇列。當某程序發生缺頁時,從空閒物理塊中取出一塊分配給該程序;若已無空閒物理塊,則可選擇一個未鎖定的頁面換出外存,再將該物理塊分配給缺頁的程序。採用這種策略時,只要某程序發生缺頁,都將獲得新的物理塊,僅當空閒物理塊用完時,系統才選擇一個未鎖定的頁面調出。被選擇調出的頁可能是系統中任何一個程序中的頁,因此這個被選中的程序擁有的物理塊會減少,缺頁率會增加。

3.可變分配區域性置換

	可變分配區域性置換:剛開始會為每個程序分配一定數量的物理塊。當某程序發生缺頁時,只允許從該程序自己的物理塊中選出一個進行換出外存。如果程序在執行中頻繁地缺頁,系統會為該程序多分配幾個物理塊,直至該程序缺頁率趨勢適當程度;反之,如果程序在執行中缺頁率特別低,則可適當減少分配給該程序的物理塊。

區別: 可變分配全域性置換:只要缺頁就給分配新物理塊
​ 可變分配區域性置換:要根據發生缺頁的頻率來動態地增加或減少程序的物理塊

要在何時調入頁面:

​ 1.預調頁策略:根據區域性性原理,一次調入若干個相鄰的頁面可能比一次調入一個頁面更高效。但如果提前調入的頁面中大多數都沒被訪問過,則又是低效的。因此可以預測不久之後可能訪問到的頁面,將它們預先調入記憶體,但目前預測成功率只有50%左右。故這種策略主要用於程序的首次調入,由程式設計師指出應該先調入哪些部分。(程序執行前的調入)

​ 2.請求調頁策略:程序在執行期間發現缺頁時才將所缺頁面調入記憶體。由這種策略調入的頁面一定會被訪問到,但由於每次只能調入一頁,而每次調頁都要磁碟I/o操作,因此/o開銷較大。(程序執行期間的調入)

要在何處調入頁面

​ 1.系統擁有足夠的對換區空間:頁面的調入、調出都是在記憶體與對換區之間進行,這樣可以保證頁面的調入、調出速度很快。在程序執行前,需將程序相關的資料從檔案區複製到對換區。

​ 2.系統缺少足夠的對換區空間:凡是不會被修改的資料都直接從檔案區調入,由於這些頁面不會被修改,因此換出時不必寫回磁碟,下次需要時再從檔案區調入即可。對於可能被修改的部分,換出時需寫回磁碟對換區,下次需要時再從對換區調入。

​ 3.UNIX方式:執行之前程序有關的資料全部放在檔案區,故未使用過的頁面,都可從檔案區調入。若被使用過的頁面需要換出,則寫回對換區,下次需要時從對換區調入。

抖動(顛簸現象)

​ 剛剛換出的頁面馬上又要換入記憶體,剛剛換入的頁面馬上又要換出外存,這種頻繁的頁面排程行為稱為抖動,或顛簸。產生抖動的主要原因是程序頻繁訪問的頁面數目高於可用的物理塊數(分配給程序的物理塊不夠)

工作集

​ 工作集:指在某段時間間隔裡,程序實際訪問頁面的集合。

與駐留集進行區分:

​ 駐留集:指請求分頁儲存管理中給程序分配的記憶體塊的集合。

image-20240707210334030

​ 工作集大小可能小於視窗尺寸,實際應用中,作業系統可以統計程序的工作集大小,根據工作集大小給程序分配若干記憶體塊。如:視窗尺寸為5,經過一段時間的監測發現某程序的工作集最大為3,那麼說明該程序有很好的區域性性,可以給這個程序分配3個以上的記憶體塊即可滿足程序的執行需要。

​ 一般來說,駐留集大小不能小於工作集大小,否則程序執行過程中將頻繁缺頁。

小結

image-20240707210604392

3.2.4記憶體對映檔案

​ 記憶體對映檔案:是作業系統向上層程式設計師提供的功能(系統呼叫)透過記憶體對映檔案,程式設計師可以方便的訪問檔案資料,也可以方便多個程序共享同一個檔案資料

image-20240708143120239

4.1.1檔案管理

檔案的屬性:

​ 檔名:由建立檔案的使用者決定檔名,主要是為了方便使用者找到檔案,同一目錄下不 允許有重名檔案。
​ 識別符號:一個系統內的各檔案識別符號唯一,對使用者來說毫無可讀性,因此識別符號只是操 作系統用於區分各個檔案的一種內部名稱。
​ 型別:指明檔案的型別
​ 位置:檔案存放的路徑(讓使用者使用)、在外存中的地址(作業系統使用,對使用者不可見)
​ 大小:指明檔案大小
​ 建立時間、上次修改時間檔案所有者資訊
​ 保護資訊:對檔案進行保護的訪問控制資訊

檔案的分類:

​ 無結構檔案:由二進位制或者文字流組成
​ 有結構檔案:由一組相似的記錄組成(記錄是一組相關資料項的集合)

​ 資料項是系統中最基本的資料單位

檔案的組織

​ 系統透過目錄的形式將各個檔案組織起來

​ 使用者可以自己建立一層層的目錄,各層目錄中存放相應的檔案。系統中的各個檔案就透過一層一層的目錄合理有序的組織起來

​ 目錄是一種特殊的有結構檔案

作業系統向上層提供的功能

建立檔案:create系統呼叫

讀檔案:read系統呼叫

寫檔案:write系統呼叫

刪除檔案:delete系統呼叫

開啟檔案:open系統呼叫

關閉檔案:close系統呼叫

檔案在外存的存放

與記憶體一樣,外存也被分為一個一個的儲存單元,每個儲存單元對應一個實體地址

檔案的邏輯地址也可以分為 邏輯塊號和塊內地址的形式。塊內地址位數取決於磁碟塊大小

作業系統以“塊”為單位為檔案分配儲存空間外存中的資料讀入記憶體時同樣以塊為單位

其他由作業系統實現的檔案管理功能

檔案共享:多個使用者可以共享一個檔案

檔案保護:確保不同使用者對檔案 有不同的操作許可權

image-20240708150639666

4.1.2檔案的邏輯結構

​ 無結構檔案:檔案內部的資料就是一系列二進位制流或字元流組成。又稱“流式檔案”。如:Windows作業系統中的.txt檔案。

​ 有結構檔案:由一組相似的記錄組成,又稱“記錄式檔案”。每條記錄又若干個資料項組成。如:資料庫表檔案。一般來說,每條記錄有一個資料項可作為關鍵字(作為識別不同記錄的ID) 可以根據每條記錄的長度是否相同分為定長記錄 和 可變長記錄兩種。

有結構檔案的邏輯結構
順序檔案

​ 順序檔案:檔案中的記錄一個接一個的順序的排列,記錄可以是定長的 或者是可變長的,各個記錄在物理上可以順序儲存或者鏈式儲存。

​ 按照順序檔案是都按照關鍵字排序,將順序檔案分為 串結構(記錄的順序與關鍵字無關)和順序結構(記錄的順序按照關鍵字排序)兩種

image-20240708154121825

​ 定長記錄的順序檔案,如果物理上採用順序儲存則可以實現隨機存取,如果還能保證記錄的順序結構,則可以實現快速檢索。

​ 一般來說考試中所說的順序檔案 是指 物理上順序儲存的順序檔案。

索引檔案

​ 索引檔案:系統會對建立一張索引表,索引表每個索引項 對應檔案中一條 記錄。

​ 索引表本身可以看作是定長記錄的順序檔案,因此可以快速找到第i個記錄所對應的索引項

​ 每當要增加/刪除一個記錄時,需要對索引表進行修改。由於索引檔案有很快的檢索速度,因此主要用於對資訊處理的及時性要求比較高的場合。

索引順序檔案

​ 是索引檔案和順序檔案的結合,索引順序檔案中,同樣會為檔案建立起一張索引表,但不同的是,並不是每個記錄對應一個索引表項,而是一組記錄對應一個索引表項。

​ 為了進一步提高檢索效率,還可以建立多級索引表

小結
image-20240708160058930 image-20240708160117365

4.1.3檔案目錄

檔案控制塊

目錄檔案中的一條記錄就是一個檔案控制塊FCB,FCB中包含了檔案的基本資訊(檔名,實體地址,邏輯結構等)、存取控制資訊(是否可讀可寫、禁止訪問的使用者等等)、使用資訊(檔案建立時間,修改時間)。

image-20240708161631689
目錄結構
單級目錄:

​ 整個系統中只建立一張目錄表,每個檔案佔一個目錄項。單級目錄實現了按名存取但是不允許檔案重名。單級目錄結構不適用於多使用者的作業系統。

兩級目錄結構

​ 分為主檔案目錄和使用者檔案目錄。

​ 主檔案目錄記錄使用者名稱以及相應的使用者檔案目錄存放的位置

​ 使用者檔案目錄由該使用者的檔案FCB組成

​ 兩級目錄結構允許不同使用者的檔案重名,也可以在目錄上實現實現訪問限制(檢查此時登入的使用者名稱是否匹配)。但是兩級目錄結構依然缺乏靈活性,使用者不能對自己的檔案進行分類

多級目錄結構(樹形目錄結構)

​ 使用者(或使用者程序)要訪問某個檔案時要用檔案路徑名標識檔案,檔案路徑名是個字串。各級目錄之間用“/”隔開。從根目錄出發的路徑稱為絕對路徑。

​ 當使用者想要訪問某個檔案時,可以使用從當前目錄出發的“相對路徑”。引入“當前目錄”和“相對路徑”後,磁碟I/o的次數減少了。這就提升了訪問檔案的效率。

​ 不同的目錄下的檔案可以重名。

​ 多級目錄結構可以方便的對檔案進行分類、管理和保護。但是不便於實現檔案的共享,所以提出了無環圖目錄結構。

無環圖目錄結構

​ 在樹形目錄的基礎上,增加了一些指向同一個節點的有向邊,使整個目錄成為一個有向無環圖,可以更加方便的實現多個使用者之間的檔案共享

​ 可以用不同的檔名指向同一個檔案,或者同一個目錄

image-20240708164839858

​ 需要為每個共享結點設定一個共享計數器,用於記錄此時有多少個地方在共享該結點。使用者提出刪除結點的請求時,只是刪除該使用者的FCB、並使共享計數器減1,並不會直接刪除共享結點。只有共享計數器減為0才可以將檔案真正刪除

索引結點

​ 是對FCB的改進,在查詢檔案時只對檔名進行匹配,將除了檔名之外的資訊都放到索引結點裡來。

image-20240708165321242

​ FCB存放的資訊

image-20240708165547718

​ 索引節點存放的資訊

​ 當找到檔名對應的目錄項時,才需要將索引結點調入記憶體,索引結點中記錄了檔案的各種資訊,包括檔案在外存中的存放位置,根據“存放位置”即可找到檔案。

​ 存放在外存中的索引結點稱為“磁碟索引結點”,當索引結點放入記憶體後稱為“記憶體索引結點”。相比之下記憶體索引結點中需要增加一些資訊,比如:檔案是否被修改、此時有幾個程序正在訪問該檔案等。

小結
image-20240708170224886

4.1.4檔案的物理結構

	在外存管理過程中,為了方便對檔案資料的管理,檔案的邏輯地址也被分成了一個一個的檔案塊。於是檔案的邏輯地址也可以表示成(邏輯塊號、塊內地址)的形式。
檔案分配方式
連續分配

​ 連續分配方式要求每個檔案在磁碟上佔有一組連續的塊。只需轉換邏輯塊號到物理塊號就行,塊內地址保持不變。

​ 物理塊號=起始塊號+邏輯塊號

​ 優點:連續分配支援順序訪問和直接訪問(隨機訪問);在順序讀取時速度最快。
​ 缺點:1.連續分配要求檔案佔用的磁碟塊必須是連續,在檔案擴充時不方便。
​ 2.會產生難以利用的磁碟碎片,儲存空間利用率低

​ 檔案的目錄表中必須要記錄檔案的起始塊號和檔案的長度(佔據幾個塊)

image-20240708174150277

連結分配

​ 連結分配方式採取離散分配的方式,可以為檔案分配離散的磁碟塊,分為隱式連結顯示連線兩種。

隱式連結

​ 隱式連結方式目錄中需要記錄檔案存放的起始塊號和結束塊號,在擴充檔案時需要增加結束塊號的長度。

image-20240708175444560

​ 除了檔案的最後個磁碟塊之外,每個磁碟塊中都會儲存指向下一個盤塊的指標,這些指標對使用者是透明的。

​ 想要訪問一個檔案的第 i 塊資料時, 需要按照連結串列順序 依次讀取 0 — i-1個記憶體塊。需要 i+1次的磁碟 IO。

​ 優點:方便檔案擴充;所有空閒的磁碟塊都可以被利用,不會產生碎片問題,外存利用率高。

​ 缺點:隱式連結方式只支援順序訪問,不支援隨機訪問,查詢效率低。另外指向另一個塊的指標也會佔用少量儲存空間。

顯示連線

​ 顯示連結會把 用於連結各個塊的指標 顯示的存放到一張表中,即檔案分配表 FAT。

​ 目錄中只需要記錄起始塊號。

image-20240708180339546

​ 檔案分配表記錄著各個物理塊號指向的下一個塊,其中用-1表示這是塊的最後一個。

image-20240708180357794

​ 一個磁碟僅設定一張FAT。開機時,將FAT讀入記憶體,並常駐記憶體。FAT的各個表項在物理上連續儲存,且每一個表項長度相同,因此“物理塊號”欄位可以是隱含的。

​ 在需要查詢一個塊時,先在目錄中找到這個程序的第零個塊,然後根據FAT,找到要查詢的物理塊存放在個物理塊內。

​ FAT常駐記憶體內,故邏輯塊號轉換成物理塊號的過程不需要讀磁碟操作。

​ 優點:顯式連結支援順序訪問,也支援隨機訪問(並不需要實際的訪問之前的0—i-1號邏輯塊),由於塊號轉換的過程不需要訪問磁碟,因此相比於隱式連結來說,訪問速度快很多。顯式連結也不會產生外部碎片,也可以很方便地對檔案進行擴充。
​ 缺點:顯示連結採用的檔案分配表FAT 會佔用一定的儲存空間。

如果題目只提到連結分配方式 預設認為是隱式連結方式

索引分配

​ 索引分配允許檔案離散地分配在各個磁碟塊中,系統會為每個檔案建立一張索引表,索引表中記錄了檔案的各個邏輯塊對應的物理塊(索引表的功能類似於記憶體管理中的頁表—―建立邏輯頁面到物理頁之間的對映關係)。索引表存放的磁碟塊稱為索引塊。檔案資料存放的磁碟塊稱為資料塊。

image-20240708193808571

​ 採用索引分配,目錄中需要記錄檔案的索引塊是幾號磁碟塊

image-20240708193931769

​ 在顯式連結的鏈式分配方式中,檔案分配表FAT是一個磁碟對應一張。而索引分配方式中,索引表是一個檔案對應一張。

​ 系統想要訪問一個檔案時,需要先在目錄中找到這個檔案對應的目錄項,得到檔案的索引塊位置,然後在索引塊中讀出這個檔案的索引表,然後根據索引表找到找的邏輯塊號對應的物理塊號,就可以訪問物理塊了。

​ 索引分配支援隨機訪問,檔案的擴充套件也很容易實現。

​ 索引表需要佔用一定的空間。

那麼如果索引表佔據儲存空間太大,儲存索引表的索引塊無法儲存索引表那麼會怎麼辦呢

​ 1.連結方案:為這個索引表分配多個記憶體塊,然後把記憶體塊連結起來(用指標)。
​ 缺點:為了讀取地址靠後的索引塊,需要依次將前面的索引塊裝入記憶體, 然後根據指標讀取後面的索引塊,效率很低。
​ 2.多層索引:建立多層索引,類似於多級頁表,使前一層索引塊指向後一層索引塊。

​ 如果採用K層索引結構,並且頂層索引結構還未調入記憶體,那麼訪問一個資料塊只需要K+1次讀磁碟操作

​ 如果一個檔案非常小,但是系統採用了多層索引結構的方式,即使本來可能讀取兩次磁碟就可以完成,但是現在還是需要K+1次,為了解決這個問題提出 混合索引。

​ 3.混合索引:多種索引分配方式的結合。例如,一個檔案的頂級索引表中,既包含直接地址索引(直接指向資料塊),又包含一級間接索引(指向單層索引表)、還包含兩級間接索引(指向兩層索引表)。

image-20240708200950635

​ 若頂級索引表還沒讀入記憶體,讀取0 ~ 7號 邏輯塊需要讀取兩次磁碟,讀取8~263號邏輯塊需要三次讀取磁碟,讀取264 ~65799 需要四次讀取磁碟。

​ 優點:小檔案可以只佔據前面幾個小塊,減少讀取磁碟的次數

小結
image-20240708201503852

4.1.5檔案儲存空間管理

空閒表法

​ 系統採用一個空閒表記錄那些磁碟是空閒的,當有多個連續的磁碟空閒時,只需記錄第一個空閒的磁碟和此連續空閒磁碟的塊數。

image-20240709145050041

​ 如何分配磁碟塊:與記憶體管理中的動態分割槽分配很類似,為一個檔案分配連續的儲存空間。同樣可採用首次適應、最佳適應、最壞適應等演算法來決定要為檔案分配哪個區間。

​ 如何回收磁碟塊: 與記憶體管理中的動態分割槽分配很類似,當回收某個儲存區時需要有四種情況—―①回收區的前後都沒有相鄰空閒區;②回收區的前後都是空閒區;③回收區前面是空閒區;④回收區後面是空閒區。總之,回收時需要注意表項的合併問題。

空閒連結串列法

​ 空閒連結串列法又可以進一步劃分成 空閒盤塊鏈(以盤塊為單位組成空閒鏈)和空閒盤區鏈(以盤區為單位組成空閒鏈)

​ 空閒盤塊連:將每個空閒的盤塊(記憶體塊)連線起來組成一條空閒鏈,系統會儲存各個盤塊鏈頭和鏈尾的指標,在需要分配磁碟塊時,系統會根據需要分配的磁碟塊數量從鏈頭開始分配,並且修改鏈頭指標。在回收時,會將空閒的盤塊連結到鏈尾,並修改鏈尾指標

​ 空閒盤區鏈:將各個空閒的盤區(連續的空閒塊稱為一個空閒盤區)連線組成一條空閒鏈分配可以採用首次適應、最佳適應等演算法,從鏈頭開始檢索,按照演算法規則找到一個大小符合要求的空閒盤區,分配給檔案。若沒有合適的連續空閒塊,也可以將不同盤區的盤塊同時分配給一個檔案,注意分配後可能要修改相應的鏈指標、盤區大小等資料。回收時,若回收區和某個空閒盤區相鄰,則需要將回收區合併到空閒盤區中。若回收區沒有和任何空閒區相鄰,將回收區作為單獨的一個空閒盤區掛到鏈尾。

位示圖法

​ 位示圖:每個二進位制位對應一個盤塊。“0”代表盤塊空閒,“1”代表盤塊已分配。位示圖一般用連續的“字”來表示,如本例中一個字的字長是16位,前16個磁碟塊被放入字號為0的一組中。字中的每一位對應一個盤塊。因此可以用(字號,位號)對應一個盤塊號。當然有的題目中也描述為(行號,列號)

​ 重要重要重要;要能自己推出盤塊號與(字號,位號〉相互轉換的公式。注意題目條件:盤塊號、字號、位號到底是從0開始還是從1開始

​ (字號,位號)= ( i , j) 的二進位制位對應的盤塊號b = n*i+j

​ 分配時可以根據位示圖此從頭掃描,找到相鄰或不相鄰的大小滿足的 0。然後根據字號、位號算出對應的盤塊號,將相應的盤塊分配給檔案,並將0 改為 1

​ 回收時,根據要回收的盤塊號 計算處出 對應的字號、位號,將相應的二進位制位設定為0

image-20240709150622986
成組連結法

​ 檔案卷的目錄區中專門用一個磁碟塊作為“超級塊”,當系統啟動時需要將超級塊讀入記憶體。並且要保證記憶體與外存中的“超級塊”資料一致。

​ 超級塊中存放著 下一空閒塊的資訊,包括下一組空閒塊個數和各個空閒塊的塊號

​ 記錄的下一個空閒盤塊中,也會記錄自己的下一個空閒塊個數和各個空閒塊號的塊號,但是剩餘的除了超級塊,其他的空閒塊組都不會被放入記憶體。

​ 可以把倒數第二個盤塊設定一個特殊值,表示下一個盤塊已經是最後一個盤塊了,最後一個盤塊記錄是少於其他組的盤塊記錄的(也許是不用記錄下一個空閒塊的資訊了,不確定)

​ 磁碟塊的分配:

​ 1.先檢查超級塊中指向的那個空閒組夠不夠分配,如果多與需要分配的數量的話,就把指向的空閒組空閒塊從前按序分出去,並且把超級塊中的分出去的空閒塊刪除,空閒塊數量減去

​ 2.如果超級塊指向的空閒組的空閒塊數量和需要的數量相同,那麼要把整個空閒組分配出去,並且把這個空閒組中記錄的下一組空閒塊的資料複製到超級塊中,

​ 磁碟塊的回收:

​ 1.如果超級塊還沒滿並且可以容納回收的磁碟數量,那麼把這些磁碟號寫入超級快並且修改空閒塊數量。

​ 2.如果超級塊已經滿了或者裝不下回收的磁碟數量,那麼會新建一個塊,並且把超級塊中的資料放到新建的塊中,然後把超級塊中資料清空,把裝不下的放入超級塊,修改數量,空閒塊中只有一個資料,就是新建的塊。

image-20240709160247808
小結

image-20240709161955629

4.1.6檔案的基本操作

建立檔案:

​ 進行Create系統呼叫,需要提供一些引數

​ 1.所需外存的空間大小
​ 2.檔案存放路徑
​ 3.檔名

​ 作業系統主要操作

​ 1.在外存中找到檔案所申請的空間
​ 2.根據檔案的存放路徑,找到該目錄對應的目錄檔案,在目錄檔案中建立檔案所 對應的目錄項,包含檔名、檔案外存存放位置等等。

刪除檔案:

​ 進行Delete系統呼叫,需要提供一些引數

​ 1.檔案存放路徑
​ 2.檔名

​ 作業系統主要操作

​ 1.根據檔案存放路徑找到相應的目錄檔案,從目錄中找到檔名對應的目錄項。
​ 2.根據目錄項記錄的檔案在外存的存放位置,檔案大小等資訊,回收佔用的磁碟塊。
​ 3.從目錄表中刪除檔案對應的目錄項。

開啟檔案:

​ 進行Open系統呼叫,需要提供一些引數

​ 1.檔案存放路徑
​ 2.檔名
​ 3.要對檔案的操作型別

​ 作業系統主要操作

​ 1.根據檔案存放路徑找到相應的目錄檔案,從目錄中找到檔名對應的的目錄 項,並檢查該使用者是否有指定的操作許可權。
​ 2.將目錄項複製到記憶體中的“開啟檔案表”中。並將對應表目的編號返回給使用者。之 後使用者使用開啟檔案表的編號來指明要操作的檔案。

關閉檔案

​ 作業系統主要操作

​ 1. 將程序的開啟檔案表相應表項刪除
​ 2. 回收分配給該檔案的記憶體空間等資源
​ 3. 系統開啟檔案表的開啟計數器count 減1,若count =0,則刪除對應表項。

讀檔案

​ 進行Read系統呼叫,需要提供一些引數
​ 1.要開啟的檔案索引
​ 2.讀入資料大小
​ 3.讀入的資料的存放位置

​ 作業系統主要操作

​ 從讀指標指向的外存中,將使用者指定大小的資料讀入使用者指定的記憶體區域中。

寫檔案

​ 進行Read系統呼叫,需要提供一些引數
​ 1.要寫的檔案索引
​ 2.要寫多少資料
​ 3.存到外存什麼位置

​ 作業系統主要操作
​ 會從使用者指定的記憶體區域中,將指定大小的資料寫回寫指標指向的外存。

小結

image-20240709170313075

4.1.7檔案共享

​ 多個使用者共享同一個檔案,意味著系統中只有“一份”檔案資料。並且只要某個使用者修改了該檔案的資料,其他使用者也可以看到檔案資料的變化。

基於索引結點的共享方式(硬連結)

​ 由於檢索檔案時只需用到檔名,因此可以將除了檔名之外的其他資訊放到索引結點中。這樣目錄項就只需要包含檔名、索引結點指標。

​ 不同使用者的目錄項中的索引結點指標指向同一個索引結點

image-20240709171214671

​ 索引結點中設定一個連結計數變數count,用於表示連結到本索引結點上的使用者目錄項數。若count =2,說明此時有兩個使用者目錄項鍊接到該索引結點上,或者說是有兩個使用者在共享此檔案。

​ 若某個使用者決定“刪除”該檔案,則只是要把使用者目錄中與該檔案對應的目錄項刪除,且索引結點的count值減1。
​ 若count>0,說明還有別的使用者要使用該檔案,暫時不能把檔案資料刪除,否則會導致指標懸空。
​ 當count =0時系統負責刪除檔案

基於符號鏈的共享方式(軟連結)

​ 基於符號鏈的共享方式在 使用者 想要共享的訪問 一個檔案時,使用者會新建一個檔案,這個新建的檔案是Link型別檔案,記錄想要共享訪問的檔案的地址。在使用者想要共享的訪問 檔案時,會根據新建的Link檔案中的地址對 共享檔案進行訪問。

image-20240709172009654

​ 當把共享的檔案1刪除後,Link型檔案依然會存在,但是再利用軟連線的方式 透過檔案2中的地址共享訪問軟體1時會失敗,因為記錄的路徑再目錄中找不到對應的目錄項

小結
image-20240709172309725

4.1.8檔案保護

口令保護

​ 為檔案設定一個“口令”,使用者請求訪問該檔案時必須提供“口令”。

​ 口令一般存放在檔案對應的FCB或索引結點中。使用者訪問檔案前需要先輸入“口令”,作業系統會將使用者提供的口令與FCB中儲存的口令進行對比,如果正確,則允許該使用者訪問檔案

​ 優點:儲存口令的空間開銷不多,驗證口令的時間開銷也很小。
​ 缺點:正確的“口令”存放在系統內部,不夠安全。

加密保護

​ 使用某個“密碼”對檔案進行加密,在訪問檔案時需要提供正確的“密碼”才能對檔案進行正確的解密。

​ 比如:一個最簡單的加密演算法 異或加密 假設用於加密/解密的“密碼”為“01001”,將檔案的原始資料依次的和加密密碼進行異或運算,系統中儲存的並不是檔案的原始資料,而是儲存的檔案加密之後的資料。

image-20240709174204816

​ 讀取時把儲存的結果與密碼進行異或操作,就可以得到原始檔

​ 優點:保密性強,不需要在系統中儲存“密碼”
​ 缺點:加密/解密要花費一定時間。

訪問控制

​ 在每個檔案的FCB(或索引結點)中增加一個訪問控制列表,該表中記錄了各個使用者可以對該檔案執行哪些操作。

image-20240709174609160

​ 有的計算機可能會有很多個使用者,因此訪問控制列表可能會很大,可以用精簡的訪問列表解決這個問題

​ 精簡的訪問列表:以“組”為單位,標記各“組”使用者可以對檔案執行哪些操作。如:分為系統管理員、檔案主、其他使用者幾個分組。當某使用者想要訪問檔案時,系統會檢查該使用者所屬的分組是否有相應的訪問許可權。系統需要管理分組資訊

image-20240709174834425

小結
image-20240709175045205

4.3.1檔案系統的層次結構

image-20240710205058474 image-20240710212124520

4.3.2檔案系統佈局

檔案系統外存:

​ 物理格式化:用於劃分扇區,檢測壞扇區,並用備用扇區替換壞扇區

​ 邏輯格式化:磁碟分割槽(分卷),完成各個分割槽的檔案系統初始化

檔案系統記憶體:

​ 記憶體分為使用者區和核心區,核心區內有三個重要資訊:目錄的快取(近期訪問過的目錄檔案會被快取在記憶體中)系統開啟檔案表(整個系統只有一個),使用者開啟檔案表(每個程序都有一個)

4.3.3虛擬檔案系統

​ 虛擬檔案系統特點:
​ 1.向上層使用者程序提供統一標準的系統呼叫介面,遮蔽底層具體檔案系統的實現差異

	2.虛擬檔案系統要求下層的檔案系統必須實現某些規定的函式功能,如: open read 			write。一個新的檔案系統想要在某作業系統上被使用,就必須滿足該作業系統VFS			的要求

​ 3.每開啟一個檔案,VFS就在主存中新建一個vnode, 無論檔案原來儲存在哪個檔案 系統,都會用統一的資料結構表示檔案。不僅會把資料儲存到vnode中,還會儲存 函式功能指標。

image-20240710231110788
檔案系統掛載

檔案系統掛載要做的事:

​ 1. 在VFS中註冊新掛載的檔案系統。記憶體中的掛載表包含每個檔案系統的相關資訊, 包括檔案系統型別、容量大小等。

​ 2. 新掛載的檔案系統,要向VFS提供一個函式地址列表

​ 3. 將新檔案系統加到掛載點( mountpoint) ,也就是將新檔案系統掛載在某個父目 錄下

5.1.1 I/O裝置

​ I/O裝置就是可以將資料輸入到計算機,或者可以接收計算機輸出資料的外部裝置,屬於計算機中的硬體部件。

​ Write操作:向外部裝置寫出資料

​ Read操作:從外部裝置讀入資料

I/O裝置按照使用特性的分類

​ 人機互動類 外部裝置:滑鼠、鍵盤、印表機等等,用於人機互動資料傳輸速度較慢

​ 儲存裝置:行動硬碟、光碟等,用於存放資料資料傳輸速度快

​ 網路通訊裝置:調變解調器等,用於網路通訊資料傳輸速度中等

按照傳輸速度分類

​ 低速裝置:如滑鼠鍵盤等,傳輸速率在 幾個到幾百個位元組每秒

​ 中速裝置:如鐳射印表機等,傳輸速率為每秒數千 至 上萬個位元組

​ 高速裝置:如磁碟等,傳輸速率為 每秒數千位元組 至 千兆位元組的裝置

按照資訊交換的單位分類

​ 塊裝置:如磁碟等,資料傳輸的基本單位是塊,特點:傳輸速率高,可定址(可以任 隨機讀取/寫 任意一塊)

​ 字元裝置:如滑鼠鍵盤,資料傳輸的基本單位是字元,特點:傳輸速率較慢,不可尋 址,在輸入輸出時常常採用中斷驅動的方式

image-20240711144408540

5.1.2 I/O控制器

​ I/O裝置可以分為 機械部件和電子部件(I/O控制器、裝置控制器)

​ I/O裝置的機械部件主要用來執行具體I/O操作。如我們看得見摸得著的滑鼠/鍵盤的按鈕;顯示器的LED屏;行動硬碟的磁臂、磁碟盤面。

​ I/O裝置的電子部件通常是一塊插入主機板擴充槽的印刷電路板。

電子部件

​ 當I/O裝置連結到電腦之後,CPU是無法直接對I/O裝置的機械部件進行控制的,需要利用電子裝置間接的對機械部件進行控制。這個電子裝置就是I/O控制器,又叫做裝置控制器。

I/O控制器的功能

​ 1.接受和識別CPU發出的命令:I/O控制器中有相應的控制暫存器,來存放命令和引數

​ 2.向CPU報告裝置的狀態:I/O控制器中有相應的狀態暫存器,用於記錄I/O裝置當前狀態

​ 3.資料交換:I/O控制器中會設定相應的資料暫存器。輸出時,資料暫存器用於暫存CPU 發來的資料,之後由控制器傳送到裝置。輸入時,資料暫存器用於暫存裝置 發來的資料,之後CPU從資料暫存器中取走資料

​ 4.地址識別:類似於記憶體的地址,為了區分裝置控制器中的各個暫存器,也需要給各 個暫存器設定一個特定的“地址”。I/O控制器透過CPU提供的“地址”來判 斷CPU要讀/寫的是哪個暫存器。

I/O控制器的組成

image-20240711153143738
暫存器編址:

​ 一個I/O控制器可能會對應多個裝置;

​ 資料暫存器、控制暫存器、狀態暫存器可能有多個(如:每個控制/狀態暫存器對應一個具體的裝置),且這些暫存器都要有相應的地址,才能方便CPU操作。有的計算機會讓這些暫存器佔用記憶體地址的一部分,稱為記憶體映像I/O;另一些計算機則採用I/O專用地址,即暫存器獨立編址

image-20240711153626937image-20240711153546159

小結

image-20240711153812225

5.1.3 I/O控制方式

程式直接控制方式

完成一次讀/寫操作的流程:

image-20240711155212939

image-20240711155525649

​ 在I/O操作開始之前和完成之後需要CPU介入,並且在等待I/O完成的過程中CPU需要不斷的輪詢檢查,所以CPU的干預很頻繁。

​ 採用程式直接控制方式 每次讀/寫傳送單位是 一個字

​ 資料流向: 讀操作:I/O裝置 --->CPU --->記憶體
​ 寫操作:記憶體 ---->CPU ---->I/O裝置

​ 優點:實現簡單。在讀/寫指令之後,加上實現迴圈檢查的一系列指令即可(因此才 稱為“程式直接控制方式”)

​ 缺點:CPU和I/O裝置只能序列工作,CPU需要一直輪詢檢查,長期處於“忙等”狀 態,CPU利用率低。

中斷驅動方式

​ 引入中斷機制。由於I/O裝置速度很慢,因此在CPU發出讀/寫命令後,可將等待l/O的程序阻塞,先切換到別的程序執行。當I/O完成後,控制器會向CPU發出一箇中斷訊號,CPU檢測到中斷訊號後,會儲存當前程序的執行環境資訊,轉去執行中斷處理程式處理該中斷。處理中斷的過程中,CPU從l/O控制器讀一個字的資料傳送到CPU暫存器,再寫入主存。接著,CPU恢復等待I/O的程序(或其他程序)的執行環境,然後繼續執行。

image-20240711160601112

​ 1.CPU會在每個指令週期的末尾檢查中斷

​ 2.中斷處理過程中需要儲存、恢復程序的執行環境,這個過程是需要一定時間開銷 的。如果中斷髮生的頻率太高,也會降低系統效能。

​ 每次I/O操作開始之前、完成之後需要CPU介入。CPU介入的頻率比程式直接控制方式要低很多

每次讀/寫操作 傳送單位是 一個字

​ 資料流向: 讀操作:I/O裝置 --->CPU --->記憶體
​ 寫操作:記憶體 ---->CPU ---->I/O裝置

​ 優點:與“程式直接控制方式”相比,在“中斷驅動方式”中,I/O控制器會透過中斷信 號主動報告I/O已完成,CPU不再需要不停地輪詢。CPU和I/O裝置可並行工 作,CPU利用率得到明顯提升。

​ 缺點:每個字在I/O裝置與記憶體之間的傳輸,都需要經過CPU。而頻繁的中斷處理會 消耗較多的CPU時間。

DMA方式(直接儲存器存取)

​ 與“中斷驅動方式”相比,DMA方式主要用於塊裝置的I/O控制

​ 1.資料的傳送單位是“塊”。不再是一個字、一個字的傳送;

​ 2.資料的流向是從裝置直接放入記憶體,或者從記憶體直接到裝置。不再需要經過CPU

​ 3.僅在傳送一個或多個資料塊的開始和結束時,才需要CPU干預,CPU干預頻率大 幅度降低

image-20240711165022709 image-20240711165235677

​ 每次讀/寫操作 資料傳送的單位為一個塊或多個塊(每次讀寫的只能是連續的塊,且這些塊讀入記憶體後在記憶體中也必須是連續的

​ 資料流向: 讀操作:I/O裝置 ---> 記憶體
​ 寫操作:記憶體 ---> I/O裝置

​ 優點:資料傳輸以“塊”為單位,CPU介入頻率進一步降低。資料的傳輸不再需要先經過CPU再寫入記憶體,資料傳輸效率進一步增加。CPU和/O裝置的並行性得到提升。

​ 缺點:CPU每發出一條I/o指令,只能讀/寫一個或多個連續的資料塊。如果要讀/寫多個離散儲存的資料塊,或者要將資料分別寫到不同的記憶體區域時,CPU要分別發出多條I/O指令,進行多次中斷處理才能完成。

通道控制方式

​ 通道:一種硬體,可以識別並執行一系列的通道指令。

image-20240711170050232 image-20240711170129620

​ CPU干預的頻率極低,通道會根據CPU的指示執行相應的通道程式,只有完成一組資料塊的讀/寫後才需要發出中斷訊號,請求CPU干預。

​ 資料傳送的單位每次讀/寫一組資料塊

​ 資料流向: 讀操作:I/O裝置 ---> 記憶體
​ 寫操作:記憶體 ---> I/O裝置

​ 優點:CPU、通道、1/O裝置可並行工作,資源利用率很高。
​ 缺點:實現複雜,需要專門的通道硬體支援

對比
image-20240711170412126

5.1.4I/O軟體層次結構

image-20240711193649202
使用者層軟體

​ 向使用者提供一些簡單易用的介面,使用者可直接使用該層提供的、與I/O操作相關的庫函式對裝置進行操作。使用者層軟體將使用者請求翻譯成格式化的I/O請求,並透過“系統呼叫”請求作業系統核心的服務

裝置獨立性軟體

​ 裝置獨立性軟體:又稱裝置無關性軟體。與裝置的硬體特性無關的功能幾乎都在這一層實現。

​ 主要實現的功能:

​ 1.向上層提供統一的呼叫介面(如read/write系統呼叫)
​ 2.裝置的保護(原理類似於檔案保護)
​ 3.差錯處理(對一些裝置的錯誤進行處理)
​ 4.裝置的分配與回收
​ 5.資料緩衝區管理:透過緩衝技術遮蔽裝置間資料交換單位大小和傳輸速率的差異
​ 6.建立邏輯裝置名到物理裝置名的對映關係,根據裝置型別選擇呼叫相應的驅動程 序(裝置獨立性軟體需要透過 邏輯裝置表 來確定邏輯裝置對應的物理裝置,並 找到該裝置對應的 裝置驅動程式)

​ 作業系統系統可以採用兩種方式管理邏輯裝置表(LUT):
​ 一、:整個系統只設定一張LUT,這就意味著所有使用者不能使用相同的邏輯設 備名,因此這種方式只適用於單使用者作業系統。

​ 二、:為每個使用者設定一張LUT,各個使用者使用的邏輯裝置名可以重複,適用 於多使用者作業系統。系統會在使用者登入時為其建立一個使用者管理程序,而LUT 就存放在使用者管理程序的PCB中。

裝置驅動程式

​ 主要負責對硬體裝置的具體控制,將上層發出的一系列命令(如read/write)轉化成特定裝置“能聽得懂”的一系列操作。包括設定裝置暫存器;檢查裝置狀態等

​ 不同的I/o裝置有不同的硬體特性,具體細節只有裝置的廠家才知道。因此廠家需要根據裝置的硬體特性設計並提供相應的驅動程式。

​ 驅動程式一般會以一個獨立程序的方式存在。

中斷處理程式

​ 當I/O任務完成時,I/O控制器會傳送一箇中斷訊號,系統會根據中斷訊號型別找到相應的中斷處理程式並執行。

​ 中斷處理程式的處理流程:

image-20240711210116910

image-20240711210300855

5.1.5輸入輸出應用程式介面 和 驅動程式介面

​ 輸入輸出應用程式介面分為 字元裝置介面塊裝置介面網路裝置介面

​ 字元裝置介面:get/put 系統呼叫:向字元裝置讀/寫個字元

​ 網路裝置介面:又稱“網路套接字介面”,socket系統呼叫:建立一個網路套接字,需指 明網路協議 bind:將套接字繫結到某個本地“埠’,connect:將套接字 連線到遠端地址read/write:從套接字讀/寫資料。

​ 塊裝置介面:read/write系統呼叫;向塊裝置的讀寫指標位置讀/寫多個字元,seek 統呼叫:修改讀寫指標位置

阻塞I/O和非阻塞I/O

​ 阻塞I/O:應用程式發出/o系統調脅程序需轉為阻塞態等待。eg:字元裝置介面――從鍵 盤讀一個字元get

​ 非阻塞I/O:應用程式發出I/o系統呼叫,系統呼叫可迅速返回,程序無需阻塞等待。 eg:塊裝置介面―一往磁碟寫資料write

image-20240712170339300

5.2.1I/O核心子系統

image-20240712170513121
假離線技術

​ 批處理操作中引入了離線技術(用磁帶完成),離線技術是脫離了主機控制進行的輸入/輸出操作。

​ 根據離線技術,人們發明了假離線技術,用軟體的方法模擬離線技術。

image-20240712174353191
利用假離線技術實現印表機共享

image-20240712175842593

image-20240712175651636

SPOOLing技術可以把一臺物理裝置虛擬成邏輯上的多臺裝置,可將獨佔式裝置改造成共享裝置。

小結
image-20240712175943257

5.2.3裝置分配與回收

​ 進行裝置分配時應該考慮的因素:裝置的固有屬性,裝置分配演算法,裝置分配中的安全性。

​ 裝置的固有屬性可以分為三種:獨佔裝置共享裝置虛擬裝置

​ 獨佔裝置:一個時段只能分配給一個程序(如印表機)
​ 共享裝置:可同時分配給多個程序使用(如磁碟),各程序往往是宏觀上同時共享 使用裝置,而微觀上交替使用。
​ 虛擬裝置:採用SPOOLing 技術將獨佔裝置改造成虛擬的共享裝置,可同時分配給 多個程序使用(如採用SPOOLing技術實現的共享印表機)

​ 裝置的分配演算法先來先服務演算法短任務優先演算法優先順序演算法、、、

​ 從裝置的安全性考慮:裝置有兩種分配方式:安全分配方式不安全分配方式

​ 安全分配方式:為程序分配一個裝置後就將程序阻塞,本次I/O完成後才將程序喚醒 一個時間段內每個程序只能使用一個裝置。
​ 優點:破壞了“請求和保持”條件,不會產生死鎖
​ 缺點:對一個程序來說,CPU和I/O只能序列工作

​ 不安全分配方式:程序發出I/O請求後,系統為其分配I/O裝置,程序可繼續執行, 之後還可以發出新的I/O請求。只有某個1/o請求得不到滿足時才 將程序阻塞。
​ 優點:程序的計算任務和I/o任務可以並行處理,使程序迅速推進
​ 缺點:有可能發生死鎖(死鎖避免、死鎖的檢測和解除)

裝置分配管理中的資料結構

裝置控制表(DCT):系統為每個裝置配置一張DCT,用於記錄裝置情況

image-20240712215909395

控制器控制表(COCT):每個裝置控制器都會對應一張COCT。作業系統根據COCT的資訊 對控制器進行操作和管理。

image-20240712221434357

通道控制表(CHCT):每個通道都會對應一張CHCT.作業系統根據CHCT的資訊對通道進行 操作和管理。

image-20240712221623223

系統裝置表(SDT):記錄了系統中全部裝置的情況,每個裝置對應一個表目。

image-20240712221706790

一個通道可控制多個裝置控制器,每個裝置控制器可控制多個裝置。

image-20240712221826215

裝置分配的步驟

​ 1:根據程序請求的物理裝置名查詢SDT(注:物理裝置名是程序請求分配裝置時提供的引數)
​ 2:根據SDT找到DCT,若裝置忙碌則將程序pCB掛到裝置等待佇列中,不忙碌則將裝置分配給程序。
​ 3:根據DCT找到COCT,若控制器忙碌則將程序PCB掛到控制器等待佇列中,不忙碌則將控制器分配給程序。
​ 4:根據COCT找到CHCT,若通道忙碌則將程序PCB掛到通道等待佇列中,不忙碌則將通道分配給程序。

缺點:①使用者程式設計時必須使用“物理裝置名”,底層細節對使用者不透明,不方便程式設計
②若換了一個物理裝置,則程式無法執行
③若程序請求的物理裝置正在忙碌,則即使系統中還有同型別的裝置,程序也必須阻 塞等待

改進方法:建立邏輯裝置名與物理裝置名的對映機制,使用者程式設計時只需提供邏輯裝置名

改進之後的步驟:

​ 1、根據程序請求的邏輯裝置名查詢SDT(注:使用者程式設計時提供的邏輯裝置名其實就 是“裝置型別”)
​ 2、查詢SDT,找到使用者程序指定型別的、並且空閒的裝置,將其分配給該程序。操 作系統在邏輯裝置表(LUT)中新增一個表項。
​ 3、根據DCT找到COCT,若控制器忙碌則將程序PCB掛到控制器等待佇列中,不忙碌 則將控制器分配給程序。|
​ 4、根據COCT找到CHCT,若通道忙碌則將程序PCB掛到通道等待佇列中,不忙碌則 將通道分配給程序。

邏輯裝置表的設定問題:
1、整個系統只有一張LUT:各使用者所用的邏輯裝置名不允許重複,適用於單使用者操作 系統。
2、每個使用者一張LUT:不同使用者的邏輯裝置名可重複,適用於多使用者作業系統。

小結

image-20240712224250235

5.2.4緩衝區

​ 緩衝區是一個儲存區域,可以由專門的硬體暫存器組成,也可利用記憶體作為緩衝區。

​ 使用硬體作為緩衝區的成本較高,容量也較小,一般僅用在對速度要求非常高的場合(如儲存器管理中所用的聯想暫存器(快表),由於對頁表的訪問頻率極高,因此使用速度很快的聯想暫存器來存放頁表項的副本)

​ 一般情況下,更多的是利用記憶體作為緩衝區,“裝置獨立性軟體”的緩衝區管理就是要組織管理好這些緩衝區

緩衝區的作用

​ 1.緩和CPU與I/O裝置之間速度不匹配的矛盾

​ 2.減少對CPU的中斷頻率,放寬對CPU中斷相應時間的限制

​ 3.解決資料粒度不匹配的問題

​ 4.提高CPU與I/O裝置之間的並行性

緩衝區管理策略
單緩衝

​ 假設某使用者程序請求某種塊裝置讀入若干塊的資料。若採用單緩衝的策略,作業系統會在主存中為其分配一個緩衝區(若題目中沒有特別說明,一個緩衝區的大小就是一個塊)。

​ 當緩衝區資料非空時,不能往緩衝區衝入資料,只能從緩衝區把資料傳出;當緩衝區為空時,可以往緩衝區衝入資料,但必須把緩衝區充滿以後,才能從緩衝區把資料傳出。

image-20240713085220311

單緩衝處理一塊資料的平均時間

假設初始狀態為工作區滿,緩衝區空

​ 1、若 T>C ,開始時塊裝置輸入資料和CPU處理資料同時開始,在CPU處理完資料後,塊 裝置還在向緩衝區輸入資料,輸入完成後需要向工作區傳送資料,然後此時才能達 到初始狀態:工作區滿,緩衝區空。時間為T+M

image-20240713085659404

​ 2、若 T<C,開始時塊裝置輸入資料和CPU處理資料同時開始,在塊裝置向緩衝區輸入完資料後,CPU還在處理工作區內的資料,此時不能向工作區傳輸資料,等到處理完成才可以傳輸。然後此時才能達到初始狀態:工作區滿,緩衝區空。時間為C+M。

image-20240713090032466

雙緩衝

​ 假設某使用者程序請求某種塊裝置讀入若干塊的資料。若採用雙緩衝的策略,作業系統會在主存中為其分配兩個緩衝區(若題目中沒有特別說明,一個緩衝區的大小就是一個塊)

image-20240713092143589

雙緩衝處理一塊資料的平均時間

假設初始狀態為:工作區空,其中一個緩衝區滿,另一個緩衝區空

​ 1、若T>C+M:開始時,塊裝置輸入資料和緩衝區傳輸資料同時進行,緩衝區花費M 時間傳送資料,然後CPU處理資料,此時塊裝置輸入資料還沒完成。 等到輸入完成才能達到初始狀態:工作區空,一個緩衝區滿,另一個 緩衝區空。時間為T。

image-20240713092904450

​ 2、若T<C+M:開始時,塊裝置輸入資料和緩衝區傳輸資料同時進行,緩衝區花費M
​ 時間傳送資料,然後CPU處理資料,在CPU處理過程中,塊裝置輸入 已經完成,但是無法向塊裝置傳送資料,並且會向另一個緩衝區輸入 資料,於是並能找到一個狀態與初始狀態相同。處理一個資料塊的平 均耗時為C+M。

image-20240713093724500

​ 結論:採用雙緩衝策略,處理一個資料塊的平均耗時為Max (T, C+M)

區別

​ 若兩個相互通訊的機器只設定單緩衝區,在任一時刻只能實現資料的單向傳輸。

image-20240713093925500

​ 若兩個相互通訊的機器設定雙緩衝區,則同一時刻可以實現雙向的資料傳輸。

image-20240713094045338

迴圈緩衝區

​ 將多個大小相等的緩衝區連結成一個迴圈佇列。

image-20240713094733672

緩衝池

​ 緩衝池由系統中共用的緩衝區組成。這些緩衝區按使用狀況可以分為:空緩衝佇列、裝滿輸入資料的緩衝佇列(輸入佇列)、裝滿輸出資料的緩衝佇列(輸出佇列)。

​ 另外,根據一個緩衝區在實際運算中扮演的功能不同,又設定了四種工作緩衝區:用於收容輸入資料的工作緩衝區(hin)、用於提取輸入資料的工作緩衝區(sin)、用於收容輸出資料的工作緩衝區(hout) 、用於提取輸出資料的工作緩衝區(sout)

image-20240713095111345

小結
image-20240713095238974

5.3.1磁碟

​ 磁碟的表面由一些磁性物質組成,可以用這些磁性物質來記錄二進位制資料

​ 磁碟的盤面被劃分成一個個磁軌。

​ 一個磁軌被劃分成一個個扇區,每個扇區就是一個磁碟塊,各個扇區存放的資料量相同

​ 由於每個磁軌上存放到資料量是相同的,但是最內側的磁軌面積最小,故最內側磁軌 的資料密度最大

如何在磁碟中讀/寫資料

​ 需要把“磁頭”移動到想要讀/寫的扇區所在的磁軌。
​ 磁碟會轉起來,讓目標扇區從磁頭下面劃過,才能完成對扇區的讀/寫操作。

image-20240713100020231

磁碟的實體地址:

​ 一個磁碟可能是由很多個盤面疊加起來的

image-20240713100322530

​ 所有盤面中相對位置相同的磁軌組成柱面

​ 故可用(柱面號,盤面號,扇區號)來定位任意一個“磁碟塊”。

可根據該地址讀取一個“塊”

1.根據“柱面號”移動磁臂,讓磁頭指向指定柱面;
2.啟用指定盤面對應的磁頭;
3.磁碟旋轉的過程中,指定的扇區會從磁頭下面劃過,這樣就完成了對指定扇區的讀/寫。

磁碟分類

​ 磁頭可以移動的稱為活動頭磁碟。磁臂可以來回伸縮來帶動磁頭定位磁軌

​ 磁頭不可移動的稱為固定頭磁碟,這種磁碟中每個磁軌有一個磁頭

​ 碟片可以更換的稱為可換盤磁碟

​ 碟片不可更換的稱為固定盤磁碟

小結
image-20240713102400792

5.3.2磁碟排程演算法

尋找時間(尋道時間)Ts:在讀/寫資料前,將磁頭移動到指定磁軌所花的時間。
​ ①啟動磁頭臂是需要時間的。假設耗時為s;
​ ②移動磁頭也需要時間:假設磁頭勻速移動,每跨越一個磁軌耗時為m,總共需 要跨越n條磁軌 需要花費的時間為 n * m
​ 尋道時間Ts= s + m*n

延遲時間TR:透過旋轉磁碟,使磁頭定位到目標扇區所需要的時間。設磁碟轉速為 r(單位:轉/秒或轉/分),則平均所需的延遲時間 TR=(1/2)*(1/r)= 1/2r
​ (1/r是轉一圈需要的時間,找到目標扇區平均需要轉半圈,故再乘1/2)

傳輸時間Tt:從磁碟讀出或向磁碟寫入資料所經歷的時間,假設磁碟轉速為r,此次 讀/寫的位元組數為b,每個磁軌上的位元組數為N。則:傳輸時間T=(1/r)* (b/N) = b/(rN) | 1/r表示轉一圈的時間,b/n表示需要幾個磁碟存 儲資料。

​ 延遲時間和傳輸時間與硬碟的轉速有關,是硬體的固有屬性,作業系統無法進行最佳化,作業系統可以最佳化的是尋道時間。

磁碟排程演算法
先來先服務演算法(FCFS)

​ 根據程序請求訪問磁碟的先後順序進行排程

image-20240714084322436

image-20240714084515203
優點:公平;如果訪問的磁軌比較集中,效能較好
缺點:如果有大量的程序使用磁碟,並且請求訪問的磁軌很分散,那麼效能很差, 尋道時間長。

最短尋找時間優先(SSTF)

​ SSTF演算法會優先處理與當前磁頭最近的磁軌可以保證每次的尋道時間最短、但是並不能保證總的尋道時間最短。(其實就是貪心演算法的思想,只是選擇眼前最優,但是總體未必最優)

image-20240714084854221

image-20240714084905893 image-20240714084925409
​ 優點:效能較好,平均尋道時間短。
​ 缺點:可能產生飢餓(如果一直來比較近的磁軌請求,那麼磁頭會在一個小範圍 內來回移動,比如 18 38 17 39 18 38 .... ,遠的磁軌會飢餓)。

掃描演算法

​ 為了防止磁頭在一個 小範圍內來回移動產生飢餓的現象,掃描演算法規定只有磁頭移動到最外側或者最內側才可以改變方向

image-20240714090012987 image-20240714090418387

image-20240714090450299

​ 優點:效能較好,平均尋道時間較短,不會產生飢餓現象
​ 缺點:1.只有到達邊緣之後才會掉頭(184右邊無需處理)
​ 2.對各個位置磁軌響應頻率不均勻(中間的90號磁軌響應過一次後很久才能再 次被響應,但是邊緣的184號磁軌很快就可以響應兩次)

LOOK排程演算法

​ 為了處理掃描演算法中 只有到邊緣才會掉頭的缺點,LOOK排程演算法規定如果磁頭的執行方向上已經沒有別的請求了,那麼磁頭就可以立即調轉方向。

image-20240714091111102

image-20240714091252962

迴圈掃描演算法 C-SCAN

​ 為了處理SCAN演算法對各個磁軌響應頻率不平均的問題,C-SCAN演算法規定,只有磁頭朝某個特定方向移動時才會處理磁軌訪問請求,而返回時直接快速移動不處理任何請求。

image-20240714091833364 image-20240714091822835

image-20240714091903283

​ 優點:比起SCAN演算法,各個位置磁軌響應頻率很均勻
​ 缺點:需要移動到邊界才能改變磁頭方向,返回時也需要返回到邊界;平均尋道時 間更長

C-LOOK演算法

​ 為了解決C-SCAN演算法 只有到達 邊界時才能改變磁頭移動方向,並且磁頭返回時不一定需要返回到最邊緣的磁軌上。C-LOOK演算法規定:如果磁頭移動的方向上已經沒有磁軌訪問請求了,就可以立即讓磁頭返回,並且磁頭只需要返回到有磁軌訪問請求的位置即可。

image-20240714092319361

image-20240714092515844

image-20240714092532377

​ 優點:比起C-SACN演算法來說,無需移動到邊界,縮短了尋道時間

小結

image-20240714092929784

5.3.3減少磁碟延遲時間的方法

​ 延遲時間:將扇區旋轉到磁頭下面所需要的時間

​ 磁頭再讀取完成一個扇區之後需要 花費時間處理讀取內容,不能立即讀取下一扇區內容,如果兩個扇區相鄰排列,讀取完成第一個之後無法接著讀第二個,但是磁碟依然不停旋轉,所以會錯過第二個扇區,只有再轉回來才可以讀取

​ 結論:磁頭讀入一個扇區資料後需要一小段時間處理,如果邏輯上相鄰的扇區在物理上也相鄰,則讀入幾個連續的邏輯扇區,可能需要很長的“延遲時間”

交替編號

​ 採用交替編號的策略,即讓邏輯上相鄰的扇區在物理上有一定的間隔,可以使讀取連續的邏輯扇區所需要的延遲時間更小。

image-20240714093529391

錯位命名

​ 盤面是一個一個疊加起來的,如果上一個盤面的編號與下一個盤面的編號一樣,那麼讀取同一柱面的磁碟時,先讀取上面盤面的資料,完成後應該讀取下一盤面的資料,但是需要花費時間處理讀取內容,那麼下一個盤面磁頭現在指向的磁碟不能讀取,需要等再轉一圈劃過磁頭。為了能夠解決讀完一個扇面到讀 下一個扇面能儘快讀取的問題,將上下不同的扇面採用錯位命名的方法。 (第一層盤面的0號磁碟正下方是下一層盤面的7號磁碟)

image-20240714100110146

小結
image-20240714100803532

5.3.4磁碟管理

磁碟初始化:

​ 1:進行低階格式化(物理格式化),將磁碟的各個磁軌劃分為扇區。一個扇區通常可分為頭、資料區域、尾三個部分組成。管理扇區所需要的各種資料結構一般存放在頭、尾兩個部分,包括扇區校驗碼(如奇偶校驗、CRC迴圈冗餘校驗碼等,校驗碼用於校驗扇區中的資料是否發生錯誤)

​ 2:將磁碟分割槽,每個分割槽由若干柱面組成(即分為我們熟悉的c盤、D盤、E盤)

​ 3:進行邏輯格式化,建立檔案系統。包括建立檔案系統的根目錄、初始化儲存空間管理所用的資料結構(如位示圖、空閒分割槽表)

壞塊

​ 故障、無法使用的扇區就是壞塊,屬於硬體故障,作業系統無法修復。

​ 對於簡單的磁碟,可以在邏輯格式化時(建立檔案系統時)對整個磁碟進行壞塊檢查,標明哪些扇區是壞扇區,比如:在 FAT表上標明。(在這種方式中,壞塊對作業系統不透明)

​ 對於複雜的磁碟,磁碟控制器(磁碟裝置內部的一個硬體部件)會維護一個壞塊連結串列。在磁碟出廠前進行低階格式化(物理格式化)時就將壞塊鏈進行初始化。磁碟控制器會保留一些“備用扇區”,用於替換壞塊。這種方案稱為扇區備用。且這種處理方式中,壞塊對作業系統透明。

小結

image-20240714102357559

5.3.5固態硬碟

​ 固態硬碟以頁為單位進行讀取

​ 固態硬碟以塊為單位進行擦除(如果向保留塊中的某些頁的資料,需要把這些頁先放到其他塊中,再進行擦除,並且由快閃記憶體翻譯層將對映改為新的地址對映)

image-20240714103011164

​ 固態硬碟的一個"塊"被擦除次數過多(重複寫同一個塊)可能會壞掉,而機械硬碟的扇區不會因為寫的次數太多而壞掉。於是採用磨損均衡技術,將擦除 平均分配到各個塊上。

​ 磨損均衡技術分為動態磨損均衡和靜態磨損均衡

​ 動態磨損均衡:寫資料時優先選擇累計擦除次數少的快閃記憶體塊,降低損壞率。
​ 靜態磨損均衡:SSD監測並自動進行資料分配、遷移,讓老舊的快閃記憶體塊承擔以讀為主 的儲存任務,讓較新的快閃記憶體塊承擔更多的寫任務

image-20240714104044040

image-20240714104113939

小結
image-20240714104231925

相關文章