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

全文連接:https://www.cnblogs.com/nullering/p/9684820.htmlhtml

0:整體概述

操做系統須要掌握如下五個方面linux

1:進程管理:主要掌握進程的狀態,前驅圖,PV操做以及死鎖的相關問題算法

2:存儲管理:主要掌握段頁式存儲,局部性原理,頁面置換算法緩存

3:文件管理:索引文件,位示圖安全

4:做業管理:做業調度算法網絡

5:設備管理:數據傳輸控制,虛設備與SPOOLING技術數據結構

一:進程管理

1:名詞解析

1):中斷:中斷是指計算機運行過程當中,出現某些意外狀況需主機干預時,機器能自動中止正在運行的程序並轉入處理新狀況的程序,處理完畢後又返回原被暫停的程序繼續運行。在如今的多任務操做系統中,cpu卻只能是單任務的,這是就必須用到中斷進行進程調度。多線程

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

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

4):進程控制塊(PCB):進程控制塊(PCB)是系統爲了管理進程設置的一個專門的數據結構。系統用它來記錄進程的外部特徵,描述進程的運動變化過程。同時,系統能夠利用PCB來控制和管理進程,因此說,PCB(進程控制塊)是系統感知進程存在的惟一標誌。

2:進程的生命週期

進程是一個動態的實體,從建立到消亡,進程通常有三種狀態,但也有的有五態

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

+就緒狀態(Ready):進程已經得到了除cpu之外的全部其餘資源,在就緒隊列中等待cpu調度

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

進程掛起

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

 3:進程調度

按照必定的策略選擇一個處於就緒狀態的進程使其得到處理機的執行。常見的調度算法有:

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

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

(2)短做業優先(SJF, Shortest Job First)
特色:提升了系統吞吐量;對長做業不利,有可能長時間得不到執行。

(3)短進程優先調度算法(SPF):

(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)互斥關係:兩個或兩個以上的進程,不能同時進入關於同一組共享變量的臨界區域,不然可能發生與時間有關的錯誤,這種現象被稱做進程互斥· 也就是說,一個進程正在訪問臨界資源,另外一個要訪問該資源的進程必須等待。

(3)解決同步互斥問題——信號量機制:信號量就好像信號燈,若是一個資源最多容許三個進程同時訪問,這時信號量初值設爲三,當有一個進程獲取了該資源,進行P操做,信號量減一,這個進程完成後釋放該資源,進行V操做,信號量加一,若是當另外一個進程獲取該資源時,信號量小於零,則進入等待狀態。

(4)管程:互斥使用

2:進程間的通訊

  • 管道( pipe ):管道是一種半雙工的通訊方式,數據只能單向流動,並且只能在具備親緣關係的進程間使用。進程的親緣關係一般是指父子進程關係。有名管道(named pipe)也是半雙工的通訊方式,可是它容許無親緣關係進程間的通訊。
  • 信號量( semophore ):信號量是一個計數器,能夠用來控制多個進程對共享資源的訪問。它常做爲一種鎖機制,防止某進程正在訪問共享資源時,其餘進程也訪問該資源。所以,主要做爲進程間以及同一進程內不一樣線程之間的同步手段。
  • 消息隊列( message queue ):消息隊列是由消息的鏈表,存放在內核中並由消息隊列標識符標識。消息隊列克服了信號傳遞信息少、管道只能承載無格式字節流以及緩衝區大小受限等缺點。
  • 信號( signal ):信號是比較複雜的通訊方式,用於通知接受進程有某種事件發生,除了用於進程間通訊外,進程還能夠發送信號給進程自己;linux除了支持Unix早期信號語義函數sigal外,還支持語義符合Posix.1標準的信號函數sigaction(實際上,該函數是基於BSD的,BSD爲了實現可靠信號機制,又可以統一對外接口,用sigaction函數從新實現了signal函數)。
  • 共享內存( shared memory ):共享內存就是映射一段能被其餘進程所訪問的內存,這段共享內存由一個進程建立,但多個進程均可以訪問。共享內存是最快的 IPC 方式,它是針對其餘進程間通訊方式運行效率低而專門設計的。它每每與其餘通訊機制,如信號兩,配合使用,來實現進程間的同步和通訊。
  • 套接字( socket ):套解口也是一種進程間通訊機制,與其餘通訊機制不一樣的是,它可用於不一樣及其間的進程通訊。

3:線程同步(必定要會生產者,消費者問題,徹底消化理解)

互斥鎖:

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

條件變量:

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

信號量:

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

令牌:

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

 生產者與消費者問題:

這個問題寫在這可能寫不完,因此不寫了,簡單來講就是想獲得就P,不用了就V

前趨圖:

 

 

 

 

4:線程的實現方式:

  因爲須要限制不一樣的程序之間的訪問能力, 防止他們獲取別的程序的內存數據, 或者獲取外圍設備的數據, 併發送到網絡, CPU劃分出兩個權限等級 – 用戶態 和內核態。

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

  • 在用戶空間中實現線程
    (1)特色:內核對線程包一無所知。從內核角度考慮,就是按正常的方式管理,即單線程進程(存在運行時系統)
    (2)優勢:
    用戶級線程包能夠在不支持線程的操做系統上實現
    保存線程狀態的過程和調用程序都只是本地過程,故啓動它們比進程內核調用效率更高
    不須要陷阱,不須要上下文切換,也不須要對內存高速緩存進行刷新,使得線程調用很是快捷
    (3)缺點:
    線程發生I/O或頁面故障引發的阻塞時,若是調用阻塞系統調用則內核因爲不知道有多線程的存在,而會阻塞整個進程從而阻塞全部線程
    一個單獨的進程內部,沒有時鐘中斷,因此不可能用輪轉調度的方式調度線程
  • 在內核中實現線程
    (1)特色:
    當某個線程但願建立一個新線程或撤銷一個已有線程時,它進行一個系統調用
    (2)優勢:
    全部可以阻塞線程的調用都以系統調用的形式實現,代價可觀
    當一個線程阻塞時,內核根據選擇能夠運行另外一個進程的線程,而用戶空間實現的線程中,運行時系統始終運行本身進程中的線程
    說明:因爲內核建立線程代價大,有些系統採起「環保」的處理方式:線程被撤銷時,標記爲不可用,可是內部數據結構沒有受到影響;稍後,在必須啓用一個新線程時,從新啓動某個舊線程,從而節省了開銷。

7:死鎖

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

  必要條件:

    • 互斥條件:一個資源每次只能被一個進程使用。
    • 請求與保持條件:一個進程因請求資源而阻塞時,對已得到的資源保持不放。
    • 不剝奪條件:進程已得到的資源,在末使用完以前,不能強行剝奪。
    • 環路等待條件:若干進程之間造成一種頭尾相接的循環等待資源關係。

  處理死鎖的四種方式:

    • 預防死鎖:經過設置某些限制條件,去破壞產生死鎖的四個必要條件中的一個或者幾個,來預防發生死鎖。
    • 避免死鎖:在資源的動態分配過程當中,用某種方法去防止系統進入不安全狀態,從而避免發生死鎖(最表明性,銀行家算法)。
    • 檢測死鎖:容許存在死鎖。經過系統所設置的檢測機構,及時地檢測出死鎖的發生,並精確地肯定與死鎖有關的進程和資源,而後採起適當措施,從系統中將已發生的死鎖清除
    • 解除死鎖:當檢測到系統中已發生死鎖時,須將進程從死鎖狀態中解脫出來。

銀行家算法 

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

相關文章
相關標籤/搜索