軟考架構師(2)——操作系統基礎知識(上)


全文鏈接:https://www.cnblogs.com/nullering/p/9684820.html

一:操作系統引論

1:操作系統的目標和作用

操作系統的主要功能也正是針對四類資源進行有效的管理,及處理機管理,存儲器管理,文件管理。設備管理。

用戶可通過以下三種方式使用計算機:一命令方式,二系統調用方式,三圖形窗口方式

聯機命令接口(交互式命令接口):適用於分時或實時操作系統,cmd中的各種命令就是聯機命令接口

脫機命令接口(批處理命令接口):適用於批處理系統,寫好了一個.bat文件再在cmd中執行它就是脫機命令接口

程序接口:碼農用來請求OS服務

——系統調用:允許應用程序使用內核功能的接口,只能通過用戶程序間接使用。系統調用發生在用戶態,處理是在核心態進行的。陷入指令會產生內中斷,從用戶態進入核心態。

庫函數是編程語言內部的事情,而系統調用是編程語言外部的事情——通過編程語言來進行系統調用。

2:操作系統的發展過程

1:無操作系統:用戶獨占計算機,CPU等待人工操作。

2:批處理操作系統:解決人機矛盾及CPU和I/O設備之間速度不匹配的矛盾

單道批處理操作系統:在計算機中,程序是一道道執行的

多道批處理操作系統:解決IO時間的CPU被浪費

3:分時操作系統:解決批處理人機交互差, 提供人機交互功能

4:實時操作系統:解決突發應急性問題

硬實時操作系統(必須在規定時間完成)

軟實時操作系統(偶爾接受超時)

3:操作系統的基本特性

1:並發性(最基本特征之一)並發: 間隔着運行。並行: 同時運行

2:共享性(最基本特征之一)互斥共享。同時共享

3:虛擬性

時分復用技術:虛擬處理機技術,虛擬設備技術。

空分復用技術:虛擬磁盤技術,虛擬存儲器技術。

4:異步性

4:操作系統結構設計

傳統的操作系統結構:無結構操作系統,模塊化結構操作系統,分層式結構操作系統

微內核操作系統結構

管態(核心態):可以執行特權指令,如IO指令,置中斷指令,存取受保護的寄存器,時鍾管理

目態(用戶態)

微內核操作系統的運行效率有所降低。

  • 外中斷(中斷)
    • 外設請求
    • 人為干預
  • 內中斷(異常)
    • 自願中斷——指令中斷
    • 強迫中斷
      • 硬件中斷
      • 軟件中斷

例1:甘特圖相關題

二:進程管理

1:基本認知

1:順序執行與並發執行

順序執行:順序性,封閉性,可再現性。並發執行:間斷性,失去封閉性,不可再現性。

2:進程與線程

進程:進程是一個具有獨立功能的程序關於某個數據集合的一次運行活動。它可以申請和擁有系統資源,是一個動態的概念,是一個活動的實體。

線程:

進程是系統進行資源調度和分配的基本單位;線程是CPU調度的基本單位。

進程的組成:PCB(進程控制塊),數據段,程序段

進程控制塊(PCB):進程控制塊(PCB)是系統為了管理進程設置的一個專門的數據結構。系統用它來記錄進程的外部特征,描述進程的運動變化過程。同時,系統可以利用PCB來控制和管理進程,所以說,PCB(進程控制塊)是系統感知進程存在的唯一標志。

臨界資源:對於某些資源來說,其在同一時間只能被一個進程所占用。打印機

臨界區:每個進程互斥訪問臨界資源的那段代碼。

作業:作業是用戶向計算機提交的相關任務的集合,區別於進程,進程則是具體完成用戶任務的運行實體,分配計算機資源的基本單位。

3:前趨圖

2:進程控制

1:進程是一個動態的實體,從創建到消亡,進程一般有三種狀態,但也有的有五態

運行狀態(Running):一個進程正在處理機上運行

就緒狀態(Ready):進程已經獲得了除cpu以外的所有其他資源,在就緒隊列中等待cpu調度

阻塞狀態:進程因等待所需要的資源或I/O完成而放棄處理機,或則進程本來就不擁有處理機,且其他資源也不滿足

進程掛起:掛起(等待,阻塞)進程在操作系統中可以定義為暫時被淘汰出內存的進程,機器的資源是有限的,在資源不足的情況下,操作系統對在內存中的程序進行合理的安排,其中有的進程被暫時調離出內存,當條件允許的時候,會被操作系統再次調回內存,重新進入就緒態

 3:進程調度

1:調度的三個層次:

高級調度 = 作業調度:調度對象是作業,用於多道批處理系統

低級調度 = 進程調度:調度對象是進程, 最基本的調度

中級調度 = 內存調度:不運行的進程掛起, PCB仍留在內存中

2:響應時間: 從用戶輸入到產生反應的時間

周轉時間: 從任務開始到任務結束的時間

3:常見的調度算法有:

(1)先來先服務調度算法(FCFS , First Come First Served) 

特點:適合長作業,不利於段作業;適合CPU繁忙型作業,不利於I/O繁忙型作業。

(2)短作業優先(SJF, Shortest Job First)

特點:提高了系統吞吐量;對長作業不利,有可能長時間得不到執行。

(3)優先級調度(HPF , Highest Priority First)

特點:進程調度每次將處理機分配給具有最高優先級的就緒進程。最高優先級算法可與不同的CPU方式結合形成“可搶占式”最高優先級算法和“不可搶占式”最高優先級算法。常用於批處理系統。

(4)最高響應比優先(HRN,Highest Response_ratio Next)

特點:HRN是對FCFS方式和SJF方式的一種綜合平衡。
響應比R=(W + T)/ T . 其中W為等待時間,T為需要執行時間。

(5)時間片輪轉算法(RR,Round Robin)
特點:時間片輪轉調度是一種最古老,最簡單,最公平且使用最廣的算法。將CPU的處理時間划分成一個個的時間片,就緒隊列中的進程輪流運行一個時間片。當時間片結束時,就強迫進程讓出CPU,該進程進入就緒隊列,等待下一次調度,同時,進程調度又去選擇就緒隊列中的一個進程,分配給它一個時間片,以投入運行。

(6)最短剩余時間優先調度算法:

(7)多級隊列輪轉算法:幾種調度算法的結合形式多級隊列方式。

(7)多級反饋隊列調度算法:

 

 

4:進程同步與互斥:

1:進程因為協同實現用戶任務或則要共享計算機資源,在進程之間存在着相互制約的關系。

(1)同步關系:我們把異步環境下的一組並發進程因直接制約而互相發送消息、進行互相合作、互相等待,使得各進程按一定的速度執行的過程稱為進程間的同步。具有同步關系的一組並發進程稱為合作進程,合作進程間互相發送的信號稱為消息或事件。 

(2)互斥關系:兩個或兩個以上的進程,不能同時進入關於同一組共享變量的臨界區域,否則可能發生與時間有關的錯誤,這種現象被稱作進程互斥· 也就是說,一個進程正在訪問臨界資源,另一個要訪問該資源的進程必須等待。

2:同步機制應遵循的原則:空閑讓進,房子等待,有限等待,讓權等待。

3:解決同步互斥問題

信號量機制:信號量就好像信號燈,如果一個資源最多允許三個進程同時訪問,這時信號量初值設為三,當有一個進程獲取了該資源,進行P操作,信號量減一,這個進程完成后釋放該資源,進行V操作,信號量加一,如果當另一個進程獲取該資源時,信號量小於零,則進入等待狀態。

互斥鎖:

  提供對臨界資源的保護,當多線程試圖訪問臨界資源時,都必須通過獲取鎖的方式來訪問臨界資源。(臨界資源:是被多線程共享的資源) 

條件變量:

  提供線程之間的一種通知機制,當某一條件滿足時,線程A可以通知阻塞在條件變量上的線程B,B所期望的條件已經滿足,可以解除在條件變量上的阻塞操作,繼續做其他事情。

信號量:

  提供對臨界資源的安全分配。如果存在多份臨界資源,在多個線程爭搶臨界資源的情況下,向線程提供安全分配臨界資源的方法。如果臨界資源的數量為1,將退化為鎖。 

令牌:

  一種高級的線程同步的方法。它既提供鎖的安全訪問臨界資源的功能,又利用了條件變量使得線程爭奪臨界資源時是有序的

4:管程:互斥使用

5:進程間的通信

  • 管道( pipe ):管道是一種半雙工的通信方式,數據只能單向流動,而且只能在具有親緣關系的進程間使用。進程的親緣關系通常是指父子進程關系。有名管道(named pipe)也是半雙工的通信方式,但是它允許無親緣關系進程間的通信。

每個管道只能半雙工, 互斥訪問,
如果沒寫滿,就不允許讀, 如果沒讀完,就不允許寫

  • 信號量( semophore ):信號量是一個計數器,可以用來控制多個進程對共享資源的訪問。它常作為一種鎖機制,防止某進程正在訪問共享資源時,其他進程也訪問該資源。因此,主要作為進程間以及同一進程內不同線程之間的同步手段。
  • 消息隊列( message queue ):消息隊列是由消息的鏈表,存放在內核中並由消息隊列標識符標識。消息隊列克服了信號傳遞信息少、管道只能承載無格式字節流以及緩沖區大小受限等缺點。
  • 信號( signal ):信號是比較復雜的通信方式,用於通知接受進程有某種事件發生,除了用於進程間通信外,進程還可以發送信號給進程本身;linux除了支持Unix早期信號語義函數sigal外,還支持語義符合Posix.1標准的信號函數sigaction(實際上,該函數是基於BSD的,BSD為了實現可靠信號機制,又能夠統一對外接口,用sigaction函數重新實現了signal函數)。
  • 共享內存( shared memory ):

基於共享數據結構的通信 (低級)

基於共享存儲區的通信

共享內存就是映射一段能被其他進程所訪問的內存,這段共享內存由一個進程創建,但多個進程都可以訪問。共享內存是最快的 IPC 方式,它是針對其他進程間通信方式運行效率低而專門設計的。它往往與其他通信機制,如信號兩,配合使用,來實現進程間的同步和通信。

  • 套接字( socket ):套解口也是一種進程間通信機制,與其他通信機制不同的是,它可用於不同及其間的進程通信。

6:線程同步(一定要會生產者,消費者問題,完全消化理解)

 生產者與消費者問題:

這個問題寫在這可能寫不完,所以不寫了,簡單來說就是想得到就P,不用了就V

哲學家進餐問題

 

7:線程引入

由於需要限制不同的程序之間的訪問能力, 防止他們獲取別的程序的內存數據, 或者獲取外圍設備的數據, 並發送到網絡, CPU划分出兩個權限等級 – 用戶態 和內核態。

  處於用戶態執行中的進程,其所能訪問的內存空間和對象受到限制,其所處於占有的處理機是可被搶占的; 
  處於核心態執行中的進程,其能訪問所有的內存空間和對象,且所占有的處理機是不允許被搶占的。

  • 在用戶空間中實現線程
    (1)特點:內核對線程包一無所知。從內核角度考慮,就是按正常的方式管理,即單線程進程(存在運行時系統)
    (2)優點:
    用戶級線程包可以在不支持線程的操作系統上實現
    保存線程狀態的過程和調用程序都只是本地過程,故啟動它們比進程內核調用效率更高
    不需要陷阱,不需要上下文切換,也不需要對內存高速緩存進行刷新,使得線程調用非常快捷
    (3)缺點:
    線程發生I/O或頁面故障引起的阻塞時,如果調用阻塞系統調用則內核由於不知道有多線程的存在,而會阻塞整個進程從而阻塞所有線程
    一個單獨的進程內部,沒有時鍾中斷,所以不可能用輪轉調度的方式調度線程
  • 在內核中實現線程
    (1)特點:
    當某個線程希望創建一個新線程或撤銷一個已有線程時,它進行一個系統調用
    (2)優點:
    所有能夠阻塞線程的調用都以系統調用的形式實現,代價可觀
    當一個線程阻塞時,內核根據選擇可以運行另一個進程的線程,而用戶空間實現的線程中,運行時系統始終運行自己進程中的線程
    說明:由於內核創建線程代價大,有些系統采取“環保”的處理方式:線程被撤銷時,標記為不可用,但是內部數據結構沒有受到影響;稍后,在必須啟用一個新線程時,重新啟動某個舊線程,從而節省了開銷。
  • 組合方式
    • 多對一模型
      缺點: 一個線程阻塞會導致整個進程被阻塞
    • 一對一模型
    • 多對多模型

8:死鎖

死鎖指的是多個進程因競爭資源而造成的一種僵局(互相等待),若無外力作用,這些進程都將無法向前推進。 

1:必要條件

互斥條件:一個資源每次只能被一個進程使用。

請求與保持條件:一個進程因請求資源而阻塞時,對已獲得的資源保持不放。

不剝奪條件:進程已獲得的資源,在末使用完之前,不能強行剝奪。

環路等待條件:若干進程之間形成一種頭尾相接的循環等待資源關系。

2:處理死鎖的四種方式:

預防死鎖:通過設置某些限制條件,去破壞產生死鎖的四個必要條件中的一個或者幾個,來預防發生死鎖。

避免死鎖:在資源的動態分配過程中,用某種方法去防止系統進入不安全狀態,從而避免發生死鎖(最代表性,銀行家算法)。

檢測死鎖:允許存在死鎖。通過系統所設置的檢測機構,及時地檢測出死鎖的發生,並精確地確定與死鎖有關的進程和資源,然后采取適當措施,從系統中將已發生的死鎖清除

解除死鎖:當檢測到系統中已發生死鎖時,須將進程從死鎖狀態中解脫出來。

銀行家算法 

基本思想:分配資源之前,判斷系統是否是安全的;若是,才分配。每分配一次資源就測試一次是否安全。
我們可以把操作系統看作是銀行家,操作系統管理的資源相當於銀行家管理的資金,進程向操作系統請求分配資源相當於用戶向銀行家貸款。
為保證資金的安全,銀行家規定:
(1)當一個顧客對資金的最大需求量不超過銀行家現有的資金時就可接納該顧客(試探性分配)。
(2)顧客可以分期貸款,但貸款的總數不能超過最大需求量(可能一次並不能滿足所需要的全部資源)。
(3)當銀行家現有的資金不能滿足顧客尚需的貸款數額時,對顧客的貸款可推遲支付,但總能使顧客在有限的時間里得到貸款(不存在死鎖)。
(4)當顧客得到所需的全部資金后,一定能在有限的時間里歸還所有的資金(運行后釋放)。
本算法在理論上是出色的,能非常有效地避免死鎖,但從某種意義上說,它缺乏實用價值,因為很少有進程能夠在運行前就知道其所需資源的最大值,且進程數也不是固定的,往往在不斷地變化(如新用戶登錄或退出),況且原來可用的資源也可能突然間變成不可用(如打印機、磁帶機可能被損壞)。

 

例1:系統有3個進程:A,B,C 。這三個進程都需要5個系統資源。如果系統有多少個資源,則不可能發生死鎖?

解:(5-1)*3 +1 = 13(個)

 三:內存管理

1:存儲器的層次結構

2:連續分配方式

1:單一連續分配

2:固定分區分配

3:動態分區分配

  • 首次適應算法:空閑分區鏈以地址遞增次序連接。
  • 循環首次適應算法:從上一次找到空閑分區的下一個空閑分區開始查找。
  • 最佳適應算法:總是把能夠滿足要求,又是最小分區的分配給作業。
  • 最壞適應算法:總是挑選一個最大的空閑分區分割給作業使用。

4:緊湊和對換

3:基本分頁存儲管理方式

連續分配方式會形成很多碎片,雖然可以通過緊湊方法將許多碎片拼接成可用的空間,但需為之付出很大的開銷。

1:頁面頁表

 

 

2:地址變換機構(重要)

 

 

3:多級分頁

 

4:基本分頁存儲管理方式

1:分段管理

2:地址變換機構

3:段頁式存儲管理方式

 

5,虛擬存儲器的基本概念

1:請求分頁存儲管理方式

2:頁面置換算法

  • 最佳置換算法(Optimal):一種理論的算法,選着淘汰的頁面是以后一定不再使用的頁面(理想化的),該算法無法實現,只能作為其他算法好壞的一個評價對比。
  • 先進先出(FIFO)算法:總是最先淘汰最先進去的頁面,該算法容易實現。
  • 最近最久未使用算法LRU:
  • 時鍾算法clock(也被稱為是最近未使用算法NRU)

3:請求分段存儲管理方式

 

四:IO設備管理

1:IO系統

 

2:控制方式

程序IO方式

中斷控制方式

DMA方式

IO通道

3:緩沖管理

單緩沖

雙緩沖

循環緩沖

緩沖池

 

4:設備分配

1:

設備控制表(DCT)

控制器控制表(COCT)

通道控制表(CHCT)

系統設備表(SDT)

2:SPOOLing技術

輸入井輸出井:磁盤上

輸入緩沖區和輸出緩沖區:內存中

輸入進程和輸出進程:

 

5:磁盤管理

 1:磁盤訪問時間

尋道時間:

旋轉延遲時間

傳輸時間:

2:磁盤調度

先來先服務

最短尋道時間

掃描SCAN算法

循環掃描CSCAN算法

 

 

 

五:輸入輸出管理

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM