1. 程式人生 > >作業系統核心原理-1.作業系統導論

作業系統核心原理-1.作業系統導論

PS:作業系統原理是大學計算機專業最為重要的一門專業基礎課程之一,對於作業系統核心原理的理解對於一個合格的程式設計師來說十分重要,於是我繼續我的“三大原理,兩個協議,一種結構”複習,三大原理中作業系統原理首當其衝,這裡主要依靠閱讀《作業系統之哲學原理》來進行復習,將其中重要的部分記錄下來,與各位分享。當然,更推薦大家去讀讀這本書,相信都會有一定收穫。

一、程式是如何執行的?

1.1 程式執行的四大要素

  (1)程式設計語言

  首先,我們得使用一門程式設計語言進行程式設計,一般我們使用的都是高階程式設計語言(如C、C++、Java、C#等)。

  (2)編譯系統

  我們寫好了程式碼,但是由於計算機不認識高階語言編寫的程式,需要編譯成計算機能夠識別的機器語言,這就需要編譯器和彙編器的幫助。

  (3)作業系統

  機器語言程式需要載入到記憶體,才能形成一個運動中的程式(即程序),這就需要作業系統的幫助。

About:程序需要在計算機晶片即CPU上執行才算是真正在執行,而將程序排程到CPU上執行也是由作業系統完成的,這裡也就不難理解為什麼程序管理會在我們的教科書中排在最重要的位置了。

  (4)指令集結構(計算機硬體系統)

  在CPU上執行的機器語言指令需要變成能夠在一個個時鐘脈衝裡執行的基本操作,這就需要指令集結構和計算機硬體的支援。

1.2 程式執行的基本流程

  基於上面提到的四大要素,我們可以得出下面一幅圖,該圖從一個線性角度展示了程式的演變過程,能夠幫助我們理解整個程式是如何在計算機上執行的。

  事實上,程式可以執行在機器語言或組合語言上編寫,用這種被稱為“低階”(我更願意稱其為底層)的語言編寫出來的機器語言程式無需經過編譯器的翻譯就可以在計算機指令集上執行。如果是在組合語言上編寫的彙編程式,則只需要經過彙編器的翻譯即可載入執行。

二、作業系統是什麼?

2.1 兩個問題

  (1)作業系統到底是什麼鬼?

  作業系統是介於計算機和應用軟體之間的一個軟體系統,作業系統的上層和下層都有其他的物件存在:

  從上圖可以看出,OS上邊是應用軟體,下邊是硬體平臺。

  (2)作業系統到底操控什麼事?

  最原始的計算機並沒有OS,直接由人來掌管事情。隨著計算機複雜性的增長,人已經不能勝任直接掌控計算機了。於是,OS這個軟體被編寫出來幫我們掌控計算機,使人類從日益複雜的掌控任務中解脫出來。既然OS是專門掌控計算機的,那麼計算機上發生的所有事情都需要OS的知曉和認可,未經OS同意的任何事情均被視為非法的(想想病毒和入侵攻擊者試圖做的事情)。

2.2 兩種角色

  (1)魔術家

  魔術家的目標是把差的東西變好,把少的東西變多,把複雜變簡單。同樣,OS將計算機以一個更加容易、更加方便、更加強大的方式呈現給使用者。

Example:OS通過程序抽象讓每一個使用者感覺有一臺自己獨享的CPU,通過虛擬記憶體抽象,讓使用者感覺實體記憶體空間具有無限擴張性,這就是把少變多的一個例項。

  (2)管理者

  作業系統管理計算機上的軟硬體資源,如CPU、記憶體、磁碟等,使得不同使用者之間或者同一使用者的不同程式之間可以安全有序地共享這些硬體資源。

  那麼,問題來了,如何讓使用者很好地利用這些硬體資源呢?這就是分塊(Parcel Out),把硬體分塊給應用程式使用。這就涉及到有效和公平的原則,這也是一個管理者的必備素質,更是設計作業系統時的不懈追求!

  作業系統的兩個角色之間既有區別又有聯絡,為了完成不同的任務,OS有時需要扮演魔術師,有時有需要扮演管理者,還有時需要同時扮演兩個角色。

三、作業系統的範疇

3.1 CPU管理

  即如何分配CPU給不同應用和使用者,對於程序管理堅持三個目標:一是公平(每個程式都有機會使用CPU),二是非阻塞(任何程式不能無休止地阻撓其他程式的正常推進),三是優先順序(優先順序高的程式開始執行則優先順序低的就需要讓出資源—>讓一部分人先富起來)。

3.2 記憶體管理

  即如何分配記憶體給不同應用和使用者,主要管理快取、主存、磁碟、磁帶等儲存介質所形成的記憶體架構。其目的主要有二:一是將少變多(比如虛擬記憶體的使用能夠使得執行程式的大小大大地增加),二是讓多個程式共享同一個實體記憶體(這就需要對實體記憶體進行分割和保護,不讓一個程式訪問另一個程式所佔的記憶體空間,專業術語稱為執行時不能越界訪問)。

3.3 外存管理

  即如何分配外存(磁碟)給不同應用和使用者,外存管理也稱儲存管理,也就是我們所說的檔案系統,其目的是將磁碟變為一個很容易使用的儲存介質以提供給使用者使用。

3.4 I/O管理

  即如何分配輸入輸出裝置給應用和使用者,也稱為裝置管理,也就是管理輸入輸出裝置。其目的主要有兩個:一是遮蔽不同裝置的差異性(使用者用同樣的方式訪問不同的裝置,從而減低程式設計的難度),二是提供併發訪問(即將那些看上去並不具備共享特徵的裝置如印表機變得可以共享)。

  作業系統的四個核心功能如下圖所示:

四、小結

  作業系統的技巧也應用於很多領域,如抽象、快取、併發等。作業系統簡單說來就是實現抽象:程序抽象、檔案抽象、虛擬儲存抽象等。而很多領域都會使用抽象,例如資料結構和程式設計(抽象資料型別?抽象類?);很多地方也會用到快取,例如開發Web應用程式時使用快取降低資料庫訪問壓力,加快頁面響應速度等等。更為重要的是,對於一個程式設計師來說,要想知道計算機在軟體層面是怎麼運轉的,就得學習作業系統。

參考資料

鄒恆明,《作業系統之哲學原理》,機械工業出版社

作者:周旭龍

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連結。

相關推薦

作業系統核心原理-1.作業系統導論

PS:作業系統原理是大學計算機專業最為重要的一門專業基礎課程之一,對於作業系統核心原理的理解對於一個合格的程式設計師來說十分重要,於是我繼續我的“三大原理,兩個協議,一種結構”複習,三大原理中作業系統原理首當其衝,這裡主要依靠閱讀《作業系統之哲學原理》來進行復習,將其中重要的部分記錄下來,與各位分享。當然,更

作業系統核心原理-6.外存管理(上)磁碟基礎

  計算機是處理資料的機器,而資料就需要有地方存放。在計算機中,可供資料存放的地方並不太多,除了記憶體之外,最主要的儲存資料的媒介就是磁碟。對於大多數計算機領域的人來說,磁碟通常被看做是一種外部裝置。可是,對於現代作業系統來說,磁碟是不可或缺的。雖然早期的作業系統可以基於磁帶,但由於作業系統複雜性和效能的不斷

作業系統核心原理-3.程序原理(中):程序排程

PS:在多程序併發的環境裡,雖然從概念上看,有多個程序在同時執行,但在單個CPU下,在任何時刻只能有一個程序處於執行狀態,而其他程序則處於非執行狀態。那麼問題來了,我們是如何確定在任意時刻到底由哪個程序執行,哪些不執行呢?這就涉及到程序管理的一個重要組成部分:程序排程,跟隨本篇來一起復習下程序排程吧! 一、

作業系統核心原理-4.執行緒原理(下):死鎖基礎原理

  我們都見過交通阻塞,一大堆汽車因為爭奪行路權,互不相讓而造成阻塞,又或者因為車輛發生故障拋錨或兩輛車相撞而造成道路阻塞。在這種情況下,所有的車都停下來,誰也無法前行,這就是死鎖。本篇就來了解一下什麼是死鎖,如何應對死鎖。 一、死鎖初窺 1.1 為何會發生死鎖?   死鎖的發生歸根結底是因為對資源的競

作業系統核心原理-5.記憶體管理(下):段式記憶體管理

一、分頁系統的缺點   分頁系統存在的一個無法容忍,同時也是分頁系統無法解決的一個缺點就是:一個程序只能佔有一個虛擬地址空間。在此種限制下,一個程式的大小至多隻能和虛擬空間一樣大,其所有內容都必須從這個共同的虛擬空間內分配。 二、分段管理系統 2.1 何為分段管理   分段管理就是將一個程式按照邏輯單

作業系統核心原理-3.程序原理(下):程序通訊

  程序作為人類的發明,自然也免不了脫離人類的習性,也有通訊的需求。如果程序之間不進行任何通訊,那麼程序所能完成的任務就要大打折扣。人類的通訊方式無外乎對白(通過聲音溝通)、打手勢、寫信、發電報、擁抱等方法。同理,程序也可以通過同樣的方式來進行通訊。本篇我們就來看看程序的這些互動方式。 一、程序對白:管道、

作業系統核心原理-2.一些基本概念

一、計算機硬體基礎 1.1 匯流排結構   從概念上講,計算機的結構是匯流排型的:佈置一根匯流排將各種硬體裝置掛在匯流排(Bus)上。   (1)所有的裝置都有一個控制裝置,外部裝置通過控制器與CPU進行通訊。   (2)所有的裝置之間的通訊也需要通過匯流排。 1.2 流水線結構   為了提高

作業系統核心原理-7.裝置管理:I/O原理

一、I/O的基本知識 1.1 為何要有I/O   前面闡述了作業系統具有程序管理、記憶體管理、外存管理三大核心功能,但是計算機歸根是為人類服務的,這就要求計算機必須提供某種機制使得人們可以向計算機發出命令或操縱計算機。也就是說計算機與人之間必須存在某種溝通的機制,這種溝通的機制就是計算機的輸入輸出機制。輸

作業系統核心原理-5.記憶體管理(中):分頁記憶體管理

  在上一篇介紹的幾種多道程式設計的記憶體管理模式中,以交換記憶體管理最為靈活和先進。但是這種策略也存在很多重大問題,而其中最重要的兩個問題就是空間浪費和程式大小受限。那麼有什麼辦法可以解決交換記憶體存在的這些問題呢?答案是分頁,它是我們解決交換缺陷的“不二法門”。 一、分頁記憶體管理 1.1 解決問題之

作業系統核心原理-4.執行緒原理(上):執行緒基礎與執行緒同步

  我們都知道,程序是運轉中的程式,是為了在CPU上實現多道程式設計而發明的一個概念。但是程序在一個時間只能幹一件事情,如果想要同時幹兩件或者多件事情,例如同時看兩場電影,我們自然會想到傳說中的分身術,就像孫悟空那樣可以變出多個真身。雖然我們在現實中無法分身,但程序卻可以辦到,辦法就是執行緒。執行緒就是我們為

作業系統核心原理-5.記憶體管理(上):基本記憶體管理

  作業系統的兩個角色分別是魔術師和管理者,在管理者這個角色中,除了CPU之外,記憶體是作業系統要管理的另外一個重要資源。記憶體管理需要達到兩個目標:一是地址保護,即一個程式不能訪問另一個程式的地址空間。二是地址獨立,即程式發出的地址應該與物理主存地址無關。這兩個目標就是衡量一個記憶體管理系統是否完善的標準,

作業系統核心原理-6.外存管理(下)檔案系統

一、為何需要檔案系統?   磁碟具有大容量、低成本以及持久化的特點,即使發生斷電,磁碟上的資料也不會丟失。但是,對於一般使用者而言,使用磁碟是非常苦難的,因為他們不知道如何驅動一個磁碟,以及計算資料在磁碟上的存放位置。從上一篇《磁碟基礎》可以知道,瞭解磁碟的各項技術細節將使使用者不堪重負。   作業系統是

大型網站技術架構核心原理(1)

### 序 - 書籍是人類進步的階梯,字裡行間傳達的是作者縝密的態度、思維的火花。盛世繁華之下,太多的人都伴隨著有生活的窘迫、工作的無奈以及情感的羈絆,煩躁之餘不妨讀一本書,放下不快,或許能給你帶來思維的拓展、情感的愉悅以及內心的寧靜,在此感謝《大型網站技術架構》的作者的分享。私以為,網際網路技術迭代日新月異

易學筆記-系統分析師考試-第3章 作業系統基本原理/3.3 記憶體管理/3.3.1 地址變換

幾種程式 源程式:使用者用開發語言編寫的程式 編譯程式(彙編程式):專門編譯源程式的程式 目標程式:編譯後的程式 地址 邏輯地址 概念:指的是目標程式使用的地址,也稱為相對地址或者虛擬地址 格式:一般以0為基地址

易學筆記-系統分析師考試-第3章 作業系統基本原理/3.2 程序管理/3.2.1 程序的狀態

程序 概念:是資料集合的一次並行執行的執行活動,是系統進行資源分配和排程的最基本單位 特點 動態性:與程式對比,它是動態的,程式是靜態的 併發性:允許多個同時進行 資源性:需要排程系統的資源,包括記憶體、檔案、I/O裝置等

易學筆記-系統分析師考試-第3章 作業系統基本原理/3.4 檔案管理/3.4.1 檔案的組織結構

檔案的組織結構 概念:指的是檔案的構造方式,從使用者角度是檔案的邏輯組織,從系統角度是檔案的物理組織 檔案的邏輯結構 概念:使用者概念中的檔案,不依賴於物理儲存 無結構的流式檔案 指的是資訊項的組合,單位是位元組,系統不

day 30 1.作業系統原理 2. Process 模組學習

程序: 起源:程序的概念起源於作業系統,是作業系統最核心的概念,也是作業系統提供的最古老也是最重要的抽象概念之一。作業系統的其他所有內容都是圍繞程序的概念展開的。所以想要真正瞭解程序,必須事先了解作業系統.   什麼是作業系統?   #一 作業系統的作用:   1:隱藏醜陋複雜的硬體介面,提供良

Linux程序管理之1 程序概念與作業系統基礎原理

計算機硬體層面之上是作業系統,狹義的作業系統主要指系統核心,核心有以下作用:程序管理、檔案系統、網路管理、記憶體管理、驅動程式、安

2018-2019-1 20189206 《Linux核心原理與分析》第二週作業

Linux核心分析 第二週學習 知識總結 作業系統與核心 作業系統 指在整個系統中負責完成最基本功能和系統管理的那些部分 核心 實際是作業系統的內在核心 核心獨立於普通應用程式,擁有受保護的記憶體空間和訪問硬體裝置的所有許可權,這種空間被稱為核心空間 當核心執行的時

Atitit 檔案儲存標準化api 總結 目錄 1. 作業系統,進行操作 1 1.1. FileUtils類的應用 1 1.2. 各大api 比較 2 2. Java。Io用apache的commo

Atitit 檔案儲存標準化api 總結   目錄 1. 作業系統,進行操作 1 1.1. FileUtils類的應用 1 1.2. 各大api 比較 2 2. Java。Io用apache的commons-io包下的FileUtils 2 2.1. 建立 2