上下文切换详解及进程调度

上下文切换详解

1、上下文切换的概念

上下文切换可以认为是内核(操作系统的核心)在 CPU 上对于进程(包括线程)进行以下的活动:
(1)挂起一个进程,将这个进程在 CPU 中的状态(上下文)存储于内存中的某处,
(2)在内存中检索下一个进程的上下文并将其在 CPU 的寄存器中恢复
(3)跳转到程序计数器所指向的位置(即跳转到进程被中断时的代码行),以恢复该进程。

上下文切换有时被描述为内核挂起 CPU 当前执行的进程,然后继续执行之前挂起的众多进程中的某一个(进程切换)。上下文切换要操作的信息是储存在PCB中,方便取用。上下文切换十分频繁,每秒进行很多次,所以要求我们的操作系统有实时性。实时性就是我们每一次操作时间控制在10ms以内。arm操作系统一般的平均时间位1.5ms。

2、何时发生上下文切换

  • 中断:当发生中断时,CPU会将发起中断请求的程序跟正在运行的程序进行上下文切换(简单的例子,你CPU正在进行某个运算,突然我鼠标发生点击,如果优先级过高的情况你就会立马执行鼠标点击的事件)
  • 多任务处理:多任务的情况,每个任务都有相应的时间片,因此会发生上下文切换。

进程调度

说完了上下文切换,我们说一下进程调度,进程调度有三种方式。

  • 先来先服务:这过程很简单,每次进程调度都选择的是最先入队列的作业,给处理机,进程运行完成之后才放弃处理机,作业调度是分配内存,创建进程。
  • 短作业优先:每次作业调度在就绪队列中找一个时间最短的作业,给他分配内存运行,进程调度就是给处理机。
  • 高优先级:谁的优先级高谁就先被调用。
    • 非抢占式优先权调度:就是等每个作业处理完成了,再在就绪队列中找一个优先级最高的作业执行。
    • 抢占式优先权调度:来了一个优先级比正在运行的程序还高的作业,CPU马上停止现在的作业而去执行优先权高的。
  • 高响应比优先:这种方法是(等待时间 + 服务时间)/ 服务时间 。这个比最高的时候,最先被调用,但是必须先计算相应比。

进程调度中还有几个情况会出现:

  • 优先级颠倒:低优先级拥有高优先级需要的资源(互斥锁),这个时候我们低优先级会比高优先级的作业先执行。

猜你喜欢

转载自blog.csdn.net/qq_45125250/article/details/114906034