【更新中】Operating System Concepts讀書筆記——計算機系統結構【2】


更新了恐龍書到第10版,本篇筆記主要對應書中的1.2部分。

一、計算機組織形式

1.1 總線與驅動

  計算機通過**系統總線(System Bus)將各類設備連接,通過驅動程序(Driver)**理解硬件設備,實現操作系統對硬件的操作。
總線與驅動

1.2 中斷

  考慮一個程序進行I/O操作的情況。爲了啓動IO,設備驅動器首先加載需要參與的寄存器到設備控制器中,然後檢查寄存器中的數據,決定下一步要做的事情(如接受一個鍵盤字符輸入)。在完成了將數據加載後,如加載設備中的信息到內存,設備控制器通知設備驅動已經完成。驅動然後交還控制給操作系統,交還一般會返回一些信息,比如數據,比如指向內存數據的指針。
Q:考慮上述過程設備控制器是如何通知驅動程序已經完成的。
A:通過中斷

1.2.1 概覽

  中斷的過程如其名,即在CPU上下文中插入一箇中斷服務,最後再恢復回去。它大概包含以下過程及概念:

  • 中斷由系統總線通知CPU,中斷非常頻繁,所以CPU要立即處理中斷。
  • 每個計算機都有自己的中斷機制,中斷後需要迅速轉移控制(CPU時間、CPU操作)給中斷控制程序(例程)。
  • 通常使用一個包含指針的表存儲中斷控制程序地址信息,這個表也成爲中斷向量表(因爲存儲了中斷程序地址)。這個表本身是一個數組,數組下標是中斷編號,所以可以快速索引。
  • 中斷向量表不是由一個進程所有,而是存儲在低地址空間中(爲什麼放低地址是考慮到硬件讀取字長有限的問題,地址分割可參見這篇博文《Linux內核是如何分割你的RAM的(劃分物理地址)》
  • 中斷過程必須保留中斷前的所有狀態信息,比如中斷程序要修改寄存器的值,需要提前保存。在中斷執行結束後再加載這些狀態信息,彷彿未發生過中斷。

1.2.2 實現

  CPU有一個硬件的中斷感知線Interrupt request line,專門感知中斷信號,CPU每運行完一個指令都會通過這個line檢查中斷。
  CPU檢查到中斷後,會利用這個中斷編號去檢索中斷向量表,迅速轉移到中斷處理例程(Interrupt handler routine)中去。
  Interrupt handler routine首先提前保存好它要修改的信息(例如:某些要使用的寄存器上的數據),然後判斷中斷髮生原因並執行處理,然後執行return_from_interrupt函數返回結果,回到之前的狀態。


  整個狀態可以用CPUInterrupt handler routine,及與它們相關的幾個動詞聯繫起來:

  • 設備控制器通過Interrupt request line發送信號到CPU從而*發起*中斷。
  • CPU捕獲中斷,分派中斷給Interrupt handler routine
  • Interrupt handler routine服務設備,清除中斷。

該過程如下圖所示:
中斷處理過程


  中斷機制讓CPU擁有了異步處理的能力(CPU在等待設備的時間裏可以忙別的東西)。現在操作系統擁有更多的能力:

  1. 在CPU處理關鍵進程的時候可以延遲中斷的處理。
  2. 更加高效的分派中斷處理程序。
  3. 建立基於優先級的多級中斷,優先處理高級別中斷。

  現代操作系統實現這些功能通過CPU和中斷控制硬件(Interrupt Control Hardware)。


  大部分的CPU擁有兩條Interrupt request line

  • 處理無法掩蓋(處理)的中斷(non-maskable):無法處理,例如內存錯誤
  • 可以掩蓋(處理)的中斷(maskable):CPU可以取消(忽略)的中斷,很多的設備控制器就走這條。

  中斷向量表的作用是快速索引Interrupt handler routine,但是真實情況下這個表純使用數組可能會相當巨大,所以在實現的方面才用了線性表的方式(索引+一一遍歷)。(不熟悉數據結構的話可以查詢線性表或哈希表之類的實現),下圖是Intel CPU的中斷向量表,0~31爲nonmaskable的內容。
因特爾CPU 中斷向量表


  作爲總結,中斷是操作系統實現異步的核心機制。設備控制器和硬件錯誤引發了中斷。現代操作系統爲了優先處理高級別的中斷,操作系統建立了一整套處理中斷的系統。因爲中斷在操作系統中出現的相當頻繁,所以高效的中斷處理程序非常重要。

1.3 存儲結構

1.4 I/O結構

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章