操作系統概論

操作系統

作業管理之進程調度

就緒隊列
排隊機制
選擇運行進程的委派機制
新老進程的上下文委派機制
老進程如果沒處理完就要保存退出

非搶佔式調度:

處理器一旦分配給某個進程,就讓進程一直使用下去
調度程序不以任何原因搶佔正在被使用的處理器
只有進程走完了或IO阻塞纔會讓出處理器

搶佔式調度:

允許調度程序以一定的策略暫停當前運行的進程
保存好舊進程的上下文信息,分配處理器給新進程

搶佔式調度:頻繁切換,開銷大,不公平,通用系統
非搶佔式調度:切換次數小,開銷小,公平,專用系統

進程調度算法

  • 先來先服務:字面意思
  • 短進程優先調度算法:選擇優先就緒隊列中估計運行時間最短的進程
  • 高優先權優先調度算法:自帶權重,優先選擇權重高的先執行
  • 時間片輪轉調度算法:先按先來先服務的原則排列就緒進程
    每次從隊列頭部取出待執行進程,分配一個時間片執行
    是相對公平的調度算法,但是不能及時響應用戶

死鎖

核心:永遠在相互等待

產生:

  • 競爭資源:
    等待請求的資源被釋放
    自身佔用的資源不釋放
  • 進程調度不當
死鎖的四個必要條件:
  • 互斥條件:
    進程對資源的使用是排他性的使用
    某個資源只能由一個進程使用,其他進程需要使用只能等待
  • 請求保持條件
    進程至少保持一個資源,又提出新的資源請求
    新的資源被佔用,請求被阻塞
    被阻塞的進程不釋放自己保持的資源
  • 不可剝奪條件
    進程獲得的資源在未完成使用前不能被剝奪
    獲取的資源只能由進程自身釋放
  • 環路等待條件
    存在進程-資源環形鏈

作業管理之死鎖預防

  • 摒棄請求保持條件
    • 進程運行之前,一次性申請所有需要的資源
    • 進程在運行期間不會提出資源請求,從而摒棄請求保持條件
  • 摒棄不可剝奪條件
    • 當一個進程請求新的資源得不到滿足時,必須釋放佔有的資源
    • 進程運行時佔有的資源可以被釋放,意味着可以被剝奪
  • 摒棄環路等待條件
    • 可用資源線性排序,申請必須按照需要遞增申請
    • 線性申請不再形成環路,從而擯棄了環路等待條件

存儲管理之內存分配與回收

內存分配的過程:

  • 單一連續分配:最簡單,只能在單用戶,單進程的操作系統中使用
  • 固定分區分配:內存空間被分爲若干個固定大小的區域,每個分區只給胡一個程序使用,互不干擾
  • 動態分區分配:根據進程實際需要,動態分配內存空間
    數據結構:
    • 動態分區空閒表數據結構:維護一個表,分區號下面有1 or 0,1代表已經使用了,0代表沒有使用
    • 動態分區空閒鏈數據結構:在這裏插入圖片描述
      動態內存分配算法:
  • 首次適應算法:從開始順序查找適合內存區,導致頭部地址不斷被劃分,不好
  • 最佳適應算法:要求空閒區鏈表按照容量大小排序,遍歷得到最佳的空閒區。
  • 快速適應算法:多個空閒區鏈表,每個空閒區鏈表存儲一種容量的空閒區

內存回收的過程:

  • 空閒區位於回收區的前面(緊挨着)
    • 不需要新建空閒鏈表節點,只需要把空閒區的容量增大
  • 回收區位於空閒區的前面(緊挨着)
    • 將回收區和空閒區合併,並且用回收區的地址爲新的空閒區的地址
  • 回收區位於兩空閒區的中間
    • 將空閒區1、空閒區2和回收區合併,新的空閒區用空閒區1的地址
  • 只有回收區前後空
    • 爲回收區創建新的空閒節點

存儲管理之段頁式存儲管理

針對進程存儲管理的

  • 頁式存儲管理
    • 將進程邏輯空間等分成若干大小的頁面
    • 相應的把物理內存空間分成與頁面大小的物理塊
    • 頁面大小應該適中,過大難以分配,過小內存碎片過多
    • 頁表:記錄進程邏輯空間與物理空間的映射。頁號,頁內偏移
  • 段式存儲管理
    • 將進程邏輯空間劃分成若干段(非等分)
    • 段的長度由連續邏輯的長度決定、
    • 段表:段號、基址、段長。
    • 段地址:段號、段內偏移。
段是邏輯單位,頁是物理單位
分頁是爲了合理利空間,分段是滿足用戶要求
  • 段頁式存儲管理
    • 先將邏輯空間按段頁式管理分成若干段
    • 再把段內空間按頁式管理分成若干頁

虛擬內存

把暫時不用的數據從主存中放到磁盤中去,空出來的地方可以放其他重要數據

程序的局部性原理

  • 程序運行時,無須全部裝入內存,裝載部分即可
  • 如果訪問頁不在內存,則發出缺頁中斷,發生頁面置換
    虛擬內存實際是對物理內存的補充,速度接近於內存,成本接近於輔存

虛擬內存的置換算法

  • 先進先出算法(FIFO)
  • 最不經常使用算法(LFU)
  • 最近最少使用算法(LRU )

Linux的存儲管理

Buddy內存管理算法:

  • Buddy算法是經典的內存管理算法、解決內存外碎片
頁內碎片:

已經被分配出去(能明確指出屬於哪個進程)的內存空間大於請求所需的內存空間,不能被利用的內存空間就是內部碎片。

頁外碎片:

還沒分配出去,但是由於大小而無法分配給申請內存空間的新進程的內存空閒快。

Buddy內存管理算法:努力讓內存分配與相鄰內存合併能快速進行

  • 向上取整爲2的冪大小
  • 夥伴系統:指的是內存的夥伴,一片連續的內存的夥伴指的是相鄰的另一片大小一樣的連續內存

Linux交換空間

  • 交換空間是磁盤的一個分區
  • Linux物理內存滿手時,會把一些內存交換至Swap空間
  • Swap空間是初始化系統時配置的
  • 冷啓動內存依賴
  • 系統睡眠依賴
  • 大進程空間依賴

操作系統的文件管理

文件的目錄結構:
  • 邏輯結構的文件類型
    有結構文件
    • 定長記錄存儲文件格式、文件描述等結構化數據項
    • 可變長記錄存儲文件具體內容
      無結構文件
    • 流式文件
    • 文件內容長度以字節爲單位
  • 順序文件
    • 只能存儲順序文件(磁帶)
    • 增刪改比價費力
  • 索引文件
    • 索引表

輔存的存儲空間分配

  • 輔存的分配方式
    • 連續分配
    • 鏈接分配
      • 隱式鏈接
        在這裏插入圖片描述
      • 顯示鏈接
        在這裏插入圖片描述
        維護一個FAT表
    • 索引分配
      • 每個文件擁有一個索引塊,記錄所有盤快信息
      • 加載到內存只需要加載索引

輔存的存儲空間分配

  • 空閒表
    在這裏插入圖片描述
  • 空閒鏈表
    • 把所有的空閒盤區組成一個空閒鏈表
    • 每個鏈表節點存儲空閒盤塊和空閒的數目
  • 位示圖
    在這裏插入圖片描述
    • 維護成本低
    • 非常快的找到空閒盤塊
    • 0/1比特位,佔用空間小、

目錄管理:

Linux 目錄:

在這裏插入圖片描述

Linux文件類型:

在這裏插入圖片描述

Linux的文件系統

  • FAT:使用一張表來保存盤塊的信息
  • NTFS : FAT的改進
  • EXT2/3/4:擴展文件系統

EXT文件系統

在這裏插入圖片描述

  • INodeTable
    • 存放文件INode的地方
    • 每個文件(目錄)都有一個Inode
      • 在這裏插入圖片描述
      • 文件名不是存放在Inode節點上的,而是目錄的Inode上
      • 列出目錄文件的時候無須加載文件的Inode
    • 是每個文件目錄的索引節點
  • Inode bitmap
    在這裏插入圖片描述
  • Data Block
    在這裏插入圖片描述
    • Block bitmap
      在這裏插入圖片描述
    • Superblock
      在這裏插入圖片描述
  • Linux下查看掛載的Block的命令 : df -T
  • Linux下查看Inode信息:sudo dumpe2fs “block name”
發佈了124 篇原創文章 · 獲贊 9 · 訪問量 2475
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章