Operating system 操作系统是否在上下文切换中保存内存值?

Operating system 操作系统是否在上下文切换中保存内存值?,operating-system,scheduling,context-switch,context-switching,Operating System,Scheduling,Context Switch,Context Switching,我有一个关于在上下文切换中保存哪些数据的问题。 我已经搜索过了,但是所有的链接都是关于注册的 我的问题是操作系统是否也保存进程的内存值 假设一个进程定义了一个从Ram的地址0x80000开始的数组。 当发生上下文切换时,该数组将发生什么变化? 也许新进程会覆盖内存中的0x80000地址,当旧进程继续工作时,它会丢失阵列 任何人都可以解释?一般来说,操作系统不会在上下文切换中保存内存。它只是更改寄存器值。旧进程的内存一直保留在那里,直到系统需要它。如果发生这种情况,内存将被调出 在旧的交换时代,是

我有一个关于在上下文切换中保存哪些数据的问题。 我已经搜索过了,但是所有的链接都是关于注册的

我的问题是操作系统是否也保存进程的内存值

假设一个进程定义了一个从Ram的地址0x80000开始的数组。 当发生上下文切换时,该数组将发生什么变化? 也许新进程会覆盖内存中的0x80000地址,当旧进程继续工作时,它会丢失阵列


任何人都可以解释?

一般来说,操作系统不会在上下文切换中保存内存。它只是更改寄存器值。旧进程的内存一直保留在那里,直到系统需要它。如果发生这种情况,内存将被调出


在旧的交换时代,是的,当新进程进入时,内存经常被保存。

一般来说,操作系统不会在上下文切换中保存内存。它只是更改寄存器值。旧进程的内存一直保留在那里,直到系统需要它。如果发生这种情况,内存将被调出


在旧的交换时代,是的,当新进程进入时,内存经常被保存。

这是非常广泛的,因为它依赖于系统。但是,例如,如果您在桌面windows/linux/macos上,进程的内存映射是虚拟的,当您以某种方式更改上下文时,如何更改映射取决于mmu和其他芯片/系统设计。这可能很简单,因为进程获得不同的processid,并且mmu使用该进程id定义物理内存0x80000指向什么位置,当然在这种情况下,在上下文交换期间,您可以保存/保留进程id以及一些寄存器,并恢复它们,但您肯定不会制作该进程所需的第二个内存副本使用,我们会发现,即使是在这个网页上输入文本,速度也会非常慢……我理解你的答案,但还有一个问题没有解决。如果新进程写入旧进程数组保存的物理地址,会发生什么情况?内存是共享的,可能运气不好,新进程会覆盖同一内存位置中的旧进程数组。你是说每个进程都有一个单独的物理内存部分,其他进程无权进入该部分?取决于操作系统。你的问题非常模糊,因为有太多不同的内存实现了如此多不同的系统和如此多的答案。但是,当您在x86上谈论windows或linux等时,是的,每个人都受到保护,不受其他人的保护,否则就没有保护。这是非常广泛的,因为它依赖于系统。但是,例如,如果您在桌面windows/linux/macos上,进程的内存映射是虚拟的,当您以某种方式更改上下文时,如何更改映射取决于mmu和其他芯片/系统设计。这可能很简单,因为进程获得不同的processid,并且mmu使用该进程id定义物理内存0x80000指向什么位置,当然在这种情况下,在上下文交换期间,您可以保存/保留进程id以及一些寄存器,并恢复它们,但您肯定不会制作该进程所需的第二个内存副本使用,我们会发现,即使是在这个网页上输入文本,速度也会非常慢……我理解你的答案,但还有一个问题没有解决。如果新进程写入旧进程数组保存的物理地址,会发生什么情况?内存是共享的,可能运气不好,新进程会覆盖同一内存位置中的旧进程数组。你是说每个进程都有一个单独的物理内存部分,其他进程无权进入该部分?取决于操作系统。你的问题非常模糊,因为有太多不同的内存实现了如此多不同的系统和如此多的答案。但是当你在x86上谈论windows或linux等东西时,是的,每个人都受到保护,不受其他人的保护,否则就没有保护了。谢谢你的回答。你的意思是一个进程的内存不会被另一个进程修改,每个进程都有自己的内存部分?每个进程都有自己的用户地址空间,不能被另一个进程修改,除非用户空间的页面通过共享内存机制映射到多个进程。谢谢你的回答。你的意思是一个进程的内存不会被另一个进程修改,而每个进程都有自己的内存部分?每个进程都有自己的用户地址空间,不能被另一个进程修改,除非用户空间的页面通过共享内存机制映射到多个进程。