操作系统是否锁定了计算机内的所有内存

时间:2015-05-01 10:04:40

标签: c++ memory-management

我想知道是否例如。 Windows 完全锁定了所有可用的ram,这样一些真正无聊的人手上有太多时间就无法开始从另一个进程中删除内存(不知何故)。

问题起源于在C ++中使用delete函数时发生的事情(C ++告诉操作系统操作系统现在可以释放内存以进行覆盖,或者是C ++告诉硬件解锁内存)然后我想到了在硬件级别与RAM连接而创建的特定硬件,并开始删除内存块以获得它的乐趣。也许是一个黑客。

我的想法是: Windows 内存管理程序被告知内存可以再次写入,对吧?但这是否也意味着内存地址仍设置为锁定在硬件级别,以便内存只能由 windows 而不是其他操作系统控制。或者它是否像硬件级别的狂野西部......如果 Windows 不锁定内存,其他任何东西都可以使用现在免费的部分。

我想真正的问题是,操作系统可以触发的内存地址是否存在硬件级别锁定...以便内存已经锁定并且无法重新分配?

5 个答案:

答案 0 :(得分:3)

  

我想知道Windows是否完全锁定了所有可用的ram

与任何其他操作系统一样,Windows使用所有可用的RAM。

  

所以一些真正无聊的人手上有太多时间无法开始从另一个进程中删除内存(不知何故)。

Non sequitur。这样做是因为它应该做的事情。它是一个操作系统,它应该控制所有的硬件资源。

  

问题源于在C ++中将内存标记为删除时发生的事情。

我不知道在C ++中将内存标记为删除内容'表示但是如果您引用delete运算符或free()函数,它们通常不会向操作系统释放内存。

  

我的想法是:Windows内存管理程序被告知内存可以再次写入,对吗?

错了,见上文。

  

但这是否意味着内存地址仍设置为锁定在硬件级别,以便内存只能由Windows而不是其他操作系统控制。

还有什么其他操作系统?除非您处于虚拟环境中,否则没有其他操作系统,即使您是,虚拟环境也会将所有指定的RAM控制到客户操作系统。

  

或者它是否像硬件级别的狂野西部......如果Windows不锁定内存,其他任何东西都可以使用现在免费的部分。

还有其他什么?

  

我想真正的问题是,操作系统可以触发的内存地址是否存在硬件级别锁定?

通常,是的,存在访问每个内存段所需的特权级别的硬件定义。例如,操作系统自身的内存不受应用程序的影响,应用程序进程彼此免疫:但这些都是高度依赖硬件的。

你的问题没有多大意义。

答案 1 :(得分:3)

您正在寻找的概念是映射,而不是*锁定。

内存只是那里。操作系统没有做任何特别的事情。

所做的是将它的块映射到单个进程中。每个进程只能看到映射到其地址空间的内存。尝试访问任何其他地址只会导致访问冲突(或Unix上的分段错误)。那些地址什么都没有。不是“锁定记忆”,只是没有

当操作系统决定(或当进程请求它时)时,可以再次从给定进程中取消映射内存页面。

虽然没有锁定。内存不是由映射到的进程“拥有”的。同一个内存可以同时映射到多个进程的地址空间。这是在流程之间交换数据的一种方式。

因此操作系统不会“锁定”或控制内存的所有权。它只是控制任何特定进程是否可以看到给定的内存块。

答案 2 :(得分:1)

并不是那么简单,Windows也不是开源的,所以它的确无法发布。但是,用户空间代码中的所有地址都是虚拟的并且受MMU保护 - 一个进程中的地址X与另一个进程中的地址X没有相同的物理内存,一个进程无法访问另一个进程的地址。尝试访问进程地址空间之外的内存将导致MMU异常。

我相信当Windows启动进程时,它有一个初始堆分配,从中进行动态内存分配。删除动态分配的块只是将其返回到进程的现有堆(而不是OS)。如果当前堆的内存不足,则会从操作系统请求额外的内存来扩展它。

内存可以以受控方式在进程之间共享 - 在Windows中,这是通过内存映射文件完成的,并使用与交换文件相同的虚拟内存机制来模拟物理上可用的更多内存。 / p>

我认为不是在SO上提出问题,而是先做一些基础研究,例如从MSDN上的About Memory Management开始。

关于访问内存的外部硬件,可以在处理器之间实现共享内存(这并不常见;例如,请参阅here),但这不是"野生西"这样做的机制是通过操作系统实现的。

即使在传统的PC架构上,许多设备也可以通过DMA直接访问内存,作为在没有CPU开销的情况下执行I / O的方法。同样,这是由操作系统控制的,而不是“狂野西部”#34;但是错误的设备驱动程序可能会导致系统崩溃 - 这就是微软为驱动程序提供测试和审批流程的原因。

答案 3 :(得分:0)

不,没有。 RAM由软件管理,RAM无法自行锁定。

答案 4 :(得分:0)

你问错了问题。内存上没有硬件锁。诀窍是virtual memory management,它只为进程提供可控制的内存量。操作系统控制所有可用内存,这是它的工作,而进程只能看到操作系统给它们的内存。