作業系統核心原理-2.一些基本概念
一、計算機硬體基礎
1.1 匯流排結構
從概念上講,計算機的結構是匯流排型的:佈置一根匯流排將各種硬體裝置掛在匯流排(Bus)上。
(1)所有的裝置都有一個控制裝置,外部裝置通過控制器與CPU進行通訊。
(2)所有的裝置之間的通訊也需要通過匯流排。
1.2 流水線結構
為了提高計算機的效率,人們又設計出了流水線結構:仿照工業流水裝配線,將計算機的功能部件分為多個梯級,並將計算機的每條指令拆分為同樣多個步驟,使每條指令在流水線上流動,到流水線最後一個梯級時指令執行完畢。
下圖展示了5個梯級的流水線結構,流水線上的每個梯級都可以容納一條指令並同時執行。
在流水線的基礎之上,為了進一步提高效率,人們又發明了多流水線、超標量計算和超長指令字等多指令發射機制。
1.3 儲存結構
除了指令執行單元外,計算機中的另一個重要部件是指令的存放單元,被稱為儲存架構。儲存架構包括了快取、主存、磁碟、磁帶等。下圖展示了一個包括暫存器在內的5級儲存介質構成的儲存架構。
從暫存器到磁帶,每一級儲存媒介的訪問延遲和容量均依次增大,而價格卻依次降低。從圖中可以看出,暫存器的訪問速度最快,容量最小,但成本卻最高;磁帶的訪問速度最慢,容量最大,但是成本卻最低。通過合理搭配,可以形成一個性價比頗高的儲存架構。
1.4 中斷機制
中斷是計算機裡面的一個最為重要的機制,它也是作業系統獲得計算機控制權的根本保證。其基本原理是:裝置在完成自己的任務後向CPU發出終端,CPU判斷優先順序,然後確定是否響應。如果響應,則執行中斷服務程式,並在中斷服務程式執行完後繼續執行原來的程式
二、抽象
所謂抽象,就是在根本上存在但現實中不存在的東西。抽象來源於具體,但又超越具體。
作業系統提供的抽象來源於顯示,就是具體的計算機硬體,如CPU、記憶體、I/O裝置等等。但又超出這些現實,給人提供了強於現實的東西,使人和應用軟體感覺到更多、更好的硬體存在。
抽象不只是作業系統提供給使用者的一個存在,它也存在於作業系統內部。作業系統內部分為不同的功能模組,而不同功能塊之間互相提供的也是抽象。想想在我們得實際開發中,是不是也遵循著這樣類似的原則?針對抽象程式設計?面向介面程式設計?依賴於抽象而不依賴於具體?
三、核心態與使用者態
殘酷的現實:
世界上的人並非都是平等的,有些人生來佔有的資源就多,而有的人佔有的資源就很少。當有些人來了,其他人就得讓出資源。程式亦是如此。
作業系統作為計算機的管理者,享有著更多的方便或許可權。為了區分不同的程式的不同許可權,人們發明了核心態和使用者態的概念。
3.1 兩種狀態的概念
核心態就是擁有資源多的狀態(或訪問資源多的狀態),也稱為特權態。而使用者態則是非特權態,在使用者態下訪問的資源會受到限制。例如,要訪問OS的核心資料結構,如程序表等,則需要在特權態下才能做到。如果只需要訪問使用者程式裡的資料,則在使用者態下就可以了。
3.2 兩種狀態的優勢
核心態:訪問資源多,但可靠性、安全性要求高,維護管理都比較複雜;
使用者態:訪問資源有限,但可靠性、安全性要求低,維護起來比較簡單;
那麼,一個程式到底應該執行在核心態還是使用者態呢?這取決於其對資源和效率的需求;下圖展示了Windows作業系統的核心態與使用者態的界限,我們可以看到哪些需要在核心態下執行,哪些只在使用者態下執行。
3.3 兩種狀態的本質
計算機對於核心態和使用者態的識別是通過CPU的一個狀態位來實現的,這個狀態位是CPU狀態字裡面的一個字位。所謂的使用者態、核心態實際是CPU的一種狀態,而不是程式的狀態。通過設定該狀態字,可以使CPU處於核心態、使用者態或者其他的子態(有的CPU有更多種子態)。
換句話說:一個程式執行時,CPU是什麼態,這個程式就執行在什麼態。
那麼,知道了是怎麼實現的,那又是如何對使用者態的訪問進行限制的呢?在對使用者態下程式執行的每一條指令進行檢查,這種檢查又被稱為地址翻譯,即對程式發出的每一條指令都要經過這個地址翻譯過程(你可以將其理解為我們在實際開發中所作的許可權管理,對使用者發出的每個操作請求首先都經過一個Filter進行過濾),通過對翻譯的控制,就可以限制程式對資源的訪問。
四、作業系統結構
4.1 單一體結構
單一體結構是最早期的結構,這時整個OS是一個巨大的單一體,執行在核心態下,為使用者提供服務,如下圖所示。
但單一體結構各功能塊之間關係複雜,修改困難,牽一髮而動全身,且容易形成迴圈呼叫造成死鎖,於是有了下面的層次關係。
4.2 層次化結構
將作業系統的功能分成不同的層次,低層次的功能為緊鄰其上一個層次的功能提供服務,而高層次的功能又為更高一個層次的功能提供服務,如下圖所示。
4.3 微核心結構
從單一體和層次化結構的圖中可以看出,作業系統的所有功能都在核心態下執行。但是,從使用者態轉為核心態是有時間成本的,這樣就會造成OS的效率低下。於是,人們將作業系統的核心中的核心才放在核心態執行,其他功能都遷移到使用者態執行,於是就有了下面的微核心結構。
五、程序、記憶體和檔案
5.1 程序
程序是OS中的核心概念,它指的是一個運動中的程式。一個程式一旦在計算機裡執行起來,它就稱為一個程序。程序與程序之間可以進行通訊、同步、競爭,並在一定情況下可能形成死鎖。
5.2 記憶體
記憶體是另一個核心概念,它是程序的存放場所。OS要做的就是對記憶體進行管理,使得資料讀寫高效、安全、簡單。
5.3 檔案
檔案是作業系統提供的外部儲存裝置的抽象,它是程式和資料的最終存放地點。OS要做的就是讓使用者的資料存放變得容易、方便和可靠。
六、系統呼叫
作業系統是一個系統程式,即為別的程式提供服務的程式。那麼,作業系統的服務是通過什麼方式提供的呢?答案就是:系統呼叫(System Call)。
所謂系統呼叫就是:作業系統提供的API,使用者通過呼叫這些API即可獲得作業系統的服務。(想想是不是跟我們現在所作的什麼Web Service、WCF、WebAPI、開放API之類的一致?)例如,如果使用者程式需要進行讀磁碟的操作,在C程式程式碼中可以使用如下語句來操作:
result = read(fd, buffer, nbytes);
這個read函式是C語言提供的庫函式,而這個庫函式本身則是呼叫的作業系統的read系統呼叫。具體的系統呼叫過程不是我們討論的重點,但我們還是可以通過下圖來看看這個read系統呼叫的過程。
參考資料
鄒恆明,《作業系統之哲學原理》,機械工業出版社
作者:周旭龍
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連結。
相關推薦
作業系統核心原理-2.一些基本概念
一、計算機硬體基礎 1.1 匯流排結構 從概念上講,計算機的結構是匯流排型的:佈置一根匯流排將各種硬體裝置掛在匯流排(Bus)上。 (1)所有的裝置都有一個控制裝置,外部裝置通過控制器與CPU進行通訊。 (2)所有的裝置之間的通訊也需要通過匯流排。 1.2 流水線結構 為了提高
雲端儲存---ceph簡介架構原理和一些基本概念
我們在上篇文章已經對比了不同的儲存系統之間的區別,本章開始逐步深入記錄Ceph的學習和運用。 Ceph簡介 Ceph是一個分散式儲存系統,提供物件,塊和檔案儲存,是一個免費開源軟體的儲存解決方案,可以部署於普通的x86相容伺服器上,可用於解決統一儲存的i
作業系統核心原理-5.記憶體管理(上):基本記憶體管理
作業系統的兩個角色分別是魔術師和管理者,在管理者這個角色中,除了CPU之外,記憶體是作業系統要管理的另外一個重要資源。記憶體管理需要達到兩個目標:一是地址保護,即一個程式不能訪問另一個程式的地址空間。二是地址獨立,即程式發出的地址應該與物理主存地址無關。這兩個目標就是衡量一個記憶體管理系統是否完善的標準,
c++運算符重載以及一些基本概念
不同類 col end 錯誤 pan [] () 無限 c++對象 c++primer第四版435 1.賦值( = ), 下標( [ ] ) ,調用 ( ( ) ), 成員訪問箭頭 (->)等操作符必須定義為成員,定義為非成員時,編譯器報錯 2. 像賦值一樣。
圖像處理的一些基本概念
基本概念 相似性 度量 relation ont spa n) mil 卷積 圖像相關(Image correlation):圖像在不同相對位置上相似性程度和相關匹配程度的度量。圖像f(x,y)和g(x,Y)的相關兩幅圖像之間的相關稱為互相關;同一圖像的相關( f和g為同一
IOC和AOP的一些基本概念
們的 tpi instance 一點 男朋友 iou 我想 而不是 工作 IOC和AOP的一些基本概念介紹 IOC 介紹 IOC 一、什麽是IOC IoC就是Inversion of Control,控制反轉。在Java開發中,IoC意味著將你設計好的類交給系統去控制,
計算機網路基礎 - 一些基本概念與網絡結構
logs 網路 兩個 wdm comment quest 利用 gin 規範 1. 基本概念 計算機網絡 = 通信技術+計算機技術,是兩項技術緊密結合的產物。 通信系統的基礎模型: 計算機網絡,是指將地理位置不同、具有獨立功能的多臺計算機及其外部設備,通過通信線路連接,在
《Linux系統編程手冊》讀書筆記——第2章基本概念
守護 setenv 代碼 不存在 export 層級 用途 運行時 創建 操作系統的核心--內核 內核的職責 進程調度:Linux屬於搶占式多任務操作系統,多個進程可同時駐留於內存,且每個進程都能獲得對CPU的使用權。哪些進程獲得對CPU的使用,以及每個進程能使用多長時間
數據庫的一些基本概念
釋放 完整性 學分 creat transacti 取數 lB 數據頁 多個 一、基本入門概念 DBMS:數據庫管理系統,就是數據庫軟件 數據庫:保持有組織的數據的容器(通常是一個文件和一組文件),不管數據是什麽或如何組織的,是通過DBMS創建和操縱的容器。 SQL:結構化
2.spark基本概念
executor shuff 分享圖片 jvm ive schedule adf RKE 立即執行 Application 用戶編寫的Spark應用程序。Application的main方法為應用程序的入口,用戶通過Spark的API,定義了RDD和對RDD的操作。 Jo
ARP地址解析協議的一些基本概念
ARP地址解析協議在網路通訊中佔據著十分重要的地位。當編寫兩個ip之間進行通訊的程式時,只需要知道兩個ip地址就可以讓它們進行通訊,但是在標準OSI網路模型下,資料鏈路層,物理層(這兩層通稱網路介面層)是低於網路層的,簡單來說,到了這兩層它其實是不認識什麼IP地址的,它們之間的通訊其實是通過mac地
第5章 選舉模式和ZooKeeper的叢集安裝 5-1 叢集的一些基本概念
xx就是我們的master,也就是我們的主節點。心跳機制,當有一個節點掛掉之後,整個叢集還是可以工作的。選舉模式,我們現在的master是正常執行的,但是在某些情況下它宕機了宕機了,那麼這個時候它這個叢集裡面就少了master,沒有master兩個slave需要去競爭。競爭完之後slave1把slave2給幹
Node.js的一些基本概念
1. Node.js簡介 1.1 Node.js是什麼 簡單的說 Node.js 就是執行在服務端的 JavaScript。 Node.js是一個能夠在伺服器端執行JavaScript的開放原始碼、跨平臺JavaScript執行環境。 Node採用Google開發的V8引擎執行js程式碼,使用
《C和指標》第2章 基本概念
2.1 環境 在ANSI C的任何一種實現中,存在兩種不同的環境。翻譯環境(translation environment),原始碼被轉換為可執行的機器指令。執行環境(execution environment),它用於實際執行程式碼。標準明確說明,這兩種環境不必位於同一臺機器上。 2.1.
儲存的一些基本概念
SCSI (Small Computer System Interface, 小型計算機系統介面) 是一種用於計算機及其周邊裝置(硬碟,軟碟機,光碟機,印表機,掃描器等)的系統級介面的獨立處理器標準。 SCSI-3於1992年制定。大致規格與速率如下: 規格
Thrift原理分析(一) 基本概念
很多公司使用Thrift作為基礎通訊元件,相當一部分的RPC服務基於Thrift框架。公司的日UV在千萬級別,Thrift很好地支援了高併發訪問,並且Thrift相對簡單地程式設計模型也提高了服務地開發效率。 Thrift源於Facebook, 目前已經作為開源專案提交給了Apahce。
Elasticsearch中的一些基本概念
索引詞(term) 在Elasticsearch中索引詞(term)是一個能夠被索引的精確值。foo,Foo Foo幾個單詞是不相同的索引詞。索引詞(term)是可以通過term查詢進行準確的搜尋。 文字(text) 文字是一段普通的非結構化文字,通常,文字會被分析稱一個個的索引詞,儲存在E
c++基礎:C++的一些基本概念
//參考書:visual c++面向物件程式設計教程(王育堅) 一:C++的成員屬性有3種 1.private屬性(預設屬性)的成員只能由本類成員函式訪問或呼叫; 2.protect屬性的成員只能由本類成員函式或派生類成員函式訪問或呼叫; 3.public屬效能被本類函式或其他類函式通過物件訪問或呼
https裡面的一些基本概念
現在大多數網站都已經從http升級為https了,https最大的一個優點就是安全。因此瞭解一下為什麼https要比http安全還是十分重要的。下面是一些基本的概念性的東西。 1.加密 加密,是以某種特殊的演算法改變原有的資訊資料,使得未授權的使用者即使獲得了已加密的資訊,但因不知解密的方法
關於計算機網路的一些基本概念總結
計算機網路速率的單位是bit/s,計算機網路中所說的通道頻寬的單位也是bit/s。計算機網路中的通道頻寬是指通道的最高速率。計算機網路的速率和頻寬中的兆(M)都是10^6。 計算機網路延時=傳送時延+傳播時延+處理時延+排隊時延。 傳送時延=總的資料量/通道頻寬。 傳播時延=傳輸距離/電磁波