操作系統運轉機制核心原理

PC的外圍硬件系統構成趨近固定,因此可以輕易的在操作系統內部劃分內核空間與用戶空間,系統內核與硬件設備驅動位於內核空間,用戶程序位於用戶空間。
內核空間是固定的通過添加預定義的接口,運行中的操作系統可以通過模塊內部定義約定知道這些模塊究竟是幹什麼的。在需要使用某些功能的時候,能夠根據預定義的操作調用這些模塊的功能,執行操作。當然這並不意味着操作系統在運行過程中必須要將這些東西完全載入內存,某些系統擁有配置機制,可以通過操作系統的配置機制感知外圍設備配置情況,根據配置信息動態載入內核空間模塊。某些操作系統可能通過用戶空間載入驅動,這可以理解爲內核空間中同樣存在一個抽象的設備驅動,外圍設備實現了抽象設備定義的功能接口。系統首先載入抽象模塊,之後根據配置信息載入對應的設備驅動程序,這樣做的好處是當數據出現錯誤,程序出現bug的時候,可以在內核空間中利用預設的檢查手段發現問題,規避問題,做出補救。
用戶程序處於用戶空間,用戶空間與內核之間通過固定的函數(系統API)調用與通訊。用戶空間中程序是不固定的,不固定意味着各種可能。系統通過特定的機制將應用程序的代碼段加載到內存(執行空間)中,這個機制必定是固話在系統中的,是系統的必須組成,而不是像用戶程序一樣的插件程序。操作系統中如果是通過特定明確的應用程序載入其它程序,只能說明此應用程序是操作系統內部機制的包裝,執行一些特殊操作,例如版本驗證等。系統通過任務輪換機制切換執行的程序。

操作系統有兩個核心,事件隊列與任務循環隊列。
操作系統管理整個計算機的硬件資源,硬件資源管理的方式基於事件驅動,操作系統預定義一些任務溝通CPU外圍設備。當系統正常運行之後,通過內部機制載入應用程序代碼段,執行操作。
當需要利用外圍設備的時候,程序調用內部機制生成一個事件消息,消息進入操作系統的核心事件隊列中,操作系統會逐一執行核心實踐隊列中的事件,事件可能會調用各種硬件資源完成操作,程序與硬件之間的各種數據交互由操作系統接管。
系統執行的應用程序在啓動之後,會被添加到系統的任務循環隊列中,在這個隊列中一個固定的單元代表着一個應用程序執行序列,系統會根據內部算法在循環隊列的所有任務塊中切換。啓動程序的時候添加任務塊,結束程序的時候,清空該任務塊。任務塊中擁有至少一個空任務,當系統無操作的時候,閒置等待。
任務循環隊列就是俗稱的進程隊列。
那麼他在響應CPU的各種中斷的時候,同樣會先運行中斷服務程序將CPU當前現場保留下來,之後將CPU收到的中斷相關信息記錄下來,將這個信息投入到分析任務序列。專門的分析程序會根據系統中應用程序、驅動程序、系統預設在系統中的註冊信息,生成一個專門的事件信息,這個事件信息就是操作系統對於外部輸入的所有響應了。之後這個事件會被投放到專門的事件處理隊列中去。從MFC中分析出的理論是,系統分析得到的事件針對的是哪一個服務、軟件、預設事件。就將它投入到該軟件內部的事件隊列【消息循環】中。之後再根據軟件內部自定義的消息路由選擇不同的分支進行處理。

以上機制的運行過程事例:
當應用程序啓動,操作系統通過內部機制,將程序載入執行空間,將執行空間的PC值寫入任務塊,作爲當前任務執行進度,操作系統在所有的任務塊之間進行切換,任務塊執行過程中,系統會監視PC值變化,當任務執行需要調用硬件功能,應用程序調用的接口會自動生成一個事件,該事件包含數據信息與操作的模塊信息等。事件被投擲到操作系統的核心事件隊列中,系統執行過程從用戶空間切換到內核空間,在內核空間中,操作系統根據事件塊中包含的信息對外圍硬件進行操作,獲取的數據通過接口返回給應用程序,系統執行由內核空間返回。
操作系統對於硬件設備的操作是分設備的,可能只有一個總的事件隊列,也可能每個設備都有一個事件隊列,但是即使只有一個時間隊列也肯定會根據設備進行二次映射,將所有事件映射爲每個設備都有一個事件隊列的形式。當應用程序執行到內核空間對內核資源進行操作的時候會進入該資源的事件隊列中,如果該隊列中沒有其他事件,隊列將立即執行當前事件,如果之前有事件並未執行完成,系統繼續執行上一事件,直到上一事件執行完成,外部表現就是當前程序掛起。當系統切換任務塊,如果隊列中的事件處理完成,程序即可從內核空間中獲取數據,數據取出後,系統可能清除事件隊列中對應的事件塊。如果隊列中的事件未處理完成,繼續執行事件操作。
所以說掛起並不是系統停止運行,只不過是系統在執行其它事件。由此,多線程切換過程中的資源鎖也就概念清楚明白了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章