1.操作系統分類
- 批處理操作系統(單道,多道)
- 分時操作系統(Unix)
- 實時操作系統(MsgOS)
- 網絡操作系統
- 分布式操作系統
- 微機操作系統(Linux、Windows、IOS等)
- 嵌入式操作系統(Android,iOS)
2.操作系統的4個特征?
2.1 並發性
區別於並行性,並發是指:多個事件在同一時間間隔內發生,並行是指:多個事件在同一時刻發生
2.2 共享性
一般的共享是指某種資源可以被大家使用,在os下的資源共享稱為資源復用,具體含義是:系統中的資源可供內存中多個並發的執行的進程共同使用
2.3 虛擬性
通過某種技術將一個物理實體變為若干個邏輯上的對應物的功能即是虛擬
2.4 不確定性(異步)
每道程序完成的時間都是不可預知的,進程是以人們不可預知的速度向前推進的
3.操作系統的功能
3.1 處理機管理
也稱進程管理。實質上是對處理機執行時間進行管理,采用多道程序等技術將CPU的時間真正合理地分配給每個任務。主要包括進程管理、進程同步、進程通信和進程調度。
3.2 文件管理
又稱信息管理。主要包括文件存儲空間管理、目錄管理、文件的讀寫管理和存取管理。
3.3 存儲管理
是對主存儲器空間的管理。主要包括存儲分配與回收、存儲保護、地址映射(變換)和主存擴充。(即內存管理)
3.4 設備管理
實質上是對硬件設備進行管理,其中包括輸入輸出設備的分配、啟動、完成和回收。
3.5 作業管理
包括人物、人機交互和用戶界面管理等。
4.處理機管理
4.1 線程與進程
4.1.1 基本概念
[!NOTE]
-
進程是具有一定獨立功能的程序關於某個數據集合上的一次運行活動,是系統進行資源分配和調度的一個獨立單位。
-
線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位。線程自己基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源。也有就緒、運行、阻塞三態。
PCB:為了便於系統描述和管理進程,在OS的核心位每個進程專門定義了一個數據結構,進程控制塊PCB。PCB是進程的唯一標志
一個線程可以創建和撤銷另一個線程;同一個進程中的多個線程之間可以並發執行。相對進程而言,線程是一個更加接近於執行體的概念,它可以與同進程中的其他線程共享數據,但擁有自己的棧空間,擁有獨立的執行序列。
4.1.2 區別
-
- 簡而言之,一個程序至少有一個進程,一個進程至少有一個線程.
-
- 線程的划分尺度小於進程,使得多線程程序的並發性高。
-
- 另外,進程在執行過程中擁有獨立的內存單元,而多個線程共享內存,從而極大地提高了程序的運行效率。
-
- 線程在執行過程中與進程還是有區別的。每個獨立的線程有一個程序運行的入口、順序執行序列和程序的出口。但是線程不能夠獨立執行,必須依存在應用程序中,由應用程序提供多個線程執行控制。
-
- 從邏輯角度來看,多線程的意義在於一個應用程序中,有多個執行部分可以同時執行。但操作系統並沒有將多個線程看做多個獨立的應用,來實現進程的調度和管理以及資源分配。這就是進程和線程的重要區別。
4.1.3 優缺點
[!NOTE]
線程執行開銷小,但不利於資源的管理和保護;而進程正相反。同時,線程適合於在SMP機器上運行,而進程則可以跨機器遷移。
4.2 程序順序執行的特征
- 順序性:每一操作必須在下一操作開始之前結束
- 封閉性:程序運行時獨占全機資源,資源的狀態(除初始狀態外)只有本程序才能改變,程序一旦執行,其結果不受外界影響
- 可再現性:程序執行環境和初始條件相同,重復執行時,結果相同
4.3 程序並發執行的特征
- 間斷性:程序並發運行時,共享系統資源,為完成同一任務相互合作,會形成相互制約關系,導致並發程序具有“執行-暫停-執行”這種間斷性的活動規律
- 失去封閉性:程序並發執行時,資源狀態由多個程序改變,某程序執行時,會受到其他程序影響,失去封閉性
- 不可再現性:失去封閉性,導致失去可再現性
4.4 進程的特征
- 結構特征:程序段、相關數據段和PCB三部分構成進程實體
- 動態性:進程實體的一次執行過程,具有生命期,而程序是有序指令集合,是靜態的
- 並發性:多個進程同時存於內存,在一段時間內同時運行
- 獨立性:進程實體是一個能獨立運行、獨立分配資源和獨立接受調度的基本單位
- 異步性:進程按各自獨立的、不可預知的速度向前推進
4.5 進程的狀態
三態模型(左圖)、五態模型(右圖)
4.6 進程間的通信(同步與互斥)
[!NOTE]
由於多個進程可以並發執行,所以進程間必然存在資源共享和相互合作的問題。進程通信是指各個進程交換信息的過程。
同步是合作進程間直接制約問題,互斥是申請臨界資源進程間的間接制約問題。(臨界資源(Critical Resource, CR):在同一時間只能供一個進程使用的資源,例如:打印機,磁帶機等硬件資源)
4.6.1 臨界區管理4條原則
(臨界區:每個進程中訪問臨界資源的那段代碼)
- 有空即進:
- 無空則等:
- 有限等待:要求訪問臨界區的進程,保證有限時間內進入臨界區,避免死等
- 讓權等待:進程不能進入臨界區時,應立即釋放處理機,避免忙等
4.7 信號量機制
即利用PV操作來對信號量進行處理。
[!NOTE]
信號量(semaphore)的數據結構為一個值和一個指針,指針指向等待該信號量的下一個進程。信號量的值與相應資源的使用情況有關。
當它的值大於0時,表示當前可用資源的數量;
當它的值小於0時,其絕對值表示等待使用該資源的進程個數。
注意,信號量的值僅能由PV操作來改變。
[!NOTE]
一般來說,信號量S >= 0時,S表示可用資源的數量。執行一次P操作意味着請求分配一個單位資源,因此S的值減1;當S < 0時,表示已經沒有可用資源,請求者必須等待別的進程釋放該類資源,它才能運行下去。而執行一個V操作意味着釋放一個單位資源,因此S的值加1;若S <= 0,表示有某些進程正在等待該資源,因此要喚醒一個等待狀態的進程,使之運行下去。
4.8 進程調度
如何分配CPU。
[!NOTE]
調度方法分為可剝奪和不可剝奪兩種。即當有更高優先級的進程到來時,是否可以將正在運行進程的CPU分配給高優先級的進程,可以則為可剝奪,否則為不可剝奪的。
在某些操作系統中,一個作業從提交到完成需要經歷高、中、低三級調度。
4.8.1 高級調度
又稱長調度或作業調度。它決定處於輸入池中的哪個后備作業可以調入主系統做好運行的准備,成為一個或一組就緒進程。系統中一個作業(程序)只需經過一次高級調度。
4.8.2 中級調度
又稱短程調度或對換調度。它決定處於交換區中的就緒進程哪個可以調入內存,以便直接參與對CPU的競爭。在內存資源緊張時,為了將進程調入內存,必須將內存中處於阻塞狀態的進程調出交換區,以便為調入進程騰出空間。
4.8.3 低級調度
又稱短程調度或進程調度。它決定處於內存中的就緒進程中的哪個可以占用CPU。最活躍、最重要的調度程序,對系統影響也是最大的。
4.9 常見的進程調度算法
- 先來先服務(FCFS)
- 短作業優先
- 時間片輪轉(固定時間片、可變時間片)
- 優先級調度(靜態優先級、動態優先級)
- 多級反饋調度(時間片輪轉+優先級調度)。
4.10 死鎖
4.10.1 基本概念
[!NOTE]
兩個以上的進程互相要求對方釋放已經占有的資源導致無法繼續運行下去的現象
例如:一個系統有一台掃描儀R1,一台刻錄機R2,有兩個進程P1,P2,他們都准備將掃描的文檔刻錄到CD上,P1先請求R1並成功,P2先請求R2並成功,后來,P1又請求R2,但卻因為已經分配而阻塞,P2請求R1,也因分配而阻塞,此時,雙方都被阻塞,都希望對方釋放自己所需的資源,但又誰都不能得到自己所需的資源而繼續進行,從而一直占有自己所占的資源,就形成死鎖
4.10.2 可搶占性資源和不可搶占性資源
- 前者:某進程獲得這類資源后,該資源可以在被其他進程或系統搶占。
- 后者:一旦系統把資源分配給一個進程以后,就不能把他強行收回,只能等它用完自行釋放
4.10.3 產生死鎖的原因
-
(1) 競爭不可搶占性資源
-
(2) 進程運行推進的順序不合適。
-
(3) 競爭可消耗資源
如果系統資源充足,進程的資源請求都能夠得到滿足,死鎖出現的可能性就很低,否則就會因爭奪有限的資源而陷入死鎖。其次,進程運行推進順序與速度不同,也可能產生死鎖。
4.10.4 產生死鎖的四個必要條件
互斥條件、請求與保持條件、不剝奪條件、循環等待條件。
- (1) 互斥條件:一個資源每次只能被一個進程使用。
- (2) 請求與保持條件:一個進程因請求資源而阻塞時,對已獲得的資源保持不放。
- (3) 不剝奪條件:進程已獲得的資源,在末使用完之前,不能強行剝奪。
- (4) 循環等待條件:若干進程之間形成一種頭尾相接的循環等待資源關系。
這四個條件是死鎖的必要條件,只要系統發生死鎖,這些條件必然成立,而只要上述條件之一不滿足,就不會發生死鎖。
4.10.5 解決死鎖的4種處理策略
- 鴕鳥策略(即不理睬策略)
- 預防策略
- 避免策略
- 檢測與解除策略
死鎖預防
預先靜態分配法(破壞不可剝奪條件)、資源有序分配法(將資源分類按順序排列,保證不形成環路)。
死鎖避免
銀行家算法(對每個資源請求進行檢測,確保安全。需要很大的系統開銷)。
死鎖解除
資源剝奪法、撤銷進程法。
4.11 內存池和進程池
[!NOTE]
所謂池的概念, 一般是指應用提前向內核批量申請資源,用於接下來的使用和回收再利用, 減少資源的初始化和銷毀次數等開銷, 以達到提高系統性能的目標。
4.11.1 內存池
真正使用前申請一片內存區域,有新需求時取出其中一部分使用,不夠用時再重新申請新內存。
4.11.2 進程池
應用預先創建一組子進程,所有子進程運行相同代碼,擁有相同屬性,比如PGID和優先級等;
4.11.3 常見兩種工作方式:
- 主進程通過隨機或round robin算法來選擇子進程作為新任務的服務進程;
- 通過一個共享隊列來進行同步,所有子進程從該隊列中獲取任務,不過同時只能有一個子進程能成功獲得新任務處理權。
4.11.4 線程池:
主要應用於任務小而多,處理時間短的場景,比如簡單網頁請求等。
5.存儲器管理
5.1 存儲器的層次
[!NOTE]
在存儲層次中,層次越高(越接近CPU),存儲介質的訪問速度越快,價格越高,存儲容量也越小
5.1.1 主存儲器
簡稱內存或主存,是計算機系統中的主要部件,用於保存進程運行時的程序和數據,也稱可執行存儲器
5.1.2 寄存器
寄存器與處理機的速度,寄存器的字長一般是32或是64位。
5.1.3 高速緩存
介於寄存器和主存儲器之間的存儲器,主要用來備份內存中常用的數據,以減少處理機對內存的訪問次數,這樣可以大幅的提高速度
5.1.4 磁盤緩存
由於磁盤的I/O速度遠低於內存的速度,所以用磁盤緩存來暫時存放一些磁盤數據和信息,它本身並不是一種實際存在的存儲器,而是利用內存中的部分存儲空間贊數存放一些信息
5.2程序的裝入和鏈接
5.3連續分配存儲管理方式
5.3.1 地址重定位
指將邏輯地址變換成物理地址的過程。分為靜態重定位和動態重定位。
5.3.2 存儲管理方案
[!NOTE]
分區存儲管理(固定分區、可變分區、可重定位分區)、分頁存儲管理(將一個進程的地址空間划分為若干個大小相等的區域,成為頁,相應地,將主存空間划分成與頁相同大小的若干個物理塊,稱為塊。至少需要兩次訪問主存)、分段存儲管理、段頁式存儲管理(地址結構:段號+段內頁號+頁內地址)、虛擬存儲管理。
可變分區的請求和釋放主要算法:最佳適應算法、最差適應算法、首次適應算法、循環首次適應算法。
-
快表:在頁式存儲管理中將當前最活躍的少數幾頁的物理塊號保存在高速存儲器中,用以提高頁式存儲管理的性能。(不用兩次訪問主存)
-
頁面置換算法:最佳置換算法(最長時間內不再被訪問的頁面置換出去)、先進先出置換算法、最近最少未使用置換算法、最近未用置換算法。
6.設備管理
[!NOTE]
設備管理的目標是如何提高設備的利用率,為用戶提供方便統一的界面。
6.1 設備管理采用的緩沖技術
通道技術、DMA技術、緩沖技術、Spooling技術。
6.2 磁盤調度算法
- 先來先服務(FCFS)
- 最短尋道時間(SSTF)
- 掃描算法(SCAN)(先由里向外,到達最外后由外向里)
- 單向掃描調度算法(CSCAN)(無法換向,只能由里向外)。
7.文件管理
7.1 文件的邏輯結構
- 有結構的記錄式文件(由一個以上的記錄構成。記錄分為定長記錄、不定長記錄)
- 無結構的流式文件(由一串順序的字符流構成的文件,不划分記錄)
7.2 文件的物理結構
順序結構、鏈接結構、索引結構、多個物理塊的索引表。
7.3 Unix的三級索引結構
7.3.1 文件的存取方法
順序存取法、隨機存取法。
7.3.2 文件的存儲空間管理
外存空閑空間管理的數據結構通常稱為磁盤分配表。常用的空閑空間的管理方法:位示圖(用一個bit為的0、1表示一個物理塊的空閑情況)、空閑區表、空閑塊鏈、成組鏈接法(每100塊為一組進行記錄空閑的塊號和大小)。
7.3.3 文件鏈接
[!NOTE]
硬鏈接(兩個文件目錄表目指向同一個索引節點,即指不同的文件名與同一個文件實體的鏈接)、符號鏈接(在建立的新文件或目錄並與原來的文件或目錄的路徑名進行映射)。
7.3.3.1 硬連接
原文件名和連接文件名都指向相同的物理地址。目錄不能有硬連接;硬連接不能跨越文件系統(不能跨越不同的分區)文件在磁盤中只有一個拷貝,節省硬盤空間;由於刪除文件要在同一個索引節點屬於唯一的連接時才能成功,因此可以防止不必要的誤刪除。
7.3.3.2 符號連接
用ln -s命令建立文件的符號連接符號連接是linux特殊文件的一種,作為一個文件,它的數據是它所連接的文件的路徑名。類似windows下的快捷方式。可以刪除原有的文件而保存連接文件,沒有防止誤刪除功能。
8.作業管理
8.1 作業狀態
- 提交(通過輸入設備送入計算機)
- 后備(通過Spooling系統將作業輸入到計算機系統的后備存儲器中,等待作業調度程序調度)
- 執行
- 完成。
8.2 常用的作業調度算法
- 先來先服務
- 短作業優先
- 響應比高優先
- 優先級調度算法
- 均衡調度算法。
參考文章