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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

windows

操作系统课设--虚拟内存

發(fā)布時(shí)間:2025/3/21 windows 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 操作系统课设--虚拟内存 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

山東大學(xué)操作系統(tǒng)課設(shè)lab7

  • 實(shí)驗(yàn)七 虛擬內(nèi)存(lab7)
    • 實(shí)驗(yàn)?zāi)康?/li>
    • 實(shí)驗(yàn)環(huán)境
    • 實(shí)驗(yàn)思路
    • 關(guān)鍵源代碼注釋以及程序說(shuō)明
    • 調(diào)試記錄

實(shí)驗(yàn)七 虛擬內(nèi)存(lab7)

實(shí)驗(yàn)?zāi)康?/h2>

在未實(shí)現(xiàn)虛擬內(nèi)存管理之前,Nachos在運(yùn)行一個(gè)用戶進(jìn)程的時(shí)候,需要將程序運(yùn)行所需所有內(nèi)存空間一次性分配。虛擬內(nèi)存實(shí)現(xiàn)將突破物理內(nèi)存限制。本實(shí)驗(yàn)核心任務(wù)為根據(jù)理論學(xué)習(xí)中涉及的兌換技術(shù),設(shè)計(jì)并實(shí)現(xiàn)用戶空間的虛擬內(nèi)存管理。

實(shí)驗(yàn)環(huán)境

虛擬機(jī)下Ubuntu Linux 16.04 LTS系統(tǒng),nachos-3.4內(nèi)核管理模塊和MIPS CPU軟件模擬模塊,代碼在lab7文件夾下面實(shí)現(xiàn)。

實(shí)驗(yàn)思路

我已經(jīng)完全忘記了大二下學(xué)期學(xué)的虛擬內(nèi)存是什么了,連概念都不記得,去查了一下才記起來(lái)和虛擬內(nèi)存相對(duì)應(yīng)的是物理內(nèi)存。看了這個(gè)網(wǎng)頁(yè),https://blog.csdn.net/qq_40840459/article/details/81054164
大概知道物理內(nèi)存是平時(shí)我們理解的內(nèi)存,就是一般都會(huì)從硬盤(pán)里把數(shù)據(jù)拿進(jìn)來(lái)用,因?yàn)閮?nèi)存速度比硬盤(pán)快很多。但是有時(shí)候內(nèi)存不夠用,就要用上硬盤(pán),所以虛擬內(nèi)存其實(shí)是占用硬盤(pán)中的空間,不過(guò)是和真正內(nèi)存對(duì)應(yīng)起來(lái)的,有建立索引,每次不夠用了,就可以把現(xiàn)有的這些換出去放到硬盤(pán)里先存著,把想要的page換進(jìn)來(lái)。這樣換來(lái)?yè)Q去,反反復(fù)復(fù),就很少的內(nèi)存空間可以對(duì)應(yīng)很多的硬盤(pán)空間,相當(dāng)于有很多虛擬內(nèi)存可以使。我差不多是這樣理解。
有一個(gè)很重要的步驟是交換。在發(fā)生缺頁(yè)錯(cuò)誤時(shí),才需要交換。因?yàn)閮?nèi)存中可能會(huì)存在大量我們不常訪問(wèn)的數(shù)據(jù)占空間,真正的內(nèi)存不夠用的時(shí)候,需要把物理內(nèi)存通過(guò)虛擬地址當(dāng)成內(nèi)存換進(jìn)來(lái)。就其實(shí)內(nèi)存能容納的地方并沒(méi)有變多,也沒(méi)有變少,只是因?yàn)榭梢越粨Q,所以可以把舊的換出去,新的換進(jìn)來(lái),就可以認(rèn)為我們多了很多虛擬內(nèi)存。

關(guān)鍵源代碼注釋以及程序說(shuō)明

本實(shí)驗(yàn)思路來(lái)自如下網(wǎng)頁(yè):
https://wenku.baidu.com/view/9383d57a5acfa1c7aa00ccd6.html
主要是看machine文件夾里的translate.h和translate.cc吧,這應(yīng)該就是如何去物理內(nèi)存里找頁(yè)的方法。有虛擬內(nèi)存、物理內(nèi)存這樣的屬性。
初始如下:

需進(jìn)行修改:
添加一種類型PageType,包括該頁(yè)中代碼、初始化數(shù)據(jù)、未初始化數(shù)據(jù)、用戶棧。
新定義了兩個(gè)屬性,一個(gè)是該頁(yè)在文件中塊偏移量inFileAddr,一個(gè)是當(dāng)前頁(yè)存儲(chǔ)的數(shù)據(jù)類型type。

在lab6里有在progtest.cc聲明過(guò)一個(gè)BitMap類,用來(lái)記錄內(nèi)存中物理頁(yè)的分配情況。之前是為了多用戶并行,才需要設(shè)置全局變量來(lái)控制程序。這里的交換頁(yè)同樣是全局問(wèn)題,故也需要在progtest.cc里聲明一個(gè)全局變量BitMap。以下是lab6的變量設(shè)置:

將userprog文件夾里的文件拷貝到lab7中,添加新變量,SwapBitMap和SwapFile。

在AddrSpace里添加4個(gè)私有屬性,
保存指向用戶文件的指針OpenFile;
當(dāng)下正在執(zhí)行的用戶文件的NoffHeader;
頁(yè)置換用FIFO算法,添加virtualMem數(shù)組和p_vm指針,virtualMem存儲(chǔ)的是按進(jìn)入內(nèi)存的先后順序排列的當(dāng)前占用內(nèi)存空間的虛頁(yè),p_vm指針指向數(shù)組中當(dāng)前將要被換出的那個(gè)位置。

在addrspace.h和addrspace.cc中添加方法

調(diào)試記錄


可以看出,我的96行是空行,怎么會(huì)報(bào)錯(cuò)呢?
忘記make了。
報(bào)錯(cuò),是中間有一個(gè)void和方法名沒(méi)有空格。語(yǔ)法錯(cuò)誤。
修改sort.c里的數(shù)組長(zhǎng)度,避免打印過(guò)多,初始值是1024。

重新對(duì)test進(jìn)行編譯
再對(duì)lab7-8編譯
結(jié)果正確。


《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

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

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