进程调度
进程间的相互关系主要分为如下三种形式:
互斥 ——竞争同一资源而发生相互制约。诸多进程对同一资源进行访问,可以设置互斥。同步 ——协同完成一项任务,应该有同步机构对其执行协调,包括对资源的访问(锁)、通信。通信 ——交换信息
数据结构:通常分为以下四类用于对进程进行管理:
- 内存:内存表
- 设备:设备表
- 文件:文件表
- 进程:多个进程文件,每个文件记录进程实体及所用资源的列表(包括PCB)
进程调度的主要工作是
- 保存现场
- 挑选进程
- 恢复现场
进程调度的服务调度模型有:
- 先到先服务(FCFS)
- 短作业优先(SJF)
- 优先级调度算法(PSA)
- 高响应优先级调度算法(HRRN)(优先权=等待到服务完成的时间+要求服务时间)
- 轮转调度算法(RR):引入时间片概念。
Linux系统中的进程调度
调度方式:基本上采用“抢占式优先级”方式,继承了UNIX系统的以优先级为基础的调度
调度策略
SCHED_FIFO 适合于短实时进程SCHED_RR 对应“时间片轮转法”,适合于每次运行需要较长时间的实时进程。SCHED_OTHER 是传统的UNIX调度策略,适合于交互式的分时进程。- 系统中规定,实时进程的优先级高于其他类型进程的优先级。
- 当前进程调用系统调用nanosleep()或pause()
- 进程终止
- 在时钟中断处理程序执行过程中,发现当前进程连续运行的时间过长
- 当唤醒一个睡眠进程
- 一个进程通过执行系统调用来改变调度策略或者降低自身的优先级