在几本书和网站上,虚拟内存管理的一个原因是它只允许将部分程序加载到RAM中,因此可以更有效地使用RAM。
1)为什么我们需要虚拟内存管理才能加载部分程序?为什么我们不能使用物理地址加载部分程序?
2)除了分离过程的不同部分(堆栈,堆等)的安全原因之外'记忆到各个物理位置,我真的不知道虚拟内存有什么其他好处?
3)为什么重要的是这个过程认为地址是连续的(由虚拟地址提供),而实际上它们是不连续的?
编辑:我知道虚拟内存允许更多内存被视为RAM的明显原因。
答案 0 :(得分:0)
1)为什么我们需要虚拟内存管理才能加载部分内容 程序?为什么我们不能使用物理加载程序的一部分 地址?
嗯,你显然知道程序的大小可以从几KB到几GB甚至更多。但是,由于我们对主内存(即成本问题)有一定的限制,因此大于RAM大小的整个程序不能一次性加载。因此,为了达到预期的效果,科学家(计算机科学家)开发了一种方法virtual memory
。它有助于实现
a)首先space equal to size of some portion of hard-disk(not total),but the major part that would easily accomodate parts of running program
。比方说,如果正在运行的程序的大小超过RAM的大小,那么程序有点被切割成段(不是真的),只调用容易适合内存的相关部分,后续代码按地址按地址调用按顺序或按指令调用!
2)超出分离不同部分的安全原因 (堆栈,堆栈等)进程的内存进入各种物理层 地点,我真的没有看到虚拟的其他好处 存储器?
堆,堆栈等的分离。用于存储有时运行的多种操作。 They all are different data-structures and hence they will be storing possibly different program's values or, even if similar program's values, then also distinct instruction sequence's address
!比如,堆栈将存储递归调用的返回地址(调用地址),而堆将指向当前执行程序的代码!
此外,它不是具有此存储方案的虚拟内存,但它实际上适合主内存。此外,还有几个堆的部分,完全执行不同的功能!此外,我已经提到了虚拟内存的好处 - 有助于同时运行多个程序,优化缓存,使用paging
进行寻址,segmentation
等。
3)为什么重要的是该过程认为地址是连续的 (虚拟地址提供)实际上它们是 不连续的
世界上会更好if there had been counting like 1,2,3,4,5,etc. which we are familiar or had it started like 1,5,2,4,3, etc. even though knowing the true pattern rejecting the choice to render it discontinuous?
嗯,至少我已经选择了模式选项来执行任何任务。物理(主)内存的情况类似!物理内存呈现确切的地址,并且它以不连续的方式清楚地获取地址 - 有点混合。
但是,等等,哇,我们有一个像virtual memory
这样的机制导致actual discontinuous memory locations
形成一个固定的regular/continuous memory location
!虚拟内存使用分页,分段使工作相同,但让我们更容易理解。此外,由于分页中的相对索引和分段 - 地址/内存位置看起来是连续的,但实际地址始终确定了分页方案或分段的起始地址!因此,virtual-memory
呈现就好像我们正在使用连续的内存位置。不是好/好!
答案 1 :(得分:0)
使用虚拟内存超过严格的物理内存有很多好处,其中一些已经列出了。基本上它允许你的程序只使用内存而不必担心它来自哪里或者其他什么可能竞争它。它使内存看起来是平坦和连续的,即使它分布在物理内存的各个部分和磁盘上。
1)为什么我们需要虚拟内存管理才能加载部分内容 程序?为什么我们不能使用物理加载程序的一部分 地址?
您可以尝试使用纯粹的物理地址,但如果没有足够大的单个块可用,该怎么办?使用虚拟地址,您可以桥接物理RAM的各个部分,并使它们显示为一个大块。您还可以在内存中移动内容,而不会中断可能会发生这种情况的流程。
2)超出分离不同部分的安全原因 (进程的堆栈,堆栈等)'记忆中的各种物理 地点,我真的不知道虚拟的其他好处 存储器?
它还有助于防止内存过度分散。使一个进程使用的内存与另一个进程使用的内存隔离更容易。
3)为什么重要的是该过程认为地址是连续的 (虚拟地址提供)实际上它们是 不连续的
尝试迭代在两个不连续的内存部分之间分割的数组,然后再问一遍。或者为某些串行通信分配缓冲区,或者软件期望单块内存的任何次数。
答案 2 :(得分:0)
1)为什么我们需要虚拟内存管理才能加载部分程序?为什么我们不能使用物理地址加载部分程序?
我们中的一些人已经足够老了,可以记住带有8MB内存的32位系统。即使压缩小图像文件也会超出系统的物理内存。
随着系统内存和存储合并,虚拟内存的分页方面可能会在将来消失。
2)除了将进程内存的不同部分(堆栈,堆等)分离到各种物理位置的安全性原因之外,我真的看不出虚拟内存有什么其他好处?
见#1。程序所需的内存量可能超过可用的物理内存。
也就是说,主要的安全原因是将各种进程和系统地址空间分开。堆栈,堆,代码的任何分离通常是为了方便和错误检测。
优点包括:
3)为什么重要的是这个过程认为地址是连续的(由虚拟地址提供),而实际上它们是不连续的?
我认为你指的是虚拟地址。这只是方便的问题。使它们不连续是没有意义的。