调度是指在多道程序设计系统中,也就是说有多个进程处于就绪态而(或线程)同时竞争cpu(只有一个)时,必须选择一个进程运行。怎么选择?用调度算法去选。
一、基本概念
1.1进程切换的代价: 用户态转到内核态 保存当前进程状态。内存映像保存,运行调度算法选择新进程,将新进程的内存映射重装入MMU,最后新进程开始运行。注意:进程切换使内存高速缓存失效,强迫内存动态装入两次(进入内核一次,离开内核一次。这里我不太明白。)
这一切都说明并不是单位时间内进程切换越多越好,反而很差。
1.2进程行为: 几乎所有进程都是I/O请求与计算交替执行,什么是I/O操作:当一个进程由于等待外部设备工作完而阻塞。
计算密集型:一进程花费大多时间在计算上
I/O密集型:一进城在等待I/O上花费大多时间
随着cpu的速度在不停变快,现在进程更多是I/O密集型,那么,调度程序要尽可能的让I/O密集型进程运行,以便让I/O请求发出让磁盘始终忙碌。
1.3何时调度:
- 父进程创建子进程时,两进程都处于就绪态,需要选择运行哪一个
- 一个进程退出时,挑选一个。若没有,则运行系统提供的空闲进程
- 一进程zuse在I/O操作和信号量上或因其他原因阻塞
- I/O中断发生时,做出决策,I/O设备发出中断完成工作,是让阻塞等待盖I/O的进程执行还是其他,调度算法决定
调度算法分类:硬件始终以某一频率发生周期性中断,每个时钟中断或者每k个时钟中断做出调度决策,可把调度算法分为抢占式与非抢占式。
非抢占式:挑选一个进程,直到运行至被阻塞,或者其自动释放cpu。即使运行了很长很长时间,也不会被强迫挂起,在时钟中断发生时也不调度。
抢占式:挑选一个进程运行某个固定时段的最大值。若时间段结束,还在运行,他被挂起,挑选一个进程运行。进行抢占式算法,必须在时间段末端发生时钟中断,以便把cpu让给调度程序。抢占式依赖好