今日面试题 :为什么要有虚拟内存?
大家好,我是鸭鸭。
刷题就上面试鸭,帮助大家更高效通过面试(支持网页端、小程序):https://mianshiya.com/ 。
祝大家都能拿到心仪的 Offer!
回答重点
虚拟内存的主要作用是提升系统效率和简化内存管理。
1)内存扩展能力:
- 虚拟内存允许程序运行在比实际物理内存大的地址空间上。即使物理内存不足,系统也可以通过交换(swapping)将不常用的内存页移到磁盘中,使得多个程序能够同时运行。
2)进程隔离:
- 每个进程拥有独立的虚拟地址空间,防止进程间的内存访问冲突,提高系统稳定性和安全性。
- 使用虚拟内存,操作系统可以通过页面表设置访问权限,防止非法访问。
3)简化内存管理:
- 操作系统可以更灵活地分配和回收内存,无需手动考虑物理内存布局问题。
- 虚拟内存可以将程序逻辑地址与物理地址解耦。
扩展知识
虚拟内存的执行原理
1)逻辑地址与物理地址的映射: 每个进程生成的逻辑地址需要经过地址翻译,映射到实际的物理内存地址。地址翻译由硬件中的内存管理单元(MMU)完成。
具体过程是:
- CPU 生成逻辑地址。
- MMU 根据页表将逻辑地址分解为页号和页内偏移量。
- MMU 查找页表,找到对应页号的物理地址。
- 合并物理页号与偏移量,生成最终的物理地址。
如果页表项未命中(Page Fault),操作系统将从磁盘中加载相应的页面。
2)页表管理与多级页表:
页表记录逻辑地址与物理地址的映射关系,但大型程序需要的页表非常大。现代系统使用多级页表来减少内存占用。比如,Linux 中采用四级或五级页表结构。
3)交换(Swapping):
当物理内存不足时,操作系统将不常用的页面移到磁盘的交换区(Swap Space),释放内存给活跃的程序使用。
Page Fault 处理过程:
- CPU 中断触发,保存上下文。
- 操作系统从页表中判断所需页面位置。
- 将页面从磁盘加载到内存,并更新页表。
- 恢复上下文,继续执行。
4)写时复制(Copy-On-Write,COW):
当多个进程共享相同的内存页(如 fork 时),只在发生写操作时才复制页面。这样可以显著减少内存占用。
5)虚拟内存与缓存一致性: 虚拟内存引入了 TLB(Translation Lookaside Buffer),用于加速逻辑地址到物理地址的映射。
TLB 是 CPU 缓存的一部分,存储最近使用的页表项。若 TLB 缺失,会触发页表查找。
什么是分段、什么是分页?
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
