# I/O運作 ###### tags: `IT鐵人` ## I/O裝置 所謂的I/O裝置,就是input/output的裝置,負責輸出跟輸入資料,比如說鍵盤跟螢幕,或是網路等等的裝置,有時候我們需要通知這些裝置做事,就有幾個方法可以實行,分別是polling I/O, Interrupted I/O以及DMA,前兩者的前面六個步驟都相同,依序是下列六步: |No.|Action| |-|-| |1|User process發出I/O request給OS |2|OS收到請求,可能暫停此process執行,並執行相對應的system calls。 |3|kernel的I/O-subsystem會pass此請求給Device driver。 |4|Device driver依此請求設定對應的I/O commands參數給Device Controller。 |5|Device Controller啟動,監督I/O-Device之I/O運作進行。 |6|在此時,OS可能將CPU切給另外一個process執行。 後面依序介紹三種I/O處理方式,三種的差別在於I/O動作結束之後怎麼告知OS,讓自己取得I/O結果。 ## Polling I/O  Polling I/O稱為詢問式I/O,CPU在執行其他Process的過程時要不斷去pollling Device Controller確認I/O動作是否完成。 通常實作的方式會使用幾個bit,負責表示I/O動作完成或是出現錯誤,CPU每次只要檢查這幾個bit就好,處理完成後再把這些bit重設。 Polling I/O因為需要花大量的時間去polling Device Controller上,花在process execution的時間就相對被壓縮,所以適合用在Device執行很快的情況,如此一來才不會有一堆需要詢問的Device占用CPU時間。 ## Interrputed I/O  Interrupted I/O的做法是在I/O動作完成後,發出一個I/O Completed的Interrupt通知OS,CPU再花時間來尋找是哪個I/O完成並且處理之。 Interrupt的好處是不用一直花時間polling,能夠提升CPU utilization。不過要是I/O Device的處理方式很快,則會一直被interrupt,所以適合用在I/O Device有一定處理時間的裝置。 ## DMA I/O  DMA I/O的全名為Direct Memory Access,他的做法是把I/O的處理交給另一個硬體,讓他直接存取記憶體以便他直接把處理好的結果放在該放的位置。 DMA I/O的好處是可以很大幅度的提高CPU utilization。缺點是需要另外設計一個硬體處理I/O,並且DMA I/O還是會跟CPU搶Memory的使用權。 ## 白話說明I/O種類  其實我們可以把這個假設成工作中途煮開水: * Polling I/O就是時不時過去看看水滾了沒。 * Interrupted I/O就是水開了之後會發出高頻率的叫聲,像是以前的水壺會裝上一個通知水滾的尖嘴。 * DMA I/O就是雇用了一個傭人幫忙煮開水,好了就拿過來主人的身邊。 |上一篇|下一篇| |--|--| |[OS初體驗](https://hackmd.io/@dZfCcN4hT8aUuDPv3B8CWQ/SJp_jMc-Y)|[Kernel Mode](https://hackmd.io/@dZfCcN4hT8aUuDPv3B8CWQ/HJ8bbihWY) 
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.