操作系統
作業管理之進程調度
就緒隊列
排隊機制
選擇運行進程的委派機制
新老進程的上下文委派機制
老進程如果沒處理完就要保存退出
非搶佔式調度:
處理器一旦分配給某個進程,就讓進程一直使用下去
調度程序不以任何原因搶佔正在被使用的處理器
只有進程走完了或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
- Block bitmap
- Linux下查看掛載的Block的命令 : df -T
- Linux下查看Inode信息:sudo dumpe2fs “block name”