操作系统:虚拟内存的大小是多少?

时间:2016-11-03 01:02:46

标签: memory operating-system virtual

LINK 1:If size of the physical memory is 2^32-1, then what is the size of virtual memory?

上面的链接给了我一个答案,但我仍然有一些疑问。 请回答这里发布的问题,这样我就不会感到困惑.....

1.Virtual memory is also called as Demand Paging whenever a page fault occurs 
  the operating system swaps the required page from the virtual memory. the virtual memory
  here mean the harddisk or secondary storage. So how much space can be allocated for a
  porcess in virutal memory? can this size(the space allocated for each process in the 
  Virtual memory) exceeds the size of our RAM size? i mean if our RAM is 4GB then what is 
  the maximum size of the virtual memory you can have for a process?can we have 4GB of 
  virtual memory for every process or can we have more than 4GB for every process?
   (if it needs)


2.is the Virtual memory size fixed or dynamic? How much space is allocated for this memory
  and in the above link it is told that 2^48 is the size of virtual memory in 64 bit machine
  why is it only 2^48 and how can once can say a number like that? 

谢谢

2 个答案:

答案 0 :(得分:0)

分页是将虚拟地址转换为物理地址的方式。这是通过页面表完成的。

在长模式(64位模式)下的x86上,页表允许48位虚拟地址空间(如2 ^ 48最大大小)。这种限制是由于x86的长模式页表的设计。分页一次从指针使用几个位来确定页表中下一步的位置。基本上,页表是一个相对浅的b树样式树,可以让你查找与虚拟地址对应的物理地址。

将虚拟地址转换为物理地址长模式页面表(对于小页面)首先从虚拟地址中提取9位,然后再提取9位,然后再提取9位,然后再提取9位以查找正确的页面,并使用低12用于查找正在访问的精确字节的位,总共48位。

(对于大页面和大页面,x86分别跳过分页的最后1和2步,找到大页面或大页面的地址,未使用的低21或30位用于查找其中的精确字节页)

虚拟地址空间不一定是动态的,具体取决于动态的含义。地址空间始终为48位(只要您不在模式之间切换,例如从长模式到保护模式并启用分页(即32位模式))。虚拟地址空间几乎总是稀疏的,因为在大多数规范(有效)地址中没有指出任何有用的地址。页表没有大多数地址的映射(对这些地址的访问会产生页面错误,在Linux上这些错误通常会像您熟悉和喜爱的SIGSEGV一样被反弹回用户空间。)

也就是说,虚拟内存可以是动态的,因为当发生页面错误时,内核可以映射到该页面。为了实现交换,操作系统将在磁盘上使用额外的空间,通过将不经常使用的页面写回磁盘,并懒洋洋地将页面拉回RAM,来给出更多RAM的错觉。

有趣的是,页面表没有限制阻止多次映射相同的物理页面。您可以构建一个可怕的页面表,每个虚拟地址指向完全相同的页面(这很疯狂),但可行。这意味着地址空间不一定稀疏,只是非常可能。 (请注意,这个页面表会很大。我确定有人已经完成了计算,但我的第一个猜测就是TB级)

答案 1 :(得分:0)

  

如果物理内存的大小是2 ^ 32-1,那么虚拟内存的大小是多少?

虚拟地址空间的大小与物理地址空间的大小无关。没有答案。

  

那么在虚拟记忆中可以为多孔分配多少空间?

这取决于硬件限制,系统参数和过程配额。

  

这个大小(为虚拟内存中的每个进程分配的空间)是否超过了我们的RAM大小?

是的,经常这样做。

  

我的意思是,如果我们的RAM是4GB,那么进程可以拥有的虚拟内存的最大大小是多少?

它可以是任何东西。公羊的大小无法控制。

  

我们可以为每个进程提供4GB的虚拟内存,还是每个进程可以有超过4GB的虚拟内存?

两个

  

虚拟内存大小是固定的还是动态的?

动态

  

为这个内存分配了多少空间,在上面的链接中,它被告知2 ^ 48是64位机器中虚拟内存的大小,为什么它只有2 ^ 48,怎么能说一次这样的数字呢? ?

这可能是特定处理器的硬件限制。