操作系统储存管理功能
操作系統(tǒng)的存儲(chǔ)管理功能分為四個(gè)部分
- 地址映射
- 虛擬儲(chǔ)存
- 內(nèi)存分配
- 儲(chǔ)存保護(hù)
一:地址映射
1. 固定地址映射
在編程或編譯確定邏輯地址和物理地址的映射關(guān)系
特點(diǎn):程序加載時(shí)必須放在指定的內(nèi)存區(qū)域
容易產(chǎn)生地址沖突,運(yùn)行失敗
2. 靜態(tài)地址映射
程序裝入時(shí)由操作系統(tǒng)完成邏輯地址到物理地址的映射
MA = VA + BA
特點(diǎn):程序運(yùn)行之前確定映射關(guān)系,裝入后不能移動(dòng),占用連續(xù)的內(nèi)存空間
3. 動(dòng)態(tài)地址映射
在程序執(zhí)行過(guò)程中把邏輯地址轉(zhuǎn)換為物理地址
MA = VA + BA
特點(diǎn):程序占用的內(nèi)存空間可動(dòng)態(tài)變化,不要求連續(xù)的內(nèi)存空間,便于多個(gè)進(jìn)程共享代碼,缺點(diǎn)是硬件支持(MMU),軟件復(fù)雜
二:虛擬存儲(chǔ)
借助輔存在邏輯上擴(kuò)充內(nèi)存,解決內(nèi)存不足的問(wèn)題
過(guò)程:
- 遷入:將要運(yùn)行的部分裝入內(nèi)存
- 遷出:把不運(yùn)行的部分暫時(shí)放在輔存
前提
短時(shí)間內(nèi)進(jìn)程不運(yùn)行的部分往往占大部分
程序局部性原理
時(shí)間局部性
空間局部性
實(shí)現(xiàn)虛擬存儲(chǔ)的前提:
足夠的輔存
適當(dāng)容量的內(nèi)存
地址變換機(jī)構(gòu)
三:內(nèi)存分配
為程序分配足夠的內(nèi)存空間
Windows虛擬地址空間分配
在32位的機(jī)器上,地址空間從0x00000000~ 0xFFFFFFFF,總大小為4GB。一般而言,低地址空間,從0x00000000~ 0x7FFFFFFF使用戶空間,高地址空間被分配給系統(tǒng)。
總體:
| 0x00000000 ~ 0x0000FFFF | 這段內(nèi)存為空指針區(qū),不可以同時(shí)訪問(wèn) |
| 0x00010000 ~ 0x7FFEFFFF | 這段供進(jìn)程使用,包括所有的數(shù)據(jù),靜態(tài)或動(dòng)態(tài)加載的exe和dll模塊,以及內(nèi)存映射文件 |
| 0x7FFF0000 ~ 0x7FFFFFFF | 此64KB是禁止訪問(wèn)的,因?yàn)樗ぶ鴥?nèi)核區(qū)域,防止內(nèi)核區(qū)域被覆蓋,以破壞內(nèi)核的正確性和完整性,試圖改寫此區(qū)域,會(huì)產(chǎn)生異常,以阻攔進(jìn)一步改寫內(nèi)存區(qū)域 |
| 0x80000000 ~ 0xFFFFFFFFF | 內(nèi)核區(qū)域,用于線程調(diào)度,內(nèi)存管理,文件系統(tǒng)支持,網(wǎng)絡(luò)支持和所有設(shè)備驅(qū)動(dòng)的代碼全部在次分區(qū)加載,駐留在這個(gè)分區(qū)中的一切均可被所有進(jìn)程共享 |
用戶低2GB空間分配:
| 0x0 ~ 0xFFFF | 拒絕訪問(wèn)區(qū)域,用于幫助程序員避免引用錯(cuò)誤的指針 |
| 0x00010000 ~ 0x7FFEFFFF | 專用進(jìn)程地址空間 |
| 0x7EFDE000 ~ 0x7EFDEFFF | 用于第一個(gè)線程的線程環(huán)境塊(TEB),系統(tǒng)會(huì)在這一頁(yè)的前面創(chuàng)建附加的TEB(從0x7FFDD000開(kāi)始向上) |
| 0x7FFDF000 ~ 0x7FFDFFFF | 進(jìn)程環(huán)境塊(PEB) |
| 0x7FFE0000 ~ 0x7FFE0FFF | 共享的用戶數(shù)據(jù)頁(yè),這個(gè)只讀方式的頁(yè)面被映射到系統(tǒng)空間中包含系統(tǒng)時(shí)間,時(shí)鐘計(jì)數(shù)和版本號(hào)信息的一個(gè)頁(yè)面,這個(gè)頁(yè)面的存在使數(shù)據(jù)在用戶態(tài)下可以直接讀取而不必請(qǐng)求核心態(tài)的轉(zhuǎn)換 |
| 0x7FFE1000 ~ 0x7FFEFFFF | 拒絕訪問(wèn)區(qū)域 |
| 0x7FFF0000 ~ 0x7FFFFFFF | 拒絕訪問(wèn)區(qū)域,用于防止線程跨越用戶/系統(tǒng)空間邊界傳送緩存區(qū),在變量MmUserProbeAddress中包含此頁(yè)的起始地址 |
核心高2GB空間分配:
| 0x80000000 ~ 0xc0000000 | 內(nèi)核執(zhí)行體,HAL和硬件驅(qū)動(dòng)程序 |
| 0xc0000000 ~ 0xc0800000 | 進(jìn)程頁(yè)和超空間 |
| 0xc0800000 ~ 0xFFBE000 | 系統(tǒng)高速緩存,分頁(yè)緩沖池,非分頁(yè)緩沖池 |
| 0xFFBE000 ~ 0xFFC0000 | 崩潰儲(chǔ)存驅(qū)動(dòng)程序區(qū)域 |
| 0xFFC0000 ~ 0xFFFFFFF | 留給HAL使用 |
內(nèi)存管理
每個(gè)進(jìn)程都擁有自己的4G(32位機(jī))虛擬內(nèi)存地址,各個(gè)進(jìn)程之間是相互獨(dú)立的,每個(gè)進(jìn)程的數(shù)據(jù)可由其中線程共享。虛擬內(nèi)存地址本身不對(duì)應(yīng)任何物理地址,直接引用會(huì)引發(fā)錯(cuò)誤,虛擬內(nèi)存地址必須映射物理地址后才能儲(chǔ)存數(shù)據(jù)。內(nèi)存分配其實(shí)指的是虛擬內(nèi)存地址映射物理內(nèi)存,內(nèi)存回收就是指解除映射關(guān)系。
四:儲(chǔ)存保護(hù)
保證在內(nèi)存中的多道程序只能在給定的儲(chǔ)存區(qū)域內(nèi)活動(dòng)并互不干擾
方法:界址寄存器
在CPU中設(shè)置一對(duì)下限寄存器和上限寄存器存放程序在內(nèi)存中的下限地址和上限地址
程序訪問(wèn)內(nèi)存時(shí)硬件自動(dòng)將目的地址與下限寄存器和上限寄存器中存放的地址界限進(jìn)行比較,判斷是否越界
關(guān)于計(jì)算機(jī)硬件存儲(chǔ)系統(tǒng)詳細(xì)見(jiàn)計(jì)算機(jī)存儲(chǔ)系統(tǒng)
總結(jié)
以上是生活随笔為你收集整理的操作系统储存管理功能的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C程序多线程同时画圆画方
- 下一篇: 计算机的存储系统,全方面、最详细