第五讲 进程调度

基本概念

多道程序设计的目标是,无论何时都有进程运行,从而最大化CPU利用率。它会有多个进程或线程同时竞争CPU。 分时系统的目的是在进程之间快速切换CPU,以便用户在程序运行时能与其交互。为了满足这些目标,进程调度器选择一个可用进程到CPU上执行。单处理器系统不会具有多个正在运行的进程。如果有多个进程,那么其余的需要等待CPU空闲并能重新调度。

CPU-I/O执行周期

CPU的调度成功取决于观察到的进程属性: 进程执行包括周期进行CPU执行I/O等待。进程在这两个状态之间不断交替。进程执行从CPU执行开始,之后I/O执行;接着另一个CPU执行,接着另一个I/O执行;等等。最终,最后的CPU执行通过系统请求结束,终止执行。

CPU密集型进程-I/O密集型进程

图a中的进程花费了绝大多数时间在计算上,称为CPU密集型

图b中的进程则在等待I/0上花费了绝大多数时间,称为I/O密集型

典型的CPU密集型进程具有较长时间的CPU 集中使用和较小频度的I/O等待。

I/O密集型进程具有较短时间的CPU集中使用和频繁的1/0等待。它是I/O类的,因为这种进程在I/O请求之间较少进行计算,并不是因为它们有特别长的I/O请求。在I/O开始后无论处理数据是多还是少,它们都花费同样的时间提出硬件请求读取磁盘块。

随着CPU变得越来越快,更多的进程倾向为I/O密集型。因为CPU的改进比磁盘的改进快得多,结果是,未来对I/O密集型进程的调度处理似乎更为重要。这里的基本思想是,如果需要运行I/O密集型进程,那么就应该让它尽快得到机会,以便发出磁盘请求并保持磁盘始终忙碌。

何时调度

出现以下情形需要调度。

  • 1、在创建一个新进程之后,需要决定是运行父进程还是运行子进程。由于这两种进程都处于就绪状态,所以这是一种正常的调度決策,可以任意決定,也就是说,调度程序可以合法选择先运行父进程还是先运行子进程。

  • 2、在一个进程退出时必须做出调度决策。一个进程不再运行(因为它不再存在),所以必须从就绪进程集中选择另外某个进程。如果没有就绪的进程,通常会运行一个系统提供的空闲进程。

  • 3、当一个进程阻塞在I/O和信号量上或由于其他原因阻塞时,必须选择另一个进程运行。有时,阻塞的原因会成为选择的因素。例如,如果A是一个重要的进程,并正在等待B退出临界区,让B随后运行将会使得B退出临界区,从而可以让A运行。

  • 4、在一个I/O中断发生时,必须做出调度决策。如果中断来自I/O设备,而该设备现在已经完成了上作,某些被阻塞的等待该I/O的进程就成为可运行的就绪进程了。

非抢占式调度算法挑选一个进程,然后让该进程运行直至被阻塞(阻塞在I/O上或等待另一个进程),或者直到该进程自动释放CPU。即使该进程运行了若干个小时,它也不会被强迫挂起。这样做的结果是,在时钟中断发生时不会进行调度。在处理完时钟中断后,如果没有更高优先级的进程等待到时,则被中断的进程会继续执行。

抢占式调度算法挑选一个进程,并且让该进程运行某个固定时段的最大值。如果在该时段结束时,该进程仍在运行,它就被挂起,而调度程序挑选另一个进程运行(如果存在一个就绪进程)。进行抢占式调度处理,需要在时间间隔的末端发生时钟中断,以便把CPU控制返回给调度程序。如果没有可用的时钟,那么非抢占式调度就是惟一的选择了。

调度准则

参考资料

第8章-调度

相关推荐
小宇子2B10 小时前
四、从 write(1, "hello", 5) 到 ksys_write() —— sys_call_table 怎么路由的
操作系统
小宇子2B10 小时前
一、printf("hello") 怎么变成 write(1, "hello", 5) —— libc 的 stdout 缓冲机制
操作系统
小宇子2B6 天前
一个 pthread_mutex_lock() 到底锁了什么——从用户态 CAS 到内核调度
操作系统
小宇子2B7 天前
多线程 malloc 为什么会变慢——glibc 的 arena 到 bins 全景
操作系统
fakerth11 天前
【OpenHarmony】communication_ipc模块
操作系统·openharmony
Coisinier12 天前
RHCE中shell脚本基础(磁盘剩余空间监控,Web 服务状态检查,curl 访问 Web 服务并返回状态)
linux·运维·服务器·前端·nginx·操作系统
小宇子2B13 天前
free 完再 malloc 同样大小,为什么常拿回刚还回去的那块?
操作系统
触底反弹15 天前
拷个 .exe 到新电脑就跑不起来?你缺的不是文件,是对链接的理解
c++·windows·操作系统
杊页15 天前
第一板块:Android 系统基石与运行原理 | 第二篇:Android 编译、打包与安装机制
android·操作系统
壮Sir不壮15 天前
GO语言——GMP调度模型
linux·开发语言·golang·go·操作系统·线程·协程