进程调度
目录
操作系统对CPU资源的分配,采用的是时间模式 —— 不同的进程在不同的时间段去使用 CPU 资源
小故事
首先有个关于理解进程的小故事先听听:
我有个朋友,它是个身材非常好的私人健身教练,八块腹肌,大胸肌时不时抖两下,有一天接了三个需要健身的顾客,但是他这三个顾客都想每天来,这样的话他就只能,接待一个顾客,然后他灵机一动,给顾客每人都安排了个休息日,这样一来时间穿插开就赚三份钱.
以下是时间安排表
周一 :小王
周二:小刘
周三:小李
周四:小王
周五:小王
周六:小刘
周天:小李
这样一来每个人都可以接待,而且他们见不上面
这样就同时拥有了三个进程,以上就是进程的调度时间表,这就对应上了不同的进程不同的时间段去使用 CPU 资源 ,进程调度本质上就是这么回事
以下是关于进程的一些属性能帮助我们更深入的了解进程是怎么回事
进程的属性
-
进程状态
进程的状态主要有两个:
就绪态:该进程已经准备好了,随时可以上CPU执行
阻塞态:该进程暂时无法上CPU执行
-
进程优先级
进程之间的调度不一定是"公平"的,,有的要优先调度
-
进程的上下文
上下文,描述当前进程执行到哪里这样的"存档记录"
进程在离开CPU的时候就要把当前运行的中间结果"存档"
等到下次进程回来CPU上,在恢复之前的"存档",从上次的结果继续往后执行
具体到进程,所谓的上下文具体指的就是进程运行过程中,CPU内部的一系列寄存器(寄存器有很多种,最典型的就是保存当前进程执行的中间结果,包括进程运行到哪一条指令)的值
进程离开CPU就需要把这些寄存器的值保存到PCB的上下文字段中,这就叫存档
进程喜爱新回来CPU再把PCB中的值给恢复到寄存器中,这就是读档
-
进程的记账信息
统计了每个进程在CPU上执行了多久了
可以作为调度的参考依据
组织pcb:
操作系统往往是采用双向链表这样的结构来组织pcb
-
创建一个进程,就是创建一个链表的节点
-
销毁一个进程,就是把链表的节点给删除了
-
遍历进程列表,就是遍历链表