1. 程式人生 > >作業系統核心原理-7.裝置管理:I/O原理

作業系統核心原理-7.裝置管理:I/O原理

一、I/O的基本知識

1.1 為何要有I/O

  前面闡述了作業系統具有程序管理、記憶體管理、外存管理三大核心功能,但是計算機歸根是為人類服務的,這就要求計算機必須提供某種機制使得人們可以向計算機發出命令或操縱計算機。也就是說計算機與人之間必須存在某種溝通的機制,這種溝通的機制就是計算機的輸入輸出機制。輸入輸出的存在才使得計算機的存在有了意義,就像一個人,如果沒有輸入輸出,那麼就不能與外部世界打交道。

  (1)輸入提供的是一個“人→計算機”的通道,即人或外部世界通過輸入向計算機發出命令或提供資料。

  (2)輸出提供的是一個“計算機→人”的通道,計算機通過這個通道向人禍外部世界輸出自己的計算機結果。

1.2 I/O管理要達到的目的

  簡單來說,I/O就是提供一個人際互動的通道,使得人和計算機能夠進行溝通。具體來說,I/O的目的有以下兩點:

  (1)遮蔽輸入輸出裝置的差異:提供一個統一的介面來遮蔽輸入輸出裝置的差異

  (2)在不同設計之間進行資料表示的轉換:資料能夠在不同裝置之間相互轉換而無需使用者操心

二、I/O的硬體和軟體

2.1 I/O的硬體

  所有的I/O裝置均可以分為兩個大類:塊裝置字元裝置。塊裝置是以資料塊為單位儲存和傳輸資料的輸入輸出裝置,如磁碟、光碟、U盤等;而字元裝置則是將資料按照字元為單位來存放和傳輸的裝置,如滑鼠、鍵盤、印表機等等。

  (1)I/O裝置的差異性

  I/O裝置由於種類不同、製造商不同、技術標準不同,其特性可以有巨大的不同。因此,遮蔽這些巨大的不同,使得不同的裝置相互共存並不是一件容易的事情。

  (2)裝置控制器

  I/O裝置本身並不是一個不可分割的整體,而是由不同的部件構成。一般來說,一個I/O裝置至少可以分為兩部分:機械部分和電子部分。機械部分是裝置的物理硬體部分,而電子部分則是裝置的控制器。控制器可以處理多個裝置,或者說多個同類的裝置可以共用一個控制器,如下圖所示:

I/O Controllers

2.2 I/O的軟體

  除了有了I/O的硬體是不夠的,畢竟,對於使用者來說,直接對硬體進行操作十分困難。我們知道,作業系統的角色是魔術師和管理者,魔術是將不同I/O裝置的差異遮蔽,使它們看上去似乎是一樣的東西,都具有令人賞心悅目的介面;而管理則是對這些裝置進行管理,該獨享的獨享,該共用的共用,需要緩衝的緩衝,並對裝置進行實際的驅動(發出讀寫命令)。

  具體來說,I/O軟體的目標如下:

  (1)裝置獨立:程式對I/O裝置的訪問不依賴於裝置的物理特徵,且在I/O程式的編寫時無須事先指定I/O裝置。

  (2)統一命名:裝置或檔案的命名不依賴於具體的計算機,這樣使用名字將使程式可以在任何機器上執行;

  (3)錯誤處理:對輸入輸出過程中產生的資料錯誤進行偵測與糾正,而且糾錯應該在最靠近硬體的層面上進行;

  (4)資料傳輸:實際操控資料在主機和外設之間的傳遞;

  (5)緩衝:為資料傳輸提供一個臨時存放地,然後在方便時將資料拷貝到最後目的地。

  (6)共用與獨享:將裝置儘量變為共享,以增大資源利用率和降低死鎖發生的概率。例如,將磁碟、印表機變為共享。

三、I/O軟體的分層

  為了完成一個繁瑣的工作,人們通常將其分為更小的任務來處理。在I/O軟體上自然也不會例外。I/O軟體通常按照I/O功能進行分層,每一層有提供獨特的功能,並與相鄰的層面設計有標準介面。一般來說,I/O軟體都有以下幾層:

  (1)使用者層I/O軟體

  (2)裝置獨立的作業系統軟體

  (3)裝置驅動程式

  (4)中斷服務程式

3.1 中斷服務程式

  由於大多數I/O均為中斷驅動,中斷驅動服務程式就稱為絕大部分I/O軟體的不可分割的部分。中斷服務程式由於直接與硬體相關,因此針對不同的I/O硬體,中斷響應的處理方式也不盡相同。因此,中斷服務程式是I/O軟體系統分層裡面的最底層。

3.2 裝置驅動程式

  裝置驅動程式顧名思義就是直接驅動I/O裝置進行輸入或輸出操作的軟體。它屬於與裝置控制器直接聯絡的I/O軟體部分,與具體的I/O裝置直接相關,並針對每個特定的I/O裝置進行優化。

3.3 裝置獨立的作業系統軟體

  裝置驅動程式並不直接從使用者處接收I/O請求,而是通過作業系統軟體獲得的。作業系統在設計時之所以有這層軟體是因為I/O軟體的一部分與裝置有關,一部分與裝置無關。而如果與裝置無關,就可以將這部分共用起來,放置在裝置驅動程式之上,為使用者提供一個統一的I/O介面。

3.4 使用者層I/O軟體

  裝置驅動程式從裝置獨立的作業系統軟體層接收I/O請求,而裝置獨立的作業系統軟體則從使用者或應用軟體處接收指令。這時,還差一個發出指令的介面,這個介面就是使用者層I/O軟體。我們可能大多數都見過在一段C程式中

    count = write(fd, buffer, nbytes)

  這一句命令就是使用者層I/O軟體的一部分,write是一個由高階語言提供的庫函式,使用者與這個庫函式打交道,而這個庫函式在編譯之後會變成一系列指令,來完成系統呼叫過程。

參考資料

鄒恆明,《作業系統之哲學原理》,機械工業出版社

作者:周旭龍

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連結。

相關推薦

作業系統核心原理-7.裝置管理I/O原理

一、I/O的基本知識 1.1 為何要有I/O   前面闡述了作業系統具有程序管理、記憶體管理、外存管理三大核心功能,但是計算機歸根是為人類服務的,這就要求計算機必須提供某種機制使得人們可以向計算機發出命令或操縱計算機。也就是說計算機與人之間必須存在某種溝通的機制,這種溝通的機制就是計算機的輸入輸出機制。輸

作業系統19———IO系統之與裝置無關的I/O軟體&使用者層的I/O軟體

作業系統19———IO系統之與裝置無關的I/O軟體&使用者層的I/O軟體 一.目錄 二.與裝置無關軟體的基本概念 裝置獨立性(裝置無關性)的含義:應用程式中所用的裝置,不侷限於使用某個具體的物理裝置。 與裝置無關的I/O軟體(裝置獨立性軟體)含義:在裝置

作業系統的永續性學習一I/O Devices

最近由於專案需要,需要學習相關的檔案系統,覺得當時在學習作業系統的時候對檔案系統方向的知識比較匱乏,所以特地來進行補充知識。 I/O匯流排 在介紹I/O裝置的時候,我們要先知道我們的device(HDD,SDD)是如何接到我們的CPU上的,下面來放一個相關的I/

作業系統學習筆記I/O輸入系統

計算機兩大主要任務:IO操作和計算處理。許多情況下,主要是IO操作,計算處理只是附帶的(而作業系統的兩大任務是管理物理裝置和為應用程式提供一個虛擬機器器的抽象)。作業系統在IO方面的作用是管理IO操作和IO裝置。 一、概述 I/O裝置在功能與速度方面存在很大

筆記I/O流-字符集

表示 ava deb 建立 gin integer 示例 字節 標準化 Java 庫的 java.nio 包用 Charset 類統一了對字符集的轉換,支付姐建立了兩個字節Unicode碼元序列與使用本地字符編碼方式的字節序列之間的映

筆記I/O流-對象序列化

err extends 自己 point clas xtend his size cto Java 語言支持一種稱為對象序列化(Object Serialization)的非常通用的機制,可以將任何對象寫入到流中,並在之後將其讀回,首先需要支持對象

筆記I/O流-內存映射文件

pos 開始 col java mod 傳播 寫入 i/o .get 內存映射文件時利用虛擬內存實現來將一個文件或者文件的一部分映射到內存中,然後整個文件就可以當作數組一樣的訪問,這個比傳統的文件操作要快得多,Java 使用內存映射文件首先需要從文件中獲取一個cha

PHP解析xml文件是報錯I/O warning : failed to load external entity

external load 有時 () 註入 ade 相同 pre war 在代碼頂部增加 libxml_disable_entity_loader(false); libxml_disable_entity_loader()作用是設置是否禁止從外部加載XML實

Java筆記I/O

out eno display cat java筆記 txt fileinput put one 一、流 Java通過流實現I/O,流是一種可以產生或使用信息的抽象。 Java定義了兩種類型的流: 字節流:處理字節的輸入和輸出,例如讀寫二進制數據。 字符流:處理字符的輸入

Java入門第六篇I/O

進行 spa out tao 基本數據 速度 序列 自帶 緩存對象 [java中的IO流] 分類: 1. 根據流的方向:輸入流和輸出流 根據讀取文字的大小:字節流和字符流; 字節流按字節讀取,讀取中文時會產生亂碼,字符流按字符讀取,通常用於讀取中文。 根據讀取的方式:節

第七章|7.4併發程式設計| I/O模型

I/O模型 協程是單執行緒下的併發,並不是對效能都有所提升,一定是監測單個執行緒下的多個任務的I/O,遇到I/O不要讓它阻塞,給它自動切換到其他任務去,這樣就能提高單個執行緒下的執行效率。--->>用gevent模組來實現了,gevent是怎麼檢測I/O行為的呢,gevent監測行為,遇到I/O

JavaI/O流相關

基本資料流 DataInputStream / DataOutPutStream 操作基本資料型別的流,可以讀寫各種基本資料 記憶體操作流 對記憶體中的變數進行 I / O 操作 有C語言sprintf函式的影子 又像集合中的toArray填充一個數組 可以把流中

JavaI/O流概述

流概述 從流的功能分類 節點流(Node Stream) 直接與節點(如檔案)相連 可以從 / 向一個特定的地方(節點)讀 / 寫資料 如檔案流FileInputStream,記憶體流 ByteArrayInputStream

java複習筆記7--java基礎之I/O流2

字元流 前面針對位元組流和位元組快取流做了一個比較全面的探索。位元組流以位元組(8bit)為單位讀取資料,且可以處理所有的資料,包括文字,音訊等,這裡就要丟擲一個問題了,既然位元組流這麼方便,只是讀取資料比較麻煩,那我們完全可以包裝位元組流進行快速的一些處理,為

管理I/O重定向

顯示屏 寄存器 標準輸入 stdin 系統 存在 輸出 設備 block 程序 :指令和數據控制器:指令運算器:數據存儲器:RAM地址總線:內存尋址數據總線:傳輸數據控制總線:控制指令寄存器:CPU暫時存儲器I/O :硬盤 Input Output系統設定:默認輸出設備

計算機系統結構考試重點Chapter 8I/O系統

匯流排的定義以及匯流排的型別 匯流排的定義: 共享的通訊鏈路,用於連線多個子系統的單組連線 控制匯流排,資料匯流排,I/O匯流排 前端匯流排:Front Side Bus(FSB),是將CPU連線到北橋晶片的匯流排。北橋晶片負責聯絡記憶體、顯示卡等資料吞吐量最大

Linux網路程式設計學習筆記(7)---5種I/O模型及select輪詢

本文主要介紹5種I/O模型,select函式以及利用select實現C/S模型。 1、5種I/O模型 (1)阻塞I/O: 一直等到資料到來,才會將資料從核心中拷貝到使用者空間中。 (2)非阻塞I/O: 每過一段時

[瘋狂Java]I/OI/O流的最高境界——物件流(序列化手動序列化、自動序列化、引用序列化、版本)

1. 什麼是物件流:序列化/反序列化的概念     1) 物件流是和位元組流/字元流同處於一個概念體系的:         a. 這麼說位元組流是流動的位元組序列,字元流是流動的字元序列,那麼物件流就是流動的物件序列咯?         b. 概念上確實可以這樣理解,物件流

UNP卷一學習筆記I/O模型

UNIX下可用的5種I/0模型: (1)阻塞式I/O   (2)非阻塞式I/O   (3)I/O複用   (4)訊號驅動I/O(SIGIO)    (5)非同步I/O 前4種屬於同步操作,第5種屬於非

Linux網路程式設計(5)I/O模型

       這一部分的內容本來應該作為第四部分內容,置於上一講之中的。由於當時自己學習時也存在很大的困惑,邊學邊用,因此造成了知識體系的不連貫性。我們開始學習吧。 (1)什麼是I/O複用(I/O multiplexing)呢?         當你編寫的程式需要同時處理多