操作系统中的上下文切换

问题描述 投票:-1回答:1

大家好晚上我想知道如果在上下文切换期间新的上下文已经在其中一个寄存器中,或者它是否在内存中并且所有寄存器都被占用了会发生什么?

cpu
1个回答
0
投票

基本上,上下文切换是一种保存机器当前状态并用新机器替换它的方法。步骤模糊地像这样:

  • 进入特权模式,CPU可以访问系统/内核内存
  • 保存旧的程序计数器(现在我们知道任务切换事件发生时我们在哪里 - 可能是系统调用,也许是一个中断;基本上是运行过程被迫控制)
  • 保存当前寄存器状态(在堆栈上,或在一组特定的OS分配和管理的内存中)
  • 保存堆栈指针(如果架构有一个)
  • 通过将此进程使用的所有页面标记为符合驱逐条件(如果下一个任务或操作系统需要旧进程正在使用的主内存,将被复制到页面存储,然后保存),可以保存正在挂起的任务的内存信息内存映射到正确的地址空间;如果没有,它们可能会挂起并在任务重新获得控制时可用)

操作系统现在可以安全地做任何事情,因为保存了旧进程的瞬态,并且它的内存是安全的。也许它处理中断或执行系统调用。我们将跳过所有这些,只是做一个任务切换。

  • 为新任务设置内存(将主内存映射到新进程的虚拟内存;有些可能已经在主内存中,如果没有使用大量内存,或者它可能已被分页到外部存储器,在这种情况下它当程序试图引用它时,将通过“页面错误”加载 - 程序将以与上述相同的方式挂起,操作系统将在内存块中读取,并且操作系统将恢复该过程)
  • 从新进程的OS控制块或堆栈加载寄存器状态
  • 如果需要,加载堆栈指针
  • 退出特权模式
  • 分支到最后一个暂停程序计数器或新任务的入口点

关键是操作系统负责保存状态;它适合CPU架构管理此过程。寄存器不是“忙”,因为任务切换过程会保存它们并恢复它们。失去控制然后重新获得它的过程并不知道它失去了控制;它的世界状态得以无缝保存和恢复。

© www.soinside.com 2019 - 2024. All rights reserved.