操作系統查漏補缺

進程的描述與控制

進程的描述

  1. 定義:程序+PCB(進程控制塊)+數據集合,是系統資源分配的最小單位。
  2. 目的:爲了使程序併發執行,並能對其加以描述和控制。
  3. 特徵:動態性、併發性、獨立性、異步性。
  4. 三種基本狀態:就緒態、運行態、阻塞態

        進程的同步

  1. 同步方式:臨界區、互斥區、信號量、事件、管程
  2. 臨界區:在每個進程中訪問臨界資源的代碼稱爲臨界區;在進入臨界區之前,對臨界資源進行觀察,觀察是否被訪問。
  3. 管程:java虛擬機的方法級和方法內部的同步就使用了管程。  定義:定義了個數據結構和能爲併發進程在該數據結構上的一組操作,這組操作能同步進程和改變管程中的數據。即 管程是OOP的思想,將臨界資源抽象爲一組數據結構;將對資源的操作抽象爲一個方法。
  4. 管程和進程的區別:(1)管程是共享數據結構,如消息隊列;進程是私有的;(2)管程是爲了解決共享資源互斥問題,進程是爲了實現系統的併發性。(3)管程是被動工作,即進程進入管程訪問臨界區資源;進程是主動工作。(4)進程擁有動態性和併發性,而管程則沒有。
  5. 同步遵循的規則:空閒讓進、忙則等待、有限等待、讓權等待
  6. 出現死鎖的情況:必須同時滿足四條,互斥條件、請求與保持、循環等待、不可剝奪資源
  7. 避免死鎖的算法:銀行家算法+安全性算法
進程通信方式
  1. 主要有四大類:共享存儲區、管道通信、消息傳遞、客戶-服務器模型
  2. 管道:用於連接一個寫進程-讀進程的並實現它們之間的通信的文件,又名pipe。提供互斥、同步以及確認對方是否存在。
  3. C/S模型,最核心的就是套接字。基於文件型的套接字類似於管道,基於網絡的套接字就和平常我們說的一致。
   
線程相關

  1. 定義:系統調度和分配的最小單位
  2. 目的:和進程類似,爲了OS有更好的併發性。
  3. 和進程的區別:(1)進程是最小的可擁有資源的獨立單位,換言之,線程並沒有獨立的資源。(2)併發性:進程之間能併發執行;同一進程的多個線程也能併發執行。(3)切換:進程在切換時消耗的資源大於線程;但一個進程崩潰不會影響其他進程;而一個線程崩潰則隸屬於的整個進程拉閘。(4)獨立性:進程擁有自己的PCB數據結構,是獨立的;而線程是共享進程的資源,談不上什麼獨立性。
  4. 線程的實現方式:(1)內核態線程  (2)用戶態線程 (3)二者混用
  5. java線程間通信方式:線程不獨立佔有資源,所以線程間進行通信主要就是爲了同步(1)互斥鎖 (2)信號量 (3)對於讀寫進程單向的管道 (4)wait/notify (5)臨界區也算上一個吧

調度算法

  1. 先來先服務(FCFS):最簡單的,顧名思義,哪個進程先到就先服務哪個。
  2. 短作業優先(SJF):屬於優先級調度算法的一種,以作業長度爲優先級判定。 缺點:(1)對長作業非常不利 (2)人機無法進行交互 (3)沒有考慮每個作業的緊迫程度
  3. 高響應比優先:結合了FCFS和SJF,本質上你我覺得還是優先級算法。

  • 進程調度
  1. 進程調度的任務:(1)保存CPU當前的現場信息,如程序計數器、通用寄存器中的內容,將斷點信息保存到PCB中。(2)選取下一個執行的進程,改爲運行態 (3)將CPU分配給進程,並讓其從上次斷點處開始運行,把斷點信息裝入寄存器中。
  2. 組成部分:(1)排隊器 (2)分配器 (3)上下文切換器 
  3. 調度方式:(1)協同式  (2)搶佔式
  4. 搶佔式調度:(1)RR時間片輪轉 (2)優先級調度算法 (3)多級反饋隊列調度算法

內存分區分配方式

  • 單一連續分配
  • 固定分區分配
  • 動態分區分配(可變分區分配):(1)基於順序搜索分配算法 (2)基於索引分配算法
  1. 基於順序搜索:(1)首次適應算法 (2)循環首次 (3)最佳適應算法 (4)最壞適應算法 
  2. 首次適應算法(FF):從可分配內存的鏈首開始尋找,找到一個可以用的內存空間,裝進去,OK。  缺點:大量碎片
  3. 循環首次:不是從鏈首了,而是從上一次找到的空閒分區的下一個開始。
  4. 最佳適應:找到一個和需要內存大小相近的空間,裝進去。  缺點:大量碎片
  5. 最壞適應:找最大的內存空間,寅吃卯糧。   優點:查找效率高,碎片少。
  6. 基於索引分配:(1)快速適應 (2)夥伴系統 (3)哈希算法
  • 動態可重定位分配:(1)相對於動態分區分配多一個“緊湊”,即碎片整理功能。

頁面置換算法
  1. 最佳置換算法:這個東西實際應用中實現不了,但是可以作爲一個檢驗性能的標杆。核心就是,觀察已經存入的內存頁面,將最長時間(未來)不再訪問的頁面換出。而實際應用中,我們明顯無法預測到未來,到底是個什麼情況。
  2. 先進先出FIFO:啥都有它,不介紹了
  3. 最近最久未使用置換算法LRU:顧名思義,就是將內存中最近最久沒有使用的頁面置換出去。   操作系統中實現它使用了寄存器和,這個棧很精髓,編程實現的話要用這個。用棧保存當前使用各個頁面的頁號,每當進程訪問某頁面 的時候,便將該頁面的頁號從棧中移除並壓入棧頂,因此,棧頂始終是最新被訪問頁面的頁號,棧底是最久未使用的頁號。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章