1. 程式人生 > >作業系統核心原理-2.一些基本概念

作業系統核心原理-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 程序

process

  程序是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。 計算機網路延時=傳送時延+傳播時延+處理時延+排隊時延。 傳送時延=總的資料量/通道頻寬。 傳播時延=傳輸距離/電磁波