相關文章(寫的較爛):
【操做系統】處理機調度簡述
【操做系統】之進程管理
【操做系統】經典的同步問題(http://www.cnblogs.com/libra-yong/p/6985526.html)html
主存儲器簡稱主存或內存, 用於保存程序運行時的指令和數據.算法
寄存器是有限存貯容量的高速存貯部件,它們可用來暫存指令、數據和地址.緩存
一般, 處理機從指存中讀出數據放入指令寄存器, 這一時間段咱們稱之爲取指週期; 處理機從數存中讀取數據放入數據寄存器, 再流入運算器, 這一時間段咱們稱之爲執行週期.數據結構
高速緩衝存儲器是介於寄存器和存儲器之間的存儲器, 主要用於備份主存中較經常使用的數據, 用來減小處理機對主存儲器的訪問次數, 提升運行效率.函數
磁盤緩存主要用於暫時存放頻繁使用的一部分磁盤數據和信息, 以減小訪問磁盤的次數.spa
程序在系統中若想成爲可執行程序, 一般須要經歷如下三個階段:操作系統
編譯 : 由編譯程序對源程序進行編譯, 造成若干個目標模塊3d
連接 : 由連接程序將若干目標模塊以及所需庫函數鏈接在一塊兒, 造成一個完成的裝入模塊指針
轉入 : 由裝入程序將裝入模塊裝入內存code
用戶程序通過編譯後獲得一組目標模塊. 連接程序的功能即是將這組目標模塊以及它們所須要的庫函數轉配成一個完整的裝入模塊. 在對目標模塊進行裝入時, 可把連接分爲入下三種:
靜態連接
在程序運行以前, 先將各目標模塊及它們所需的庫函數連接成一個完善的裝配模塊, 之後再也不拆開.
裝入時動態連接
用戶源程序編譯後的目標模塊在轉入內存時, 採用邊裝入邊連接的方式.
在裝入一個目標模塊時, 若發生一個外部調用事件, 將引發裝入程序去找出相應的外部目標模塊, 並將它裝入內存.
優勢: 便於修改和更新, 便於實現對目標模塊的共享.
運行時動態連接
將某些目標模塊的連接推遲到程序時才執行.
在執行過程當中, 當發現一個被調用模塊還沒有裝入內存時, 當即由OS取找到該模塊, 並將之裝入內存, 將其連接到調用者模塊上. 凡在執行過程當中未被用到的目標模塊, 都不會被調入內存和被連接到裝入模塊上, 這樣不只能加快程序的裝入過程, 並且可節省大量的內存空間
絕對裝入方式
在運行單道程序時, 能夠知道程序駐留在內存中的位置, 程序通過編譯後, 將產生絕對地址的目標代碼.
可重定位裝入方式
在多道程序環境下, 程序根據內存的具體的狀況將裝入到內存的適當位置.
動態運行時裝入方式
此方式在的裝入程序把轉入模塊裝入內存後, 並不當即把裝入模塊中的邏輯地址轉換爲物理地址, 而是把這種地址轉換推遲到程序真正要執行時才進行.
連續分配是最先出現的一種存儲器分配方式大體可分爲四類:
在單道程序環境下, 當時的存儲器管理方式把內存分爲系統區和用戶區兩部分, 系統區僅提供給OS使用, 它一般是放在內存的低址部分. 在用戶區內存中, 僅裝有一道用戶程序, 即整個內存的用戶空間由該程序獨佔.這樣的存儲器分配方式被稱爲單一連續分配方式.
在多道程序環境下, 將用戶空間劃分爲若干個固定大小的區域, 在每一個分區中只裝入一道做業. 這樣就能夠有個多個做業裝入分區同時運行.
又稱爲可變分區分配, 它根據實際須要, 動態地爲之分配內存空間.
分配內存
設請求的分區大小爲u.size
, 表中每一個空閒分區的大小可表示爲m.size-u.size<=size
(size
是事先規定的再也不切割的剩餘分區的大小).說明多餘部分過小, 可再也不切割, 將整個分區分配給請求者. 不然, 便從該分區中按請求的大小分出一塊內存空間分配出去. 而後將分配區的首址返回給調用者.
經過移動內存中做業的位置, 把原來多個分散的小分區拼接成一個大分區的方法稱爲拼接或緊湊.
在動態運行時裝入方式中, 做業轉入內存後任然是(相對)邏輯地址, 在程序指令真正要執行時才轉換爲絕對地址. 地址變換機構將相對地址轉換爲絕對地址, 地址變換機構在進程執行期間, 隨着對每條指令或數據的的方位自動進行的, 稱爲動態重定位
爲了地址的轉換不影響到指令的執行速度, 在地址變換機構中增設了一個重定位寄存器, 用來存儲程序或數據在內存中的起始地址.
與連續分配管理方式對應的是非連續(離散)管理方式, 它們包括:
對換
: 把內存中暫時不能運行的進程或者暫時不用的程序和數據換出到外存上, 以便騰出足夠的內存空間, 再把已具有運行條件的進程或進程所需的程序和數據還如內存.
對換分爲總體對換和頁面(分段)對換.
- 對換空間的數據結構形式與動態分區分配方式類似, 在空閒分區表的每一個表目中包含兩項: 對換區的首址和其大小, 分別用盤塊號和盤塊數表示.
- 對換空間的內存分配與回收與動態分區分配方式的相同.
將進程中的某些進程調出至兌換區, 以便騰出內存空間
系統應定時地查看全部進程的狀態,從中找出「就緒」狀態但已換出的進程,將其中換出時間(換出到磁盤上)最久的進程做爲換入進程,將之換入,直至已無可換入的進程或無可換出的進程爲止
該方式中將用戶程序的地址空間分爲若干個固定大小的區域, 稱爲頁或頁面, 將內存分爲若干個大小的物理塊或頁框, 頁和塊大小相同, 這樣就能夠將用戶的任意頁放入任一物理塊了, 實現離散分配.
頁面: 分頁存儲管理將進程的邏輯地址空間分紅若干頁, 併爲各頁編號(0頁, 1頁, ...); 把內存的物理地址空間分爲若干塊(0#塊, 1#塊, ...);一般頁和塊的大小相同.
在進程分配內存時, 以塊爲單位, 將進程中的若干個頁分別裝入到多個能夠不相鄰接的物理塊中.
進程的最後一頁常常裝不滿一塊, 塊中剩餘的空間又沒法利用, 咱們稱之爲頁內碎片.
頁面大小: 由於頁內碎片的存在, 爲了提升塊的利用率, 頁面的大小選擇應適中, 頁面大小爲2的冪, 一般爲1KB~8KB.
P(31-12) | W(11-0) |
---|
分爲頁號P
和偏移量W
. 頁號P
有20個二進制位, 經過不一樣的0,1組合方式能夠指向1M(即\(2^{20}\))個頁. 偏移量W
表示頁內地址, 它有12個二進制位, 經過組合能夠指向4K(即\(2^{12}\))個頁內地址(存儲單元), 即4KB, 也是每頁的大小.
若給定邏輯空間地址A
, 頁面大小爲L
, 則頁號P
和頁內地址W
可求得:
\(P=INT[\frac{A}{L}]\), INT
爲整除函數
\(W=[A] MOD L\), MOD
爲取餘函數
頁表: 是一個頁面映射表, 用來幫助進程地址空間的頁找到內存中對應的物理塊.
在進程空間的全部頁, 依次在頁表中有一個頁表項, 其記錄了相應頁在內存中的物理塊號.
地址變換機構的功能即是將進程空間中的邏輯地址轉變爲內存空間中的物理地址.
具備快表的地址變換機構
快表: 實質爲一個高速緩衝存儲器.
分段存儲管理方式將用戶的程序地址空間氛圍若干個大小不一樣的段, 每段定義一組相對完整的信息. 段在內存中能夠不相互鄰接(離散分配). 存儲器分配時以段爲單位.
段號 | 段內地址 |
---|
該地址同分頁存儲管理方式相似, 分爲段號P和段內地址W.
段號P能夠指向64K個段(\(2^{16}\)), 每一個段的最大長度爲W爲64KB(\(2^{16}\)).
段表: 每一個段在表中佔有一個表項, 其中記錄了該段在內存中的段的長度和起始地址(基址).
分頁和分段的區別
此方式將用戶的程序氛圍若干個段,併爲每一個段賦予段名, 再在將若干個段分爲若干個頁.
段號(S) | 段內頁號P | 頁內地址W |
---|
分爲段號S, 段內頁號P, 頁內地址W
段表和頁表: 段表包括頁表始址和頁表長度等其餘信息