Operating system 应用程序管理自己的虚拟内存

Operating system 应用程序管理自己的虚拟内存,operating-system,memory-management,virtual-memory,Operating System,Memory Management,Virtual Memory,我对虚拟内存有点怀疑 通常,由操作系统提供虚拟内存来使用磁盘空间扩展应用程序可用的内存量 操作系统将通过将数据复制到磁盘并在需要时恢复来清除物理内存 但是,应用程序可以管理自己的“虚拟内存”,而不是操作系统,例如,将对象写入文件,然后销毁它们 如果是这样,允许应用程序管理自己的虚拟内存是有利的还是允许操作系统提供?大多数应用程序甚至无法知道它们正在使用虚拟内存进行管理,因为操作系统会对应用程序发出的每个内存请求执行地址转换 除非您是在一个非常低级的环境中工作(在这种情况下,您可能正在编写自己的操

我对虚拟内存有点怀疑

通常,由操作系统提供虚拟内存来使用磁盘空间扩展应用程序可用的内存量

操作系统将通过将数据复制到磁盘并在需要时恢复来清除物理内存

但是,应用程序可以管理自己的“虚拟内存”,而不是操作系统,例如,将对象写入文件,然后销毁它们


如果是这样,允许应用程序管理自己的虚拟内存是有利的还是允许操作系统提供?

大多数应用程序甚至无法知道它们正在使用虚拟内存进行管理,因为操作系统会对应用程序发出的每个内存请求执行地址转换

除非您是在一个非常低级的环境中工作(在这种情况下,您可能正在编写自己的操作系统),否则这绝对是一项最好留给操作系统完成的任务

除了这需要内核特权才能完成之外,您还需要注意不要损坏其他进程的内存


操作系统是这种逻辑的最佳场所。

大多数应用程序甚至无法知道它们正在使用虚拟内存进行管理,因为操作系统会对应用程序发出的每个内存请求执行地址转换

除非您是在一个非常低级的环境中工作(在这种情况下,您可能正在编写自己的操作系统),否则这绝对是一项最好留给操作系统完成的任务

除了这需要内核特权才能完成之外,您还需要注意不要损坏其他进程的内存

操作系统是这种逻辑的最佳场所。

应用程序管理自己的虚拟内存不仅没有好处,标准操作系统(Windows、Unix、Linux、Mac OS X等)也不可能做到这一点

从虚拟地址到物理地址的转换由系统的内存管理单元完成,该单元通常是固件,而不是操作系统软件的严格部分

当地址转换发现对当前未映射到物理内存中的虚拟地址的引用时,操作系统软件完成的唯一部分过程是处理页面错误(将虚拟内存的单元交换到备份存储中或从备份存储中交换)

对应用程序来说,优势在于通过将自己的数据写入磁盘,而不是分配更多的虚拟内存,从而最大限度地减少虚拟内存的使用。但是,只有当应用程序的磁盘i/o比操作系统页面处理程序的磁盘i/o更高效时,这才有好处—这在当今是不太可能的情况。

应用程序管理自己的虚拟内存不仅没有好处,而且在标准操作系统中也不可能(Windows、Unix、Linux、Mac OS X等)

从虚拟地址到物理地址的转换由系统的内存管理单元完成,该单元通常是固件,而不是操作系统软件的严格部分

当地址转换发现对当前未映射到物理内存中的虚拟地址的引用时,操作系统软件完成的唯一部分过程是处理页面错误(将虚拟内存的单元交换到备份存储中或从备份存储中交换)


对应用程序来说,好处是通过将自己的数据写入磁盘而不是分配更多的虚拟内存来最小化虚拟内存的使用。然而,只有当应用程序的磁盘i/o比操作系统页面处理程序的磁盘i/o更高效时,这才有好处——这是一种不太可能的情况e天。

但是如果每个应用程序都可以管理自己的虚拟内存,那么操作系统上的负载难道不会更小吗?这使应用程序可以灵活地分配自己的虚拟内存。每个应用程序都有自己的虚拟机,正是因为操作系统管理真实内存,给每个应用程序提供了自己的私有片。如果允许应用程序管理真正的内存——它们会不断地覆盖彼此的内存,系统将简化为一台单任务计算机(非常丑陋的东西)。但是,如果每个应用程序都可以管理自己的虚拟内存,那么操作系统上的负载难道不会更小吗?这使应用程序可以灵活地分配自己的虚拟内存。每个应用程序都有自己的虚拟机,正是因为操作系统管理真实内存,使每个应用程序都有自己的专用片。如果允许应用程序管理虚拟内存真正的内存本身——它们将不断地覆盖彼此的内存,系统将简化为一台单任务计算机(非常丑陋的东西)不,这永远不会是有利的。这就是操作系统的目的。不要反抗,你会损失100%的时间。不,这永远不会是有利的。这就是操作系统的目的。不要反抗,你会损失100%的时间。