操作系統(七)| 設備管理-- 端口 驅動程序 基本I/O控制 磁盤I/O

文章目錄

  • 1 設備管理概述
    • 1.1 系統總線結構
    • 1.2 設備控制器通用結構
    • 1.3 I/O設備的模型
  • 2 I/O端口
    • 2.1 尋址方式
  • 3 驅動程序
  • 4 基本I/O控制方式
    • 4.1 程序直接控制
    • 4.2 中斷I/O方式
    • 4.3 DMA方式
    • 4.4 I/O通道控制方式
  • 5 I/O管理中的重要思想
    • 5.1 設備獨立性
    • 5.2 SPOOLing技術
    • 5.3 I/O軟件的多層模型
  • 6 磁盤I/O
    • 6.1 磁盤調度算法
      • 6.1.1 先來先服務 FCFS
      • 6.1.2 最短尋道時間優先 SSTF
      • 6.1.3 掃描算法 電梯調度算法 SCAN
      • 6.1.3 循環掃描 C-SCAN
      • 6.1.4 N-Step-SCAN
      • 6.1.5 FSCAN
    • 6.2 其他磁盤I/O性能的改善

1 設備管理概述

1.1 系統總線結構

系統總線上傳輸的信息有——數據 地址 其他控制狀態定時信號

系統總線其實有幾類

如下圖 CPU總線 存儲器總線 和I/O總線

在這里插入圖片描述

其中北橋芯片組把處理器和存儲器分成了兩個總線

南橋芯片連接在I/O總線上

I/O總線上連著眾多的I/O設備

當然I/O總線和I/O設備之間通過設備管理器進行連接控制

那么設備管理器的結構是怎樣的呢?

1.2 設備控制器通用結構

在這里插入圖片描述

控制不同的外設需要不同的設備控制器,將系統總線和設備側的接口連在一起

1.3 I/O設備的模型

對于外部設備而言,他們的設備如下

在這里插入圖片描述

2 I/O端口

I/O設備中非常重要的一部分就是外設寄存器(也叫做I/O端口,下文我們都叫做I/O端口了)(存儲著設備狀態,數據等)

控制需要了解外設寄存器值,讀取數據也是從相應的寄存器值讀取

I/O端口通常包括:控制寄存器、狀態寄存器和數據寄存器三大類

所以這里就牽扯出一個問題,CPU下達指令讀或寫某個I/O端口(寄存器),需要知道那個寄存器在哪里,也就是說寄存器的地址是什么,這就涉及到I/O端口的編址以及尋址

2.1 尋址方式

統一編址方式(內存映射方式)

與主存空間統一編址,主存單元和I/O端口在同一個地址空間

獨立編址方式(特殊I/O指令方式)

單獨編號,不和主存單元一起編,使成為一個獨立的I/O地址空間,例如Intel處理器

3 驅動程序

控制外設進行輸入輸出的底層I/O軟件是驅動程序,由設備生產商制作,包括 設備控制器中有哪些用戶可以訪問的寄存器、控制狀態寄存器的每一位的含義,通信協議等等

驅動程序通過訪問 I/O端口控制外設進行I/O

? 比如 讀取控制命令送到控制寄存器來啟動外設工作

? 讀取狀態寄存器了解外設和設備控制器的狀態

? 訪問數據緩沖寄存器進行數據的輸入和輸出

實現這種訪問操作是通過I/O操作完成的,他是一種特權指令

4 基本I/O控制方式

有如下四種

4.1 程序直接控制

? 程序查詢I/O方式

原理 由CPU負責直接控制I/O操作,不涉及中斷或DMA(Direct Memory Access)。

方法

計算機從外部設備讀取數據到存儲器,每次讀一個字的數據。對讀入的每個字, CPU 需要對外設狀態進行循環檢查,直到確定該字已經在I/0 控制器的數據寄存器中

優點 簡單、易于實現。

缺點

在程序直接控制方式中,由于CPU 的高速性和I/0設備的低速性,致使CPU 的絕大部分時間都處于等待I/0 設備完成數據I/0 的循環測試中,造成了CPU 資源的極大浪費。在該方式中, CPU 之所以要不斷地測試I/0 設備的狀態,就是因為在CPU 中未采用中斷機構,使I/0 設備無法向CPU報告它已完成了一個字符的輸入操作。

4.2 中斷I/O方式

? 中斷I/O方式

原理 設備在完成操作后發出中斷信號,通知CPU進行數據傳輸。

方法

中斷驅動方式的思想是,允許I/0 設備主動打斷CPU 的運行并請求服務,從而“解放"CPU, 使得其向I/0 控制器發送讀命令后可以繼續做其他有用的工作。

優點: 提高CPU利用率,減少了對CPU的占用。

缺點

中斷方式在一些情況下可以提高CPU利用率,但在一些情況下,字符式設備,其中斷頻率太高,來回切換的話也會耗費處理機較多時間

核心是因為什么?

是因為上面兩種方式都需要經過CPU處理?

什么叫經過CPU處理

是外設輸入數據流大概是這樣的: 【外圍設備->I/O控制器的數據寄存器->CPU寄存器->存儲器】,這就叫經過CPU,或者說傳輸數據的過程需要CPU的干預

于是引出了下面的DMA(直接在I/O設備和內存之間建立數據通路)

4.3 DMA方式

磁盤等高速外設設備所用的方式

原理

? 基本思想 在高速外設和主存間直接傳送數據

? 由專門硬件**(即DMA控制器)**控制總線進行傳輸,注意這里不是CPU了

方式

  1. 基本單位是數據塊(前面是一個字)。
  2. 所傳送的數據,是從設備直接送入內存的,或者相反。
  3. 僅在傳送一個或多個數據塊的開始和結束時,才需CPU 干預,整塊數據的傳送是在DMA控制器的控制下完成的。

優點 大大減輕了CPU的負擔,提高了數據傳輸速率。

**缺點 需要額外的硬件支持,復雜度較高。

如何進一步提高資源利用率呢?當然是請更牛逼的通道,將苦逼的CPU盡可能的從累活中解放出來。

4.4 I/O通道控制方式

原理 使用專門的I/O通道控制器,它獨立于CPU和主存儲器,負責管理多個設備的I/O操作

方式

I/0 通道是指專門負責輸入/輸出的處理機。I/O通道方式是DMA方式的發展,它可以進一步 減少CPU的干預,即把對一個數據塊的讀(或寫)為單位的干預,減少為對一組數據塊的讀(或寫)及有關控制和管理為單位的干預。同時,又可以實現CPU、通道和I/0 設備三者的并行操作,從而更有效地提高整個系統的資源利用率。

優點: 高度并行化的數據傳輸,減少了對CPU的占用。

缺點: 需要更復雜的硬件支持,成本較高。

5 I/O管理中的重要思想

5.1 設備獨立性

該思想旨在使應用程序與具體的I/O設備解耦,從而提高系統的靈活性、可移植性和可維護性。

5.2 SPOOLing技術

? 即外圍設備同時聯機操作,又稱作假脫機操作

什么是脫機I/O

? 脫機I/O 目的是為了解決CPU和I/O速度不匹配的問題,輸入由一臺抵擋計算機做中介

什么是假脫機

? 即模擬實現上面的脫機i/O

實現方法

? OS利用兩個進程分別模擬脫機I/O時外圍機的功能

? 其中一個進程負責將輸入設備的數據傳送到磁盤,另一個進程負責將數據從磁盤送到輸出設備

組成

? 1 輸入輸出井

? 2 預輸入進程和緩輸出進程

5.3 I/O軟件的多層模型

在這里插入圖片描述

1 用戶進程層——執行I/O系統調用,對I/O數據進行格式化

2 獨立于設備的軟件——實現設備的命名,分配,數據的緩沖,設備的保護,提高下層的統一接口

3 設備驅動程序,與設備有關的代碼,向設備控制器發送命令,檢測設備的執行狀態

4 中斷處理程序,負責I/O完成時,喚醒設備驅動程序的進程,進行中斷處理

5 硬件層 實現物聯I/O操作

6 磁盤I/O

磁盤一般分為固定結構和移動頭磁盤兩大類

固定頭磁盤——每個盤面的每條磁道都有一個讀寫磁頭,固定頭磁盤各個磁頭可并行讀寫,成本高

移動頭磁道——每個盤面只有一個讀寫磁頭

6.1 磁盤調度算法

目標 使得磁盤平均尋道時間最短

6.1.1 先來先服務 FCFS

按請求訪問磁盤的先后次序進行調度

6.1.2 最短尋道時間優先 SSTF

選擇處理與當前磁頭距離最近的磁道請求,以減少尋道時間

6.1.3 掃描算法 電梯調度算法 SCAN

要求磁頭臂僅沿一個方向移動,并在途中滿足所有未完成的請求,直到最后一個磁道,再反方向

6.1.3 循環掃描 C-SCAN

要求磁頭臂僅沿一個方向移動,并在途中滿足所有未完成的請求,直到最后一個磁道,不反方向直接回到最后一個磁道,開始掃描

SSFT、SCAN、C-SCAN都存在“餓死現象”

即當一個或多個進程反復請求某個磁道I/O,壟斷了整個磁盤,其他磁道得不到訪問

6.1.4 N-Step-SCAN

將磁盤請求隊列分成若干個長度為N的子隊列

每一次SCAN處理一個子隊列

6.1.5 FSCAN

使用2個子隊列

當掃描開始時,所有請求都在一個子隊列,另一個子隊列為空,掃描過程中,所有新到的請求加入另一個子隊列中,使得新請求服務延遲老請求處理完后

6.2 其他磁盤I/O性能的改善

高速緩存

合理分配磁盤空間

把有可能順序訪問的放到一塊

提前讀,延遲寫,周期性的成簇寫回

例題

嘗試給出一種能夠滿足下列要求的I/O設備管理設計方案:

1 應用程序在訪問設備時候,不需要關心設備的物理特性

2 應用程序申請使用某類設備時,不需要指定具體的物理設備

3 應用程序可以通過文件系統訪問設備

設計方案:

為滿足上述要求,可以設計一個綜合管理系統,其設計思路如下:

1 采用分層的I/O軟件模型 多層處理,如用戶層,設備驅動程序等待。進行設備抽象,將不同類型的設備進行抽象,屏蔽設備的具體物理特性。通過設備抽象,應用程序可以以統一的方式訪問各種設備,而無需關心設備的底層實現。

2 設備分組:將相同類型的設備進行分組,并為每個設備組分配一個唯一的標識符。應用程序在申請使用某類設備時,只需指定設備組的標識符,而無需指定具體的物理設備。

3 權限控制:設計合適的權限控制機制,確保應用程序只能訪問其被授權的設備組和設備文件,以保護系統的安全性和數據的機密性。

數據結構

1 用類和結構定義抽象層,包括設備的通用屬性,操作方法,事件等

2 用哈希表或映射存儲設備組的標識符和相應的設備類型

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/162413.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/162413.shtml
英文地址,請注明出處:http://en.pswp.cn/news/162413.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c語言 結構數組

為什么要使用結構數組&#xff1f; 例如有一種情況&#xff0c;我們需要存儲5名學生的數據。我們可以使用下面給出的結構來存儲它。 示例 #include<stdio.h> struct student { char name[20]; int id; float marks; }; void main() {struct student s1,s2,…

前端Date對象的使用錦集

Date 對象用于處理日期與時間。 創造對象 var d new Date(); var d new Date(milliseconds); // 參數為毫秒 var d new Date(dateString); var d new Date(year, month, day, hours, minutes, seconds, milliseconds);方法 getDate() 獲取當前日期對象是幾日(1-31) cons…

C++標準模板(STL)- 類型支持 (類型修改,添加 const 或/與 volatile 限定符到給定類型,std::add_cv)

類型特性 類型特性定義一個編譯時基于模板的結構&#xff0c;以查詢或修改類型的屬性。 試圖特化定義于 <type_traits> 頭文件的模板導致未定義行為&#xff0c;除了 std::common_type 可依照其所描述特化。 定義于<type_traits>頭文件的模板可以用不完整類型實例…

SAP的四種計量單位

在SAP中物料創建后&#xff0c;一旦發生業務&#xff0c;其基本計量單位便很難修改。由于單位無法滿足業務要求&#xff0c;往往會要求新建一個物料替代舊物料。這時候除了要將舊物料上所有的未清業務刪除外&#xff0c;還需要替換工藝與BOM中的舊物料。特別是當出現舊物料存在…

Linux學習筆記-Ubuntu下使用Crontab設置定時任務

文章目錄 一、概述二、基于crontab的設置2.1 基本命令說明2.2 使用-e指令編輯命令2.2.1 進入編輯模式2.2.2 指令信息格式2.2.4 開啟日志1) 修改rsyslog配置文件2) 重啟rsyslog3) 查看日志 2.2.3 設置后之后重啟服務 三、示例3.1 每隔一分鐘往文件中日期3.2 使用-l查看任務列表3…

越南服務器租用:企業在越南辦工廠的趨勢與當地(ERP/OA等)系統部署的重要性

近年來&#xff0c;越南逐漸成為全球企業布局的熱門目的地之一。許多企業紛紛選擇在越南設立工廠&#xff0c;以利用其低廉的勞動力成本和優越的地理位置。隨著企業在越南的擴張&#xff0c;對于當地部署ERP系統或OA系統等的需求也日益增長。在這種情況下&#xff0c;租用越南服…

上海亞商投顧:北證50指數持續大漲 短劇概念股再爆發

上海亞商投顧前言&#xff1a;無懼大盤漲跌&#xff0c;解密龍虎榜資金&#xff0c;跟蹤一線游資和機構資金動向&#xff0c;識別短期熱點和強勢個股。 一.市場情緒 滬指昨日震蕩調整&#xff0c;深成指跌超1.4%&#xff0c;創業板指跌超1.7%。北證50指數大漲超8%&#xff0c;…

ROS設置DHCP option121

配置時&#xff0c;了解格式很關鍵&#xff0c;16進制填寫格式如下&#xff1a; 將要訪問的IPV&#xff14;地址&#xff1a;192.168.100.0/24 192.168.30.254 轉換為&#xff1a;掩碼 目標網段 網關 0x18c0a864c0a81efe&#xff0c;0不用填寫 ROS配置如下圖&#xff1a; 抓…

02_使用API_String

StringBuilder StringBuilder 代表可變字符串對象&#xff0c;相對于是一個容器&#xff0c;它里面裝的字符串是可以改變的&#xff0c;就是用來操作字符串的好處&#xff1a;StringBuilder 比 String 更適合做字符串的修改操作&#xff0c;效率會更高&#xff0c;代碼也會更簡…

MacOS “xxxxx“,已損壞,無法打開,你應該將它移到廢紙簍

在這里插入圖片描述 解決方案 應用程序 - 實用工具中打開終端&#xff0c;輸入命令&#xff0c; sudo xattr -r -d com.apple.quarantine 然后將程序拖放至命令窗口&#xff0c;如下圖&#xff1a;

22. Spring源碼篇之推斷構造方法

簡介 很多時候我們的構造器都不止一個&#xff0c;那么spring怎么選擇的呢&#xff0c;簽名介紹了推斷構造方法的擴展點&#xff0c;可以使用Autowired注解去選擇使用哪個構造器&#xff0c;但是即使這樣也有可能有多個Autowired且required為false的構造器&#xff0c;那么還是…

QLineEdit響應editingFinished實現只響應一次

QLineEdit中editingFinished槽函數會在按下enter時響應兩次&#xff0c;分別是按下enter和失去焦點的時候&#xff0c;為了能讓 QLineEdit只響應其中一次&#xff0c;需定義一個全局變量m_bFlagEnter保存是否enter是否按下&#xff0c;按下后&#xff0c;則在失去焦點的時候做對…

Unity發布IOS后,使用xcode打包報錯:MapFileParser.sh:Permissiondenied

1.錯誤提示 使用xcode打包錯誤提示&#xff1a;/Users/mymac/Desktop/myproject/MapFileParser.sh: Permission denied 2.解決方案 打開控制臺輸入&#xff1a;chmod ax /Users/mymac/Desktop/myproject/MapFileParser.sh。按回車鍵執行&#xff0c;然后重新使用xcode發布程序…

【開源】基于JAVA的在線課程教學系統

項目編號&#xff1a; S 014 &#xff0c;文末獲取源碼。 \color{red}{項目編號&#xff1a;S014&#xff0c;文末獲取源碼。} 項目編號&#xff1a;S014&#xff0c;文末獲取源碼。 目錄 一、摘要1.1 系統介紹1.2 項目錄屏 二、研究內容2.1 課程類型管理模塊2.2 課程管理模塊2…

機器學習之數據清洗和預處理

目錄 Box_Cox Box_Cox Box-Cox變換是一種用于數據預處理和清洗的方法&#xff0c;旨在使數據更符合統計模型的假設&#xff0c;特別是對于線性回歸模型。這種變換通過調整數據的尺度和形狀&#xff0c;使其更加正態分布。 Box-Cox變換的定義是: y ( λ ) { y λ ? 1 λ , i…

【深度學習】卷積神經網絡(CNN)

一、引子————邊界檢測 我們來看一個最簡單的例子&#xff1a;“邊界檢測&#xff08;edge detection&#xff09;”&#xff0c;假設我們有這樣的一張圖片&#xff0c;大小88&#xff1a; 圖片中的數字代表該位置的像素值&#xff0c;我們知道&#xff0c;像素值越大&#…

QQ怎么備份聊天記錄?3個方法教你快速備份!

QQ聊天記錄作為用戶和親人、好友以及同事之間溝通的憑證&#xff0c;可以幫助我們回憶起過去的交流內容。如果我們不小心誤刪了QQ聊天記錄或者更換了新手機&#xff0c;那么這時候就需要備份聊天記錄。qq怎么備份聊天記錄呢&#xff1f;本文將介紹3個簡單方法&#xff0c;幫助您…

MySQL - 4種基本索引、聚簇索引和非聚索引、索引失效情況

目錄 一、索引 1.1、簡單介紹 1.2、索引的分類 1.2.1、主鍵索引 1.2.2、單值索引&#xff08;單列索引、普通索引&#xff09; 1.2.3、唯一索引 1.2.4、復合索引 1.2.5、復合索引經典問題 1.3、索引原理 1.3.1、主鍵自動排序 1.3.2、索引的底層原理 1.3.3、B 樹和 B…

創作4周年

&#x1f64c;秋名山碼民的主頁 &#x1f602;oi退役選手&#xff0c;Java、大數據、單片機、IoT均有所涉獵&#xff0c;熱愛技術&#xff0c;技術無罪 &#x1f389;歡迎關注&#x1f50e;點贊&#x1f44d;收藏??留言&#x1f4dd; 獲取源碼&#xff0c;添加WX 目錄 前言機…

哈希表-set、map

當需要判斷一個元素是否在集合中時&#xff0c;就使用哈希法 散列表&#xff08;Hash table&#xff0c;也叫哈希表&#xff09;&#xff0c;是根據鍵&#xff08;Key&#xff09;而直接訪問在內存存儲位置的數據結構。 哈希表中關鍵碼就是數組的索引下標&#xff0c;然后通過…