1. 程式人生 > >作業系統——I/O裝置管理(1)

作業系統——I/O裝置管理(1)

計算機系統中不同型別的輸入輸出裝置,如何對它們進行管理,使得各種裝置資源能夠得到充分、合理的利用,這是作業系統的一個主要的任務。

1、I/O硬體

電子專業的人關心的是硬體本身,他們看待輸入輸出裝置是由晶片,導線,電源等等組成的一個硬體。

計算機專業的人從作業系統的角度看待輸入輸出裝置,他們關心的是如何對它們進行程式設計。也就是這個硬體接受得控制指令是什麼,完成的功能是什麼,返回結果是什麼等等。

1.1、I/O裝置的型別

裝置的互動物件來分:
  • 人機互動物件:視訊顯示器,鍵盤,滑鼠,印表機等
  • 與計算機互動的裝置:磁碟,磁帶,感測器等
  • 計算機之間的通訊裝置:網絡卡,調變解調器等
裝置的互動方向:
  • 輸入裝置:鍵盤,滑鼠,掃描器等
  • 輸出裝置:顯示器,印表機等
  • 雙向互動裝置:磁碟,網絡卡等
按照資料的組織方式:
  • 塊裝置:以資料塊來作為資訊的儲存和傳輸單位,如磁碟
  • 字元裝置:以字元來作為資訊的儲存和傳輸單位,資料即位元組流,只能順序訪問。如滑鼠,串列埠,鍵盤等

1.2、裝置控制器(介面卡)

  • 僅僅有輸入輸出裝置是不能實現它們的功能的,在輸入和輸出裝置與CPU和記憶體之間還必須有一個對應的控制器。裝置和對應的控制器相互合作才能完成相應的功能。
之所以把兩者分開,而不是合二為一,是因為這樣的話,在設計的時候能夠更加模組化、更加通用。
  • 控制器和介面卡的區別:介面卡一般是印刷電路卡的形式,它可以很方便地插入到主機板的擴充槽中。控制器一般是一組晶片,它主要是整合在主機板上或者是I/O裝置內部的。但是介面卡和控制器的功能是一樣的,都是完成裝置與主機之間的連線和通訊。
  • 在裝置控制器上通常都有一個插槽,可以用電纜把它和相應的輸入輸出裝置連線起來。在控制器和輸入輸出裝置之間的介面可以定義為一個標準介面。
  • 例如:顯示器連線在顯示卡上,顯示卡插在主機板上。其它裝置都有相應的控制器。

1.3、I/O地址

每一種輸入輸出裝置都有一個相應的裝置控制器,裝置與裝置控制器結合起來,才能完成相應的輸入輸出功能。 輸入輸出裝置本身並不能直接跟CPU打交道,而是通過它的設別控制器跟CPU打交道。具體來講,每個裝置控制器裡都有一些暫存器,用於和CPU進行通訊,包括控制暫存器(控制裝置傳送資料,接收資料,開啟或關閉等操作),狀態暫存器(瞭解該裝置的當前狀態,就緒或忙碌)和資料暫存器等等。


但是CPU如何與這些控制暫存器以及資料緩衝區進行通訊呢?

CPU如何訪問它們的內容,解決方法主要有三種:

  • I/O獨立編址:給所有裝置控制器中的每一個暫存器分配一個唯一的I/O埠編號,也稱為I/O埠地址,然後用專門的輸入輸出指令來對這些埠進行操作。(IN,OUT指令)
  • 記憶體映像編址:把所有裝置控制器中的每一個暫存器都對映為一個記憶體地址,專門用於輸入輸出操作。埠地址空間和記憶體地址空間是統一編址的,總共只有一個地址空間,埠地址空間是記憶體地址空間的一部分,一般位於記憶體地址的高階,而地址低端為普通的記憶體地址。

優點:第一,程式設計方便,不需要專門的輸入輸出指令。第二,對普通記憶體的所有操作指令都可以用於輸入輸出埠。

缺點:第一,不能對控制暫存器的內容進行Cache,必須關閉。因為為了確保每次讀入的都是新值,必須直接去訪問I/O埠。第二,每一次都要判斷訪問的是記憶體還是I/O。

  • 混合編址:把兩種編址方法結合起來。對於裝置控制器當中的暫存器來說,採用的是I/O獨立編址的方法,每一個暫存器都有一個獨立的I/O埠地址。但是對於裝置的資料緩衝區來說,採用的是記憶體映像編址的方法,把它們的地址統一到記憶體地址空間中。
根據以上的知識,I/O裝置的型別,裝置控制器以及I/O埠地址,能不能程式設計使用這些裝置,來完成相應的輸入輸出功能?採用I/O控制方式。

2、I/O控制方式

當我們要給一個硬體裝置編寫驅動程式,如何讓它正常地運轉起來,這就需要用到I/O控制方式。I/O控制就是要與I/O裝置的裝置控制器的各種暫存器進行通訊。

當前的I/O控制方式主要有三種:程式迴圈檢測方式(Programmed I/O)、中斷驅動方式(Inerrupt-driven I/O)和直接記憶體訪問方式(Direct Memory Access)。

2.1、程式迴圈檢測方式

程式迴圈檢測方式:在進行I/O操作之前要不斷地檢測該裝置的控制器中的狀態暫存器,看它是否空閒。如果空閒,就向控制器發出一條命令,啟動這次I/O操作。 然後,在這個操作的進行過程中,也要迴圈地檢測裝置的當前狀態,看它是否已經完成。最後,在I/O操作完成之後,如果這是一次輸入操作,那麼就要把讀進來的資料儲存到記憶體中的某個位置。 總之,完成I/O的整個過程中,控制I/O裝置的所有工作都是由CPU來完成的。 缺點:在進行一個I/O操作時,要一直佔用著CPU,這樣就會浪費CPU的時間。

2.2、中斷驅動方式

迴圈檢測的控制方式會佔用大量的CPU時間,為了讓CPU在等待I/O完成的時候去執行其它的程序。我們採用中斷技術,這種方法被稱為是中斷驅動的控制方式。 中斷控制器負責管理系統中的所有的I/O中斷,只有它才能向CPU發出中斷請求。對於I/O裝置,當它需要傳送中斷時,不是直接發給CPU,而是先發給中斷控制器,並由它來決定是否要轉發給CPU。 過程:
  • 當一個I/O裝置完成了CPU交給它的任務的時候,它的控制器就會向中斷控制器發出一個訊號,中斷控制器會判斷一下,看看當前是否有一箇中斷正在處理,或者是否有一個優先順序更高的中斷。如果沒有,就開始處理這個中斷。
  • 一方面,中斷控制器把一個編號放在地址總線上,這個編號指明是哪一個裝置發出的中斷請求。另一方面,它會向CPU發出一箇中斷訊號。
  • 然後,CPU就會中斷當前的工作,並且用這個編號作為索引去訪問一箇中斷向量表。在這個向量表裡存放的是中斷處理程式的起始地址,這樣就能跳轉到該程式執行了,中斷程式是對剛才的I/O操作的繼續執行
  • 當中斷處理程式執行不久後,就向中斷控制器發出一個確認訊號,表示這個中斷已經被處理。這時,中斷控制器就可以發出新的中斷請求了。

2.3直接記憶體訪問方式

  • 在中斷驅動方式中,每一次的資料讀寫都是通過CPU來完成的,而且每次處理的資料量很少,因此中斷的次數就很多,中斷需要額外的系統開銷,因此會浪費CPU的時間。
  • I/O操作一般分為兩個階段。第一個階段是CPU或記憶體與裝置控制器之間的通訊。第二個階段是裝置控制器與I/O裝置之間的通訊。
如果是一次寫操作,那麼在I/O操作啟動時,CPU需要把資料從記憶體中寫入到裝置控制器內部的緩衝區,然後裝置控制器自己去和I/O裝置打交道,把這些資料寫到裝置上。 如果是一次讀操作,CPU先給控制器發訊號,讓它去啟動I/O操作,把資料讀入到控制器內部的緩衝區中,然後CPU再把這些資料讀入到記憶體中。

每次只能傳送一個位元組或一個字,因此如果交換的資料量比較大,就會浪費大量的CPU時間。解決方法是:採用直接記憶體訪問(Direct Memory Access,DMA)的控制方式,採用硬體的方式來實現I/O資料的移動。

不使用DMA方式,而是使用中斷驅動的控制方式,來實現從磁碟上讀取一個數據塊:

  • CPU向磁碟控制器發出命令,讀取一個數據塊。(由CPU執行)
  • 磁碟控制器從磁碟驅動器中一位接著一位地讀取這個資料塊,一直到整個資料塊都儲存在控制器內部的緩衝區中。(硬體完成)
  • 磁碟控制器通過校驗位來驗證這個資料塊是否傳送正確,如果正確,就向CPU發出一箇中斷。(硬體完成)
  • 當作業系統執行一個迴圈,從控制器的資料暫存器中,讀取一個位元組儲存在記憶體中。(由CPU執行)

如果使用DMA控制器硬體來完成第四步,則CPU會省出更多的時間去執行其它的程序。

下面介紹使用DMA控制器以後,從磁碟上讀取一個數據塊的過程:

  • CPU對DMA控制器進行程式設計,對它的各個暫存器的值進行設定,告訴它應該把資料傳送到記憶體的什麼地方。然後DMA向磁碟控制器發出命令,讓它從磁碟中讀取資料儲存在自己的資料緩衝區中。
  • DMA控制器通過匯流排向磁碟控制器發出一個讀操作的請求訊號,並且把將要寫入的記憶體地址打在總線上。
  • 磁碟控制器從內部緩衝區中取出一個位元組,按照DMA控制器給的地址寫入到記憶體中。
  • 當這個寫操作完成之後,磁碟控制器讓DMA發出一個確認訊號。然後DMA控制器就會把記憶體地址加1,把需要傳送的位元組數減1,就轉到第二步繼續執行。
  • 當所有的資料傳送完畢之後,DMA控制器就向CPU發出一箇中斷,告訴它資料傳輸已經完成。這樣當中斷處理程式開始執行時,它就知道,從磁碟中讀出來的資料塊已經在DMA的控制下,被傳送到了記憶體中。也就是說,當中斷髮生時,這個I/O操作也完成了。

相關推薦

作業系統——I/O裝置管理1

計算機系統中不同型別的輸入輸出裝置,如何對它們進行管理,使得各種裝置資源能夠得到充分、合理的利用,這是作業系統的一個主要的任務。 1、I/O硬體 電子專業的人關心的是硬體本身,他們看待輸入輸出裝置是由晶片,導線,電源等等組成的一個硬體。 計算機專業的人從作業系統的角度看待輸

作業系統——I/O裝置管理2

I/O軟體(與輸入輸出有關的軟體) 為了更好地管理系統中的輸入輸出裝置,我們需要哪一些軟體?這些軟體各自完成什麼樣的功能?它們之間的相互關係、組織結構是什麼?在這些軟體中,程式設計師負責做什麼?作業系統負責做什麼?I/O裝置廠商負責做什麼? 1、I/O軟體的介面 與I/O軟

作業系統原理之I/O裝置管理第六章上半部分下

五、I/O軟體原理 輸入輸出軟體的總體目標是將軟體組織成一種層次結構 低層軟體用來遮蔽硬體的具體細節 高層軟體則主要是為使用者提供一個簡潔、規範的介面 裝置管理的4個層次: 使用者層軟體 -》向系統發出I/O請求,顯示I/O操作的結果,提供⽤戶與裝置的接⼝ 與裝置無關的軟體層-》完成裝置命名、裝置分配、

第六章 裝置管理1

I/O系統的組成 I/O系統的功能、模型和介面 1.主要功能 (1)隱藏物理裝置細節,方便使用者 使用者使用抽象的I/O命令即可 (2)實現裝置無關性,方便使用者 使用者可用抽象的邏輯裝置名來使用裝置,同時也提高了OS的可移植性和易適應性。 (3)提高處理機和裝置的並行性

作業系統 --儲存器管理1

1.快取記憶體和磁碟快取: 快取記憶體是現代計算機結構中的一個重要部件,它是介於暫存器和儲存器之間的儲存器。主要用於備份主存中較常用的資料,以減少處理機對主儲存器的訪問次數,可以大幅度提高程式執行速度。 磁碟快取本身是利用主存中的部分儲存空間,暫時存放從磁碟中讀出(或寫入)的資訊。由於磁碟的

哈工大作業系統實驗5—I/O裝置管理

linux-0.11/kernel/chr_drv/console.c 修改con_write函式,即改變顯示的字元  /*  * linux/kernel/console.c  *  * (C) 1991 Linus Torvalds  */ /* * console.c * * This m

Openfire分析之三:ConnectionManager 連接管理1

max .com exc tco active eat cond hlist 觀察 Openfire是怎麽實現連接請求的?   XMPPServer.start()方法,完成Openfire的啟動。但是,XMPPServer.start()方法中,並沒有提及如何監聽端口,

Linux學習-文件管理1

詳細信息 src 最長 mod 展開 重新啟動 upper 填充 虛擬 文件管理——當你使用Linux時,大部分時間都會和文件打交道,我們需要了解基本的文件操作,如創建文件、刪除文件、復制文件、重命名文件以及為文件創建鏈接等。目錄 文件的組成 目錄結構

《Linux學習並不難》用戶管理1:Linux用戶賬戶分類

Linux 用戶 9.1 《Linux學習並不難》用戶管理(1):Linux用戶賬戶分類用戶賬戶在Linux系統中是分角色的,由於角色不同,每個用戶的權限和所能執行的工作任務也不同。在實際的管理中,用戶的角色是通過UID(用戶ID號)來標識的,每個用戶的UID都是不同的。 在Linux系統中有三大類

《Linux學習並不難》文件系統管理1:xfs文件系統介紹

Linux xfs 文件系統 18.1 《Linux學習並不難》文件系統管理(1):xfs文件系統介紹xfs是一種高性能的64位日誌文件系統,由Silicon Graphics在1993年為IRIX操作系統開發。2000年5月,以GNU通用公共許可證發布這套文件系統的源代碼,之後被移植到Linu

FATFS 檔案管理 1 - 判斷檔案型別

思路:通過判斷檔案字尾來判斷檔案型別; (1) 先建立基準資料 TODO: update the count #define FILE_MAX_MAIN_TYPE 7 #define FILE_MAX_SUB_TYPE 4 static const char *File_

javaweb學習筆記:會話管理1

目錄 會話管理 1.概念 2.cookie技術 2.1 Cookie一般處理流程 2.2 Cookie類 會話管理 1.概念 一次會話: 開啟瀏覽器 -> 訪問一些伺服器內容 -> 關閉瀏覽器。(瀏覽器A給伺服器傳送請求,訪問web程式,該次會話就

ASP.NET MVC 實現頁落網資源分享網站+充值管理+後臺管理1之資料庫設計

    本文主要講解本專案網站所應用到的知識點,及資料庫的相關設計: 一、知識點     (1)本專案主要採取ASP.NET MVC的程式設計模式,相信你已經瞭解到了MVC的具體含義是什麼,這裡不再贅述,有不瞭解的朋友,可以先

linux系統管理1之 核心編譯選項檢視

三個方法 proc檔案系統 ubunut debain 紅帽等 proc檔案系統 /proc/config.gz This file shows you the compile-time configuration settings for the kernel (gzip compr

第四章 儲存器管理1

儲存部件層 ** 程式的裝入和連結 ** 程式進記憶體的一般過程: 1)編譯compiler:編譯程式:將使用者原始碼編譯成若干個目標模組。 2)連結link:連結程式:將形成的一組目標模組,及它們需要的庫函式連結在一起,形成一個完整的裝入模組。 3)裝入load:由裝入程

第六章 裝置管理2

與裝置無關的I/O軟體 1.裝置獨立性(無關性) 使用者程式設計時所用的裝置名(邏輯上的)與實際物理裝置無關; 好處: ①裝置分配時的靈活性 3個物理裝置(如印表機),程式中申請一臺印表機,執行時不拘泥必須是某臺(如第2個)印表機 ②易於實現I/O重定向 指用於I/O操作的裝置可以更換(

第二章 程序管理1

一、引入 前趨圖(描述程序執行前後關係的圖) 有向無迴圈圖(DAG): Pi結點:描述一個程式段、程序、或一條語句。 有向邊“–>”:結點之間的偏序或前序關係。 Pi–>Pk,則Pi是Pk的直接前趨,Pk是Pi的直接後繼。 1. 程式順序執行時的特徵 (1) 順序性 處理機的

微信開發學習總結——素材管理1—獲取臨時素材和新增永久素材

這裡需要說一下圖片,語音,視訊的回覆訊息構造,這三種訊息構造時的都需要一個mediaId,而這個mediaId是通過素材管理介面上傳多媒體檔案得到的,為了構造圖片,語音,視訊的這幾種回覆訊息,我事先準備好了測試素材,如下圖所示: 客服介面圖文推送上傳圖片 在傳送圖文訊息時,我們需要新

微信開發學習總結——訊息管理1

上一節內容: 微信開發學習總結(二)——微信開發環境準備(2) https://blog.csdn.net/qq_29914837/article/details/82896861 接收普通訊息 當普通微信使用者向公眾賬號發訊息時,微信伺服器將POST訊息的XML資料包到開

五、學習筆記-Linux軟體包管理1

流行的兩種軟體包管理機制 (1)Debian Linux首先提出“軟體包”的管理機制—Deb軟體包 將應用程式的二進位制檔案、配置檔案、man/info幫助頁面等檔案合併打包在一個檔案中,使用者使用軟體包管理器直接操作軟體包,完成獲取、安裝、解除安裝、查詢等操作。 (2)Redhat L