跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 有关虚拟内存&物理内存的疑问
未分類
18 11 月 2020

有关虚拟内存&物理内存的疑问

有关虚拟内存&物理内存的疑问

資深大佬 : nicolemeimei 4

通常程序会有一个内存分配器,用于管理内存地址,并且是管理虚拟地址。印象中的内存分配器基本都会很有序的按照一定策略分配 /释放内存,但我联想到这些都是虚拟地址,最后还需要靠 OS 映射到物理地址,那管理虚拟地址的必要性在哪里?我理解的 internal fragmentation 和 external fragmentation 都是针对虚拟内存的,但毕竟是虚拟的,最后不是还是得从真实的物理地址拿数据吗,最坏的情况是虚拟地址管理的井井有条,但 OS 映射的物理地址乱七八糟,那访问时间不久会大大的增加了?

不知道我上面的理解哪里有问题,请多指教,非常感谢

大佬有話說 (4)

  • 資深大佬 : dilu

    虚拟内存通过 CPU 中的 mmu 进行映射操作,查询页目录跟页表。好处是进程直接内存是隔离的,同时用户空间不会影响到内核空间。你想想实地址模式跑个 qq 就把操作系统搞挂的场景?这样做大大的增加了稳定性。同时还方便进行碎片内存的回收,也简化了上层调用者的调用逻辑。

    你看计算机的各个技术方向,都是分层思想,尽量让每一层都不互相干扰。

  • 資深大佬 : msg7086

    「这些都是虚拟地址,最后还需要靠 OS 映射到物理地址,那管理虚拟地址的必要性在哪里?」

    虚拟地址的必要性和最终是否映射到物理地址是无关的,前者无法推出后者结论。
    就像说你到了 100 岁牙全掉光了,那现在为什么还要保护牙齿一样。

    如果像你说的,去掉了虚拟内存地址,那么所有的程序最终都得读写物理地址。那程序是不是还是要有一个机制去管理哪些地址不能读写,哪些地址能读写。那最后不就等于在每个程序内部重新写了一个内存管理器么。

    既然每个程序都要实现内存管理器,不如整个拿出来抽象成一个虚拟内存地址,然后程序只要很简单地申请和释放就行了。

  • 資深大佬 : msg7086

    换句话说,没有「必要性」,但是白嫖的开发成本,为什么不拿呢。
    就像说牙齿,反正有假牙,套上也能用,实在不行还能种牙。
    但是你还是会保护牙齿,因为性价比高啊。

  • 資深大佬 : systemcall

    虚拟地址与物理地址之间的映射是硬件实现的,优化是硬件厂家的事。SSD 上面系统拿到的照样是虚拟地址,看主控性能
    如果想直接用物理地址,欢迎来到嵌入式。能够直接操作物理内存,不仅仅是可以影响到别的进程那么简单,你甚至可以直接操作硬件

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具