【系統分析師之路】第十四章 操作系統記憶敲出

【系統分析師之路】第十四章 操作系統記憶敲出

1. 操作系統的基本概念

  • 操作系統的五大組成部分:進程管理,存儲管理,設備管理,文件管理和作業管理五個部分所組成。
    其中進程管理和存儲管理是最爲重要的。操作系統章節的考點也是比較聚焦。
    進程管理也叫做處理器管理,它主要是用來管理進程的。它可以分爲進程的三態圖和五態圖兩種。
    進程管理:進程狀態遷移,PV操作,前趨圖、銀行家算法
    存儲管理:段頁式存儲,頁面置換算法(先進先出,最近未使用等)
    文件管理:一級索引二級索引,位示圖,絕對路徑與相對路徑
    設備管理:數據傳輸控制方式

2. 作業管理的概念

  • 作業管理:作業由程序、數據和作業說明書組成。在批處理系統中,作業是佔據內存的基本單位。作業四種狀態:提交,後備,執行,完成。
  1. 提交狀態。作業由輸入設備進入外存儲器(也稱輸入井)的過程稱爲提交狀態。 處於提交狀態的作業,其信息正在進入系統。
  2. 後備狀態。當作業的全部信息進入外存後,系統就爲該作業建立一個作業控制塊 (Job Control Block, JCB)。系統通過 JCB 感知作業的存在。 JCB 主要內容包括作業名、作業狀態、資源要求、作業控制方式、作業類型及作業優先權等。
  3. 執行狀態。一個後備作業被作業調度程序選中而分配了必要的資源並進入了內存, 作業調度程序同時爲其建立了相應的進程後,該作業就由後備狀態變成了執行狀態。
  4. 完成狀態。當作業正常運行結束,它所佔用的資源尚未全部被系統回收時的狀態爲完成狀態。
  • 個人理解作業管理就是對進程,存儲,文件,設備的一個綜合性的管理,一個作業要執行離不開資源的獲取,這裏的資源包括了CPU時間片的資源(進程管理),外部IO設備(設備管理),把用戶程序從外存載入到內存,和用完寫回外存(文件索引,存儲管理)

3. 進程管理中的狀態圖

  • 三態圖:就緒,運行,阻塞三種狀態;就緒的時候等待時間片從而運行,而阻塞是說明進程沒有被餵飽資源,有了資源就到就緒態。
  • 五態圖:除了運行態以外,阻塞態分爲了靜止阻塞和活躍阻塞,而就緒態也被分爲了靜止就緒和活躍就緒,這樣就一共有了五個狀態。

4. 信號量與互斥同步

  • 信號量就是一個特殊的全局變量,使用這個特殊的全局變量就可以實現進程之間的同步與互斥,完成PV操作。
    PV操作就是應用在操作系統當中,用來完成進程之間同步和互斥的。同步和互斥看名字像是一對反義詞,其實在操作系統的進程管理當中互斥與同步只是看問題的角度不太一樣。聚焦縮小地看進程管理,進程A和進程B在同一時間只有一個。

5. PV操作

  • P操作是獲取資源的操作,它執行一次會對臨界值實施自減操作,S=S-1;它做是否大於零的判斷,當S小於0時把當前進程放入阻塞隊列。;
  • V操作是釋放資源的操作,它執行一次會對臨界值實施自增操作,S=S+1;它做是否大於等於零的判斷,S小於等於零時,從阻塞隊列喚醒一個進程。
  • PV操作最經典的應用模式就是生產者消費者模式和單代號網絡圖。
  • 其實在項目管理中也可以用到PV操作的思想。在以問題驅動的開發團隊當中,測試團隊相當於生產者,當發現有Bug的時候,做成一個Task,然後扔到項目Task的停車場中,而開發團隊相當於消費者,他們要定期去停車場取Task,然後對應Bug後關閉Task;
  • 如果測試團隊中人數遠遠大於開發團隊,那麼生產量會上升,但是開發團隊卻無法及時地消費完停車場中的Task,造成項目整體進度的落後;反之當開發團隊中的人員遠遠大於測試團隊中的人員,測試一發現Bug並放入停車場後馬上就有開發團隊來消費了。還會有很多維護的開發人員在等待狀態,沒有Bug票只能讓他們空閒了。
  • 以上的這個比方很好的解釋了生產者和消費者之間的關係,但沒有很好的說明互斥與同步之間的關係。P操作中一旦獲取資源後信號量小於0的話,那麼進程就應該被阻塞了,只有等到V操作並且釋放資源之後纔可以再一次被執行。
  • 換一個比方來說明同步與互斥之間的競爭關係。做嵌入式開發需要試驗機來完成,咱們開發團隊有6個人,而試驗機只有兩臺。這個時候6個人就競爭使用試驗機了。如何在這種競爭關係中去推進項目呢,首先團隊成員A要使用試驗機,他執行P操作之後試驗機資源變爲了1;接下來團隊成員B也要用試驗機了,他也執行P操作之後資源變爲了0,於是團隊成員C也去申請試驗機,但資源數量已經爲0,變爲-1後,團隊成員C就只能咬牙切齒地等待A和B他們釋放資源了,不然就需要無盡的等待。這個時候要是A同學用完了機器,S=S+1,然後計算把-1變爲了0,於是C纔等到了苦盡甘來的時候,這個時候S變爲了0,那麼就喚醒了C同學來用試驗機。只有小於等於0時,纔會去喚醒。
  • 以上就是PV操作運用的原理。單代號網絡圖則更加簡單,P操作因爲有阻塞功能,箭頭指向P操作,全部前結點只要動作完成後執行V操作就可以激活緊後活動了。

6. 死鎖及其銀行家算法

  • 死鎖可以預防也可以避免。這個和項目風險管理中的風險極其相似,風險也有風險預防和風險避免兩塊。風險預防就是採用各種對稱不讓風險發生,當風險發生的時候去避免風險。
  • 死鎖如何預防?就是打破造成死鎖的四個因素:互斥,不剝奪,請求和保持,環路等待。
  • 死鎖除了預防還可以採用銀行家算法去避免,也可以採用有序資源分配法去避免,但一般來說銀行家算法最爲常用。
  1. 環路等待:這個最好理解,A的執行需要等待B的某資源,而B的執行又需要等待C釋放某資源,如此形成一個環狀。
    破解方法:使用順序資源分配法。給每個資源編號,進程必須根據編號從小到大申請資源。
  2. 不剝奪:各個進程獲得資源後,除非進程執行完,不然就佔着資源不放。
    破解方法:一個進程已佔有的資源會被暫時釋放,或者說是被剝奪了,或從而破壞了不可剝奪條件
  3. 互斥:某個資源在某段時間片只能供一個進程來使用。
    破解方法: 如果允許系統資源都能共享使用,則系統不會進入死鎖狀態。
  4. 請求和保持:保持已經獲得的資源不放,請求當前無法獲得的資源。
    破解方法:釆用預先靜態分配方法,即進程在運行前一次申請完它所需要的全部資源,在它的資源未滿足前,不把它投入運行。一旦投入運行後,這些資源就一直歸它所有,也不再提出其他資源請求,這樣就可以保證系統不會發生死鎖。
  • 銀行家算法就是仿效銀行房貸的一個場景作爲實例。銀行要給你房貸款之前,它要先看看你的徵信系統,看看你有沒有還款的能力之後纔可以放款(給資源),如果你的還款能力最強,銀行優先給你放款,放款以後你就可以利用貸款(資源)來完成自己的事情,利用完貸款後要連本帶息的還給銀行,銀行家回款以後再去判斷下一個該借給誰。銀行家算法把銀行家唯利是圖的一面展現的淋漓盡致。

7. 存儲管理之頁式存儲

  • 運行一個大型的遊戲,需要運行使用的內存是15G,而內存只有10個G可供載入遊戲。如果在使用內存之前不做任何處理的話,那麼這個遊戲便無法玩了。當然雖然遊戲有15個G,但是爲了運行它並不是所有的時間都有必要將所有在外存上的內容都放入內存,而是需要用到外存的哪部分,就放入那部分到內存。
  • 頁式存儲就是將從外存載入內存的內容分成了大小相同的若干塊,遊戲在運行之前,並不是所有的內容都放入內存,而是將現在程序不得不使用的若干小塊載入到內存中。
  • 相同大小的塊,做一個很形象的比喻,它很像集裝箱,我們要運輸的貨物,先放入到大小都相同的集裝箱裏面,然後再放到郵輪上。
  • 你可能會問把什麼東西放到了哪個集裝箱不是很清楚,爲什麼不拿一個表來存儲呢?這樣,就誕生了頁表,頁表就是用來記錄外存邏輯地址塊對應的是放在了內存中的物理地址,記錄了外存和內存之間的映射關係。
  • 缺點:頁式存儲因爲都是整塊整塊的載入載出內存,所以它的缺陷就是容易產生抖動現象。
  • 優點:內存空間利用率很高。分配簡單。

8. 頁式存儲的頁表

  • 頁表中記錄了外存邏輯地址和內存物理地址之間的映射情況的一張表,所以頁表中就有頁號和頁幀號,這個信息是必須的;除了這兩個段之外,還記錄了狀態位,訪問位,修改位。
  • 在邏輯地址和物理地址轉換的時候,需要特別注意的就是頁內地址是不會變化的,只要頁號和頁幀號之間轉化一下就好。
  1. 修改位記錄本塊中的頁內地址是否已經被修改過,1表示已經修改過,0表示尚未修改過;
  2. 狀態位是用來記錄該塊在不在內存中,1表示再內存中,0表示已經不在內存中了
  3. 訪問位用來記錄最近是否被訪問過,1表示被訪問過,0表示還沒有被訪問過
  • 頁表可以放在Cache中,這個時候它就是快表,頁表也可以放在內存中,這個時候它就是慢表,這個就讓我聯想到了橘生淮南則爲橘這個典故。

9. 存儲管理之段式存儲

  • 頁式存儲強調化整爲零的使用存儲,而段式則不同它的每一塊的大小都是不一樣的。
  • 雷同於頁表,這裏因爲是段式存儲,所以就是段表。在段表中與頁表中頁幀號對應的是:基地址和段長兩個字段。
  • 段表便於多道程序共享內存的使用,但是段式存儲有一個很大的缺陷,大大小小雜亂無章地存入存出內存,碎片會越來越多,內存利用率不高。

10. 段頁式存儲管理

  • 綜合了段式存儲和頁式存儲的特點,是一箇中庸化的技術(思想和內存-Cache中的組相聯技術與之對應)。段頁式強掉先分段再分頁。
  • 缺點:系統複雜性和系統開銷會增大

11. 位示圖

  • 我們日常做飛機選座位也好,看電影選位置也好,都使用到了位示圖。在位示圖中1表示已經被使用,0表示還未被使用;非常的客觀易懂。在操作系統的文件管理中,他記錄的是磁盤的使用情況。佔用中爲1,空閒態爲0。
  • 在具體的計算中要明白物理盤塊都是從下標0開始,bit位也是從下標0開始,而只有字一般是從1開始的。

12. 頁面的置換算法

  1. 最優算法:除非知道每個塊先後的使用順序,不然這算法就派不上用。
  2. 隨機算法:把從外存換入內存的頁這個算法決定權交給上天決定。和我們使用骰子決定四選一選擇題是沒有什麼區別的。
  3. 先進先出:就是使用到了數據結構中的隊列的構造,這種算法容易引起抖動。
  4. 最近最少使用LRU:從字面上就可以理解這個算法做什麼事情,利用到了局部性原理,可以有效避免抖動。
  5. 最近經常使用LFU算法:需要用到統計的數據,記錄數據歷史訪問的頻率,過去被訪問次數越多,將來被訪問的概率也將越大。這是該算法的一個思想。

13. 文件系統的絕對路徑和相對路徑

  • 撥打電話時使用的國家號086,區號0571,再加上自己的電話號碼,就是絕對路徑;而我目前正在中國杭州,那麼不使用國號086和區號0571,直接就可以撥打電話了,這就是使用到了相對路徑的緣故。
  • 相對路徑因爲簡短所以還被廣泛應用在編碼時文件IO的時候。

14. 文件管理之文件索引結構

  • 文件索引結構很像C語言中的指針,指針可以指向地址,也可以指向指針,指針的指針也還有可能指向指針。
    一個指針直接指向一個物理地址的話,我們就認爲它是直接索引。
    一個指針直接指向另一個指針,而另一個指針指向一個物理地址,我們就認爲它是一級索引結構。
    一個指針直接指向另一個指針,而另一個指針再指向一個指針,最後的這個指針才指向物理地址,我們就說它是二級索引結構。
    同理還有三級索引結構。直接索引效率最高,但是存的內容少,而間接索引技術的使用,容量擴大了,當然因爲存在指針的指針等情況,所以效率比如直接索引。這就是效率和容量平衡的產物。
  • 在實際的計算中,涉及到邏輯塊號到物理塊號的變換。寫在索引節點上的數字是物理塊號,邏輯塊號是邏輯上連續的位置偏移。
  • 邏輯地址連續的塊在物理地址上可以是不連續的。尤其是在使用間接索引的時候。指針的指針肯定不是物理地址,如果是一級間接索引,物理地址至少是指針指向的地址。
  • 磁盤數據塊如果爲1KB,且每個地址項的大小爲4字節,那麼一個數據塊中可以存放1024/4=256個索引值,這是求間接索引中索引個數的方法。

15. 嵌入式操作系統的特點有

  1. 實時性強:及時處理和響應的能力
  2. 可裁剪,可配置:只保留需要使用的操作系統的功能,不需要的直接裁剪來節約空間
  3. 微型化:要小要小。有點微內核的味道
  4. 代碼質量高:嵌入式系統很難修復,要是動不動就死鎖的話,想必體驗感會很差
  5. 硬件與軟件結合度高:硬件和軟件結合度高,所以才叫嵌入式操作系統

16.設備管理-數據傳輸的方式

  • 程序控制查詢方式:效率最低下,因爲它需要CPU的介入,影響CPU的利用率,IO能力也有限。
  • 程序中斷方式:CPU被解放出來,鍵盤等數據量不是很大的設備使用這個方式。實時性要求較高的場景會使用到程序中斷的方式。
  • DMA方式:適用於數據量大的場景比如硬盤的數據交換。它實現了主存和外設之間的高速數據交換。
  • 通道方式,IO處理器在外設和主存之間有着更高效率的數據交換。

17. 微內核的概念

  • 微內核就是對操作系統進行瘦身,只保留最爲基本的功能。衆所周知,普通的操作系統內核包括了進程,存儲,設備,文件,任務管理五個部分,而在微內核操作系統中,已對其進行了裁剪,文件系統,通信,外設管理都放到操作系統之外去處理了。
  • 內核分爲了用戶態和核心態兩個狀態。因爲在微內核中,核心態功能少了,很多原本屬於操作系統的操作放到了用戶態去實施了。
  • 微內核系統的安全性,可靠性得到了提升。微內核操作系統在分佈式中有着廣泛的應用,它也成爲了微內核操作系統的最大優勢。
  • 當然微內核操作系統中,一個任務需要不斷的在用戶態和核心態直接切換來完成,頻繁地切換效率自然不會很高。

18. 假脫機技術SPOOLing

  • 打印機屬於外部設備,它是獨佔設備,所以是無法在多個任務之間並行使用的,也就是說在同一時間內,只有一個任務可以佔用它。那麼如果多個任務多個用戶之間如何實現打印機的共享呢?答案就是假脫機技術SPOOLing。假脫機技術在主存和外設之間設置了一個緩存區,這個緩衝區實現了打印任務的先進先出,實現了當前只有一個任務在打印,而其他的打印請求在排隊。這個緩存放在磁盤上面。
  • SPOOLing技術將一臺獨享打印機改造爲可供多個用戶共享的打印機。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章