操作系統的主要功能

1.操作系統(Operating System,簡稱OS)是一管理電腦硬件與軟件資源的程序,同時也是計算機系統的內核與基石。操作系統是一個龐大的管理控制程序,大致包括5個方面的管理功能:進程與處理機管理、作業管理、存儲管理、設備管理、文件管理
(1)作業管理:包括任務、界面管理、人機交互、圖形界面、語音控制和虛擬現實等;
(2)文件管理:又稱爲信息管理;
(3)存儲管理:實質是對存儲“空間”的管理,主要指對主存的管理;
(4)設備管理:實質是對硬件設備的管理,其中包括對輸入輸出設備的分配、啓動、完成和回收;
(5)進程管理:實質上是對處理機執行“時間”的管理,即如何將CPU真正合理地分配給每個任務。

計算機的組成:應用程序、操作系統、硬件。操作系統的作用是管理資源(各種硬件、計算資源、時間等)。
硬件層:CPU、主存、總線、I/O設備、
操作系統:
發展過程:串行->簡單批處理->多道程序設計->分時系統
<1>簡單批處理:人工組織任務,操作系統負責調度完成一個後繼續下一個,省下了每次人工復位輸入任務的時間.
<2>多道程序設計:最計算資源有了時間片劃分,CPU不用因爲一個進程I/O阻塞而空轉了。
優點:由於系統資源爲多個作業所共享,其工作方式是作業之間自動調度執行。並在運行過程中用戶不干預自己的作業,從而大大提高了系統資源的利用率和作業吞吐量。缺點:無交互性,用戶一旦提交作業就失去了對其運行的控制能力;而且是批處理的,作業週轉時間長,用戶使用不方便。
<3>分時系統:計算資源昂貴的背景下,每個用戶的分時。

分時操作系統是一個聯機的多用戶交互式的操作系統,如UNIX是多用戶分時操作系統。分時計算機系統:由於中斷技術的使用,使得一臺計算機能連接多個用戶終端,用戶可通過各自的終端使用和控制計算機,我們把一臺計算機連接多個終端的計算機系統稱爲分時計算機系統,或稱分時系統。

分時技術:把處理機的響應時間分成若於個大小相等(或不相等)的時間單位,稱爲時間片(如100毫秒),每個終端用戶獲得CPU,就等於獲得一個時間片,該用戶程序開始運行,當時間片到(用完),用戶程序暫停運行,等待下一次運行

<4>實時操作系統

一種聯機的操作系統,對外部的請求,實時操作系統能在規定的時間內處理完畢。



2.進程:
進程是一個程序對某個數據集的執行過程是分配資源的基本單位,程序執行的最小單位,進程的組成包括:用戶程序、數據、棧、進程控制塊。
進程狀態切換:五個狀態:新建、就緒、運行、阻塞、退出.
程序是用來描述計算機所完成的獨立功能,並在時間上嚴格地前後次序相繼的進行計算機操作序列的集合,是一個靜態的概念。
一.進程和程序的區別與聯繫
(1)程序是指令的集合,是靜態的概念。進程是程序在處理機上的一次執行的過程,是動態的概念。程序可以作爲軟件資料長期保存。進程是有生命週期的。
(2)進程是一個獨立的運行單位,能與其它進程並行(併發)活動。而程序則不是。
(3)進程是競爭計算機系統有限資源的基本單位,也是進行處理機調度的基本單位.
(4)不同的進程可以包含同一程序,只要該程序所對應的數據集不同。

作業和進程的關係
作業是用戶需要計算機完成某項任務時要求計算機所做工作的集合。而進程則是已提交完畢程序的執行過程的描述,是資源分配的基本單位。主要區別:
(1)作業是用戶向計算機提交任務的任務實體。
(2)一個作業可由多個進程組成。
(3)作業的概念主要用於批處理系統中。

一個進程中存在:進程控制塊(PCB)、有關程序段、數據結構集。
<1>進程控制塊:包含一個進程的描述信息、控制信息及資源信息,有些系統還有進程調度等待所使用的現場保護區。PCB集中反映一個進程的動態特徵。在創建時,建立PCB,並伴隨進程運行的全過程,當進程完成其功能後,系統釋放PCB,進程也隨之消亡。
<2>進程上下文實際上是進程執行活動全過程的靜態描述。
進程上下文是一個抽象的概念,它包含了每個進程執行過的、執行時的以及待執行的指令和數據,在指令寄存器、堆棧(存放個調用子程序的返回點和參數等),狀態字寄存器等中的內容。

上文:已執行過的進程指令和數據在相關寄存器與堆棧中的內容。

正文:正在執行的指令和數據在相關寄存器與堆棧中的內容。

下文:待執行的指令和數據在相關寄存器與堆棧中的內容。


<3>進程上下文切換
進程上下文切換髮生在不同的進程之間而不是同一個進程內。包含3個部分,第一部分爲保存被切換進程的正文部分(或當前狀態)至有關存儲區。第二部分操作系統進程中有關調度和資源分配程序執行,並選取新的進程。第三部分則是將被選中進程的原來被保存的正文部分從有關存儲區中選出,並送至有關寄存器或堆棧中,激活被選中進程執行。

<4> 進程的空間大小

任一進程都有自己的地址空間,把該空間稱爲進程空間或虛空間。進程空間的大小隻與處理機的位數有關。程序的執行都在進程空間內進行。用戶程序、進程的各種控制表格等都按一定的結構排列在進程空間中。 在有的系統中進程空間被劃分爲兩部分:用戶空間和系統空間。爲了防止用戶程序訪問系統空間,造成訪問出錯,計算機通過程序狀態寄存器等設置不同的執行模式,即用戶模式(用戶態)和系統模式(系統態)來進行保護。


<5>進程互斥
產生互斥的原因:資源共享、進程合作。
臨界資源:一次僅允許一個進程使用的資源稱爲臨界資源。
臨界區:每個進程中訪問臨界資源的那段程序段稱爲臨界區。
互斥:在操作系統中,當某一進程正在訪問某臨界區時,就不允許其它進程進入,否則就會發生(後果)無法估計的錯誤。我們把進程之間的這種相互制約的關係稱爲互斥
<6>進程同步

同步:把異步環境下的一組併發進程,因直接制約而互相發送消息而進行互相合作、互相等待,使得各進程按一定的速度執行的過程稱爲進程間的同步。

<8>進程通信

通信(communication)意味着進程間傳遞數據。操作系統可以看作是各種進程組成的,這些進程都具有各自獨立的功能,且大多數都被外部需要而啓動執行。

在單機系統中進程的通信有4種形式:(1)主從式(2)會話式(3)消息或郵箱機制(4)共享存儲區方式


<9>死鎖問題

死鎖:指個併發進程彼此互相等待對方所擁有的資源,且這些併發進程在得到對方的資源之前不會釋放自己所擁有的資源。從而造成大家都想得到資源而又得不到資源,個併發進程不能繼續向前推進的狀態。

死鎖的起因:根本原因在於系統提供的資源個數少於併發進程所要求的資源數。

產生死鎖有四個必要條件:(1)互斥條件。併發進程所要求和佔有的資源是不能同時被兩個以上進程使用或操作的,進程對他所需要的資源進行排他性控制。

(2)不剝奪條件。進程所獲得的資源在未使用完畢之前,不能被其它進程強行剝奪,而只能由獲得該資源的進程自己釋放。

(3)部分分配。進程每次申請它所需要的一部分資源,在等待新資源的同時,繼續佔用已分配的資源。

(4)環路等待條件。存在一種進程循環鏈,鏈中每一個進程已獲得的資源同時被下一個進程所請求。 只要有一個條件不滿足,死鎖就可解除。


線程:
一個進程可以是多線程的。有了進程之後還要有線程的原因是進程的換入換出、數據交換開銷太大,線程遠遠小於進程的開銷。首先,進程之間通信需要獲取共享資源鎖,而同一進程內的線程完全享有進程獲得的資源,也因此線程的編寫要特別注意同步問題。第二,進程的創建成本很高,涉及空間分配、初始化棧、初始化數據等,而線程的創建成本低很多可以包括操作系統創建和進程調用庫自己創建。於是有了兩種不同類型的線程——用戶級別和內核級別。第三,多道程序設計中線程的換入換出比進程來得快多了,因爲不需要保存進程控制塊等一大堆數據嘛(當然要保存線程控制塊,但是成本很低)。最後,銷燬成本低。 
說到線程的兩種類型——用戶、內核。用戶級別的線程是進程調用線程庫創建的,對操作系統是透明的,是進程中通過代碼實現切換的因此因此一旦一個線程引起了I/O阻塞從操作系統的視角就是進程阻塞,所以要阻塞整個進程;而內核級別的線程是操作系統創建的,所以該阻塞線程的不會阻塞整個進程,當然效率也就沒有用戶級別的高。
多線程的應用場景:
<1>用戶界面和後臺數據運行:用戶界面渲染和後臺數據運算使用不同的線程,沒有喜歡後臺一運算界面就卡死的程序吧。
<2>異步計算:不如實時備份,一個線程定時觸發就可以了,沒必要進程定時的檢查是不是該備份了。
<3>速度敏感的計算:可以併發計算的、多核處理的,在計算和組織上線程更具優勢。
<4>模塊化:模塊化的程序有時候很適合用多線程來設計。

內存管理:
先說內存分區的集中方式——固定大小,等大小的劃分限制了進程大小並且存在明顯浪費(每塊尾部都有剩餘),稍微改進一點變成不等大小的固定劃分一定程度上能加入更大的程序了,但是限制仍然存在效率也非常低——很多內部碎片。動態劃分,來一個進程劃分一塊的方式會產生外部碎片,需要不斷的進行壓縮才能保證有足夠的連續空間給新進程。分頁,把內存劃分成固定大小的很多小塊需要頁表的支持,但是內存的利用提高了很多,會產生很少的內部碎片。分段,很分頁的思路一樣都是進程可以劃分到不連續的內存區域中,需要段表支持。段頁結合,每個段內劃分成頁,這樣進程更利於數據共享(分段的便利),同時消除了外部碎片(段釋放後無論如何都是若干頁),存在少量的內部碎片。
    還有一處漂亮的地方是虛擬內存,由於局部性原理。進程中常用的數據往往只是一部分,其它部分只有在需要時在換入就可以了。在進程運行過程中常駐內存的部分稱爲常駐集。虛擬內存作用就是在硬盤上劃分了一塊區域用於進程的換入換出,雖然硬盤也很慢但是比它更慢的是I/O,有了虛擬內存就能把阻塞的進程及時換出,換入就緒進程的部分或者全部,讓更多的進程同時運行提升CPU的利用率。
有了駐留集的感念就該涉及到駐留集的管理了,首先駐留集可以有幾種分配方式:
     <1>固定分配,局部範圍:每個進程的駐留集是固定不變的,在進程啓動時決定,塊的換入換出總髮生在進程內部。
     <2>動態分配,局部範圍:進程的駐留集是動態調整的,內存塊的交換限制在進程內部(即一個進程的數據被請求時,只能替換自己的塊出去
    <3>動態分配,全局範圍:同上,但是在替換策略上可以換成任意進程中的內存塊。
       在駐留集固定分配情況下,頁的替換策略包括:先入先出、最近最少使用、始終。 當駐留集動態分配時,頁的替換策略變得更精彩:工作集(很理想,開銷太大)、頁錯誤頻率(定期查看頻率,決定擴充或清理)、採樣間隔可變的工作集(考慮頁錯誤頻率在局部性發生偏移時或膨脹的改進方案,間隔時間是可變的)。 除此以外還有加載側路的問題——多道程序設計導致加入的進程太多時,同樣會導致每個進程的駐留集太小導致頁錯誤率居高的情況。


存儲器:
存儲器分兩類:內存儲器(簡稱內存、主存、物理存儲器)外存儲器(簡稱外存、輔助存儲器)。

虛擬存儲器:爲用戶提供一種不受物理存儲器結構和容量限制的存儲器的技術稱爲虛擬存儲器,或稱虛擬存儲技術。

虛擬存儲器需要大容量的外存儲器的支持,或稱物資基礎。

 

程序地址:

用戶編程序時所用的地址(或稱邏輯地址、虛地址),基本單位可與內存的基本單位相同,也可以不相同。

程序地址空間(邏輯地址空間、虛地址空間):

用戶的程序地址的集合稱爲邏輯地址空間,它的編址總是從0開始的,可以是一維線性空間,也可以是多維空間。 

物理地址:把內存分成若干個大小相等的存儲單元,每個單元給一個編號,這個編號稱爲內存地址(物理地址、絕對地址、實地址),存儲單元佔8位,稱作字節(byte)。 

物理地址空間:物理地址的集合稱爲物理地址空間(主存地址空間),它是一個一維的線性空間。


存儲器管理功能:

地址映射: 將程序地址空間中使用的邏輯地址變成主存地址的過程。

實現地址映射有三種方式:

<1>編程或編譯時確定地映射關係。<2>靜態地址映射。<3>動態地址映射。


發佈了24 篇原創文章 · 獲贊 8 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章