操作系統-review

操作系統


  • shell 又稱作外殼,如gui 等,提供給外部服務,操作系統提供的對外可見的服務
  • kernel 內核

  • 操作系統管理三大資源
    • cpu
      • cpu調度
      • 進程線程管理
    • 內存
      • 物理內存管理
      • 虛擬內存管理
    • 磁盤
      • 文件系統的形式進行管理
    • 中斷處理與設備驅動管理

中斷與異常處理

  • 中斷的處理過程, 軟硬件的結合
    • 硬件:
      • 標記中斷狀態
      • 生成一個keyId
    • 軟件:
      • 保存當前程序的狀態
      • 中斷服務程序,再硬件中有一個程序id,通過這個程序id在內存中找到程序地址,然後根據這程序所指定的中斷方式進行中斷程序
      • 清楚中斷標記
      • 恢復第一步保存的時候的狀態,類似於事務中的回滾操作
  • 異常處理過程:
    • 保存現場
    • 異常處理
      • 殺死異常程序
      • 重新執行異常指令
    • 恢復現場

內存管理技術

  • 覆蓋技術
    • 較小的內存中運行較大的程序,與分區存儲管理配合使用
      • 常用代碼和數據常駐內存(他決定哪部分數據會加載到內存中)
      • 非常用代碼平時存儲在外存中,按需加載到內存
      • 非調用關係的模塊(非協調性的程序),按需加載到內存
      • 缺點:
        • developer時間成本以及管理成本
          在這裏插入圖片描述

B,C,D,E,F都是互不相關的函數

  • 交換技術:
    • 在這裏插入圖片描述
    • 將暫時不能運行的程序送到外村
    • 具體是指: 將一個process的地址空間的內容保存到外存中,當需要的時候,在將某個進程的address讀入到內存中,換入換出內容的大小爲整個程序的地址空間
    • 缺點:
      •   粒度過大,以進程爲base單位
        
  • 虛擬內存技術;
    • 類似於覆蓋技術,但是非developer管理,交由os自己管理,核心:程序的所有內容並不會放在內存中
    • 也能實現類似於交換技術,實現內存與外存之間的交換

頁面置換算法

  • 定義: 當缺頁中斷髮生時,調入新的頁,而此時當物理內存已滿時,就需要頁面置換某個物理頁面
  • 目標: 儘可能的減少頁面的換進換出次數
  • 頁面鎖定技術: 既類似於lock,被lock的頁面,不會被換入換出
  • 局部頁面置換算法
    • 最優頁面置換算法:預測最長等待時間的頁面(既預測哪個頁面可能下次被訪問的時候間隔最久)
      • 實現: 實際無法實現,通常用作一個評價的標準,對比其他算法的性能依據
    • 先進先出算法(FIFO): 將內存中駐入時間最長的頁面,將其淘汰
      • 缺點: 性能最差,調出的頁面可能是經常要訪問的頁面
    • 最近最久未使用算法(LRU): 當一個缺頁中斷髮生時,他太最久未使用的頁面
      • 原理: 近似於最優置換算法,採取的局部性原理,若某些頁面被頻繁訪問,則其大概率在將來也會被頻繁訪問
    • 時鐘頁面置換算法: LRU的近似,FIFO的優化,結合了FIFO和LRU
    • 原理: 當頁面初始被載入時,將其初始化爲0,並且每個頁面組成一個環形鏈表,並且當前指針指向最早進入的頁面(FIFO的思路),當發生頁面置換的時候,先判斷當前指針是否爲0(既是否被訪問過),若0 直接淘汰 但判斷是否淘汰只通過0和1,並非與LRU一樣計算次數
    • 二次機會法: clock算法的優化,充分運用其內部的bit ,access bit 和dirty bit (access代表讀,dirty代表寫),替換頁的標準爲2個bit都爲0,若access bit 0 而dirty bit 爲1 則只會將dirty bit 置爲0,相反也一樣,置爲0 ,但若是2個都爲1,則只會將access bit置爲0,dirty bit不變,然後指針繼續走 (使得dirty bit被使用的更有機會留在內存中!!,只讀的頁更大概率被置換)
    • LFU(最近最少未使用算法),與LRU 的區別在於,LRU 強調時間,而LFU 強調的是次數
    • Belady現象的原因: (算法必須爲FIFO算法)
      • 原因在於FIFO的核心與頁面置換算法的核心衝突,頁面置換的核心在於將不常用的頁面置換出去,而FIFO 並不在乎此種情況,只將最新進入的頁面直接置換
      • 比較:
        • FIFO是特殊的LRU ,當頁面進入內存之後就不再被訪問,則LRU並會退化爲FIFO
  • 全局頁面置換算法
    • 工作集和常駐集:
      • 工作集: 既程序運行時間內的頁面訪問集合(可以認爲是也頁面地址集合,該頁面集合可能有些在內存中有些可能不在內存中)
      • 常駐集: 指的是當前時刻,在內存中的頁面集合
      • 工作集頁面置換算法: 程序運行可認爲是滑動窗口模式,使用的是部分頁面,而隨着程序進行,該算法會將不使用的頁面直接丟棄,並不管當前頁面是否充足,而是不在該時間窗口內就丟棄
        • 影響因素: 工作集窗口的大小(也可以認爲是時間窗口大小)
      • 缺頁率頁面置換算法:(基於常駐集,常駐集動態發生變更),缺失越多表明需要擴大常駐集,缺失率很低則表明可以壓縮常駐集
        • 缺頁率: 缺頁數/內存訪問次數
  • 抖動問題:
    • 常駐集和工作集之間,當常駐集遠小於工作集時,內存中頻繁發生頁面置換,從而使得操作系統運行緩慢的現象
      • 原因: 進程數目的增多,使得分給每個進程的物理頁面數減小,從而使得缺頁率增大

進程

  • 程序=算法+數據結構
    • 描述進程的數據結構: 進程控制塊(PCB:Process Control Block)
    • PCB組成:
      • 進程標識信息: 類似於ID
      • 處理機狀態信息保存區
        • 用戶可見寄存器: 用戶程序可以使用的數據,地址等寄存器
        • 控制和狀態寄存器: 如程序計數器,程序狀態字
        • 棧指針:
      • 進程控制信息
        • 調度和狀態信息: 用於系統調度
        • 進程間的通信信息: 支持進程間的標識,信號等
        • 存儲管理信息: 指向本進程存儲空間的數據結構: (既進程本身也可以存儲內容)
        • 進程佔用的資源: 如文件資源等
        • 有關數據結構鏈接信息: 進程可以連接到一個進程隊列中
      • PCB的組織方式:
        • 鏈表形式: 進程是動態的執行過程,添加刪除 鏈表性能更好
        • 數組形式: 相同index 存放一起
      • 進程的生命週期
        • 進程創建:
          • 創建的事件:
            • 系統初始化
            • 用戶請求創建一個新進程
            • 進程創建進程(既運行中的進程調用系統函數創建進程)
        • 進程運行
        • 進程阻塞 *只有進程本身才可以阻塞自己,無法阻塞其他進程
          • 觸發條件:
            • 等待系統服務
            • 某種操作無法馬上完成
            • 等待數據
        • 進程喚醒: 進程只能被其他進程或者操作系統所喚醒
          • 觸發條件:
            • 資源數據滿足
            • 相應的事件到達
            • 該PCB插入到就緒隊列中
        • 進程結束
          • 結束分爲:
            • 正常退出(自願)
            • 錯誤推出(自願)
            • panic錯誤(致命錯誤,非自願)
            • 被其他進程殺死(非資源)
      • 進程結束前的三個基本狀態:
        • 運行態:
        • 就緒態
        • 等待狀態:

線程

  • 進程是資源分配的基本單位
  • 線程是CPU調度的基本單位
  • 爲什麼使用線程:
    • 使用進程代替線程的缺點:
      • 進程開銷大,需要創建PCB,同時進程之間需要共享數據,當回收進程之後需要銷燬PCB同時將進程中的資源進行回收
    • 使用線程的原因,線程的優點:
      • 線程共享進程的數據
      • 線程實體之間可以併發的執行
      • 線程之間也是數據共享的
    • 線程的缺點:
      • 當一個線程panic的時候,其所屬進程的所有線程也會直接panic(既當Thread A 因爲認爲的BUG使得數據發生錯誤,共享數據的其他線程獲取到髒數據也會因此而無效)
    • 線程的定義: 進程當中的一條執行流程
    • 線程相比進程的優點:
      • 創建時間相對更短
        • 進程需要創建內存去管理
        • 線程直接從所屬進程中的內存創建
      • 同一進程內的線程切換比進程快,原因在於進程內的線程同屬一個地址空間,也就意味着線程處於同一個內存頁表

線程的實現:

  • 用戶線程(既操作系統看不到的線程)
    • 缺點:
      • 線程使用期間依然會佔據CPU時間片,因而若該線程阻塞,則會導致進程的其他線程也無法在運行
      • 線程依賴於進程,進程獲取到的CPU時間片有限,因而進程所屬的線程獲取到的時間片相比會更加短,因而執行效率上會更低
  • 內核線程(受操作系統管理的線程)
    • 內核線程阻塞並不會影響該進程內的其他線程
  • 輕量級進程: 內核支持的用戶線程,一個進程可以有多個輕量級進程,每個輕量級進程由一個內核線程所支持

上下文切換:

  • 概念: 進程狀態的變更

  • OS會爲每個進程配置PCB,並且會將PCB放到合適的隊列中

    • 就緒隊列:
    • IO等待隊列
    • 僵死隊列
  • 進程的創建:

    • fork的作用:
      • 對子進程分配內存
      • 將父進程的內存和cpu寄存器到子進程中(這步操作其實是無用的,內存複製在這期間並沒有作用)
      • 開銷巨大
    • vfork的作用:
      • 輕量級fork,不需要進行內存的映射
    • Copy On Write技術

CPU調度

  • 調度發生的條件:
    • 當進程處於等待就緒狀態的時候
    • 或者是進程被終止了
  • 不可搶佔條件
  • 可以搶佔

調度算法

  • FCFS(FIRST COME FIRST SERVE)先來先服務
  • SRT() 短進程優先(短生命週期的率先調度)
  • HRRN(Highest response Ratio Next) 最高響應優先
  • RR(Round Robin) 輪詢
    • 在這種模式下的調度算法,並不會管進程是否結束,而是隻會佔用一定的cpu時間片
    • 缺點:
      • 吞吐量低: 上下文切換佔據很長一部分時間
      • cpu時間片值的定義
  • MFQ(Multilevel Feedback Quees )??? 多級反饋隊列
    • cpu密集型的進程,優先級會相對較低
    • 而IO密集型的進程,優先級會相對較高
  • FSS(Faire Share Schedual)公平策略

進程間通信方式

管道:

  • 適用於進程間需要有點關係
  • 管道中的數據是一種字節流
  • ls | more 中的 豎線 | 既是管道的功能
    • more是從 ls中獲取得到數據(通過管道),而非從其他獲取數據
    • 在這裏插入圖片描述
      1. 創建管道
      1. 爲ls 創建一個進程,設置stdout爲管道寫端
      1. 爲more創建一個進程,設置stdin爲管道的讀端

消息隊列

  • 按FIFO的形式管理信息
  • 數據結構:
    • 在這裏插入圖片描述

共享內存

  • 每個進程內部都由共享內存地址
  • 效率最快,但是但是需要控制同步

Question

  • 什麼是用戶態,什麼是內核態
  • FIFO中,什麼是Belady現象
  • 什麼是局部性原理:

  • 什麼是Belady現象
    • 既: 當採用FIFO算法的時候,物理頁數增加反而使得缺頁現象更爲嚴重 特指FIFO算法
  • 物理頁面,以及幾種頁面的定義:
  • 通俗意義上的,耗了很大的內存,指的是?
  • 寄存器的概念
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章