为什么要有虚拟内存?

 我来答
智帆远航数码
2022-06-14 · TA获得超过3349个赞
知道小有建树答主
回答量:3654
采纳率:100%
帮助的人:182万
展开全部

github: https://github.com/AriseFX/java-notes

有且仅有这一种办法:将一个程序加载到内存,PC指向程序首地址, 在CPU取指执行的过程中,内存已经被使用了。 程序是存储在磁盘上的(先忽略加载的过程), 那么程序该加载到内存的哪个位置呢?

如果40和0都是真实的物理地址,为了让『call 40』好使,main必须放到物理内存中40位置,局限性相当大,要是其他程序也想放到40位置呢,那么先得需要找到空闲内存。

如果恰好1000位置空闲,那么把程序加载到1000位置,并1000赋给IP,CPU开始取值执行, 『call 40』又跳到了物理内存40位置,还是不好使。 仅仅修改PC初始地址是不够的, 还需要另外一个概念:重定位(修改程序中的地址)

编译连接时/加载时?

swap

运行时重定位

那么整理一下思路,程序载入是整个一起载入内存的吗?

页表该如何设计?

既要连续又要降低空间复杂度,那么就有了多级页表。

多级页表引入了新的问题

如何使用内存,前面提到过:先把程序『放入内存』,在CPU取指执行的过程中就开始『使用内存』了。
那么linux何时开始进行内存管理呢? 很容易想到从fork系统调用的内存分配阶段开始:分配段、建段表;
分配页、建页表。

总结:

经过一顿折腾,终于可以看『换入』是咋实现的了!

内存是有限的,不可能总是获取到新的页,那么物理内存不够的时候需要把一部分页面换出。关于页面换出涉及好几个页面置换算法,
由于篇幅问题这里只详细介绍最有效的(较少的缺页次数)。

LRU实现:

下面介绍实际操作系统的LRU近似实现:

1. https://pdos.csail.mit.edu/6.828/2018/xv6/book-rev11.pdf

2. <<x86汇编语言:从实模式到保护模式>>

3. <<深入理解计算机系统>>

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Jtti
2024-06-18 广告
导致香港服务器内存不足的原因比较多,Jtti总结了几点,具体如下:1、香港服务器应用程序池没有及时释放内存导致,应用程序池有一个默认回收的时间,到了这个时间就会自动释放内存,这个时间一般是1740分钟,而这种程度的时间可能会导致应用程序池无... 点击进入详情页
本回答由Jtti提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式