✍个人博客:https://blog.csdn.net/Newin2020?type=blog
📣专栏地址:https://blog.csdn.net/newin2020/category_12820365.html
📚专栏简介:在这个专栏中,我将会分享操作系统面试中常见的面试题给大家~
❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪
103. 说下虚拟内存有什么作用?
- 第一,虚拟内存可以使得进程对运行内存超过物理内存大小,因为程序运行符合局部性原理,CPU 访问内存会有很明显的重复访问的倾向性,对于那些没有被经常使用到的内存,我们可以把它换出到物理内存之外,比如硬盘上的 swap 区域。
- 第二,由于每个进程都有自己的页表,所以每个进程的虚拟内存空间就是相互独立的。进程也没有办法访问其他进程的页表,所以这些页表是私有的,这就解决了多进程之间地址冲突的问题。
- 第三,页表里的页表项中除了物理地址之外,还有一些标记属性的比特,比如控制一个页的读写权限,标记该页是否存在等。在内存访问方面,操作系统提供了更好的安全性。
104. 指针存的是虚拟地址还是物理地址?
指针存储的是虚拟地址,而不是物理地址。下面我来简单说说这两个的区别:虚拟地址(Virtual Address):
- 虚拟地址是由操作系统分配给进程的地址空间中的地址。
- 每个运行的进程都有自己独立的虚拟地址空间,这使得每个进程认为它在独占整个计算机的内存。
- 虚拟地址是相对于进程的起始地址的偏移量,通常从 0 开始,直到进程的最大地址。
- 虚拟地址是一种抽象,它隐藏了底层物理硬件的复杂性。
105. 物理地址是什么?
- 物理地址是硬件内存中的真实地址,它对应于计算机的 RAM(随机存取存储器)中的特定位置。
- 物理地址是硬件层面的,不同于虚拟地址,它不受操作系统的管理和控制。
- 操作系统的内存管理单元(Memory Management Unit,MMU)负责将虚拟地址映射到物理地址,这个过程称为内存地址转换。
关键点是,大多数现代计算机使用虚拟内存系统,其中操作系统负责将进程的虚拟地址映射到物理内存上。这种虚拟内存系统允许多个进程同时运行,每个进程都认为自己独占计算机的全部内存,但实际上它们共享物理内存,由操作系统进行管理和分配。
指针存储的是虚拟地址,因为程序员通常使用虚拟地址来引用内存中的数据和对象,而不需要考虑底层物理地址的复杂性。操作系统和硬件负责将虚拟地址映射到物理地址,这个过程对应用程序是透明的。