【408考研笔记】操作系统完整知识点
完整知識點回顧,建議以思維導圖形式進行回憶問答
一、概述
操作系統的概念
- 管理計算機軟件和硬件資源
- 最基本的系統軟件
特征
- 并發
- 區分并發(同一時間間隔)、并行(同時)
- 共享
- 互斥共享方式(臨界資源)
- 同時訪問方式
- 虛擬
- 邏輯上變多變大。如:虛擬處理器的分時;空分復用的虛擬存儲器
- 采用多道程序設計
- 邏輯上變多變大。如:虛擬處理器的分時;空分復用的虛擬存儲器
- 異步
- 由于資源有限,進程走走停停
- 可能會導致進程產生與時間有關的錯誤。訪問順序
- 由于資源有限,進程走走停停
目的和功能
-
1.管理計算機資源
- 功能
- 處理機管理、存儲器管理、文件管理、設備管理
- 目標:安全、有效
- 功能
-
2.作為用戶與計算機硬件系統之家的接口
-
命令接口
用戶操作作業執行
- 聯機命令接口
- 用于分時或實時系統
- 脫機命令接口
- 用于批處理系統
- 聯機命令接口
-
程序接口(系統調用)間接使用
- 由系統調用組成,提供給用戶(包括程序員)的接口
- 用戶可以使用系統調用請求操作系統服務
- 例如GUI
-
-
3.用作擴充機器(虛擬機)
操作系統的分類和發展
- 1.手工操作階段
- 2.批處理階段
- 單道批處理系統
- 多道批處理系統(操作系統開始出現)
- 宏觀上并行,微觀上串行(多道程序同時裝入內存,交替執行)
- 無人機交互,無需人工干預
- 多道批處理又分為搶占和非搶占,注意計算題中的計算,通過畫圖即可做出
- 宏觀上并行,微觀上串行(多道程序同時裝入內存,交替執行)
- 批處理系統的缺點是 缺乏交互性
- 3.分時操作系統
- 時間片輪轉的方式(多個用戶通過終端共享一臺主機)
- 支持多道程序設計,(解決了人機交互),但不能在極短時間內作出處理
- 4.實時操作系統
- 分類
- 硬實時系統
- 必須在某規定時間內執行
- 飛機飛行系統
- 必須在某規定時間內執行
- 軟實時系統
- 偶爾違反
- 訂票,銀行管理
- 偶爾違反
- 硬實時系統
- 可以優先反應一些緊急的任務
- 及時性,可靠性
- 搶占式優先級調度
- 分類
- 5.網絡操縱系統
- 6、分布式操作系統(peer同等地位、資源共享、協同工作)
- 7、嵌入式操作系統
- 6、分布式操作系統(peer同等地位、資源共享、協同工作)
運行機制
-
兩種程序
- 內核程序(時鐘、中斷、原語、系統數據結構)
- 用戶程序
-
兩種命令
- 特權命令
- 不允許用戶直接使用的指令
- 非特權命令
- 訪管指令
- 特權命令
-
兩種處理器狀態
- 核心態(管態,內核態)
- 用戶態(目態)
-
中斷
- 內中斷(異常/陷入/例外)
- CPU執行指令內部時發生錯誤比如非法操作,地址越界,算術溢出,缺頁等等,一旦出現不能屏蔽,應該立即處理
- 外中斷(中斷)
- 又叫強迫中斷,比如IO外設請求,或者人的干預,這一類通常是與當前運行的程序無關的事件
- 內中斷(異常/陷入/例外)
-
處理中斷
- 程序計數器PC保存斷點
- PC尋址,進入中斷服務程序
- 保存現場(指程序狀態字寄存器PSWR和某些通用寄存器)
- 執行中斷服務程序
- 恢復現場、返回斷點處繼續執行
-
系統調用(廣義指令)
- 是操作系統為應用程序使用內核功能所提供的接口,只能通過用戶程序間接使用
- 用戶在程序中調用操作系統提供的子功能
- 設備文件的管理
- 進程的控制與通信
- 內存管理
-
體系結構
- 大內核(功能都整體運行在和心態)
- 微內核(只保留基本功能在內核,其余在用戶態,分離了用戶與服務,但頻繁切換性能消耗大)
-
總結
- 用戶態核心態首先區分題目問的是執行還是調用
二、進程管理
進程
資源分配的基本單位
- 組成(進程實體)
- 程序段
- 數據段
- PCB(進程存在的唯一標志)
- 包括標識符、狀態信息、資源清單
- 鏈接方式(PCB鏈接成隊列)、索引方式(索引表項指向相應PCB)
- 狀態及轉換
- 運行態,就緒態(等待被調度),阻塞態(等外設),創建態,結束態,主要掌握前三個相互轉換的條件
- 就緒隊列最多有 n-1個進程,阻塞隊列最多有n個進程(死鎖)
- 進程控制
- 進程創建
- 用戶登錄
- 作業調度
- 提供服務
- 應用請求
- 進程終止
- 正常結束
- 異常結束:越界錯誤,非法指令,等待超時等等
- 外界干預
- 阻塞及喚醒
- 請求共享資源失敗
- 等待操作完成:比如IO操作
- 等待新任務到達
- 新數據未到達
- 進程切換
- 掌握轉換的原語
- 進程創建
- 通信
- 共享存儲
- 消息傳遞
- 管道通信
- 固定大小的緩沖區,對管道兩端進程而言就是一個文件
- 半雙工信道,同一時刻只能一個方向傳輸
- 滿時寫被阻塞,空時讀被阻塞(互斥訪問)
線程
- 線程是最基本的調度單位,但是最基本擁有資源的基本單位還是進程
- 處理機的管理是對進程的管理
- 進程可以創建多個進程,線程可以創建多個線程(線程之間共享父進程的資源)
- 分類
- 用戶級線程
- 內核級線程
- 多線程模型
- 多對一(用戶空間進行線程管理,高效; 內核一阻塞用戶線程都阻塞)
- 一對一(并發能力強,開銷也大)
- 多對多(并發和開銷的折中)
處理機調度
-
不能進行進程調度和切換的時機:
- 處理中斷時
- 進程處于臨界區
- 完全屏蔽中斷的原子操作過程中(加鎖解鎖)
-
三種調度
- 作業調度(適用于多道批處理系統)
- 內存調度(暫時不運行的進程調至外存)
- 進程調度
-
調度相關概念
- CPU利用率
- 周轉時間(從提交到完成所經歷時間)
- 等待時間(處于就緒隊列中的等待總時間)
- 響應時間(提交請求到首次響應)
- 平均周轉時間
- n個作業的周轉時間相加最后除以n
- 帶權周轉時間 (作業周轉時間 / 運行時間)
-
調度算法
- 先來先服務 FCFS
- 效率不高,對長作業更有利,不利于IO繁忙型
- 短作業優先 SJF
- 平均等待時間、平均周轉時間最少
- 優先級調度(適合實時OS)
- 可分搶占式/非搶占
- 一般優先級順序:系統》用戶,IO型》計算型
- 高響應比優先 (等待時間+服務時間 / 服務時間 )
- 同等待時間,短作業優先,SJF
- 同服務時間,等待時間更長先被調度,FCFS
- 克服了饑餓狀態
- 時間片輪轉(適合分時)
- 大小選擇要恰當,很長就退化成FCFS
- 多級反饋隊列
- 多個就緒隊列,每個隊列不同優先級,不同時間片大小
- 第一個隊列沒運行完,降級進下面隊列
- 先執行完第一個隊列再是第二個隊列
- 先來先服務 FCFS
進程同步
-
臨界資源:注意可重用的程序代碼屬于臨界資源
- 進入區(檢查能否進入,并設置標志)
- 臨界區
- 可重入代碼:不能修改的代碼,因此可以共享
- 退出區(清除標志)
- 代碼剩余部分
-
同步(先后次序)與互斥
- 有限等待 只等待有限時間
- 讓權等待——進不去臨界區立即釋放處理器,不忙等不空轉
-
實現臨界區互斥的基本方法
- 軟件實現
- 單標志法(turn 0變1; 缺點: 必須交替執行)
- 雙標志先檢查法 (i,j 改變 True False; 缺點:可能同時進臨界區)
- 雙標志后檢查法 (先改變TF再檢查循環;缺點:可能都空轉進不去)
- 皮特森算法(有i,j有turn;能同步不會饑餓)
- 硬件實現
- 開關中斷
- 原子硬件指令(利用共享布爾變量lock,初始為False進入時被設為True)
- TestAndSet指令
- Swap指令
- 軟件實現
-
信號量機制
- wait(S) signal(S) 即 P V操作
- 整形信號量: value++ –
- 記錄型信號量: 信號量S有value和等待隊列 L
- 執行P操作后,value < 0時,進程掛起,該進程進阻塞隊列;
- 下次V操作,Value++,若value仍 <= 0 , 把阻塞隊列第一個等待進程喚醒
- 實現同步
- S初始為0,進程1 x——V操作,進程2 P操作——y;則語句x必在語句y前
- 實現互斥
- S初始1; P(S)——臨界區——V(S)
- 實現前驅關系
- 設置多個S初始為0,先的進程尾巴V(S), 后的進程頭部P(S)
- wait(S) signal(S) 即 P V操作
-
管程
代表共享資源的數據結構,及對其操作的一組函數
- 操作封裝成函數,無需程序員自己實現互斥
- 條件變量 (信號量有值,condition沒有值,僅實現排隊等待)
- 每次只允許一個進程進入管程
- 管程的 wait() \ signal() 同樣會進行阻塞、插入隊列的操作
- 操作封裝成函數,無需程序員自己實現互斥
-
經典同步問題
- 生產者消費者——橘子蘋果盤問題(注意連續執行關系)
- mutex互斥夾緊
- 用什么P一下
- 提供什么V一下
- 讀者寫者
- 計數信號量count,用mutex保證互斥更新
- ‘讀優先’ 的
- ‘寫優先’ 的(增加一對P(w) ,V(w) )
- 哲學家進餐問題
- semphore chopstick[5] = {1,1,1,1,1}
- 防止死鎖的限制:
- 5只筷子,最多允許4個人同時進餐
- 僅當兩邊筷子都空閑時才抓起筷子(給兩個連續的P用mutex夾緊)
- 吸煙者問題
- finish互斥進行抽煙動作; offer1 offer2 offer3代表三種組合
- 生產者消費者——橘子蘋果盤問題(注意連續執行關系)
死鎖
- 產生的必要條件(同時滿足四個)
- 互斥 + 非搶占 + 請求并保持(有資源又請求資源) + 循環等待(A持有的被B申請)
- 不死鎖最少設備數:
- n1-1 + n2-1 +……+ 1
- 處理策略
- 死鎖預防
- 破壞4個必要條件其中之一(一次申請所有資源/按編號順序申請資源)
- 銀行家算法(死鎖避免)
- 安全狀態(不安全狀態可能死鎖)
- 銀行家算法
- 已知條件: MAX矩陣、Allocation矩陣
- 求Need矩陣
- 比較request[i] <= Need[i]
- 比較request[i] <= Available[i]
- 試探性分配,更新 Allocation、Need矩陣,Available向量
- 安全性算法,安全才正式分配,否則打回請求
- 安全性算法
- 工作向量Work,初始Work = Available
- 依次從Need矩陣找<=Work的行Pi
- Pi加入安全序列,釋放其資源,Work += Allocation[i](注意是加Allocate[i], 不要加need!)
- 直至所有進程進入安全序列,否則是不安全狀態
- 死鎖預防
- 資源分配圖
- 簡化邊(資源能滿足結點P1的請求,則消去結點P1的請求邊分配邊)
- 死鎖定理(S為死鎖 等價于 S的資源分配圖不可完全簡化)
- 死鎖解除
- 搶占資源、撤銷進程、回退進程
三、內存管理
邏輯地址空間分為很多頁,物理地址空間分為塊(頁框)
程序執行
- 編譯
- 鏈接(邏輯地址形成階段,目標模塊和庫函數連一起形成完整裝入模塊)
- 程序的指令里使用的是邏輯地址,而最后被裝入到物理地址,需要轉換
- 也分三個時機:裝入前、裝入時、運行時
- 裝入(把程序放入內存)
- 絕對裝入 (編譯時就把指令中地址改為絕對地址,只適用于單道程序)
- 可重定位裝入 (裝入時進行地址轉換,對指令和數據中的地址進行修改)
- 又叫靜態重定位,一旦裝入必須分配其所需全部內存空間
- 動態重定位
- 不是裝入時立即轉換,而是推遲到程序要開始執行時
- 需要一個重定位寄存器(存起始位置)
- 內存保護(一對寄存器)
- 邏輯地址 < 界地址寄存器, +重定位寄存器 映射成物理地址
內存早期擴充技術
- 覆蓋
- 交換:對交換的管理以提高換入換出速度為目標
內存連續分配
用戶進程在內存中都是連續存放的
- 單一連續(單任務)
- 固定分區分配(提前固定大小分區,有內部碎片)
- 動態分區分配(換入換出,無內部碎片,產生外部小碎片)
- 可通過‘緊湊’整理外部碎片
- 動態分區分配策略
- 首次適應(按地址遞增第一個能滿足) 性能最好
- 最佳適應/最壞適應(分別找最小能滿足/最大能滿足)
非連續分配
進程的空間可分散分布在內存不同區域,需要額外索引
分頁/分段 根據分區大小是否固定:
-
分頁存儲管理
以頁/塊為單位申請空間,不會產生外部碎片,有很小內部碎片
-
區分頁表大小,頁表項大小,頁號和頁框號(塊號)
-
地址變換流程
有個頁表寄存器,存放(頁表始地址,頁表長度)
邏輯地址:頁號|頁內偏移
段表項:<頁號,塊號>
- 由邏輯地址、頁面大小得 頁號(P=A/L) 頁內偏移(W=A%L)
- 比較頁號和頁表長度(有無越界,產生中斷)
- 對應頁表項地址 = 頁號P*頁表項長度 + 頁表始地址
- 該頁表項內容即為物理塊號b
- 物理地址 E = 塊號b*頁面大小L + 頁內偏移W
-
-
多級頁表?
- 隱藏條件:頂級頁表最多只能有一個頁面 !
- 目的:建立索引,不浪費主存空間去存儲所有頁表項
- 地址格式: <一級頁號,二級頁號,頁偏移>
- (需要多次訪存)
-
快表(TLB)?
- 無快表,需要兩次訪存,一次讀頁表一次取指令
- 給出頁號,在快表中查找,找到則只需一次訪存取指令
- 未找到,就去主存中頁表,并將該頁表項存入快表
分段存儲
按照用戶進程中的自然段劃分空間,不會產生內部碎片
段內連續 段間不連續,每段長度不一定相同
-
邏輯地址:段號|段偏移 (必須都由用戶顯示提供,二維)
-
段表項: <段號,段長度,本段起始地址>
-
地址變換
段表寄存器,存放段表始地址,段表長度
- 邏輯地址得段號、段偏移(比較段表長,有無越界)
- 對應段表項地址 = 段號*段表項長度 + 段表始地址
- 該段表項前幾位是段長,比較 段內偏移 < 段長
- 物理地址 E = 本段起始地址 + 段內偏移
段頁式存儲管理
進程地址空間先分為段,再分為邏輯頁(內存分為若干對應塊)
- 一個段表,每段一個頁表
- 邏輯地址: 段號|頁號|頁內偏移
- 段表項<段號,頁表長度,頁表始址> 頁表項<頁號,內存塊號>
- 地址變換:
虛擬內存
通過使用外存上的空間進行換入換出來虛擬地擴大內存空間
- 特點
- 多次:進程無需一次性裝入內存,而是分多次部分調入
- 對換:無需運行時一直在內存中,允許換進和換出
- 虛擬性:用戶看到的容量遠大于實際內存容量
- 實現
- 請求分頁
- 缺頁中斷:要訪問的頁面不在內存中時,將缺頁進程阻塞
- 把所缺頁調入內存
- 內存有空閑塊,分配一個塊給該頁,修改相應頁表項
- 內存無空閑塊,淘汰某頁(被修改過的頁要寫回外存)
- 頁表項: <頁號,塊號,狀態位,訪問位,修改位,外存地址>
- 地址變換:
- 找到了要訪問的頁,則修改其訪問位、修改位
- 狀態位表示是否在內存中
- 缺頁中斷:要訪問的頁面不在內存中時,將缺頁進程阻塞
- 請求分段
- 請求段頁式
- 請求分頁
頁面置換算法
選擇該從內存中調出哪一頁(初始化后前幾次都是缺頁的)
- 最佳置換算法 OPT
- 調換出之后最長時間內不再被訪問的頁面
- 先進先出置換算法 FIFO
- 換出最早進入內存的頁面
- 會出現BELADY異常(分配的物理塊數增大,頁故障數反而也增大)
- 最近最久未使用 LRU算法
- 換出最近最長時間內未訪問過的頁面
- (需要寄存器和棧的硬件支持)
- 時鐘Clock算法(最近未用算法)
- 簡單CLOCK
- 每幀有一個 使用位,被裝入或被訪問時都置為1
- 循環掃描
- 遇到使用位為0的,則替換
- 使用位為1的,則此次把它置成0
- 改進的CLOCK
- 增加 修改位
- 首先換出 未被訪問的頁面,再選擇 未被修改的頁面
- 優點:替換時首選沒有變化的頁
- 簡單CLOCK
頁面分配策略
- 固定分配局部置換(提前為進程分配固定數目的物理塊,換出只能用本進程物理塊
- 可變分配全局置換(維持一個空閑物理塊隊列,換頁時從該隊列分配物理塊
- 可變分配局部置換(用本進程物理塊換出,但隊列會調控不同進程物理塊數目
- 調頁時機:
- 預調頁、請求調頁(運行時調入)
- 從何處:
- 外存中有 文件區、對換區(更快,放的是被換出的頁面)
工作集
? 駐留集:給一個進程分配的物理頁框的集合
? 工作集就是在某段時間間隔(窗口:最近K次)內進程訪問過的頁面集合
? 為防止抖動,分配的駐留集要大于工作集大小
抖動
? 又叫顛簸,指一個進程頻繁地換入換出,調換的時間大于執行的時間
四、文件管理
邏輯:盤塊/ “簇” 物理:磁盤扇區
邏輯結構
文件內部的邏輯結構,是由用戶看到的用戶定義的
-
無結構文件(流式文件)
源程序文件、目標代碼文件通常是無結構文件,以字節為單位
-
有結構文件(記錄式文件)
-
順序文件
- 文件中的記錄順序排列
-
索引文件
區分索引文件(邏輯結構)與索引分配(存儲結構)
- 索引文件:用戶建立索引,方便檢索記錄, <關鍵字-》記錄的邏輯地址>
- 索引分配: 操作系統建立索引表,映射: <邏輯塊號-》物理塊號>
-
索引順序文件
- 順序文件分為若干組,先通過索引找到其所在組,在組內順序查找
-
目錄結構
多個文件在邏輯上是如何組織的
-
文件控制塊FCB
存放文件描述信息,如文件名、物理位置、文件大小、權限等
-
索引節點inode
文件描述信息單獨形成 索引結點inode,每個文件都有一個索引結點
包括文件標識符、類型、權限,以及物理地址項(直接或間接)
? 文件被打開后,索引結點會被加載到內存中
-
目錄的兩種方式:
- 方式一:一個FCB就是一個文件目錄項
- 方式二(索引結點):目錄項僅由 <文件名,i結點指針> 組成。
-
目錄的幾種結構
- 單級:整個文件系統只有一張目錄表,不允許重名
- 二級:分為主目錄和用戶目錄兩級
- 多級(樹形)目錄:用路徑名標識文件,/作為分隔符(但級數越多磁盤訪問次數多)
- 無環圖目錄結構:樹形基礎上增加了指向同一結點(共享節點)的邊,
- 實現文件共享(多個進程共享同一文件,系統中只需一個副本)
- 硬鏈接:多個指針指向同一個 i 結點,只要還有一個指針指向該i結點,它就不能被刪除,只是用戶刪除自己的一個目錄項
- 軟鏈接(符號鏈接):把到達共享文件的路徑記錄為一個文件保存在用戶的目錄下,只有文件擁有者才有指向索引節點的指針
- 硬鏈接:多個指針指向同一個 i 結點,只要還有一個指針指向該i結點,它就不能被刪除,只是用戶刪除自己的一個目錄項
- 實現文件共享(多個進程共享同一文件,系統中只需一個副本)
目錄實現: 線性表/哈希表
? 目錄查詢要不斷io,因此把當前使用的文件目錄復制到內存
文件分配
文件分配即文件物理結構(存儲結構),注意與內部邏輯結構區分
-
連續分配
要求每個文件在磁盤上占有一組連續的塊
- 支持順序訪問和隨機訪問
- 只適用于長度固定的文件
-
鏈接分配
文件即對應磁盤塊鏈表,訪問磁盤n次
-
隱式鏈接分配:
- 目錄指向首塊,每個盤塊都有指針指向下一磁盤塊
-
顯式鏈接分配:
- 整個系統使用一張文件分配表FAT,FAT表在內存中
- FAT表項:<盤塊號,下一盤塊號> -1代表文件結尾,-2為空閑盤塊
-
只能順序訪問,不支持隨機訪問,易擴展
-
-
索引分配
每個文件有一個索引塊,存著索引表,表項為 <第i條,指向文件第i盤塊的指針>
- 支持隨機訪問和順序訪問,但索引表增加了存儲開銷
- 一個索引塊通常大小為一個磁盤塊(通常先讀入內存以減少一次IO)
- 混合索引
- 既采用直接地址,又采用單級索引、多級索引
- 若m級索引,訪問磁盤m+1次
- 若修改記錄,則需要‘寫回’磁盤,還需多一次訪問磁盤
存儲空間管理
實質:對空閑塊的組織、分配、回收
-
空閑表法(為所有空閑盤塊建立一張表,連續分配)
-
空閑鏈表法(把所有空閑盤塊/盤區用指針連接為一張鏈表)
-
位示圖
- 用二進制的一位 表示一個盤塊的使用,‘1’已占用,‘0’空閑
- 注意轉換行號列號(區分從‘0’還是**‘1’編號**) i=(b-1)/n +1 ; j = (b-1) mod n +1
-
成組鏈表法(空閑扇區之間用鏈表,扇區內部建空閑表)
磁盤調度算法
磁道(同心圓)、扇區(即盤塊,弧形塊),各扇區數據量相同
- 先來先服務
- 最短尋找時間優先
- 優先服務最近的請求,會產生“饑餓”
- 掃描SCAN算法
- 指定方向上最近的,一個方向一直到頭才變更方向
- LOOK調度:到達最遠端的請求即可返回,不必到頭
- 循環掃描C—SCAN
- 只有一個方向提供服務,回時方向快速移動不服務
- 默認SCAN都為LOOK調度
時間計算
Ts + Tr + Tt (注意時間單位min、s、ms)
- 尋道時間 Ts = 跨磁道數n*常數 + 啟動磁臂時間
- 旋轉延遲時間:(找到數據所在扇區)
- Tr = 1/2r (r為磁盤旋轉速度)
- 傳輸時間: Tt = 字節數b / rN (N為一個磁道上字節數)
磁盤管理
-
磁盤初始化:
- 低級格式化(物理分區)
- 邏輯格式化(創建文件系統)
-
引導塊(開機過程)
- 通電,讀入位于ROM內的BIOS程序
- 硬件自檢
- 執行引導塊上的boot引導程序,找到磁盤上的操作系統,把它裝入內存
- 開始運行操作系統
-
壞塊:
處理就是標明記錄壞塊,讓系統不去使用;
壞塊是硬件故障,無法被OS修復
五、I/O管理
I/O設備
-
1外設、2存儲設備(磁盤磁帶)、3網絡通信設備(網絡接口)
-
分類:
- 塊設備(所有存儲的設備,因為存儲信息都以數據塊為單位)
- 字符設備(用于數據輸入輸出的設備,基本傳輸單位是字符)
I/O控制器
就是I/O設備的電子部件,用來控制設備
組成:
? 與CPU的接口、與設備的接口、自身I/O邏輯
功能與需要部件:
- 接收識別CPU命令: 控制寄存器(存命令和參數)
- 向CPU報告設備狀態: 狀態寄存器
- 數據交換: 數據寄存器
- 地址識別: 給上述寄存器編址,通過CPU送來的地址來識別控制哪個寄存器
- 內存映像I/O:寄存器地址與內存統一編址
- 寄存器獨立編址:寄存器使用獨立地址
IO控制方式
控制設備和內存或cpu之間的數據傳送
-
程序直接控制(關鍵:‘’輪詢“)
- CPU發出命令后讀取I/O模塊的狀態,一直沒準備好就會一直輪詢檢查
- 數據傳送單位: 每次讀寫一個字
- 數據流向: 內存——CPU——I/O設備
- 缺點: CPU和I/O串行工作,CPU長期忙等待,利用率極低
-
中斷驅動方式
CPU與IO控制器可并行,數據傳送單位依舊是一個字,
- CPU發出讀寫命令后,就把等待I/O的進程阻塞,切換到別的進程
- 當I/O完成時控制器會向CPU發中斷信號
- 在每個指令周期末尾檢查中斷,有則開始處理中斷
- CPU保存當前進程運行環境信息,轉去執行中斷服務程序,從IO控制器讀寫
- CPU恢復等待I/O進程的運行環境,繼續執行
-
DMA(直接存儲器存取)方式
- 數據的傳送單位是”塊“
- 僅在傳送數據塊開始和結束時,才需要CPU,
- 數據流向是內存——IO設備
- DMA控制器
- DMA也是以字為單位讀入讀出的,讀完一塊或連續的多塊后,才給CPU發送中斷信號
- 有命令、地址、數據寄存器,來實現設備到主機的直接數據交換
- 缺點:讀多塊必須要求連續的多塊,離散會多次呼叫CPU
-
通道控制方式
- ”通道“是一種硬件,人稱小CPU
- CPU給通道發指令和通道程序在內存的位置,就做其他事
- ‘通道’執行該通道程序(一堆事情),執行完后給CPU發中斷
層次結構
中間三層叫”I/O核心子系統“
- 用戶層軟件(庫函數)
- 設備獨立性軟件(不涉及硬件,對各種設備的公共管理工作)
- 向用戶層提供統一接口(如read/write系統調用)
- 執行對設備的共有操作如分配回收、設備保護、邏輯物理設備名映射
- 設備驅動程序(涉及硬件細節的所有操作,驅動IO設備工作)
- 中斷處理程序
- 設備準備好,設備完成了I/O 都會發中斷
- 硬件(有機械部件、電子部件)
設備的分配回收
-
安全性
- 安全分配方式(分配I/O設備后就把進程阻塞)
- 不安全分配(分配IO后進程繼續執行)
-
分配方式
-
靜態分配(運行前分配全部資源)、動態分配(運行過程中動態申請資源)
-
數據結構:
- 設備控制表DCT
- 控制器控制表COCT
- 通道控制表CHCT(以上三個代表三種資源,都有等待隊列)
- 系統設備表SDT(整個系統所有設備情況)
”一個通道控制多個控制器,一個控制器控制多個設備“(樹形關系)
-
邏輯、物理設備名映射:
- 一張邏輯設備表 LUT,表項 <邏輯地址,物理地址,驅動程序入口>
- 進程第一次用邏輯設備名請求分配設備時,在LUT中新增一個表項
- 之后再利用邏輯設備名請求I/O操作時,直接查找LUT表
緩沖區管理
目的:CPU很快,把數據放到內存緩沖區里,就可以去做別的事
? I/O設備慢,自己從緩沖區慢慢取數據就行,不用打擾CPU
特點:
? 只有空了才能輸入數據,只有滿了才能輸出數據
緩沖區管理策略:
- 單緩沖(1個緩沖區)
- 兩個相互通信的機器用單緩沖區,只能半雙工(同一時刻單向)
- 雙緩沖(2個緩沖區)
- 兩個機器雙緩沖,可以全雙工
- 循環緩沖(多個大小相等緩沖區連接為一個隊列,in指向第一個空的,out指向第一個滿的緩沖區)
- 緩沖池
- 有三個隊列(空的、輸入隊列、輸出隊列)
- 有四種緩沖區(收容/提走輸入和輸出)
重點:
每處理一塊數據需要花費多長時間?
? 各部件傳輸需花費時間: 設備—T—緩沖區—M—工作區—C—處理
-
單緩沖區 MAX(T,C) + M
- 初始狀態工作區滿,緩沖區空
-
雙緩沖區 MAX( T, C+M)
- ? 初始狀態,工作區滿,兩個緩沖區一滿一空
記憶: MAX (設備進,CPU處理) + 內存傳 括號單緩沖區包一個雙包兩個
? 注意讀一個和讀多個不一樣,要加剩余處理時間 ,區分來算!
假脫機SPOOLing
可以把一臺物理設備虛擬為多臺邏輯設備,
把獨占式設備改造為共享設備
- 脫機技術:使用”外圍控制機“,脫離主機控制來進行輸入和輸出
- 組成:
- 輸入井、輸出井(磁盤上的存儲區域)
- 輸入輸出緩沖區
- 輸入輸出進程
- 應用:共享打印機
- 每個進程提出請求后,都為其在磁盤的輸出井分配一個存儲區(邏輯上獨占)
- 每個進程的打印信息表放入任務隊列,依次輸出
PS:點擊右上角關注看更多408初試復試知識點
總結
以上是生活随笔為你收集整理的【408考研笔记】操作系统完整知识点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 显示器尺寸对照表_【开屏说】⑦:入手显示
- 下一篇: 发那科FANUC系统选项U盘,可以随意添