操作系统之CPU调度与上下文切换
CPU调度:
定义: CPU调度是操作系统中决定哪个进程或任务将在何时获得CPU使用权的过程。
调度算法: 1、先进先出(FCFS):按进程到达的顺序进行调度。 2、最短任务优先(SJF):选择执行时间最短的进程进行调度。 3、优先级调度:根据进程的优先级进行调度。 4、时间片轮转:将CPU时间划分为固定长度的量子,并按照某种原则为每个进程分配一个量子。
调度方式: 1、非抢占式:一旦CPU被分配给一个进程,该进程将一直运行,直到其完成或因为某些事件(如I/O请求)而被阻塞。 2、抢占式:CPU可以被分配给多个进程,并且可以在任何时候从一个进程切换到另一个进程。
上下文切换:
定义: 上下文切换是操作系统在多个进程或线程之间切换CPU控制的过程,涉及保存当前正在执行的进程或线程的状态,并加载另一个进程或线程的状态。
类型: 1、进程上下文切换:涉及虚拟内存、栈、全局变量等用户空间资源以及内核堆栈、寄存器等内核空间状态的保存和恢复。 2、线程上下文切换:如果线程属于同一个进程,则共享虚拟内存和全局变量等资源不需要修改,只需切换线程的私有数据、寄存器等不共享的数据。 3、中断上下文切换:只包括内核态中断服务程序执行所必需的状态,如CPU寄存器、内核堆栈、硬件中断参数等。
触发因素: 1、时间片耗尽:进程的时间片用完,被系统挂起,切换到其他进程。 2、I/O操作:进程等待I/O操作时,会被挂起,操作系统切换到其他进程。 3、优先级变化:高优先级进程抢占低优先级进程时,发生上下文切换。 4、硬件中断:硬件事件打断进程的正常执行,转而执行中断处理程序。
影响:过多的上下文切换会消耗CPU时间,在寄存器、内核栈以及虚拟内存等数据的保存和恢复上,缩短进程真正运行的时间,导致系统性能下降。