翻了翻《現代作業系統》
程序:一段執行中的程式
程序 = 程式 + 執行上下文; **包括資料
執行緒:程式中的乙個執行流程
程序 = 執行緒 + 資源平台
一直不理解為何 說段式和頁式記憶體管理都需要全部把程式裝入記憶體,不是還有虛擬記憶體嗎。 我說的應該是 基於段式或頁式的虛擬記憶體管理;而這裡提到的概念僅僅是 段式和頁式記憶體管理(還沒有虛擬記憶體,虛擬位址的概念,只是把邏輯位址對映到實體地址),所以說需要一次性把程式都裝入記憶體
虛擬記憶體才需要有mmu的管理
物理頁面,頁框 page frame
邏輯頁面,頁 page
tlb: translation lookaside buffer,存放最常用的頁表項:之所以能加快查詢是因為它位於mmu內部,不需要mmu再到記憶體中去查詢頁表項
頁式的儲存管理只有單一的一維線性邏輯位址空間,而實際各個**中可能各個部分都會有動態增長或收縮,採用段式更合適
系統為每個程序建立段表,給出了程序當中每乙個段與它對應的記憶體分割槽之間的關係。段表在記憶體中,設定乙個段表基址暫存器和乙個段表長度暫存器
資源:需要排他性使用的物件
死鎖:乙個程序集合中所有的程序都在等待其他程序,這個程序集合則形成死鎖
包括資源死鎖和通訊死鎖
死鎖的4個必要條件:
1 互斥條件。每個資源要麼分配出去了,要麼就是可用的
2 占有和等待條件。已經得到某個資源的程序可以再請求其他資源
3 不可搶占條件。已經分配給乙個程序的資源不能強制性的被搶占,它只能由占有它的程序顯式釋放
4 環路等待條件。死鎖發生時,系統中一定有兩個或兩個以上的程序組成一條環路,環路中每個程序都在等待下乙個程序所占有的資源
有4種處理策略
1 忽略死鎖
2 檢測死鎖並恢復
3 仔細對資源進行分配,動態避免死鎖
4 破壞引起死鎖的4個必要條件之一,防止死鎖的產生
1 可能死鎖發生頻率太低,不值得為止損失效能或可用性
2 檢測死鎖的演算法
現有資源,可用資源,當前分配矩陣,請求矩陣
何時開始檢測
如何恢復
搶占恢復
回滾恢復
殺死程序恢復
3 死鎖避免
資源的軌跡圖。
銀行家演算法,但很少有程序在執行前就知道其所需要資源的最大值,而且程序數也不固定
4 死鎖預防
1 破壞互斥條件
假離線印表機
2 破壞占有和等待條件
1 所有程序執行前請求所需的全部資源。但很多程序直到執行時才知道它需要多少資源
2 當乙個程序請求資源時,先暫時釋放當前占用的所有資源,然後再嘗試一次獲得所需的所有資源
3 破壞不可搶占條件
不是所有的資源都可以像離線印表機一樣虛擬化,比如資料庫中的記錄必須被鎖定
4 破壞環路等待條件
1 所有資源統一編號,程序可以在任何時候提出資源請求,但所有請求必須按照資源編號的順序提出
2 變種是僅僅要求不允許程序請求比當前所占有資源編號低的資源
3 然而沒有令所有人滿意的編號次序。各方面資源數目太多
結論:死鎖理論上沒有辦法解決
活鎖:沒有程序阻塞,但是都在空耗cpu
飢餓:某些程序在某些策略下永遠得不到服務,雖然並不是死鎖程序
多處理機系統
共享儲存器多處理機:多個cpu共享訪問乙個公用的ram
uma: 統一儲存器訪問,各個cpu讀出儲存器字的速度是一樣快的
1 基於匯流排
2 使用交叉開關
3 使用多級交換
numa多處理機
作業系統
每個cpu有自己的os
主從多處理機
對稱多處理機
多處理機同步
虛擬化效能優化:夠用就好
現代作業系統
只有認為等待時間非常短的情形下,才使用忙等待。用於忙等待的鎖,稱為自旋鎖 spin lock 在互斥時間很短而掛起等待的時間開銷很大時,可以採用活鎖 livelock,沒有出現死鎖,但現象上看好像死鎖發生了 輪詢 忙等待 可用於進入臨界區或訪問資源。接收者發起的分布式啟發演算法。分布式系統新增在其底...
現代作業系統 死鎖
前言 現代作業系統 死鎖這一部分也是非常的重要,在這裡詳細介紹了死鎖出現的條件已經避免死鎖的方法。我的github 死鎖 概述 一 資源定義 1.我們把需要排他性使用的物件叫做資源。2.資源分成可搶占和不可搶占型 二 死鎖定義 如果乙個程序集合中的每個程序都在等待只能由該程序合集中的其他程序才能引發...
《現代作業系統》筆記
特色 1.講述了作業系統演變的過程 2.沒有空洞講述概念,用圖表和c 講了作業系統的具體實現 什麼是作業系統 自頂向下看,作業系統是擴充套件機器,向使用者提供抽象。自底向上看,作業系統是資源管理者,給程序提供資源。設計思想 1.利用cpu高速和人類及i o裝置之間的低速的差距,多個程序共享cpu,虛...