OS 是否锁定计算机内的全部内存
Does an OS lock the entire amount of ram inside your computer
我想知道是否例如。 Windows 完全锁定所有可用的 ram,以便一些真正无聊的人有太多时间无法开始从另一个进程中删除内存(以某种方式)。
问题源于在 C++ 中使用 delete
函数时发生了什么(是 C++ 告诉 OS OS 现在可以释放内存用于覆盖还是 C++告诉硬件解锁内存)...然后我想到了创建特定硬件以在硬件级别与 RAM 接口并开始删除内存块以获得乐趣。也许是黑客。
我的想法是: Windows 内存管理程序被告知内存可以再次写入,对吧?但这是否也意味着内存地址仍然设置为锁定在硬件级别,以便内存只能由 windows 而不是另一个 [=36] 控制=].或者它就像硬件级别的狂野西部...如果 Windows 没有锁定内存,其他任何东西都可以使用现在空闲的部分。
我想真正的问题是,是否存在操作系统可以触发的内存地址硬件级锁定...以便内存自行锁定并且无法重新分配?
不,没有。
RAM由软件管理,RAM不能自我锁定。
I was wondering if Windows completely lock all the available ram
Windows,像任何其他操作系统一样,使用所有可用的 RAM。
so that some really bored person with too much time on their hands cannot start deleting memory from another process (somehow).
不合逻辑。 它这样做是因为它应该这样做。它是一个操作系统,应该控制所有的硬件资源。
The question originated from what was happening when you mark memory for deletion in C++.
我不知道'mark memory for deletion in C++'是什么意思,但是如果你指的是delete
操作符,或者free()
函数,它们一般不会释放内存给操作系统.
My thoughts were: The Windows memory management program is told memory is free to be written to again, right?
错了,见上文。
But does that also mean that the memory address is still set to locked at a hardware level so that the memory can only be taken control of by windows rather than another OS.
还有什么OS?除非您在虚拟环境中,否则没有其他 OS,即使您在虚拟环境中,虚拟环境也会将所有指定 RAM 的控制权交给来宾操作系统。
Or is it like the wild west down at hardware level... If Windows isn't locking memory, anything else can use the part that is now free.
还有什么吗?
I guess the real question is, is there a hardware level lock on memory addresses that operating systems can trigger?
一般来说是的,有硬件定义访问每个内存段需要什么特权级别。例如,操作系统自身的内存不受应用程序进程的影响,应用程序进程之间也相互免疫:但这都是高度依赖于硬件的。
你的问题没有多大意义。
你问错问题了。内存上没有硬件锁之类的东西。诀窍是 virtual memory management ,它使进程只能使用受控数量的内存。 OS 控制所有可用内存,这是它的工作,进程只能看到 OS 提供给它们的内存。
不是那么简单,而且Windows不是开源的,所以它的具体功能可能不会发布。然而,用户 space 代码中的所有地址都是虚拟的并且受 MMU 保护 - 一个进程中的地址 X 与另一个进程中的地址 X 引用的物理内存不同,一个进程无法访问另一个进程的地址 X。尝试访问进程地址 space 之外的内存将导致 MMU 异常。
我相信当 Windows 启动一个进程时,它有一个初始堆分配,动态内存分配从那里发生。删除一个动态分配的块只需 returns 到进程的现有堆(而不是 OS)。如果当前堆内存不足,则向OS请求额外的内存来扩展它。
内存可以在进程之间以受控方式共享 - 在 Windows 中,这是通过内存映射文件完成的,并使用与交换文件相同的虚拟内存机制来模拟更多内存物理可用。
我认为与其问关于 SO 的问题,不如先做一些基础研究,例如从 MSDN 上的 About Memory Management 开始。
关于访问内存的外部硬件,可以在处理器之间实现共享内存(这并不罕见;例如参见 [=11=]),但这不是 "wild-west" 这样做的机制是通过 OS 实现的。
即使在传统的 PC 架构上,许多设备也直接通过 DMA 访问内存作为执行 I/O 的方法而没有 CPU 开销。同样,这由 OS 而不是 "wild west" 控制,但错误的设备驱动程序可能会导致您的系统崩溃 - 这就是 Microsoft 对驱动程序进行测试和批准的原因。
您要找的概念是映射,而不是*锁定。
记忆就在那里。 OS 对此没有什么特别之处。
它所做的是将它的块映射到单独的进程中。每个进程只能看到映射到其地址 space 的内存。尝试访问任何其他地址只会导致访问冲突(或 Unix 上的分段错误)。这些地址什么都没有。不是 "locked memory",只是 nothing.
并且当 OS 决定(或当进程请求它时),可以再次从给定进程取消映射内存页。
虽然它没有锁定。内存不是 "owned" 映射到的进程。并且同一块内存可以同时映射到多个进程的地址spaces。这是在进程之间交换数据的一种方式。
因此 OS 不会 "lock" 或控制内存的所有权。它只是控制给定的内存块是否对任何特定进程可见。
我想知道是否例如。 Windows 完全锁定所有可用的 ram,以便一些真正无聊的人有太多时间无法开始从另一个进程中删除内存(以某种方式)。
问题源于在 C++ 中使用 delete
函数时发生了什么(是 C++ 告诉 OS OS 现在可以释放内存用于覆盖还是 C++告诉硬件解锁内存)...然后我想到了创建特定硬件以在硬件级别与 RAM 接口并开始删除内存块以获得乐趣。也许是黑客。
我的想法是: Windows 内存管理程序被告知内存可以再次写入,对吧?但这是否也意味着内存地址仍然设置为锁定在硬件级别,以便内存只能由 windows 而不是另一个 [=36] 控制=].或者它就像硬件级别的狂野西部...如果 Windows 没有锁定内存,其他任何东西都可以使用现在空闲的部分。
我想真正的问题是,是否存在操作系统可以触发的内存地址硬件级锁定...以便内存自行锁定并且无法重新分配?
不,没有。 RAM由软件管理,RAM不能自我锁定。
I was wondering if Windows completely lock all the available ram
Windows,像任何其他操作系统一样,使用所有可用的 RAM。
so that some really bored person with too much time on their hands cannot start deleting memory from another process (somehow).
不合逻辑。 它这样做是因为它应该这样做。它是一个操作系统,应该控制所有的硬件资源。
The question originated from what was happening when you mark memory for deletion in C++.
我不知道'mark memory for deletion in C++'是什么意思,但是如果你指的是delete
操作符,或者free()
函数,它们一般不会释放内存给操作系统.
My thoughts were: The Windows memory management program is told memory is free to be written to again, right?
错了,见上文。
But does that also mean that the memory address is still set to locked at a hardware level so that the memory can only be taken control of by windows rather than another OS.
还有什么OS?除非您在虚拟环境中,否则没有其他 OS,即使您在虚拟环境中,虚拟环境也会将所有指定 RAM 的控制权交给来宾操作系统。
Or is it like the wild west down at hardware level... If Windows isn't locking memory, anything else can use the part that is now free.
还有什么吗?
I guess the real question is, is there a hardware level lock on memory addresses that operating systems can trigger?
一般来说是的,有硬件定义访问每个内存段需要什么特权级别。例如,操作系统自身的内存不受应用程序进程的影响,应用程序进程之间也相互免疫:但这都是高度依赖于硬件的。
你的问题没有多大意义。
你问错问题了。内存上没有硬件锁之类的东西。诀窍是 virtual memory management ,它使进程只能使用受控数量的内存。 OS 控制所有可用内存,这是它的工作,进程只能看到 OS 提供给它们的内存。
不是那么简单,而且Windows不是开源的,所以它的具体功能可能不会发布。然而,用户 space 代码中的所有地址都是虚拟的并且受 MMU 保护 - 一个进程中的地址 X 与另一个进程中的地址 X 引用的物理内存不同,一个进程无法访问另一个进程的地址 X。尝试访问进程地址 space 之外的内存将导致 MMU 异常。
我相信当 Windows 启动一个进程时,它有一个初始堆分配,动态内存分配从那里发生。删除一个动态分配的块只需 returns 到进程的现有堆(而不是 OS)。如果当前堆内存不足,则向OS请求额外的内存来扩展它。
内存可以在进程之间以受控方式共享 - 在 Windows 中,这是通过内存映射文件完成的,并使用与交换文件相同的虚拟内存机制来模拟更多内存物理可用。
我认为与其问关于 SO 的问题,不如先做一些基础研究,例如从 MSDN 上的 About Memory Management 开始。
关于访问内存的外部硬件,可以在处理器之间实现共享内存(这并不罕见;例如参见 [=11=]),但这不是 "wild-west" 这样做的机制是通过 OS 实现的。
即使在传统的 PC 架构上,许多设备也直接通过 DMA 访问内存作为执行 I/O 的方法而没有 CPU 开销。同样,这由 OS 而不是 "wild west" 控制,但错误的设备驱动程序可能会导致您的系统崩溃 - 这就是 Microsoft 对驱动程序进行测试和批准的原因。
您要找的概念是映射,而不是*锁定。
记忆就在那里。 OS 对此没有什么特别之处。
它所做的是将它的块映射到单独的进程中。每个进程只能看到映射到其地址 space 的内存。尝试访问任何其他地址只会导致访问冲突(或 Unix 上的分段错误)。这些地址什么都没有。不是 "locked memory",只是 nothing.
并且当 OS 决定(或当进程请求它时),可以再次从给定进程取消映射内存页。
虽然它没有锁定。内存不是 "owned" 映射到的进程。并且同一块内存可以同时映射到多个进程的地址spaces。这是在进程之间交换数据的一种方式。
因此 OS 不会 "lock" 或控制内存的所有权。它只是控制给定的内存块是否对任何特定进程可见。