在上下文切换期间保存了什么架构状态?


0

在上下文切换期间保存了什么架构状态?据我所知,节省的是以下内容

一组寄存器包括PC计数器TLB(如果没有刷新......)还有什么?记忆?(包含堆栈,堆,数据)......?它只是留在记忆中吗?

Answers:


0

内存/堆栈堆是进程地址空间的一部分,因此无需保存它们。是的,他们可以留在那里。每个进程在物理内存中都有自己的起始地址。

从用户的角度来看,进程似乎正在使用自己的全范围内存,从0x00000000开始(某些操作系统陷阱访问第一页0x00000000-0x00000fff以捕获空指针? - 对于这些有效启动是0x00001000)但是,MMU用页面表和所有好东西重新映射幕后的内存。因此,这就是如何将内存分配给用户空间进程,除非进程可以访问的内存总量(上限),否则进程甚至不知道或关心。

但是,堆栈指针确实需要保存,但这是寄存器的一部分。


0

取决于处理器,并通过推断,表示任务状态所需的内容。在某种程度上,还取决于操作系统。

在旧的原始(虚拟内存)Unix中,寄存器将被保存到内存中的固定位置,然后将整个用户内存写入磁盘并读入新的用户内存映像。(Unix“fork”只需简单完成跳过“读入”步骤。)当带有TLB的CPU可用时,这很快被虚拟交换方案所取代(“Berkley Unix”)。

在Burroughs风格的堆栈架构中,所有需要交换的(理论上)是堆栈指针和任务ID。内存寻址(原始版本)是通过“功能”和“段”,而不是使用TLB。

具有基于TLB的虚拟存储器的旧寄存器体系结构要求TLB(有时是高速缓存)至少在交换时无效,此外还要交换程序寄存器(包括IAR,条件代码等)。较新的基于TLB的架构以各种方式解决了这个问题,避免了刷新,因此相当快速的切换不需要重新加载所有内容。(因此,在多处理器系统上,任务通常被赋予给定处理器的“亲和力”,以最小化TLB /缓存重新加载的量。)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.