日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

操作系统【六】虚拟内存

發(fā)布時間:2023/11/30 windows 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 操作系统【六】虚拟内存 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

傳統(tǒng)存儲管理方式的不足

  • 一次性:作業(yè)必須一次性全部裝入內(nèi)存后才能開始運行。這會造成:當(dāng)作也很大時不能全部裝入內(nèi)存;當(dāng)大量作業(yè)要求運行時,由于內(nèi)存無法容納所有作業(yè),因此只有少量作業(yè)能夠運行,導(dǎo)致多道程序并發(fā)度下降
  • 駐留性:一旦作業(yè)被裝入內(nèi)存,就會一直留駐在內(nèi)存中,直至作業(yè)運行結(jié)束。導(dǎo)致內(nèi)存中駐留大量的、暫時用不到的數(shù)據(jù),浪費了寶貴的內(nèi)存資源。

局部性原理

  • 時間局部性:如果執(zhí)行了程序中的某條指令,那么不久后這條指令很可能再次執(zhí)行;如果某個數(shù)據(jù)被訪問過,那么這個數(shù)據(jù)很可能再次被訪問
  • 空間局部性:一旦程序訪問了某個存儲單元,在不久之后,其附近的存儲單元也很有可能被訪問。

高速緩沖技術(shù)的思想:將近期會頻繁訪問到的數(shù)據(jù)放到更告訴的存儲器中,暫時用不到的數(shù)據(jù)放在更低速存儲器中。

快表機(jī)構(gòu)就是將近期長訪問的頁表項副本放到更高速的聯(lián)想寄存器中。

虛擬內(nèi)存

由于局部性原理,在程序裝入時,可以將程序中很快用到的部分裝入內(nèi)存,暫時用不到的部分留在外存,就可以讓程序開始執(zhí)行。在程序執(zhí)行過程中,當(dāng)訪問的信息不在內(nèi)存時,由操作系統(tǒng)負(fù)責(zé)將所需信息從外存調(diào)入內(nèi)存,然后繼續(xù)執(zhí)行程序。若內(nèi)存空間不夠,由操作系統(tǒng)負(fù)責(zé)將內(nèi)存中暫時用不到的信息換出外存。

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

虛擬內(nèi)存的最大容量是由計算機(jī)的地址結(jié)構(gòu)(CPU尋址范圍)確定的
虛擬內(nèi)存的實際容量=min(內(nèi)存和外存容量之和,CPU尋址范圍)

主要特征:

  • 多次性:允許多次裝入
  • 對換性:允許作業(yè)運行過程中將作業(yè)換入換出
  • 虛擬性:使得用戶看到的內(nèi)存容量大于實際容量

主要區(qū)別:如果訪問的信息不再內(nèi)存時,有操作系統(tǒng)將所需信息從外存調(diào)入內(nèi)存(請求調(diào)頁/段
如果內(nèi)存空間不夠,由操作系統(tǒng)負(fù)責(zé)將內(nèi)存中暫時用不到的信息換到外存(頁面/段置換

請求分頁管理方式

請求調(diào)頁:操作系統(tǒng)需要知道每個頁面是否已經(jīng)調(diào)入內(nèi)存;如果沒有調(diào)入,需要知道該頁面在外存存放的位置
頁面置換:根據(jù)某些指標(biāo)來決定換出哪些頁面,有的頁面沒有被修改過,就不用再浪費時間寫回外存。有的頁面修改過,就需要將外存中就數(shù)據(jù)覆蓋,因此操作系統(tǒng)需要記錄各個頁面是否被修改的信息。

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

在請求分頁系統(tǒng)中,每當(dāng)要訪問的頁面不再內(nèi)存時,便產(chǎn)生一個缺頁中斷,然后由操作系統(tǒng)的缺頁中斷處理程序處理中斷。此時缺頁的進(jìn)程阻塞,放入阻塞隊列,調(diào)頁完成后再將其喚醒,放回就緒隊列。

如果內(nèi)存中有空閑塊,則為進(jìn)程分配一個空閑塊,將所缺頁面裝入該塊,并修改頁表中相應(yīng)的頁表項。
如果內(nèi)存中沒有空閑塊,則由頁面置換算法選擇一個頁面淘汰,若該頁面在內(nèi)存期間被修改過,則要將其寫回外存。未修改過的頁面不用寫回外存。

缺頁中斷是因為當(dāng)前執(zhí)行的指令想要訪問的目標(biāo)頁面未調(diào)入內(nèi)存而產(chǎn)生的,因此屬于內(nèi)中斷。
一條指令在執(zhí)行期間可能產(chǎn)生多次缺頁中斷

地址變換

請求分頁存儲管理與基本分頁存儲管理的區(qū)別:
新增步驟1:請求調(diào)頁(查到頁表項時進(jìn)行判斷)
新增步驟2:頁面置換(需要調(diào)入頁面,但沒有空閑內(nèi)存塊時)
新增步驟3:需要修改請求頁表中新增的表項

  • 只有寫指令才需要修改修改位。并且,一般來說只需要修改快表中的數(shù)據(jù),只有要將快表想刪除時才需要寫回內(nèi)存中的慢表,這樣就可以減少訪存次數(shù)。
  • 和普通的中斷處理一樣,卻也中斷處理依然需要保留CPU現(xiàn)場
  • 頁面換入/換出都要啟動慢速的I/O操作
  • 頁面調(diào)入內(nèi)存后,需要修改慢表,同時也需要將表項復(fù)制到快表中

頁面置換算法

最佳置換算法(OPT)

每次選擇淘汰的頁面將時以后永不使用或者在最長時間內(nèi)不再被訪問的頁面,這樣可以保證最低的缺頁率。
注意:缺頁時未必發(fā)生頁面置換,若還有可用的空閑內(nèi)存塊,就不用進(jìn)行頁面置換
缺頁率=缺頁中斷次數(shù)/頁面訪問次數(shù)
只有沒有空閑內(nèi)存塊的缺頁中斷才需要頁面置換
理想化算法,實際無法實現(xiàn)

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

每次選擇淘汰的頁面是最早進(jìn)入內(nèi)存的頁面
把調(diào)入內(nèi)存的頁面根據(jù)調(diào)入的先后順序排成一個隊列,需要換出頁面時選擇隊頭,將新頁面放入隊尾
Belady異常:當(dāng)為進(jìn)程分配的物理塊數(shù)增大時,缺頁次數(shù)不減反增的異常現(xiàn)象。
只有FIFO算法會產(chǎn)生Belady異常

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

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

算法性能好,實現(xiàn)困難,開銷大
性能最接近OPT

時鐘置換算法(CLOCK)

是一種性能和開銷較均衡的算法,又稱作CLOCK算法,或最近未使用算法(NRU not recently used)

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

簡單CLOCK算法選擇一個淘汰頁面最多會經(jīng)過兩次掃描。

改進(jìn)型的時鐘置換算法:簡單時鐘置換算法僅僅考慮一個頁面最近是否被訪問,事實上,如果被淘汰的頁面沒有被修改過,就不需要執(zhí)行I/O操作寫回外存。只有被淘汰的頁面被修改過時才需要寫回外存。
因此考慮一個頁面最近有沒有被訪問過之外,操作系統(tǒng)還應(yīng)該考慮頁面有沒有被修改過。在其他條件都相同時,應(yīng)優(yōu)先淘汰沒有修改過的頁面,避免I/O操作。
實現(xiàn):設(shè)置修改位,0表示沒有被修改,1表示被修改。
(訪問位,修改位)
算法規(guī)則:
將所有可能被置換的頁面排成一個循環(huán)隊列

  • 從當(dāng)前位置開始掃描第一個(0,0)的幀用于替換,不修改任何標(biāo)志位
  • 如果第一輪掃描失敗,則重新掃描。查找第一個(0,1)的幀用于替換,本輪將所有掃描過的幀訪問位設(shè)為0
  • 如果第二輪掃描失敗,則重新掃描,查找第一個(0,0)的幀用于替換,本輪掃描不修改任何標(biāo)志位
  • 若第三輪掃描失敗,則重新掃描,找到第一個(0,1)的幀用于替換。
  • 由于第二輪已經(jīng)將所有幀的訪問位設(shè)置為0,因此經(jīng)過第三輪第四輪掃描一定會有一個幀被選中,因此改進(jìn)型CLOCK置換算法選擇一個淘汰頁面最多會進(jìn)行四次掃描


    頁面分配置換策略

    駐留集:請求分頁管理中給進(jìn)程分配的物理塊的集合
    在采用了虛擬存儲的系統(tǒng)中,駐留集大小一般小于進(jìn)程的總大小
    如果駐留集太小,則會頻繁缺頁,系統(tǒng)要花大量的時間處理缺頁,實際用于進(jìn)程推進(jìn)的時間很少
    駐留集太大,會導(dǎo)致多道程序并發(fā)度下降,資源利用率降低。

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

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

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

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

    • 固定分配局部置換:缺點:很難在剛開始就確定為每個進(jìn)程分配多少個物理塊才算合適。采用這種策略的系統(tǒng)一般會根據(jù)一定的參數(shù)確定內(nèi)存塊

    • 可變分配全局置換:只要某進(jìn)程發(fā)生缺頁,都能獲得新的物理塊,僅當(dāng)空閑物理塊用完時,系統(tǒng)才選擇一個未鎖定的頁面調(diào)出。被選擇調(diào)出的頁面可能是系統(tǒng)中任何一個進(jìn)程中的頁,因此這個被選中的進(jìn)程擁有的物理塊會減少,缺頁率會增加。
      系統(tǒng)會鎖定一些頁面,這些頁面中的內(nèi)容不能置換出去。

    • 可變分配局部置換:如果進(jìn)程在運行中頻繁地?fù)Q頁,系統(tǒng)回味該進(jìn)程多分配幾個物理塊,直至該進(jìn)程缺頁率趨勢適當(dāng)程度。反之,如果進(jìn)程在運行時缺頁率特別低,可適當(dāng)減少分配給該進(jìn)程的內(nèi)存塊。

    可變分配全局置換:只要就分配新物理塊
    可變分配局部置換:根據(jù)缺頁率動態(tài)增加或者減少物理塊

    調(diào)入頁面

    時間

    • 預(yù)調(diào)頁策略:根據(jù)局部性原理,一次調(diào)入若干個相鄰的頁面可能比一次調(diào)入一個頁面更加高效。預(yù)測不久之后可能要訪問的頁面,將他們預(yù)先調(diào)入內(nèi)存。預(yù)測成功率只有50%。這種策略主要用于進(jìn)程的首次進(jìn)入
    • 請求調(diào)頁策略:進(jìn)程在運行期間發(fā)現(xiàn)缺頁才將所缺頁面調(diào)入內(nèi)存。這種策略調(diào)入的頁面一定會被訪問到。但是每次都只能調(diào)入一頁,而每次調(diào)頁都要磁盤I/O操作,因此I/O開銷較大

    地點

    • 如果系統(tǒng)擁有足夠的調(diào)換去空間,頁面的調(diào)入調(diào)出都是內(nèi)存與對換區(qū)之間進(jìn)行的,這樣可以保證頁面的調(diào)入調(diào)出速度很快。在進(jìn)程運行前,需要講進(jìn)程相關(guān)的數(shù)據(jù)從內(nèi)存區(qū)復(fù)制到對換區(qū)。
    • 如果系統(tǒng)缺少足夠的對換區(qū)空間:凡是不會被修改的數(shù)據(jù)都直接從文件區(qū)調(diào)入,由于這些頁面不會被修改,因此換出時不需要寫回磁盤,下次需要時再從文件區(qū)調(diào)入即可。對于可能被修改的部分,換出時需要寫回磁盤對換區(qū),下次需要時再從對換區(qū)調(diào)入。
    • UNIX:運行之前進(jìn)程有關(guān)的數(shù)據(jù)全部放在文件區(qū),故未使用過的頁面都可以從文件區(qū)調(diào)入。若被使用過的頁面需要換出,則寫回對換區(qū),下次需要時再從對換區(qū)調(diào)入。

    抖動(顛簸)現(xiàn)象

    抖動現(xiàn)象是指在更換頁面時,如果被更換的頁面是一個很快再次訪問的頁面,則會頻繁地發(fā)生頁面調(diào)度,以至于調(diào)度頁面所需時間過長,系統(tǒng)效率急劇下降的現(xiàn)象。

    解決策略:

    • 有針對性地選擇更優(yōu)秀的頁面置換算法以減少頁面替換策略失誤
    • 掛起低優(yōu)先級的進(jìn)程,減少多道程序數(shù)量使得能夠增大駐留集,讓進(jìn)程擁有更多的內(nèi)存塊
    • 給進(jìn)程分配合適大小的內(nèi)存塊。為了解決給進(jìn)程分配多少個內(nèi)存塊比較合適,可以使用Denning提出的 “工作集”的概念進(jìn)行解決。首先操作系統(tǒng)根據(jù)窗口尺寸統(tǒng)計工作集的大小,然后讓駐留集的大小大于等于工作集的大小即可。與之相關(guān)的我們可以每次選擇一個不再工作集中的頁面進(jìn)行淘汰。
    • 使用L=S準(zhǔn)則調(diào)節(jié)缺頁率,讓程序最大可能地并發(fā)處理,提高磁盤和處理機(jī)的利用率。

    工作集

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


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

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

    總結(jié)

    以上是生活随笔為你收集整理的操作系统【六】虚拟内存的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。