# Chap. 13 - I/O systems > 課程內容 : 清華大學開放式課程 周志遠教授 > 參考書目 : Operating System Concepts (9th), Abraham Silberschatz, Peter Baer, Galvin, Greg Gagne > > 其他科目內容請參見 [[Here]](https://hackmd.io/@ChenZE/By4SOO6Jyl) ## Content * [Overview](#Overview) * [I/O hardware](#IO-hardware) * [I/O methods](#IO-methods) * [1. How to address a device](#1-How-to-address-a-device) * [2. How to interact](#2-How-to-interact) * [3. Who to control](#3-Who-to-control) ## Overview 計算機(computer)有兩種主要的工作: (1) I/O 存取 (2) 計算。I/O devices 的種類非常多樣化,像是滑鼠(mouse)、網卡(netword card)、螢幕(screen)等都是屬於 I/O devices 的範疇。 (1) I/O subsystem 所有的 I/O devices 都有一個子系統(I/O subsystem)。I/O subsystem 提供了一些方法與機制來控制所有的 I/O devices。 (2) Drivers Driver 提供一個統一的 interface 存取 I/O subsystem,讓 OS 與 I/O 間能夠溝通。類似於 system call 提供一個介面給 user 與 OS 之間。 ## I/O hardware 一個 I/O device 有 3 種主要的硬體元件 (1) Port I/O devices 與 host 端的連接點,是裝置與系統的連接口,例如 USB port。 (2) Bus 用來傳遞資料的 wires,可以是 controller 之間,也可以是 controller 與 device 之間。有兩種觀點可以看 Bus: * 物理方式: 包含 wires 的設計 * Protocal: 關於資料如何傳輸的協定(Ex: 每次傳 4 bytes 大小的資料) (3) Controller 實際控制 I/O devices 的電子零件,每個 controller 都會有屬於自己的 porcessor 與 memory 等硬體設備。 Controller/drivers/subsystem 三者關係如下 | 元件 | 角色/功能 | 範例 | |---|---|---| | I/O Subsystem | 作業系統的 I/O 管理模組,負責管理所有 I/O 設備,並決定如何分派請求,使用統一的 API 來提供 I/O 服務(例如 read()、write()) | 負責 `read()`、`write()` 這類的系統呼叫 | | Driver | 負責將作業系統的 I/O 請求轉換成設備可理解的控制命令,並與 controller 溝通,處理特定硬體的細節 | SATA 硬碟驅動程式、USB 驅動程式、顯示卡驅動程式 | | Controller | 真正與硬體進行溝通的電子元件,負責執行驅動程式傳來的指令,並控制設備運作 | 硬碟控制器(HDD Controller)、顯示卡控制器(GPU)、USB 控制器 |  ## I/O methods 每個 I/O port 都會有一個唯一的 port address,是一開始就已經在硬體上設計/指定好的位址。每個 I/O port 會由 4 個 register 組成 * Data-in register: 儲存來自 I/O 輸入的資料,並讓 host 端讀取 * Writer: I/O * Reader: CPU * Data-out register: 儲存來自 host 端的資料,並讓 I/O 輸出 * Writer: CPU * Reader: I/O * Status register: 儲存 I/O 狀態並讓 host 端讀取 * Control register: 儲存 host 端寫入的資料並用來控制 I/O Program 與 I/O 的溝通方式會透過一組特殊的 I/O 指令(instruction),且這些指令上中一定會指定 port address。例如: X86 的 `IN` 與 `OUT` 指令。  I/O method 指的是下指令的方式,可依不同面向來分類,這些面向可以隨機搭配使用。 ### 1. How to address a device 決定 device 的位置有 2 種方式 * Port-mapped I/O * 直接使用 I/O instruction 告訴 CPU 要寫到哪個 port 的 I/O * Memory-mapped I/O * 保留記憶體中的某個位置,這位置會對應到 I/O buffer。直接使用 data transfera 的指令(Ex: `MOV`)即可找到要寫入的 I/O * 適合大資料傳輸 ### 2. How to interact 傳遞資料給 I/O device 的方式有 2 種 * Poll(busy-waiting) * CPU 會不斷地檢查 device 的狀態並主動的 push 資料 * Interrupt * Device 完成後才會發出訊號通知 CPU,CPU 是被動的接收訊號 ### 3. Who to control 有 2 種方式可以對 I/O device 進行控制 * Programmed I/O * 直接由 CPU 控制 I/O 的傳輸 * Directed Memory Access(DMA) * 由一個特殊的硬體設備 DMA controller 控制 I/O 的傳輸,將資料載入到 memory 中提供給 CPU 使用。DMA controller 只會負責資料的搬移。 * 適合大型資料的傳輸 * 通常會搭配 memory-mapped I/O 與 interrupt 一起使用 
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up