第一篇:操作系統總結
第一部分概述
一、導論
1.操作系統做什么
① 馮諾依曼體系結構 ② OS角色:對上:控制程序正確執行,使用方便;對下:資源分配器 ③ 核心功能:進程管理,內存管理,文件管理,輸入輸出,保護和安全 2.計算機系統組織
① 中斷 ② 存儲結構:寄存器→高速緩存→主存→電子磁盤→光盤→磁帶 ③ I/O結構:I/O的同步、異步;慢速設備(中斷)快速設備(DMA)3.操作系統結構:多道(使CPU總有一個任務執行)、分時(高頻率切換任務)4.進程管理
① 進程有其生命周期,進程是執行中的程序 ② 管理活動:創建或刪除用戶或系統進程;掛起或重啟進程;防死鎖;提供進程同步、通信機制 ③ 目的:使進程可以運行,相互協調不死鎖 5.內存管理
① 目標:內核健壯 ② 保護方法:獨立操作模式:用戶模式,內核模式;計數器定時中斷防止死循環 6.存儲管理
① 解決問題:速度匹配→緩存(緩存的命中率)② 等級問題:一致性;多處理器下各緩存的一致性
二、操作系統結構
1.操作系統服務:用戶界面,程序執行,I/O操作,文件系統操作,通信,錯誤檢測,資源分配,統計,保護和安全。
2.操作系統的用戶界面:命令解釋程序,圖形用戶界面
3.系統調用類型:進程控制,文件管理,設備管理,信息維護,通信
4.系統程序分類:文件管理,狀態信息,文件修改,程序設計語言支持,程序裝入和執行,通信,系統工具,應用程序。5.操作系統結構:
① 簡單結構(MS-DOS):小空間多功能,應用程序直接操作硬件,不安全,無模塊,接口和功能層次沒有區分 ② 分層法:難劃分,效率低,但是構造和調試簡單化 ③ 微內核:包括最小的進程和內存管理以及通信,便于擴充操作系統。④ 模塊化:動態加載模塊,允許內核提供核心服務,也能動態的實現特定的功能 ⑤ 組合結構
第二部分進程管理
一、進程
1.進程的概念
① 進程通常包括:程序計數器,棧,數據段 ② 進程狀態:新建,運行,等待,就緒,終止 ③ 進程控制塊PCB:進程狀態,程序計數器,CPU寄存器,CPU調度信息,內存管理信息,記賬信息,I/O狀態信息 ④ 2.進程調度
① 調度隊列:作業隊列,就緒隊列,設備隊列
P80 ② 調度程序:長期調度程序(作業調度程序):從作業池中選擇進程,并裝入內存準備執行。短期調度程序(CPU調度程序):從準備執行的進程中選擇進程,并為之分配CPU時間。中期調度程序:能將進程從內存中移出。
長短期的區別是執行頻率;長期調度控制多道程序設計的程度,中期調度可以降低多道。③ I/O綁定進程,CPU綁定進程 ④ 上下文切換:將CPU切換到另一個進程需要保存當前進程的狀態和恢復另一進程的狀態。
3.進程操作
① 進程創程:創建新進程的執行方式(父子進程并發執行;父進程等待直到某個或全部子進程執行完畢)
新進程地址空間(子進程是父進程的副本;子進程裝入另一個新程序)資源共享(所有/子集/不共享)② 進程終止
父進程終止子進程的原因(子進程使用了超過它分配的資源;分配給子程序的任務不需要了;父進程結束)
4.進程間通信
① 通信基本模型:共享內存,消息傳遞 ② 共享內存:消費者可能等待生產者;無限緩沖區,有限緩沖區的區別 ③ 消息傳遞:
命名:直接通信(對稱尋址:接受者命名發送者;非對稱尋址:接受者不需要命名發送者)間接通信(郵箱、端口的參與)同步:阻塞與非阻塞(發送,接收),同步與異步 緩沖:零容量(無緩沖);有限容量、無限容量(自動緩沖)
5.客戶機-服務器通信:套接字SOCKET,RPC遠程調用,RMI遠程方法調用
二、線程
1.概述:多線程優點:響應度高,資源共享,經濟,多處理器體系結構的利用
2.多線程模型:用戶層的用戶線程或內核層的內核線程,用戶線程受內核支持,而無需內核管理,而內核線程由操作系統直接支持和管理,這兩種方法支持多線程。① 多對一模型(效率比較高,阻塞系統調用的后果)② 一對一模型(更好的并發功能,缺點是創建一個用戶線程就需要一個內核進程)③ 多對多模型(用戶可以創建任意多的線程;二級模型=多對多+一對一)3.多線程問題
① 系統調用fork().exex()② 線程取消異步取消(立即終止),延遲取消(檢查是否應該終止)③ 信號處理:信號必須有一個處理程序 ④ 線程池:優點(處理請求速度快,線程數量可控制)
三、CPU調度
1.基本概念
① CPU區間和I/O區間的概念 ② 搶占與非搶占調度的概念(發生在:一個進程從運行切換到等待、運行切換到就緒、等待切換到就緒、以及終止,1,4非搶占,2,3搶占)2.調度準則:CPU利用率(使CPU盡量忙),吞吐量(測量工作的方法),周轉時間(從進程提交到完成的時間),等待時間,響應時間 3.調度算法
① 先到先服務調度FCFS(非搶占的)② 最短作業優先調度SJF(搶占,最優算法,難知道下一CPU區間長度,用于長期調度)③ 最短剩余時間優先調度SRTF(強占式的SJF,適合長期調度)④ 優先級調度(問題:無窮阻塞或饑餓,老化來解決;非搶占方式不用占用CPU切換)⑤ 輪轉調度RR(專為分時系統設計,是可搶占的,時間片過大變為FCFS,時間片過小等待時間段,但是切換頻繁)⑥ 多級隊列調度(前臺與后臺的調度算法不同,RR與FCFS)? ⑦ 多級反饋隊列調度 ⑧ 實時調度:硬實時(在特定硬件上保證時間),軟實時:盡力而為,優先級不變,沒有饑餓現象
4.算法評估
① 確定性模型甘特圖 ② 排隊模型 N=入*W(N平均隊列長度,W為隊列的平均等待時間,入為新進程到達隊列的平均到達率)③ 模擬 ④ 實現
四、進程同步
1. 背景:競爭條件:共享內存,共享變量 2. 臨界區問題
① 臨界區解決方案:進入去,臨界區,退出區,剩余區 ② 效果:互斥,有空讓進,有限等待 ③ 證明:1.互斥,臨界區一個時間只能有一個進程2.前進,臨界區內無進程執行,那么只有那些不在剩余區內執行的進程可參加選擇,這種選擇不能無限延遲3.有限等待,從一個進程做出進入臨界區的請求,知道該請求允許為止,其他進程允許進入其臨界區的次數有上限。④ PETERSON算法
3. 信號量:計數信號量,二進制信號量
① 技術信號量用于控制訪問:當每個線程需要使用資源時,需要對該信號量執行acquire()操作,當線程釋放資源時,需要對該信號執行release()操作。② 用信號量解決同步問題
4. 管程:管程結構確保一次只有一個進程能在管程內活動 5. 經典同步問題
① 生產者消費者問題 ② 讀者寫者問題 ③ 哲學家吃飯問題
五、死鎖
1.死鎖特征
① 必要條件:互斥,占有并等待,非搶占,循環等待 ② 資源分配圖:分配圖沒有環則沒有死鎖,有環則有死鎖;有環則可能有死鎖。2.死鎖預防
① 互斥:通常不能通過否定互斥條件來預防死鎖:有的資源本身就是非共享的。② 占有并等待:協議一:每個進程在執行前申請并獲得所有資源;協議二,允許進程在沒有資源時才可以申請資源。協議缺點:資源利用率低,可能發生饑餓。③ 非搶占:協議:如果一個進程占有資源并申請另一個不能立即分配的資源,那么其現在已分配的資源都可被搶占。④ 循環等待:對所有資源類型進行完全排序,且要求每個進程按遞增順序來申請資源。
3.死鎖避免
① 安全狀態:如果系統能按某個順序為每個進程分配資源并能避免死鎖,那么系統狀態就是安全的。② 單實例:資源分配圖:申請邊,分配邊,需求邊 ③ 多實例:銀行家算法Available(向量),Max(矩陣),Allocation(矩陣),Need(矩陣), 4.死鎖檢測
① 單實例:等待圖:當且僅當等待圖中有一個環時,系統存在死鎖 ② 多實例:類似銀行家算法 5.死鎖恢復
① 進程終止:終止所有死鎖進程;一次只終止一個進程,直到取消死鎖循環為止 ② 資源搶占:問題:選擇一個犧牲品;回滾;饑餓
第三部分內存管理
一、內存管理
1.背景
① 地址綁定:編譯時(編譯時就知道進程將在內存中的駐留地址,那么就可以生成絕對代碼),加載時(生成可重定位的代碼),運行時(如果進程在執行時可以從一個內存段移到另一個內存段,那么綁定必須延遲到執行時才進行)② 邏輯地址(CPU所生成的地址)物理地址(內存單元所看到的地址)③ 動態加載(子程序只在調用時加載,優點不用的子程序絕不會被加載)④ 動態鏈接與共享庫(將連接延遲到運行時)2.交換(沒看)
3.連續內存分配:單分區,多分區
4.非連續內存分配:分頁(分頁技術不會產生外部碎片)5.動態存儲分配問題:首次適應,最佳適應,最差適應 6.頁表結構:層次頁表,哈希頁表,反向頁表
二、虛擬內存
1.背景
① 多道盡可能多的程序,這也是內存管理的目標 ② 虛擬內存好處:可以運行比物理內存大的程序;更快的啟動和響應(載入更快);更多的多道;更容易的共享文件盒地址空間;更少的輸入輸出。
2.按需調頁:在需要時才調入頁
① 有效位-無效位來來確定頁是否在內存 ② 有幀就加入,無幀就換頁,頁錯誤處理流程:檢查內部表確定引用是否合法→非法則終止,合法則調入→找到空閑幀,裝入內存→修改內部表→重啟指令 ③ 按需調頁的有效訪問時間:effective access time=(1-p)*ma+p*處理頁錯誤的時間 3.頁面置換(引用串)
① FIFO 先入先出 ② 最優算法:向后看,換頁的時候看內存中哪個頁最晚用;是所有算法中產生頁錯誤最低的算法;問題:需要引用串的未來知識 ③ LRU最近最少使用算法:往前看,內存中哪頁在列表序列中離的最遠,無Belady異常 ④ 算法實現:計數器(最近最少使用:換計數器值最小的)代價大:系統級,可能溢出,一定會寫全表
頁碼堆棧:每當引用一個頁,該頁就從棧中刪除并放在棧頂。嚴格實現,但是代價高。
二次機會:引用位,引用時改為1,;換頁時,是1則置零,是0則換 計數算法:LFU最不經常使用,MFU最經常使用(可采用老化)
4.幀分配
① 分配策略限制:所分配的幀不能超過可用幀的數量,大于最小需求 ② 每個進程幀的最少數量是由體系結構決定的,而最大數量幀是由可用物理內存決定的。③ 當指令完成之前出現頁錯誤,該指令必須重新執行 ④ 幀分配方法:
固定分配:平均分配、按比例分配 優先級分配:全局置換(幀數可變),局部置換(固定);全局置換算法的一個問題是進程不能控制其頁錯誤率,但是全局置換通常會有更好的系統吞吐量,且更為常用。
5.系統顛簸
① 顛簸產生的原因:搶幀→I/O上升→CPU使用率降低→多道繼續增加→忙于換頁 ② 工作集合策略防止了顛簸,并盡可能的提高了多道程序的程度,可以通過頁錯誤頻率PFF來直接測量和控制頁錯誤以防止顛簸。上限之上分配更多,下限之下,減少幀數
6.其他問題
① 預調頁關鍵問題:采用預調頁的成本是否小于處理響應頁錯誤的成本。② 頁大小問題:最佳頁大小的選擇,大頁,小頁 ③ 優化程序結構
第四部分存儲管理
一、文件系統接口
1.文件概念
① 文件是邏輯外存的最小分配單元,即數據除非在文件中,否則不能寫到內存中。② 文件操作:寫,讀,重定位,刪除,截短 ③ 文件加鎖:共享鎖,專用鎖;強制,建議文件加鎖機制 2.訪問方法:順序訪問,直接訪問,其他方法(索引)3.目錄結構
① 目錄操作:創建文件,刪除文件,遍歷目錄,重命名文件,跟蹤文件系統 ② 評價目錄結構:命名(不同文件同名),分組(同一文件不同命名)③ 單層結構目錄(命名,分組均無),雙層結構目錄(可命名不可分組),樹狀結構(絕對,相對路徑;可命名分組),無環圖目錄(硬鏈接,軟鏈接),通用圖目錄
二、文件系統實現
1.文件系統結構:應用程序→邏輯文件系統→文件組織模塊→基本文件系統→I/O控制→設備
2.目錄實現:線性列表(編程簡單,運行費時,查找文件需要線性搜索)
哈希表(采取策略避免沖突)
3.分配方法
① 連續分配:每個文件在磁盤上占有一組連續的塊;困難時為新文件找到空間,外部碎片問題也可能很大,確定文件分配多大空間,② 鏈接分配:解決了連續分配的所有問題;必須順序訪問文件,指針需要空間,由于指針分配在整個磁盤,可靠性就成了一個問題。
FAT文件分配表:改善了隨機訪問時間,但是需要大量磁頭尋道時間 ③ 索引分配:把所有指針都放在一起,構成索引塊;支持直接訪問,且沒有外部碎片問題,但是會浪費空間;索引塊分多大是個問題 鏈接方案(一個索引塊可以指向另一索引塊構成鏈接)
多層索引(第一個索引塊指向第二個索引塊,第二個指向文件數據塊)組合方案P404 N級間接塊(計算)
4.空閑空間管理:為向量(1空0滿)塊號碼計算:(值為0的數字)*(一個字的位數)+第一個值為1的位的偏移;鏈表(所有空閑的塊用鏈表鏈接起來);組(將N個空閑塊的地址存儲在第一個空閑塊中);計數()
第二篇:操作系統總結
什么是OS,OS有哪幾個特征?其最基本的特征是什么?
答:操作系統是為了達到方便用戶和提高利用率的目的而設計的,控制和管理計算機硬件和軟件資源,合理的組織計算機工作流程的程序的集合它具有并發,共享,虛擬,異步性四個基本特征。其中最基本的特征為并發性
2什么是進程及與程序的區別與聯系,為什么PCB是進程存在的唯一標志?
進程是程序的一次執行過程,是系統進行資源分配和調度的一個獨立單位。
區別:(1)進程是動態的,程序是靜態的。(2)進程具有并發性,而程序沒有(3)進程是資源分配和處理機調度的獨立單位,其并發性受系統制約(4)一個程序多次執行,對應多個進程,不同的進程可以包含同一程序PCB:因為在進程的整個生命期中,系統總是通過PCB對進程進行控制的3處理機三級調度分別完成什么工作?
(1)高級調度:就是作業調度,用于決定把外存上處于后備隊列中的哪些作業調入內存,并為它們創建進程,分配必要的資源,然后,再將新創建的進程排在就緒隊列上,準備執行
(2)低級調度:就是進程調度,它決定就緒隊列中的哪個進程將獲得處理機,然后由分派程序執行把處理機分配給該進程的操作
(3)中級調度:實際上就是存儲器管理中的對換功能試說明引起進程調度的時機是什么?
(1)進程完畢(2)時間片用完(3)I/O請求發生某個事件(4)原語:wait操作,阻塞(5)高優先者進入 5什么是臨界資源和臨界區?
一次僅允許一個進程訪問的資源稱為臨界資源。訪問臨界資源的代碼段稱為臨街區
6試修改下面生產者---消費問題中,如果將兩個wait操作即wait(full)和wati(mutex)互換 位置,或者將signal(mutex)與signal(full)互換位置,結果會如何?
(1)wait(full)和wait(mutex)互換位置后,因為mutex在這兒是全局變量,執行完wait(mutex),則mutex賦值為0,倘若full 也為0,則該生產者進程就會轉入進程鏈表進行等待,而生產者進程會因全局變量mutex為0 而進行等待,使full 始終為0,這樣就形成了死鎖.(2)而signal(mutex)與signal(full)互換位置后,從邏輯上來說應該是一樣的.7什么是死鎖?死鎖產生的有哪些
死鎖是因多個進程因競爭資源而造成的一種僵局(1)互斥條件:一個資源每次只能被一個進程使用。(2)請求與保持條件:一個進程因請求資源而阻塞時,對已獲得的資源保持不放。
(3)不剝奪條件:進程已獲得的資源,在末使用完之前,不能強行剝奪。(4)環路等待條件:若干進程之間形成一種頭尾相接的循環等待資源關系。同步機制應遵循的基本準則是什么?
(1)空閑讓進(2)忙則等待(3)有限等待(4)讓權等待.程序有幾種連接方式
(1)靜態鏈接方式(2)裝入時動態鏈接(3)運行時動態鏈接
10什么是動態重定位方式及為什么要引入動態重定位方式及如何實現?
程序和數據裝入內存時需對目標程序中的地址進行修改。這種把邏輯地址轉變為內存的物理地址的過程叫重定位
11什么是分頁,什么是分段,在存儲管理中兩者的區別
(1)分頁是將一個進程的邏輯地址空間分成若干大小相等的部分,每一部分稱作頁面,內存劃分成與頁面大小相等的物理塊,進程的任何一頁可放入內存的任何一個物理塊中,段是信息的邏輯單位,含有一組意義相對完整的信息,更好的來滿足用戶的需要。
(2)分段是一組邏輯信息的集合,即一個作業中相對獨立的部分。多個段在內存中占有離
散的內存單元,對每個段,在內存占有一連續的內存空間,其內存的分配與回收同可變分區的內存分配與回收辦法
分頁與分段的主要區別是?
(1)頁是信息的物理單位,分頁是為了實現離散分配方式,以消減內存的外零頭,提高內存的利用率(2)頁的大小固定,并且有系統決定,而段的長度不固定決定于用戶所編寫的程序(3)分頁作業的地址空間是一維的,段是二維的。
12動態分區存儲管理中內存的回收方式
13.什么是對換,對換的分類及主要用途在進程換出時應遵循什么原則
對換是把內存中暫時不能運行的進程或者暫時不用的程序和數據調出到外存上,以便騰出足夠的內存空間,再把因具備運行條件的進程或者進程所需要的程序或數據調入內存。
分類:(1)整體對換(進程對換):以整個進程為單位(2)頁面對換(分段對換/部分對換):以頁和段為單位
規則:內存空間不夠用才換出。系統處于阻塞狀態,且優先級最低的進程最先換出。若換入:系統處于就緒狀態,且優先級最高的進程最先換入,直至無可換入的進程為止。
14.什么是虛擬存儲器虛擬存儲器具有哪些特性,最基本的特性是什么?虛擬存儲器的容量受哪兩方面的限制?
虛擬存儲器:是指具有請求調入功能和置換功能,能從邏輯上對內存容量進行擴充的一種存儲器系統。
特征:(1)離散性(最基本的特征)(2)多次性(3)對換性(4)虛擬性
虛擬存儲器的容量主要受指令中表示地址的字長和外存的容量的限制。
15.在沒有快表的分頁存儲管理中取一條指令需訪問幾次內存及訪問內存的目的,及具有快表的分頁存儲管理系統的地址變換過程。
兩次。第一次:訪問內存中的頁表,從中找到頁的物理塊號,再將塊號與頁內偏移量W拼接,形成物理地址。第二次:從第一次所得的物理地址中獲得所需數據
地址變換過程:CPU給出有效地址后,地址變換機構將頁號與快表中的所有頁號進行比較,若有與此相匹配的頁號,則表示所訪問的頁在快表中,從中讀出物理塊號與頁內地址相拼接,得到物理地址;若訪問的頁不在快表中,則要訪問在內存中的頁表,從頁表中讀出物理塊號與頁內地址相拼接,得到物理地址,同時,還應將此頁表項寫入快表中,若此時快表已滿,則OS必須找到一個老的并且被認為不再需要的頁表項將它換出。
16.什么是緊湊技術及為什么要引入
緊湊:把原來多個分散的小分區拼接成一個大分區的方法
引入:提高內存的利用率,讓大容量的作業可以裝入并且減少零頭或碎片
17程序的局部性原理是什么局限性的兩個主要表現方面
局部性原理:(1)程序執行時,除少部分轉移和過程調用指令外,大多數條件下任是順序執行的(2)過程調用將會使程序的執行軌跡由一部分區域轉至另一部分區域,但經驗就看出過程調用的深度在大多數情況下不會超過5(3)程序中存在許多循環結構,這些雖然只能由少數指令構成但它們將多次執行(4)程序中還包括許多對數據結構的處理
主要表現在:(1)時間局限性(2)空間局限性
18.什么是spooling技術spooling系統有哪些組成Spooling技術是對脫機輸入,輸出系統的模擬。
組成:(1)輸入井和輸出井(2)輸出緩沖區和輸入緩沖區(3)輸入進程SPi和輸出進程SPo(4)請求打印隊列
特點:(1)提高了I/O的速度(2)將獨占設備改為共享設備(3)實現了虛擬設備功能
第三篇:操作系統總結
第一部分概述
一、導論
1.操作系統做什么
① 馮諾依曼體系結構
② OS角色:對上:控制程序正確執行,使用方便;對下:資源分配器
③ 核心功能:進程管理,內存管理,文件管理,輸入輸出,保護和安全
2.計算機系統組織
① 中斷
② 存儲結構:寄存器→高速緩存→主存→電子磁盤→光盤→磁帶
③ I/O結構:I/O的同步、異步;慢速設備(中斷)快速設備(DMA)
3.操作系統結構:多道(使CPU總有一個任務執行)、分時(高頻率切換任務)
4.進程管理
① 進程有其生命周期,進程是執行中的程序
② 管理活動:創建或刪除用戶或系統進程;掛起或重啟進程;防死鎖;提供進程
同步、通信機制
③ 目的:使進程可以運行,相互協調不死鎖
5.內存管理
① 目標:內核健壯
② 保護方法:獨立操作模式:用戶模式,內核模式;計數器定時中斷防止死循環
6.存儲管理
① 解決問題:速度匹配→緩存(緩存的命中率)
② 等級問題:一致性;多處理器下各緩存的一致性
二、操作系統結構
1.操作系統服務:用戶界面,程序執行,I/O操作,文件系統操作,通信,錯誤檢測,資源分配,統計,保護和安全。
2.操作系統的用戶界面:命令解釋程序,圖形用戶界面
3.系統調用類型:進程控制,文件管理,設備管理,信息維護,通信
4.系統程序分類:文件管理,狀態信息,文件修改,程序設計語言支持,程序裝入和
執行,通信,系統工具,應用程序。
5.操作系統結構:
① 簡單結構(MS-DOS):小空間多功能,應用程序直接操作硬件,不安全,無模塊,接口和功能層次沒有區分
② 分層法:難劃分,效率低,但是構造和調試簡單化
③ 微內核:包括最小的進程和內存管理以及通信,便于擴充操作系統。
④ 模塊化:動態加載模塊,允許內核提供核心服務,也能動態的實現特定的功能 ⑤ 組合結構
第二部分進程管理
一、進程
1.進程的概念
① 進程通常包括:程序計數器,棧,數據段
② 進程狀態:新建,運行,等待,就緒,終止
③ 進程控制塊PCB:進程狀態,程序計數器,CPU寄存器,CPU調度信息,內存
管理信息,記賬信息,I/O狀態信息
④
2.進程調度
① 調度隊列:作業隊列,就緒隊列,設備隊列P80
② 調度程序:長期調度程序(作業調度程序):從作業池中選擇進程,并裝入內存
準備執行。短期調度程序(CPU調度程序):從準備執行的進程中選擇進程,并為之分配CPU時間。中期調度程序:能將進程從內存中移出。
長短期的區別是執行頻率;長期調度控制多道程序設計的程度,中期調度可以降低多道。
③ I/O綁定進程,CPU綁定進程
④ 上下文切換:將CPU切換到另一個進程需要保存當前進程的狀態和恢復另一進
程的狀態。
3.進程操作
① 進程創程:創建新進程的執行方式(父子進程并發執行;父進程等待直到某個
或全部子進程執行完畢)
新進程地址空間(子進程是父進程的副本;子進程裝入另一個新程序)
資源共享(所有/子集/不共享)
② 進程終止
父進程終止子進程的原因(子進程使用了超過它分配的資源;分配給子程序的任務不需要了;父進程結束)
4.進程間通信
① 通信基本模型:共享內存,消息傳遞
② 共享內存:消費者可能等待生產者;無限緩沖區,有限緩沖區的區別
③ 消息傳遞:
命名:直接通信(對稱尋址:接受者命名發送者;非對稱尋址:接受者不需要命名發送者)間接通信(郵箱、端口的參與)
同步:阻塞與非阻塞(發送,接收),同步與異步
緩沖:零容量(無緩沖);有限容量、無限容量(自動緩沖)
5.客戶機-服務器通信:套接字SOCKET,RPC遠程調用,RMI遠程方法調用
二、線程
1.概述:多線程優點:響應度高,資源共享,經濟,多處理器體系結構的利用
2.多線程模型:用戶層的用戶線程或內核層的內核線程,用戶線程受內核支持,而無
需內核管理,而內核線程由操作系統直接支持和管理,這兩種方法支持多線程。① 多對一模型(效率比較高,阻塞系統調用的后果)
② 一對一模型(更好的并發功能,缺點是創建一個用戶線程就需要一個內核進程)③ 多對多模型(用戶可以創建任意多的線程;二級模型=多對多+一對一)
3.多線程問題
① 系統調用fork().exex()
② 線程取消異步取消(立即終止),延遲取消(檢查是否應該終止)
③ 信號處理:信號必須有一個處理程序
④ 線程池:優點(處理請求速度快,線程數量可控制)
三、CPU調度
1.基本概念
① CPU區間和I/O區間的概念
② 搶占與非搶占調度的概念(發生在:一個進程從運行切換到等待、運行切換到
就緒、等待切換到就緒、以及終止,1,4非搶占,2,3搶占)
2.調度準則:CPU利用率(使CPU盡量忙),吞吐量(測量工作的方法),周轉時間(從
進程提交到完成的時間),等待時間,響應時間
3.調度算法
① 先到先服務調度FCFS(非搶占的)
② 最短作業優先調度SJF(搶占,最優算法,難知道下一CPU區間長度,用于長
期調度)
③ 最短剩余時間優先調度SRTF(強占式的SJF,適合長期調度)
④ 優先級調度(問題:無窮阻塞或饑餓,老化來解決;非搶占方式不用占用CPU
切換)
⑤ 輪轉調度RR(專為分時系統設計,是可搶占的,時間片過大變為FCFS,時間片
過小等待時間段,但是切換頻繁)
⑥ 多級隊列調度(前臺與后臺的調度算法不同,RR與FCFS)?
⑦ 多級反饋隊列調度
⑧ 實時調度:硬實時(在特定硬件上保證時間),軟實時:盡力而為,優先級不變,沒有饑餓現象
4.算法評估
① 確定性模型甘特圖
② 排隊模型 N=入*W(N平均隊列長度,W為隊列的平均等待時間,入為新進程
到達隊列的平均到達率)
③ 模擬
④ 實現
四、進程同步
1. 背景:競爭條件:共享內存,共享變量
2. 臨界區問題
① 臨界區解決方案:進入去,臨界區,退出區,剩余區
② 效果:互斥,有空讓進,有限等待
③ 證明:1.互斥,臨界區一個時間只能有一個進程2.前進,臨界區內無進程執行,那么只有那些不在剩余區內執行的進程可參加選擇,這種選擇不能無限延遲3.有限等待,從一個進程做出進入臨界區的請求,知道該請求允許為止,其他進程允許進入其臨界區的次數有上限。
④ PETERSON算法
3. 信號量:計數信號量,二進制信號量
① 技術信號量用于控制訪問:當每個線程需要使用資源時,需要對該信號量執行
acquire()操作,當線程釋放資源時,需要對該信號執行release()操作。
② 用信號量解決同步問題
4. 管程:管程結構確保一次只有一個進程能在管程內活動
5. 經典同步問題
① 生產者消費者問題
② 讀者寫者問題
③ 哲學家吃飯問題
五、死鎖
1.死鎖特征
① 必要條件:互斥,占有并等待,非搶占,循環等待
② 資源分配圖:分配圖沒有環則沒有死鎖,有環則有死鎖;有環則可能有死鎖。
2.死鎖預防
① 互斥:通常不能通過否定互斥條件來預防死鎖:有的資源本身就是非共享的。② 占有并等待:協議一:每個進程在執行前申請并獲得所有資源;協議二,允許
進程在沒有資源時才可以申請資源。協議缺點:資源利用率低,可能發生饑餓。③ 非搶占:協議:如果一個進程占有資源并申請另一個不能立即分配的資源,那
么其現在已分配的資源都可被搶占。
④ 循環等待:對所有資源類型進行完全排序,且要求每個進程按遞增順序來申請
資源。
3.死鎖避免
① 安全狀態:如果系統能按某個順序為每個進程分配資源并能避免死鎖,那么系統
狀態就是安全的。
② 單實例:資源分配圖:申請邊,分配邊,需求邊
③ 多實例:銀行家算法Available(向量),Max(矩陣),Allocation(矩陣),Need(矩
陣),4.死鎖檢測
① 單實例:等待圖:當且僅當等待圖中有一個環時,系統存在死鎖
② 多實例:類似銀行家算法
5.死鎖恢復
① 進程終止:終止所有死鎖進程;一次只終止一個進程,直到取消死鎖循環為止 ② 資源搶占:問題:選擇一個犧牲品;回滾;饑餓
第三部分內存管理
一、內存管理
1.背景
① 地址綁定:編譯時(編譯時就知道進程將在內存中的駐留地址,那么就可以生
成絕對代碼),加載時(生成可重定位的代碼),運行時(如果進程在執行時可以從一個內存段移到另一個內存段,那么綁定必須延遲到執行時才進行)
② 邏輯地址(CPU所生成的地址)物理地址(內存單元所看到的地址)
③ 動態加載(子程序只在調用時加載,優點不用的子程序絕不會被加載)④ 動態鏈接與共享庫(將連接延遲到運行時)
2.交換(沒看)
3.連續內存分配:單分區,多分區
4.非連續內存分配:分頁(分頁技術不會產生外部碎片)
5.動態存儲分配問題:首次適應,最佳適應,最差適應
6.頁表結構:層次頁表,哈希頁表,反向頁表
二、虛擬內存
1.背景
① 多道盡可能多的程序,這也是內存管理的目標
② 虛擬內存好處:可以運行比物理內存大的程序;更快的啟動和響應(載入更快);
更多的多道;更容易的共享文件盒地址空間;更少的輸入輸出。
2.按需調頁:在需要時才調入頁
① 有效位-無效位來來確定頁是否在內存
② 有幀就加入,無幀就換頁,頁錯誤處理流程:檢查內部表確定引用是否合法→
非法則終止,合法則調入→找到空閑幀,裝入內存→修改內部表→重啟指令 ③ 按需調頁的有效訪問時間:effective access time=(1-p)*ma+p*處理頁錯誤的時間
3.頁面置換(引用串)
① FIFO 先入先出
② 最優算法:向后看,換頁的時候看內存中哪個頁最晚用;是所有算法中產生頁
錯誤最低的算法;問題:需要引用串的未來知識
③ LRU最近最少使用算法:往前看,內存中哪頁在列表序列中離的最遠,無Belady
異常
④ 算法實現:計數器(最近最少使用:換計數器值最小的)代價大:系統級,可
能溢出,一定會寫全表
頁碼堆棧:每當引用一個頁,該頁就從棧中刪除并放在棧頂。嚴格實現,但是代價高。
二次機會:引用位,引用時改為1,;換頁時,是1則置零,是0則換
計數算法:LFU最不經常使用,MFU最經常使用(可采用老化)
4.幀分配
① 分配策略限制:所分配的幀不能超過可用幀的數量,大于最小需求
② 每個進程幀的最少數量是由體系結構決定的,而最大數量幀是由可用物理內存
決定的。
③ 當指令完成之前出現頁錯誤,該指令必須重新執行
④ 幀分配方法:
固定分配:平均分配、按比例分配
優先級分配:全局置換(幀數可變),局部置換(固定);全局置換算法的一個問題是進程不能控制其頁錯誤率,但是全局置換通常會有更好的系統吞吐量,且更為常用。
5.系統顛簸
① 顛簸產生的原因:搶幀→I/O上升→CPU使用率降低→多道繼續增加→忙于換頁 ② 工作集合策略防止了顛簸,并盡可能的提高了多道程序的程度,可以通過頁錯
誤頻率PFF來直接測量和控制頁錯誤以防止顛簸。上限之上分配更多,下限之下,減少幀數
6.其他問題
① 預調頁關鍵問題:采用預調頁的成本是否小于處理響應頁錯誤的成本。② 頁大小問題:最佳頁大小的選擇,大頁,小頁
③ 優化程序結構
第四部分存儲管理
一、文件系統接口
1.文件概念
① 文件是邏輯外存的最小分配單元,即數據除非在文件中,否則不能寫到內存中。② 文件操作:寫,讀,重定位,刪除,截短
③ 文件加鎖:共享鎖,專用鎖;強制,建議文件加鎖機制
2.訪問方法:順序訪問,直接訪問,其他方法(索引)
3.目錄結構
① 目錄操作:創建文件,刪除文件,遍歷目錄,重命名文件,跟蹤文件系統 ② 評價目錄結構:命名(不同文件同名),分組(同一文件不同命名)
③ 單層結構目錄(命名,分組均無),雙層結構目錄(可命名不可分組),樹狀結
構(絕對,相對路徑;可命名分組),無環圖目錄(硬鏈接,軟鏈接),通用圖目錄
二、文件系統實現
1.文件系統結構:應用程序→邏輯文件系統→文件組織模塊→基本文件系統→I/O控
制→設備
2.目錄實現:線性列表(編程簡單,運行費時,查找文件需要線性搜索)
哈希表(采取策略避免沖突)
3.分配方法
① 連續分配:每個文件在磁盤上占有一組連續的塊;困難時為新文件找到空間,外部碎片問題也可能很大,確定文件分配多大空間,② 鏈接分配:解決了連續分配的所有問題;必須順序訪問文件,指針需要空間,由于指針分配在整個磁盤,可靠性就成了一個問題。
FAT文件分配表:改善了隨機訪問時間,但是需要大量磁頭尋道時間
③ 索引分配:把所有指針都放在一起,構成索引塊;支持直接訪問,且沒有外部
碎片問題,但是會浪費空間;索引塊分多大是個問題
鏈接方案(一個索引塊可以指向另一索引塊構成鏈接)
多層索引(第一個索引塊指向第二個索引塊,第二個指向文件數據塊)
組合方案P404 N級間接塊(計算)
4.空閑空間管理:為向量(1空0滿)塊號碼計算:(值為0的數字)*(一個字的位
數)+第一個值為1的位的偏移;鏈表(所有空閑的塊用鏈表鏈接起來);組(將N個空閑塊的地址存儲在第一個空閑塊中);計數()
第四篇:操作系統總結
操作系統基本基礎概念
多任務是指用戶可以在同一時間內運行多個應用程序,每個應用程序被稱作一個任務。像Windows、LINUX就是支持多任務的操作系統。每個任務使用由操作系統分配的短暫的時間片(Timeslice)輪流使用CPU,由于CPU對每個時間片的處理速度非常快,在用戶看來好像這些任務在同時執行,這叫做時間片輪轉調度法。還有更多的多任務調度方法。
實時系統
(REAL TIME system)是指系統能及時的響應外部時間的請求,在規定的時間內完成對該事件的處理,并控制所有實時任務協調一致的運行。分為硬實時任務和軟實時任務,系統對任務的截止時間有要求否則會出現難以預測的結果,這就是硬實時任務,反之要求不是很嚴格則為軟實時任務。
操作系統的基本特性
并發與并行:并發性是兩個或多個事件在同一時刻發生。而并行性是兩個或多個事件在同一時間間隔內發生。
進程:為了使多個程序能并發的執行,系統必須為每個程序建立進程(process)。簡單說來~進程是指在操作系統中能獨立運行并作為資源分配的基本單位。他是由一組機器指令數據、堆棧等組成的,是一個能獨立運行的活動實體。多個進程之間可以并發的執行和交換信息。一個進程在運行時需要一定的資源,如CPU、內存空間、IO設備等。
我的注解:進程很重要。Linux的進程之間的關系可以這樣描述:一個完整的main函數運行的時候,在linux里是以進程的形式存在的。系統啟動之后運行的第一個進程的進程號是1,叫做init進程,一切進程都從它派生出來,一個父進程可以派生另一個進程,即為子進程,這倆進程為并行關系。子進程也可以創建子進程。
進程的創建在linux里邊用fork()函數它有兩個返回值,一個是在父進程中返回,返回的是子進程號,一個是在子進程中返回,如果子進程創建成功,則返回的是0。子進程是父進程的一個拷貝,現代的進程創建都用vfork()創建子進程之后,并不拷貝全部的進程空間,只有在用到時才拷貝,叫做寫時復制技術(copy on write)。
Linux里邊這樣創建子進程:
pid_t pid=fork();//這里的pid_t是一種數據類型(如int),這里代表進程號(實質上也是個整形變量int)
If(pid==0){這里邊就是子進程代碼}
Else if(pid>0){這里邊是父進程代碼,pid的值是子進程的進程號PID}
線程:通常在一個進程中可以包含若干個線程,他們可以利用進程所擁有的資源。在引入線程的操作系統中,一般都把進程作為分配資源的基本單位。而把線程作為獨立運行和獨立調度的基本單位。優點:運行效率更高。
進程的狀態:一般分為就緒狀態。執行狀態。阻塞狀態。
操作系統產生死鎖的原因:1.競爭資源。2.進程間推進順序非法。比如說:一個進程占有一個資源A,當他運行到需要用到被另一個進程占用的資源B時,沒有得到,于是進入等待退出運行,而這個占有資源B的進程還想得到資源A,但是占有A的進程此刻在休眠,也沒得到,所以這個進程也進入等待退出運行。這樣兩兩相互等待造成了死鎖。解決方法:1.在進程運行開始時就把所有資源占好。2.按順序加鎖。比如要得到資源B首先要對A加鎖,如果得不到就不能加鎖。所有進程都按照這個方法進行。
第五篇:操作系統實驗總結
操作系統實驗總結
學號:
姓名:
班級:
在本學期的計算機操作系統這門課學習當中,為了更好的了解操作系統相關知識,我們通過OS Lab平臺做了幾個實驗。在實驗室的過程中,我對課堂上學到的操作系統的一些知識有了新的認識,同時還接觸到了操作系統的相關源代碼,而且通過實驗的運行效果了解了平時我們看不到的操作系統的一些狀況,收獲還是很大的。下面先簡要歸納在實驗課上我做的幾個實驗的主要實驗內容和實驗步驟:
實驗一:實驗環境的使用
實驗步驟:
1.1啟動OS Lab
OS Lab每次啟動后都會首先彈出一個用于注冊用戶信息的對話框(可以選擇對話框標題欄上的“幫助”按鈕獲得關于此對話框的幫助信息)。在此對話框中填入學號和姓名后,點擊“確定”按鈕完成本次注冊。觀察OS Lab主窗口的布局。OS Lab主要由下面的若干元素組成:菜單欄、工具欄以及停靠在左側和底部的各種工具窗口,余下的區域用來放置編輯器窗口。
1.2 學習OS Lab的基本使用方法
練習使用OS Lab編寫一個Windows控制臺應用程序,熟悉OS Lab的基本使用方法(主要包括新建項目、生成項目、調試項目等)。
實驗二:操作系統的啟動
實驗步驟:
2.1 準備實驗
啟動OS Lab,新建一個EOS Kernel項目,在“項目管理器”窗口中打開boot文件夾中的boot.asm和loader.asm兩個匯編文件,按F7生成項目,生成完成后,使用Windows資源管理器打開項目文件夾中的Debug文件夾。找到由boot.asm生成的軟盤引導扇區程序boot.bin文件,找到由loader.asm生成的loader程序loader.bin文件,記錄下此文件的大小1566字節。
2.2 調試EOS操作系統的啟動過程
2.2.1 使用Bochs做為遠程目標機
將調試時使用的遠程目標機修改為Bochs
2.2.2 調試BIOS程序
按F5啟動調試,Bochs在CPU要執行的第一條指令(即BIOS的第一條指令)處中斷,從Console窗口顯示的內容中,我們可以獲得關于BIOS第一條指令的相關信息,然后查看CPU在沒有執行任何指令之前主要寄存器中的數據,以及內存中的數據。
2.2.3 調試軟盤引導扇區程序
練習從0x7c00處調試軟盤引導扇區程序;查看boot.lst文件;調試過程——軟盤引導扇區程序的主要任務就是將軟盤中的loader.bin文件加載到物理內存的0x1000處,然后跳轉到loader程序的第一條指令(物理地址0x1000處的指令)繼續執行loader程序;
2.2.4 調試加載程序
調試過程——Loader程序的主要任務是將操作系統內核(kernel.dll文件)加載到內存中,然后讓CPU進入保護模式并且啟用分頁機制,最后進入操作系統內核開始執行(跳轉到kernel.dll的入口點執行);
2.2.5 調試內核
2.2.6 EOS啟動后的狀態和行為
查看EOS的版本號;查看EOS啟動后的進程和線程的信息;查看有應用程序運行時進程和線程的信息
實驗三:進程的創建
實驗步驟:
3.1 準備實驗
啟動OS Lab;新建一個EOS Kernel項目;分別使用Debug配置和Release配置生成此項目,從而在該項目文件夾中生成完全版本的EOS SDK文件夾;新建一個EOS應用程序項目;使用在第3步生成的SDK文件夾覆蓋EOS應用程序項目文件夾中的SDK文件夾
3.2 練習使用控制臺命令創建EOS應用程序的進程
3.3 練習通過編程的方式讓應用程序創建另一個應用程序的進程
使用OS Lab打開本實驗文件夾中的NewProc.c文件;查看應用程序創建另一個應用程序的進程的執行結果。
3.4 調試CreateProcess函數
調試CreateProcess函數創建進程的過程;分別驗證應用程序和操作系統內核在進程的4G虛擬地址空間中所處的位置;
3.5 調試PsCreateProcess函數
調試PspCreateProcessEnvironment函數;調試進程控制塊的創建過程;調試初始化進程控制塊中各個成員變量的過程。
3.6 練習通過編程的方式創建應用程序的多個進程
使用OS Lab打開本實驗文件夾中的參考源代碼文件NewTwoProc.c,仔細閱讀此文件中的源代碼。使用NewTwoProc.c文件中的源代碼替換EOS應用程序項目中EOSApp.c文件內的源代碼,生成后啟動調試,查看多個進程并發執行的結果。
實驗四:線程的狀態和轉換
實驗步驟:
4.1 準備實驗
啟動OS Lab,新建一個EOS Kernel項目
4.2 調試線程狀態的轉換過程
查看一下loop命令執行的效果;調試線程狀態轉換的過程;對斷點進行一些調整。
4.2.1 線程由阻塞狀態進入就緒狀態:
將線程從等待隊列中移除;將線程的狀態由Waiting修改為Zero;將線程插入其優先級對應的就緒隊列的隊尾;將線程的狀態由Zero修改為Ready。
4.2.2 線程由運行狀態進入就緒狀態:
線程中斷運行,將線程中斷運行時的上下文保存到線程控制塊中;如果處于運行狀態的線程被更高優先級的線程搶先,就需要將該線程插入其優先級對應的就緒隊列的隊首。(注意,如果處于運行狀態的線程主動讓出處理器,例如時間片用完,就需要將程插入其優先級對應的就緒隊列的隊尾);將線程的狀態由Running修改為Ready
4.2.3 線程由就緒狀態進入運行狀態:
將線程從其優先級對應的就緒隊列中移除;將線程的狀態由Ready修改為Zero;將線程的狀態由Zero修改為Running;將線程的上下文從線程控制塊(TCB)復制到處理器的各個寄存器中,讓線程從上次停止運行的位置繼續運行。
4.2.4 線程由運行狀態進入阻塞狀態:
將線程插入等待隊列的隊尾;將線程的狀態由Running修改為Waiting;將線程中斷執行,并將處理器上下文保存到該線程的線程控制塊中。
4.3 為線程增加掛起狀態
觀察loop線程被掛起的情況:刪除之前添加的所有斷點;按F5啟動調試;待EOS啟動完
畢,在EOS控制臺中輸入命令“loop”后按回車。此時可以看到loop線程的執行計數在不停增長,說明loop線程正在執行,記錄下loop線程的ID;按Ctrl+F2切換到控制臺2,輸入命令“suspend 31”(如果loop線程的ID是31)后按回車;按Ctrl+1切換回控制臺1,可以看到由于loop線程已經成功被掛起,其執行計數已經停止增長了。
在PsResumThread函數第119行需要添加的代碼的流程可以是:首先調用List Remove Entry函數將線程從掛起線程隊列中移除,然后調用PspReadyThread函數將線程恢復為就緒狀態,最后調用PspThreadSchedule宏函數執行線程調度,讓剛剛恢復的線程有機會執行。
實驗過程:
做實驗時,最開始并不是很了解OS Lab平臺的使用,即使對著老師給的實驗教程做還是不怎么會,于是請教會做的同學,通過同學的講解我知道了怎樣在OS Lab平臺上建立項目,怎樣更改路徑并找到項目的源文件等等基本操作。
掌握對平臺的簡單應用后,做后面的實驗我是按照實驗教程上的步驟一步步的實施,并且每次都認真觀察相應的運行結果,每個實驗都會建議我們學習實驗教程前面的理論部分,我想如果對他的理論不熟悉,就算試驗成功了我也不知道為什么,所以我一般在做實驗前會對前面的理論部分進行簡要的學習和熟悉。做實驗的過程中,有時候按照實驗教程上的步驟做平臺還是會出現一些錯誤,比如做實驗三到調試CreateProcess函數時,出現的調試異常對話框中,本來是要點擊“是”的,但做到這里電腦總是會出現像死機一樣的狀況,關掉平臺重做到這里老是出現同樣的問題,最后換電腦也是這樣,然后我嘗試不按照實驗步驟點擊“是”也不行,最后還是又還了電腦才做成功,問其他同學也有出現同樣的問題,我想可能是平臺和電腦上有什么地方有沖突吧。
之后做試驗是遇到問題我還是選擇多問同學,畢竟每個人擅長的是不同的,有些問題這個同學會解決,有些問題則是那個同學才懂解決,通過互相交流和學習,我們通過實驗不僅鞏固了課堂上學到的相關知識,也對操作系統有了更深的了解。
體會:
其實做完實驗我還是不能保證我對OS Lab這個平臺有很好的全面的了解,但是對一些基本操作及其快捷鍵我算是大致掌握了,通過這個平臺我也是認識到了“沒有做不到的,只有想不到的”,我覺得創建這個平臺的人們真的是很了不起,這個平臺讓我們便動手便了解了平時我們看不到的操作系統的相關知識。要做好實驗,得按照實驗教程上面的內容一步步落實,要邊做變領悟相關原理及運行結果的出現的原因,這樣我們才能在試驗中學到更多、掌握更多。其次,也遇到問題我們自然是要先自己思考,通過不同的嘗試來解決,之后不能解決的我們要多向老師同學請教,通過互相交流得來的知識也是會讓我們難忘的。