Operating system 如果程序的大小大于虚拟内存,会发生什么情况?

Operating system 如果程序的大小大于虚拟内存,会发生什么情况?,operating-system,Operating System,我最近在一次电话采访中遇到了这个问题: 如果程序的大小大于虚拟内存的大小,会发生什么情况 它是否会被禁止运行,或者操作系统如何处理它? 是的,即使总大小大于地址空间,也可以运行程序 大于可用地址空间的程序存在了很长时间。常用的方法是将程序分成适合地址空间的块,然后按顺序/按需加载其他块 如果你的播放器可以播放一个文件,它将播放一个文件。不确定它与操作系统的关系 是的,你绝对可以。覆盖是使用的机制。CPU只引入将在主存中执行且当前需要的部分代码。代码的其余部分驻留在辅助内存中,需要时可以携带。

我最近在一次电话采访中遇到了这个问题:

如果程序的大小大于虚拟内存的大小,会发生什么情况

它是否会被禁止运行,或者操作系统如何处理它?

  • 是的,即使总大小大于地址空间,也可以运行程序
大于可用地址空间的程序存在了很长时间。常用的方法是将程序分成适合地址空间的块,然后按顺序/按需加载其他块

  • 如果你的播放器可以播放一个文件,它将播放一个文件。不确定它与操作系统的关系

  • 是的,你绝对可以。覆盖是使用的机制。CPU只引入将在主存中执行且当前需要的部分代码。代码的其余部分驻留在辅助内存中,需要时可以携带。

    Bluray电影与程序不同。Bluray电影不会一次全部加载,而是按顺序读取然后显示。在MSDOS中,这样的程序被称为overlaid。至于这部电影,有一个与操作系统的连接。如果您想为整个文件分配5GB的RAM,您可能无法做到这一点,因为32位操作系统中的内存分配API自然只接受32位大小。@AlexeyFrunze我认为覆盖是在进程不适合主内存时使用的一种机制(如果我理解正确,这是一种与交换到磁盘类似的机制)。如果您仔细观察,OP会询问如果进程大于虚拟内存,即如果进程实际上不适合该机器的地址空间,会发生什么情况。@cnicutar我认为没有太大区别。在DOS中,没有虚拟内存,只有一个内存地址空间,如果一个程序太大,那么它在所有方面都太大了,它不适合于地址空间,也不适合于备份它的内存。应该注意的是,在虚拟内存出现之前,覆盖非常“流行”,但现在应该很少了,而且只可能用于按不同阶段排序的程序中。(有一个关于IBM OS/360第一次启动的故事——它实际上是第一次运行的,但人们发现它使用了如此多的覆盖层,以至于每分钟只能读取5张卡。)