A. 上下文切换 是两个进程之间的时间(即,使等待的进程进入执行状态,并将正在执行的进程发送到等待状态)。这种情况发生在多任务处理中。如果等待进程,操作系统必须将状态信息带入内存,并保存当前正在运行的进程的状态信息。
为了解决这个问题,我们希望记录交换过程的第一条和最后一条指令的时间戳。上下文切换时间是两个进程之间的差异。
让我们举个例子: 假设只有两个过程,P1和P2。 P1正在执行,P2正在等待执行。在某个时刻,操作系统必须交换P1和P2,让我们假设它发生在P1的第n条指令上。如果t(x,k)以微秒为单位指示进程x的第k条指令的时间戳,则上下文切换将取t(2,1)–t(1,n)。
另一个问题是,交换由操作系统的调度算法控制,可能有许多内核级线程也在进行上下文切换。其他进程可能会争夺CPU或处理中断的内核。用户无法控制这些无关的上下文切换。例如,如果在时间t(1,n)内核决定处理一个中断,那么上下文切换时间就会被夸大。
为了避免这些障碍,我们必须构建一个环境,以便在P1执行后,任务调度器立即选择P2运行。这可以通过构建数据通道来实现,例如P1和P2之间的管道。
也就是说,让P1作为初始发送方,P2作为接收方。最初,P2在等待数据令牌时被阻塞(休眠)。当P1执行时,它通过数据通道将数据令牌传递给P2,并立即尝试读取响应令牌。结果会出现上下文切换,任务计划程序必须选择另一个要运行的进程。由于P2现在处于“准备运行”状态,因此它是任务调度器选择执行的理想候选者。当P2运行时,P1和P2的角色被交换。P2现在充当发送方,P1充当被阻止的接收方。
总结——
- P2块等待来自P1的数据
- P1标记开始时间。
- P1向P2发送令牌。
- P1尝试从P2读取响应令牌。这会导致上下文切换。
- P2被调度并接收令牌。
- P2向P1发送响应令牌。
- P2尝试从P1读取响应令牌。这会导致上下文切换。
- P1被调度并接收令牌。
- 时间标志着P1的结束。
关键是数据令牌的传递会导致上下文切换。让Td和Tr分别表示发送和接收数据令牌所需的时间,让Tc表示在上下文切换中花费的时间量。在步骤2,P1记录令牌传递的时间戳,在步骤9,P1记录响应的时间戳。这些事件之间经过的时间T可表示为:
T = 2 * (Td + Tc + Tr)
这个公式是由以下事件引起的:
- P1发送令牌(3)
- CPU上下文开关(4)
- P2收到它(5)
- P2然后发送响应令牌(6)
- CPU上下文开关(7)
- 最后,P1收到它(8)
GATE CS实践问题-