計算機系統和中斷的概念

概念:
cpu:特指處理器核心,而不是處理器封裝,由於不少處理器將橋芯片和內存控制器芯片都封裝在一塊兒,形成一種誤解,實際上處理器核心並不包含這些內容。
外設:帶有處理邏輯的集成電路核心。ios

1、CPU和外設芯片 編程

一、功能對等性和地位的不平等
外設芯片也能夠處理數據,所以和cpu在功能上是對等的,GPU概念的提出加深了咱們對這種對等性的理解。cpu是相對比較通用的芯片,而外設呢是功能比較專注的芯片。有時候,外設在某方面的處理能力要遠遠高於cpu。
馮.諾依曼機器是以處理器即CPU爲中心的,所以在編程層面上cpu和外設是不平等的。因爲歷史緣由,在那個年代,計算機主要用於科學計算,cpu足以勝任所有任務,所以外設幾乎是不存在的,加上設計的簡單性,軟件指令統一由cpu發出和執行,所以軟件意義上的不平等是歷史緣由和設計緣由形成的。
二、通訊機制
無論怎樣,外設鏈接於系統上,cpu和外設必然須要相互通訊。因爲編程的不平等性,通常意義上全部指令由cpu發出,cpu能夠主動讀寫或者操做外設,而外設卻很難直接操做cpu,所以提出中斷的概念。外設經過硬件邏輯,而不是軟件邏輯(軟件邏輯通常所有由cpu負責)來通知cpu有事情要作,cpu必然須要一種機制被動獲得這種通知,這就是中斷。
2、主板架構
一、以cpu爲中心
因爲歷史緣由和設計緣由,主板都是以cpu爲中心的,而後經過硬件連線邏輯鏈接各類外設。最簡單的鏈接方式就是外設們和cpu鏈接在一條共享的線路上(因爲它們的平等性)。
二、以各類橋鏈接各類總線
然而外設們的速率和通訊協議彼此並不必定相同,和cpu之間的協議也有所不一樣,那麼必然須要一種設備來進行協議轉換和數據緩衝,以適配速率不一樣,協議不一樣的各類外設之間以及外設和cpu之間的通訊。所以提出總線的概念,鏈接在一種總線上的全部設備的速率和底層通訊協議是一致的。
三、外設鏈接在各類總線上
相同協議和相同速率的外設鏈接在一類總線之上。注意,系統中某一種總線並不必定只有一條,每一條總線(注意,不是一種,而是一條)都定了一個地址空間,也就是一個地址命名空間,在這個意義上,cpu訪問的地址x和pci設備的地址x並非一個地址,所以橋設備必須能夠提供一個地址映射機制,能夠將一端的地址映射到另外一端的y(能夠直接等於x,然而意義卻不同)。
四、中斷引腳
cpu核心爲了能夠被外設中斷,它必須有一箇中斷引腳。外設爲了能夠中斷cpu,也必須有一種機制使它和cpu中斷引腳直接或者間接相鏈接。
4.一、基於硬連線的中斷

外設要想能中斷cpu,最直接的方式是引出一根線,和cpu的惟一的中斷引腳相連,然而cpu只有一個引腳,因此cpu須要在後續的總線週期中查詢是誰發送了中斷信號,所以外設須要有機制告知這個信息,這個信息就是中斷向量號,然而不少設備會共享一個向量號,這就須要cpu在基於中斷向量號的中斷處理程序中遍歷全部的設備進行確認了。
5.協議軟化
早期不少的總線都是並行的,芯片除了片選引腳外,地址線/數據線都是並行的,這樣的話不利於通訊協議的更改,由於並行總線的通訊協議(總線事務)徹底基於時序,而時序是硬件設計時定義的,好比對於地址/數據複用線,第一個總線週期發出地址,而後後續週期發出數據等,這些都是硬連線肯定的,另外,並行線路,頻率越高干擾越大,離得越近干擾越大,然而事情卻在向高頻,小型化發展,這明顯是一個矛盾,所以設計出了串行總線,將處理邏輯集中於芯片,總線線路只負責傳輸基於frame的數據,這就是協議軟化,也叫總線事務軟化。當須要更新協議的時候,只須要更換芯片便可,線路無需更改。
5.一、基於消息的中斷
pci/pcie總線使用基於消息的中斷,即msi/msi-x,這種中斷機制無需設備的中斷線引腳,只須要在串行總線發出一箇中斷事務,而後會有芯片接管這個事務,這個事務消息中有中斷向量號信息,而後該芯片會代理設備向cpu發出中斷事務,具體如何向cpu轉發設備的中斷,有不少種方式,一種古老的方式用於使用8259的系統中,8259會向cpu的intr引腳發送中斷,而後到cpu查詢向量號的時候8259會將從msi中獲得的向量號發給cpu。一種更新的方式是使用apic,msi向一個存儲器地址空間寫一箇中斷消息,該地址在pcie橋處被轉換爲cpu的存儲空間地址,該地址就是local-apic的映射地址,而後在fsb上發送中斷事務,因爲地址被映射處處理器封裝中的local-apic,該事務被local-apic接管,而後local-apic再向處理器核心即cpu發送中斷。這種方式徹底由消息事務完成,絲絕不須要任何硬連線。
3、系統軟件相關
系統軟件並不只僅是操做系統,實際上操做系統並不直接管理硬件。fireware和硬件接口,而操做系統和用戶接口。
一、fireware定義硬連線拓撲
這種fireware和主板硬件接口,在x86平臺上,這種fireware稱爲bios,在bios定義了豐富的信息。主板上電後,bios執行,bios中保存了E820映射信息,也就是cpu的地址空間的什麼地址映射到什麼總線,接下來的一種可能實現是bios根據這些信息檢測並初始化總線設備,其實是一種遍歷,爲各個設備分配基地址,也就是寫入配置空間基地址信息。這些信息由操做系統讀出並使用。(固然也能夠將這信息寫死到設備的rom中)
二、操做系統
和用戶接口,操做徹底是爲了管理用戶進程的,它對硬件的管理徹底是基於fireware的。操做系統根據fireware的信息獲得主板拓撲信息,設置中斷向量,獲得設備的基地址等信息。
附:軟化
不知以太網以及tcp/ip的設計思想有沒有影響主板設計,以太網的802.3設計就是一個串行協議設計的成功例子,tcp/ip的設計也是相似的一個例子,網絡協議的設計幾乎都是串行的,這和計算機早期的並口不一樣,串口有着簡單性和抗干擾性的優勢,這點意義上,雙絞線最終淘汰了並口線,同軸線等...
無論怎樣,串行線路是軟的,而不像並行線路那樣硬,這樣就能夠將處理邏輯集中於端點而不是線路自己,好比不再用定義哪根線是數據準備好信號,那些根線是地址信號了,只須要定義一個frame的格式,而後按照這個格式發送數據就能夠了,這樣在串行線路上,甚至都再也不區分什麼地址線和數據線了,地址和數據都包含在數據包自己了,這樣分層協議和封裝協議就容易設計出來了,芯片自己使用軟件或者硬件處理數據包,和線路沒有關係,正如ipv6的數據包和ipv4的包均可以跑在一條線路上同樣,雖然它們的地址信息一點都不一樣。
串行線路將更多的事交給了端點的軟件或者硬件,這就解耦了線路和線路載荷。通常意義上,並行線路在低頻率時鐘狀況下比串行線路快,然而當這種優點達到極端時,當時鍾頻率發展到使並行線路再也不能夠提高性能時反而下降性能時,串行線路取代了並行了線路,此時因爲時鐘頻率足夠高,串行線路也已經足夠快了,前仆後繼,善莫大焉!咱們的主板將愈來愈像一個網絡了,實際上,最終,咱們的互聯網和主板將歸於一種設計,那就是串行線路鏈接各端點。人們一直覺得軟件處理效率不如硬件直接處理,說不定最終接替摩爾定律的偏偏的軟件的設計思想而再也不是單純的硬件,這裏的軟件並非編程意義上的軟件,而是設計意義上的軟件,也就是將處理邏輯集中於端點的設計思想。
笑聲中說一句,串行總線中能夠輕鬆實現中斷的動態配置,操做系統能夠參與中斷向量的配置,而在並行線路中,操做系統只能使用fireware的信息。api

相關文章
相關標籤/搜索