概述
最近技术学习有点懈怠了,几个月读的书也没几页。
虚拟内存相关的知识,在操作系统课上学的不太明白,趁着周末赶紧补一补吧。
挑战一下自己,周末两天10.23-10.24,读完《深入理解计算机系统》的第9章,559页~619页,共60页。
本文采用问答的形式涵盖虚拟内存的主要知识点,最后做了一个书中的实验题。
虚拟内存有什么用?
1、将主存看做是磁盘的高速缓存,只保存活动区域,高效地使用了主存。
2、为每一个进程提供了一致的内存空间,简化了内存管理。(因为每个进程有一个独立的页表)
3、保护每个进程的地址空间不被其他进程破坏。
虚拟内存的虚拟页有哪些状态?
1、未分配的:没有关联任何数据,不占用任何磁盘、物理内存空间
2、缓存的:已缓存在物理内存中的已分配页
3、未缓存的:未缓存在物理内存中的已分配页
DRAM的组织结构有什么特点?
1、DRAM相当于虚拟内存系统的缓存,DRAM缓存不命中就要由磁盘提供服务。
2、磁盘本就比DRAM慢得多,而且读取一个扇区的首字节也比读取连续的字节慢得多。所以为了应对这么大的磁盘访问开销,虚拟页设置的很大,缓存替换算法也设计的很精密、复杂。
3、因为对磁盘的访问耗时较长,DRAM缓存总是使用写回,而不是直写(类比于MySQL的 change buffer 机制,减少对磁盘的访问)
页表在虚拟内存系统中的什么位置?其结构是怎么样的?
页表所处位置:
页表结构:
有效位=1:物理内存中有对应页,指向物理页号。
有效位=0:物理内存中无对应页,若地址为null则未分配,否则指向磁盘地址。
另外页表还可以加上一些标志位,作为对特定虚拟地址读写权限的控制。
多级页表的原理及意义是什么?
原理:大部分的虚拟地址一般都是处于未分配状态,所以可以使用层次结构来压缩页表。即将地址空间以多个页面为单位,进行分片,作为一级页表。若这个分片内的地址空间都是未分配的,便不再需要二级页表;否则由二级页表指向具体的虚拟内存地址。
意义:减少页表对物理内存的占用。
TLB的作用和原理是什么?
作用:提高MMU(内存管理单元)查询页表PTE的速度
页表本身就存在于物理内存中,所以也是可以被高速缓存SRAM所缓存的。
但可以更进一步,通过TLB(翻译后备缓冲器)缓存多个页表PTE,从而可以避免对SRAM或DRAM的查询。
MMU如何利用页表实现虚拟地址到物理地址的映射?
虚拟地址由VPN(虚拟页号)和VPO(虚拟页偏移量)组成,通过VPN可以在页表中查询得到PPN(物理页号),而PPO(物理页偏移量)和VPO相等。便可由PPN和PPO组成物理地址。
虚拟内存对内存管理具体有哪些帮助?
1、简化链接:独立的地址空间允许每个进程的内存映像使用相同的基本格式,而不管代码和数据实际存放在物理内存何处。
2、简化加载:Linux加载器为代码和数据段分配虚拟页,把他们标记为无效的,将页表条目指向目标文件中的适当位置。加载器不从磁盘到内存复制数据,而是在每个页初次被引用时,虚拟内存系统自动调入。
3、简化共享:不同的进程可能需要共享相同的资源,比如库文件。虚拟内存系统可以让不同进程中适当的虚拟页面指向相同的物理页面。
4、简化内存分配:由于页表的工作方式,用户进程请求额外堆空间时(如调用malloc),操作系统会分配一个连续的虚拟内存页面,并将它们映射到物理内存中(不一定连续)。
2021.10.24-周末要结束了
哎呀,已经是周日下午了,但一共才看了20多页。
虽然效率不算高,但看的过程还是挺顺畅的。《CSAPP》真心比上学时的计算机组成原理、操作系统的课本好懂多了,自己完全能读懂,读起来不费劲、很畅快。
因为是跳读的第9章-虚拟内存,所以涉及到进程相关的知识时,记忆有点模糊了,得拐过头读读第8章了。
当然,我计划读60页没有完成,哈哈。但是我也读了20多页了,持之以恒就好。如果我没有读60页的规划,估计这个周末1页都不会看吧。剩下的内容这几天继续再看。
最后
以上就是帅气战斗机为你收集整理的读《深入理解计算机系统》虚拟内存的全部内容,希望文章能够帮你解决读《深入理解计算机系统》虚拟内存所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复