操做系統精髓與設計原理(原書第6版)——學習筆記(4)



1.7 I/O通訊技術

         對於I/O操做有三種可能的技術:可編程I/O、中斷驅動I/O、直接內存存取(DMA)。編程

1.7.1 可編程I/O

         使用可編程I/O操做時,I/O模塊執行請求的動做並設置I/O狀態寄存器中相應的位,它並不進一步通知處理器,尤爲是它並不中斷處理器。所以處理器在這行I/O指令後,還要按期檢查I/O模塊的狀態,以肯定I/O操做是否已經完成。數組

         若是使用這種技術,處理器負責從內存中提取數據以用於輸出,並在內存中保存數據以用於輸入。I/O軟件應該設計爲由處理器執行直接控制I/O指令的操做,包括檢測設備狀態、發送讀命令或寫命令和傳送數據,所以指令集中包括如下幾類I/O指令:緩存

  • 控制:用於激活外部設備,並告訴它作什麼。例如,能夠指示磁帶倒退或前移一個記錄。數據結構

  • 狀態:用於測試與I/O模塊及其外圍設備相關的各類狀態條件。函數

  • 傳送:用於在存儲器寄存器和外部設備間讀數據或寫數據。性能

1.19a給出了使用可編程I/O的一個例子:從外部設備讀取一塊數據到存儲器,每次讀一個字的數據。對讀入的每一個字,處理器必須停留在狀態檢查週期,直到肯定該字已經在I/O模塊的數據寄存器中。這給流程圖說明該技術主要缺點:耗時,處理器老是處於沒有用的繁忙中。測試

1.7.2 中斷驅動I/O

         處理器給模塊發送I/O命令,而後繼續作其餘一些有用的工做。當I/O模塊準備好與處理器交換數據時,它將打斷處理器的執行並請求服務。處理器和前面同樣執行數據傳送,而後恢復處理器之前的執行過程。spa

         I/O每塊的角度,對於輸入操做,I/O模塊從處理器中接收一個READ命令,而後開始從相關的外圍設備讀數據。一旦數據被讀入該模塊的數據寄存器,模塊經過控制線給處理器發送一箇中斷信號,而後等待直處處理器請求該數據。當處理器發出這個請求後,模塊吧數據放到數據總線上,而後準備下一次的I/O操做。
        
從處理器的角度,對於輸入操做,處理器發一個READ命令,而後保存當前程序的上下文,離開當前程序,去作其餘事情。在每一個指令週期的末尾,處理器檢查中斷。當發生來自I/O模塊的中斷時,處理器保存當前正在執行的程序的上下文,開始執行中斷處理程序處理此中斷。操作系統

         1.19b給出了使用中斷驅動I/O讀數據塊的例子。中斷驅動I/O比可編程I/O更有效,這是由於它消除了沒必要要的等待。可是,數據中的每一個字不論從存儲器到I/O模塊仍是從I/O模塊到存儲器都必需要經過處理器處理,這致使中斷驅動I/O一樣很耗時。設計

1.7.3 直接內存存取

         中斷驅動I/O和可編程I/O這兩種方式,都須要處理器主動干預在存儲器和I/O模塊之間的數據傳送,而且任何數據傳送都必須徹底經過處理器。所以它們有兩方面的固有缺陷:

  • I/O傳送速度受限於處理器測試設備和提供服務的速度。

  • 處理器忙於管理I/O傳送的工做,必須執行不少指令以完成I/O傳送

當須要移動大量的數據時,就須要使用直接內存存取(DMA來提升傳送效率。DMA能夠由系統總線中一個獨立的模塊完成,也能夠併入到I/O模塊中。不論採用哪一種形式,該技術的工做方式:當處理器要讀或寫一塊數據時,它給DMA模塊產生一條命令,發生如下信息

  • 是否請求一次讀或寫

  • 涉及的I/O設備的地址

  • 開始讀或寫的存儲器單元

  • 須要讀或寫的字數

以後處理器繼續其餘工做。處理器把這個操做委託給DMA模塊,由該模塊負責處理。DMA直接與內存器交互,傳送整個數據塊,每次傳送一個字。這個過程不須要處理器參與。當傳送完成後,DMA模塊發送一箇中斷信號給處理器。所以只有在開始傳送和傳送結束時處理器纔會參與。(圖1.19c

附錄1A 兩級存儲器的性能特徵

         在本章中,經過使用高速緩存做爲內存和處理器間的緩存器,創建了一個兩級內部存儲器。這個兩級結構經過開發局部性,相對於一級性能獲得了很大的提升。

         其餘兩級存儲器方法:虛擬存儲器和磁盤高速緩存(見表1.2)也使用了局部性,而且至少有一部分是由操做系統實現。

局部性

         局部性原理聲明存儲器訪問表現出簇聚性。在很長的一段時間中,使用的簇會變化,但在很短的時間內,處理器基本上只與存儲器訪問中的一個固定的簇進行數據傳輸。

         局部性原理是頗有效的,緣由以下:

  1. 除了分支和調用指令,程序執行都是順序的,而這兩類指令在全部程序指令中只佔一小部分。所以,大多數狀況下,要取得下一條指令都是緊跟在取到的上一條指令以後的。

  2. 不多會出現很長的接二連三的過程調用序列,繼而是相應的返回序列。相反,程序中過程調用的深度窗口限制在一個很小的範圍內,所以在比較短的時間中,指令的引用侷限在不多的幾個過程當中。

  3. 大多數循環結構都由相對比較少的幾個指令重複若干次組成的。在循環過程當中,計算被限制在程序中一個很小的相鄰部分中。

  4. 在許多程序中,不少計算都涉及處理諸如數組、記錄序列之類的數據結構。在大多數狀況下,對這類數據結構的連續引用是對位置相鄰的數據項進行操做。

空間局部性時間局部性是有區別的。空間局部性指執行涉及不少簇聚的存儲器單元的趨勢,這也反映了處理器順序訪問指令的傾向,同時,也反映了程序順序訪問數據單元的傾向,如處理數據表。時間局部性指處理器訪問最近使用過的存儲單元的趨勢,例如當執行一個循環,處理器重複執行相同的指令集合。

兩級存儲器的操做

         在兩層存儲器結構中也使用了局部性特性。上層存儲器(M1)比下層存儲器(M2)更小、更快、成本更高(每位),M1用於臨時存儲空間較大的M2中的部份內容。當訪問存儲器時,首先視圖訪問M1中的項目,若是成功,就能夠進行快速訪問;若是不成功,則把一塊存儲器單元從M2中複製到M1中,在經過M1進行訪問。因爲局部性,當一個塊取到M1中時,將會有不少對塊中單元的訪問,從而加快整個服務。

         爲書名訪問一項的平均時間,不只要考慮兩級存儲器的速度,並且包括能在M1中找到給定引用的機率。爲此有:

         其中,T3=(系統)平均訪問時間、T1=M1(如高速緩存、磁盤高速緩存)的訪問時間、T2=M2(如內存、磁盤)的訪問時間、H=命中率(訪問可在M1中找到的次數比)。

1.15顯示了平均訪問時間關於命中率的函數。能夠看出,命中率越高,總的平均訪問時間更接近M1,而不是M2.

相關文章
相關標籤/搜索