最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

王道操作系統(tǒng)第3章-內(nèi)存管理-虛擬內(nèi)存管理

2023-09-16 21:05 作者:回到唐朝當(dāng)少爺  | 我要投稿

第3章-內(nèi)存管理-虛擬內(nèi)存管理

  • 虛擬內(nèi)存的基本概念

    • 傳統(tǒng)存儲(chǔ)管理方式的特征、缺點(diǎn)

    • 局部性原理

    • 虛擬內(nèi)存的定義和特征

    • 如何實(shí)現(xiàn)虛擬內(nèi)存技術(shù)

  • 請(qǐng)求分頁管理方式

    • 頁表基址

    • 缺頁中斷機(jī)構(gòu)

    • 地址變換機(jī)構(gòu)

  • 頁面置換算法

    • 簡單的CLOCK算法實(shí)現(xiàn)

    • 改進(jìn)型的時(shí)鐘置換算法

    • 最佳置換算法OPT

    • 先進(jìn)先出置換算法FIFO

    • 最近最久未使用置換算法LRU

    • 時(shí)鐘置換算法CLOCK

  • 頁面分配策略、抖動(dòng)、工作集

    • 固定分配局部置換

    • 可分配全局置換

    • 可變分配局部置換

    • 頁面分配、置換策略

    • 何時(shí)調(diào)入頁面

    • 抖動(dòng)(顛簸)現(xiàn)象

  • 內(nèi)存映射文件

    • 傳統(tǒng)的文件訪問方式

    • 內(nèi)存映射文件的訪問方式

第3章-內(nèi)存管理-虛擬內(nèi)存管理

虛擬內(nèi)存的基本概念

傳統(tǒng)存儲(chǔ)管理方式的特征、缺點(diǎn)

傳統(tǒng)存儲(chǔ)管理:

  1. 連續(xù)分配

    • 單一連續(xù)分配

    • 固定分區(qū)分配

    • 動(dòng)態(tài)分區(qū)分配

  2. 非連續(xù)分配

    • 基本分頁存儲(chǔ)管理

    • 基本分段存儲(chǔ)管理

    • 基本段頁式存儲(chǔ)管理

存在的問題

  • 一次性作業(yè)必須一次性全部裝入內(nèi)存后才能開始運(yùn)行。這會(huì)造成兩個(gè)問題:

    1. 作業(yè)很大時(shí),不能全部裝入內(nèi)存,導(dǎo)致大作業(yè)無法運(yùn)行

    2. 當(dāng)大量作業(yè)要求運(yùn)行時(shí),由于內(nèi)存無法容納所有作業(yè),因此只有少量作業(yè)能運(yùn)行,導(dǎo)致多道程序并發(fā)性下降

  • 駐留性一旦作業(yè)被裝入內(nèi)存,就會(huì)一直駐留在內(nèi)存中,直到作業(yè)運(yùn)行結(jié)束。事實(shí)上,在一個(gè)時(shí)間段內(nèi),只要訪問作業(yè)的一小部分?jǐn)?shù)據(jù)即可正常運(yùn)行,這就導(dǎo)致了內(nèi)存中會(huì)駐留大量的、暫時(shí)用不到的數(shù)據(jù),浪費(fèi)了寶貴的內(nèi)存資源

局部性原理

時(shí)間局部性:如果執(zhí)行了程序中的某條指令,那么不久后這條指令很有可能再次執(zhí)行;如果某個(gè)數(shù)據(jù)被訪問過,不久之后該數(shù)據(jù)很可能再次被訪問

空間局部性:一旦程序訪問了某個(gè)存儲(chǔ)單元,在不久之后,其附近的存儲(chǔ)單元也很有可能被訪問(因?yàn)楹芏鄶?shù)據(jù)在內(nèi)存中都是連續(xù)存放的,并且程序的指令也是順序地在內(nèi)存中存放的)

虛擬內(nèi)存的定義和特征

基于局部性原理,在程序裝入時(shí),可以將程序中很快會(huì)用到的部分裝入內(nèi)存,暫時(shí)用不到的部分留在外存,就可以讓程序開始執(zhí)行

在程序執(zhí)行過程中,當(dāng)所訪問的信息不在內(nèi)存時(shí),由操作系統(tǒng)負(fù)責(zé)將所需信息從外存調(diào)入內(nèi)存,然后繼續(xù)執(zhí)行程序

若內(nèi)存空間不夠,由操作系統(tǒng)負(fù)責(zé)將內(nèi)存中暫時(shí)用不到的信息換出到外存

在操作系統(tǒng)的管理下,在用戶看來似乎有一個(gè)比實(shí)際內(nèi)存大得多的內(nèi)存,這就是虛擬內(nèi)存

虛擬內(nèi)存有以下三個(gè)主要特征:

  1. 多次性:無需在作業(yè)運(yùn)行時(shí)一次性全部裝入內(nèi)存,而是允許被分成多次調(diào)入內(nèi)存

  2. 對(duì)換性:在作業(yè)運(yùn)行時(shí)無需一直常駐內(nèi)存,而是允許在作業(yè)運(yùn)行過程中,獎(jiǎng)作業(yè)換入、換出

  3. 虛擬性:從邏輯上擴(kuò)充了內(nèi)存的容量,使用戶看到的內(nèi)存容量,遠(yuǎn)大于實(shí)際的容量

如何實(shí)現(xiàn)虛擬內(nèi)存技術(shù)

虛擬內(nèi)存技術(shù),允許一個(gè)作業(yè)分多次調(diào)入內(nèi)存。如果采用連續(xù)分配方式,會(huì)不方便實(shí)現(xiàn)。因此,虛擬內(nèi)存的實(shí)現(xiàn)需要建立在連分配的內(nèi)存管理方式的基礎(chǔ)上

傳統(tǒng)的非連續(xù)分配內(nèi)存管理:

  • 基本分頁存儲(chǔ)管理

  • 基本分段存儲(chǔ)管理

  • 基本段頁式存儲(chǔ)管理

虛擬內(nèi)存的實(shí)現(xiàn):

  • 請(qǐng)求分頁存儲(chǔ)管理

  • 請(qǐng)求分段存儲(chǔ)關(guān)聯(lián)

  • 請(qǐng)求段頁式存儲(chǔ)管理

主要區(qū)別:在程序執(zhí)行過程中,當(dāng)所訪問的信息不在內(nèi)存時(shí),由操作系統(tǒng)負(fù)責(zé)將所需信息從外存調(diào)入內(nèi)存,然后繼續(xù)執(zhí)行程序。(操作系統(tǒng)要提供請(qǐng)求調(diào)頁/段的功能)

若內(nèi)存空間不夠,由操作系統(tǒng)負(fù)責(zé)將內(nèi)存中暫時(shí)用不到的信息換出外存。(操作系統(tǒng)要提供頁面/段置換的功能)

請(qǐng)求分頁管理方式

頁表基址

與基本分頁管理相比,請(qǐng)求分頁管理中,為了實(shí)現(xiàn)“請(qǐng)求調(diào)頁”,操作系統(tǒng)需要知道每個(gè)頁面是否調(diào)入內(nèi)存;如果還沒調(diào)入,那么也需要知道該頁面在外存中存放的位置

當(dāng)內(nèi)存空間不夠時(shí),要實(shí)現(xiàn)“頁面置換”,操作系統(tǒng)需要某些指標(biāo)來決定到底換出哪個(gè)頁面;有的頁面還沒被修改過,就不用再浪費(fèi)時(shí)間寫回外存。有的頁面修改過,就需要將外存中的舊數(shù)據(jù)覆蓋,因此,操作系統(tǒng)也需要記錄各個(gè)頁面是否被修改過的信息。

在請(qǐng)求分頁系統(tǒng)中,每當(dāng)要訪問的頁面不在內(nèi)存時(shí),便產(chǎn)生一個(gè)缺頁中斷,然后由操作系統(tǒng)的缺頁中斷處理程序處理中斷。

此時(shí)缺頁的進(jìn)程阻塞,放入阻塞隊(duì)列,調(diào)頁完成后再將其喚醒,放回就緒隊(duì)列

如果內(nèi)存中有空閑塊,則為進(jìn)程分配一個(gè)空閑塊,將所缺頁面裝入該塊,并修改頁表中相應(yīng)的頁表項(xiàng)。

如果內(nèi)存中沒有空閑塊,則由頁面置換算法選擇一個(gè)頁面淘汰,若該頁面在內(nèi)存期間被修改過,則要將其寫回外存。未修改過的頁面不用寫回外存

缺頁中斷機(jī)構(gòu)

缺頁中斷是因?yàn)楫?dāng)前執(zhí)行的指令想要訪問的頁面未調(diào)入內(nèi)存而產(chǎn)生的,因此屬于內(nèi)中斷

一條指令在執(zhí)行期間,可能產(chǎn)生多次缺頁中斷(如copy A to B,將邏輯地址A中的數(shù)據(jù)復(fù)制到邏輯地址B,而A、B屬于不同的頁面,則有可能產(chǎn)生兩次中斷)

地址變換機(jī)構(gòu)

請(qǐng)求分頁存儲(chǔ)管理比基本分頁存儲(chǔ)管理多的步驟

  1. 請(qǐng)求調(diào)頁(查到頁表項(xiàng)時(shí)進(jìn)行判斷)

  2. 頁面置換(需要調(diào)入頁面,在沒有空閑內(nèi)存塊時(shí)進(jìn)行)

  3. 需要修改請(qǐng)求頁表中新增的表項(xiàng)

快表中有的頁面一定是在內(nèi)存中的。若某個(gè)頁面被換出外存,則快表中的相應(yīng)表項(xiàng)也要被刪除,否則可能訪問錯(cuò)誤的頁面

和普通的中斷處理一樣,缺頁中斷處理依然需要保留CPU現(xiàn)場

頁面置換算法

最佳置換算法OPT

最佳置換算法(OPT,Optimal):每次選擇淘汰的頁面將是以后用不使用,或者在最長時(shí)間內(nèi)不再被訪問的頁面,這樣可以保證最低的缺頁率

注意:缺頁時(shí)未必發(fā)生頁面置換。若還有可用的空閑內(nèi)存塊,就不用進(jìn)行頁面置換,本身內(nèi)存中還有足夠的空閑的話直接調(diào)入就行了。

最佳置換算法可以保證最低的缺頁率,但是實(shí)際上,只有在進(jìn)程執(zhí)行的過程中才能知道接下來會(huì)訪問到的是哪個(gè)頁面,操作系統(tǒng)無法提前預(yù)判頁面訪問序列。因此,最佳置換算法是無法實(shí)現(xiàn)的。

先進(jìn)先出置換算法FIFO

先進(jìn)先出置換算法(FIFO):每次選擇淘汰的頁面是最早進(jìn)入內(nèi)存的頁面

實(shí)現(xiàn)方法:把調(diào)入內(nèi)存的頁面根據(jù)調(diào)入的先后順序排成一個(gè)隊(duì)列,需要換出頁面時(shí)選擇隊(duì)頭頁面即可

隊(duì)列的最大長度取決于系統(tǒng)為進(jìn)程分配了多少個(gè)內(nèi)存塊

Belady異常:當(dāng)為進(jìn)程分配的物理塊數(shù)增大時(shí),缺頁次數(shù)不減反增的異?,F(xiàn)象

只有FIFO算法會(huì)產(chǎn)生Belady異常。另外,F(xiàn)IFO算法雖然實(shí)現(xiàn)簡單,但是該算法與進(jìn)程實(shí)際運(yùn)行時(shí)的規(guī)律不適應(yīng),因?yàn)橄冗M(jìn)入的頁面可能最近常被訪問。因此,算法性能差

最近最久未使用置換算法LRU

最近最久未使用置換算法(LRU,least recently used):每次淘汰的頁面是最近最久未使用的頁面

實(shí)現(xiàn)方法:賦予每個(gè)頁面對(duì)應(yīng)的頁表項(xiàng)中,用訪問字段記錄該頁面自上次訪問以來所經(jīng)歷的時(shí)間t。當(dāng)需要淘汰一個(gè)頁面時(shí),選擇現(xiàn)有頁面中t值最大的,即最近最久未使用的頁面

該算法的實(shí)現(xiàn)需要專門的硬件支持,雖然算法性能好,但是實(shí)現(xiàn)困難,開銷大

時(shí)鐘置換算法CLOCK

最佳置換算法性能最好,但無法實(shí)現(xiàn);先進(jìn)先出置換算法實(shí)現(xiàn)簡單,但算法性能差;最近最久未使用置換算法性能好,是最接近OPT算法性能的,但是實(shí)現(xiàn)起來需要專門的硬件支持,算法開銷大

時(shí)鐘置換算法是一種性能和開銷較均衡的算法,又稱CLOCK算法,或最近未用算法(NRU,Not Recently Used)

簡單的CLOCK算法實(shí)現(xiàn)

為每個(gè)頁面設(shè)置一個(gè)訪問位,再將內(nèi)存中的頁面通過鏈接指針鏈接成一個(gè)循環(huán)隊(duì)列。當(dāng)某頁被訪問時(shí),其訪問位置為1。當(dāng)需要淘汰一個(gè)頁面時(shí),只需檢查頁的訪問位。如果是0,就選擇該頁換出;如果是1,則將它置為0,暫不換出,繼續(xù)檢查下一個(gè)頁面,若第一輪掃描中所有頁面都是1,則將這些頁面的訪問位依次置為0后,再進(jìn)行第二輪掃描(第二輪掃描中一定會(huì)有訪問位為0的頁面,因此簡單的CLOCK算法選擇一個(gè)淘汰頁面最多會(huì)經(jīng)過兩輪掃描)

改進(jìn)型的時(shí)鐘置換算法

簡單的時(shí)鐘置換算法僅考慮到一個(gè)頁面最近是否被訪問過。事實(shí)上,如果被淘汰的頁面沒有被修改過,就不需要執(zhí)行IO操作寫回外存。只有被淘汰的頁面被修改過,才需要寫回外存。

因此,除了考慮一個(gè)頁面最近有沒有被訪問過之外,操作系統(tǒng)還應(yīng)考慮頁面有沒有被修改過。在其他條件都相同時(shí),應(yīng)優(yōu)先淘汰沒有修改過的頁面,避免IO操作。這就是改進(jìn)型的時(shí)鐘置換算法的思想。

修改位=0,表示頁面沒有被修改過;修改位為1,表示頁面被修改過

為方便討論,用(訪問位,修改位)的形式表示各頁面狀態(tài)。如(1,1)表示一個(gè)頁面近期被訪問過,且被修改過。

算法規(guī)則:將所有可能被置換的頁面排成一個(gè)循環(huán)隊(duì)列

  • 第一輪:從當(dāng)前位置開始掃描到第一個(gè)(0,0)的幀用于替換。本輪掃描不修改任何標(biāo)志位(第一優(yōu)先級(jí):最近沒訪問,且沒修改的頁面

  • 第二輪:若第一輪掃描失敗,則重新掃描,查找第一個(gè)(0,1)的幀用于替換。本輪將所有掃描過的幀訪問位設(shè)為0(第二優(yōu)先級(jí):最近沒訪問,但修改過的頁面

  • 第三輪:若第二輪掃描失敗,則重新掃描,查找第一個(gè)(0,0)的幀用于替換。本輪掃描不修改任何標(biāo)志位(第三優(yōu)先級(jí):最近訪問過,但沒修改的頁面

  • 第四輪:若第三輪掃描失敗,則重新掃描,查找第一個(gè)(0,1)的幀用于替換(第四優(yōu)先級(jí):最近訪問過,且修改過的頁面

由于第二輪已將所有幀的訪問位設(shè)為0,因此經(jīng)過第三輪第四輪掃描一定會(huì)有一個(gè)幀被選中,因此改進(jìn)型CLOCK置換算法選擇一個(gè)淘汰頁面最多會(huì)進(jìn)行第四輪掃描

頁面分配策略、抖動(dòng)、工作集

頁面分配、置換策略

駐留集:指請(qǐng)求分頁存儲(chǔ)管理中給進(jìn)程分配的物理塊的集合

在采用了虛擬存儲(chǔ)技術(shù)的系統(tǒng)中,駐留集大小一般小于進(jìn)程的總大小

考慮一個(gè)極端情況:若某進(jìn)程共有100個(gè)頁面,則該進(jìn)程的駐留集大小為100時(shí)進(jìn)程可以全部放入內(nèi)存,運(yùn)行期間不可能再發(fā)生缺頁。若駐留集大小為1,則進(jìn)程運(yùn)行期間必定會(huì)極頻繁地缺頁

若駐留集太小,會(huì)導(dǎo)致缺頁頻繁,系統(tǒng)要花大量時(shí)間來處理缺頁,實(shí)際用于進(jìn)程推進(jìn)的時(shí)間很少;駐留集太大,又會(huì)導(dǎo)致多道程序并發(fā)度下降,資源利用率降低。所以應(yīng)該選擇一個(gè)合適的駐留集大小

  • 固定分配:操作系統(tǒng)為每個(gè)進(jìn)程分配一組固定數(shù)目的物理塊,在進(jìn)程運(yùn)行期間不再改變。即,駐留集大小不變

  • 可變分配:先為每個(gè)進(jìn)程分配一定數(shù)目的物理塊,在進(jìn)程運(yùn)行期間,可根據(jù)情況做適當(dāng)?shù)脑黾踊驕p少。即,駐留集大小可變

  • 局部置換:發(fā)生缺頁時(shí)只能選進(jìn)程自己的物理塊進(jìn)行置換

  • 全局置換:可以將操作系統(tǒng)保留的空閑物理塊分配給缺頁進(jìn)程,也可以將別的進(jìn)程持有的物理塊置換到外存,再分配給缺頁進(jìn)程

固定分配局部置換

系統(tǒng)為每個(gè)進(jìn)程分配一定數(shù)量的物理塊,在整個(gè)運(yùn)行期間都不改變。若進(jìn)程在運(yùn)行中發(fā)生缺頁,則只能從該進(jìn)程在內(nèi)存中的頁面中選出一頁換出,然后再調(diào)入需要的頁面。這種策略的缺點(diǎn)是:很難在剛開始就確定應(yīng)為每個(gè)進(jìn)程分配多少個(gè)物理塊才算合理。(采用這種策略的系統(tǒng)可以根據(jù)進(jìn)程大小、優(yōu)先級(jí)、或是根據(jù)程序員給出的參數(shù)來確定為一個(gè)進(jìn)程分配的內(nèi)存塊數(shù))

可分配全局置換

剛開始會(huì)為每個(gè)進(jìn)程分配一定數(shù)量的物理塊。操作系統(tǒng)會(huì)保持一個(gè)空閑物理塊隊(duì)列。當(dāng)某進(jìn)程發(fā)生缺頁時(shí),從空閑物理塊中取出一塊分配給該進(jìn)程;若已無空閑物理塊,則可選擇一個(gè)未鎖定的頁面換出外存,再將該物理塊分配給缺頁的進(jìn)程。采用這種策略時(shí),只要某進(jìn)程發(fā)生缺頁,都將獲得新的物理塊,僅當(dāng)空閑物理塊用完時(shí),系統(tǒng)才選擇一個(gè)未鎖定的頁面調(diào)出(系統(tǒng)會(huì)鎖定一些頁面,這些頁面中的內(nèi)容不能被置換出外存,如重要的內(nèi)核數(shù)據(jù)可以設(shè)置為鎖定)。被選擇調(diào)出的頁面可能是系統(tǒng)中任何一個(gè)進(jìn)程的頁,因此這個(gè)被選中的進(jìn)程擁有的物理塊會(huì)減少,缺頁率會(huì)增加

只要缺頁就分配新的物理塊

可變分配局部置換

剛開始會(huì)為每個(gè)進(jìn)程分配一定數(shù)量的物理塊。當(dāng)某進(jìn)程發(fā)生缺頁時(shí),只允許從該進(jìn)程自己的物理塊中選出一個(gè)進(jìn)行換出外存。如果進(jìn)程在運(yùn)行中頻繁地缺頁,系統(tǒng)會(huì)為該進(jìn)程多分配幾個(gè)物理塊,直至該進(jìn)程缺頁率趨勢適當(dāng)降低;反之,若進(jìn)程運(yùn)行中缺頁率特別低,則可適當(dāng)減少分配給該進(jìn)程的物理塊

要根據(jù)發(fā)生缺頁的頻率動(dòng)態(tài)地增加或減少進(jìn)程的物理塊

何時(shí)調(diào)入頁面

  1. 預(yù)調(diào)頁策略:根據(jù)局部性原理(主要指空間局部性,即如果當(dāng)前訪問了某個(gè)內(nèi)存單元,在之后很可能會(huì)接著訪問與其相鄰的那些內(nèi)存單元),一次調(diào)入若干個(gè)相鄰的頁面可能比一次調(diào)入一個(gè)頁面更高效。但如果提前調(diào)入的頁面中大多數(shù)都沒被訪問過,則又是低效的。因此可以預(yù)測不久之后可能訪問到的頁面,將它們預(yù)先調(diào)入內(nèi)存,但目前預(yù)測成功率只有50%左右。故這種策略主要用于進(jìn)程的首次調(diào)入(運(yùn)行前調(diào)入),由程序員指出應(yīng)該先調(diào)入哪些部分

  2. 請(qǐng)求調(diào)頁策略進(jìn)程在運(yùn)行期間發(fā)現(xiàn)缺頁時(shí)才將所缺頁面調(diào)入內(nèi)存(運(yùn)行時(shí)調(diào)入)。由這種策略調(diào)入的頁面一定會(huì)被訪問到,但由于每次只能調(diào)入一頁,而每次調(diào)頁都要磁盤IO操作,因此IO開銷較大

若系統(tǒng)有足夠的對(duì)換區(qū)空間:頁面的調(diào)入、調(diào)出都是在內(nèi)存與對(duì)換區(qū)之間進(jìn)行,這樣可以保證頁面的調(diào)入、調(diào)出速度很快。在進(jìn)程運(yùn)行前,需將進(jìn)程相關(guān)的數(shù)據(jù)從文件區(qū)復(fù)制到對(duì)換區(qū)。

若系統(tǒng)缺少足夠的對(duì)換區(qū)空間:凡是不會(huì)被修改的數(shù)據(jù)都直接從文件區(qū)調(diào)入,由于這些頁面不會(huì)被修改,因此換出時(shí)不必寫回磁盤,下次需要時(shí)再從文件區(qū)調(diào)入即可。對(duì)于可能被修改的部分,換出時(shí)需寫回磁盤對(duì)換區(qū),下次需要時(shí)再從對(duì)換區(qū)調(diào)入。

UNIX方式:運(yùn)行之前進(jìn)程有關(guān)的數(shù)據(jù)全部放在文件區(qū),故未使用過的頁面,都可從文件區(qū)調(diào)入。若被使用過的頁面需要換出,則寫回對(duì)換區(qū),下次需要時(shí)從對(duì)換區(qū)調(diào)入。

抖動(dòng)(顛簸)現(xiàn)象

剛剛換出的頁面馬上又要換入內(nèi)存,剛剛換入的頁面馬上又要換出外存,這種頻繁地頁面調(diào)度行為稱為抖動(dòng),或顛簸。產(chǎn)生抖動(dòng)的主要原因是進(jìn)程頻繁訪問的頁面數(shù)目高于可用的物理塊數(shù)(分配給進(jìn)程的物理塊不夠)

為進(jìn)程分配的物理塊太少,會(huì)使進(jìn)程發(fā)生抖動(dòng)現(xiàn)象。為進(jìn)程分配的物理塊太多,又會(huì)降低系統(tǒng)整體的并發(fā)度,降低某些資源的利用率。

為了研究應(yīng)該為每個(gè)進(jìn)程分配多少個(gè)物理塊,Denning提出了進(jìn)程“工作集”的概念

駐留集:指請(qǐng)求分頁存儲(chǔ)管理中給進(jìn)程分配的內(nèi)存塊的集合工作集:指在某段時(shí)間間隔里,進(jìn)程實(shí)際訪問頁面的集合

操作系統(tǒng)會(huì)根據(jù)“窗口尺寸”來算出工作集。

工作集大小可能小于窗口尺寸,實(shí)際應(yīng)用中,操作系統(tǒng)可以統(tǒng)計(jì)進(jìn)程的工作集大小,根據(jù)工作集大小給進(jìn)程分配若干內(nèi)存塊。如:窗口尺寸為5,經(jīng)過一段時(shí)間的監(jiān)測發(fā)現(xiàn)某進(jìn)程的工作集最大為3,那么說明該進(jìn)程由很好的局部性,可以給這個(gè)進(jìn)程分配3個(gè)以上的內(nèi)存塊即可滿足進(jìn)程的運(yùn)行需要。

一般來說,駐留集大小不能小于工作集大小,否則進(jìn)程運(yùn)行過程中將頻繁缺頁。

拓展:基于局部性原理可知,進(jìn)程在一段時(shí)間內(nèi)訪問的頁面與不久之后會(huì)訪問的頁面是有相關(guān)性的。因此,可以根據(jù)進(jìn)程近期訪問的頁面集合(工作集)來設(shè)計(jì)一種頁面置換算法——選擇一個(gè)不在工作集中的頁面進(jìn)行淘汰

內(nèi)存映射文件

內(nèi)存映射文件操作系統(tǒng)向上層程序員提供的功能(系統(tǒng)調(diào)用)

  • 方便程序員訪問文件數(shù)據(jù)

  • 方便多個(gè)進(jìn)程共享同一個(gè)文件

傳統(tǒng)的文件訪問方式

  • open系統(tǒng)調(diào)用——打開文件

  • seek系統(tǒng)調(diào)用——將讀寫指針移動(dòng)到某個(gè)位置

  • read系統(tǒng)調(diào)用——從讀寫指針?biāo)肝恢米x入若干數(shù)據(jù)(從磁盤讀入內(nèi)存)

  • write系統(tǒng)調(diào)用——將內(nèi)存中的指定數(shù)據(jù),寫回磁盤(根據(jù)讀寫指針確定要寫回什么位置)

內(nèi)存映射文件的訪問方式

  • open系統(tǒng)調(diào)用——打開文件

  • mmap系統(tǒng)調(diào)用——將文件映射到進(jìn)程的虛擬地址空間

特點(diǎn)

  1. 以訪問內(nèi)存的形式訪問文件數(shù)據(jù)

  2. 文件數(shù)據(jù)的讀入、寫出由操作系統(tǒng)自動(dòng)完成

  3. 進(jìn)程關(guān)閉文件時(shí),操作系統(tǒng)自動(dòng)將文件被修改的數(shù)據(jù)寫回磁盤

多個(gè)進(jìn)程可以映射同一個(gè)文件,實(shí)現(xiàn)共享

在物理內(nèi)存中,一個(gè)文件對(duì)應(yīng)同一份數(shù)據(jù),當(dāng)一個(gè)進(jìn)程修改文件數(shù)據(jù)時(shí),另一個(gè)進(jìn)程可以立馬“看到”

文件數(shù)據(jù)的讀入/寫出完全由操作系統(tǒng)負(fù)責(zé),IO效率可以由操作系統(tǒng)負(fù)責(zé)優(yōu)化


往期傳送門:

王道操作系統(tǒng)第3章-內(nèi)存管理-內(nèi)存管理基礎(chǔ) - 嗶哩嗶哩 (bilibili.com)

王道操作系統(tǒng)第2章-進(jìn)程管理-死鎖 - 嗶哩嗶哩 (bilibili.com)

王道操作系統(tǒng)第2章-進(jìn)程管理-進(jìn)程的同步與互斥 - 嗶哩嗶哩 (bilibili.com)

王道操作系統(tǒng)第2章-進(jìn)程管理-調(diào)度 - 嗶哩嗶哩 (bilibili.com)

王道操作系統(tǒng)第2章-進(jìn)程管理-進(jìn)程與線程 - 嗶哩嗶哩 (bilibili.com)

王道操作系統(tǒng)第1章-操作系統(tǒng)概述 - 嗶哩嗶哩 (bilibili.com)


王道操作系統(tǒng)第3章-內(nèi)存管理-虛擬內(nèi)存管理的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
左贡县| 白河县| 汤阴县| 任丘市| 许昌县| 长乐市| 无为县| 治多县| 青浦区| 吴堡县| 宁强县| 出国| 沂源县| 堆龙德庆县| 阳江市| 措勤县| 淮安市| 汉川市| 枞阳县| 永修县| 平谷区| 利辛县| 楚雄市| 南岸区| 定陶县| 鹰潭市| 衡阳市| 娄烦县| 金山区| 博客| 北流市| 信宜市| 兴隆县| 台北县| 余江县| 平度市| 普陀区| 卓尼县| 张家川| 台州市| 武定县|