面试题答案
一键面试优先级调度算法基本概念
优先级调度算法是一种根据进程优先级来分配 CPU 资源的调度算法。具有较高优先级的进程会优先获得 CPU 执行权,以确保重要或紧急的任务能得到及时处理。优先级可以基于进程的类型(如系统进程优先级高于用户进程)、任务的紧急程度、资源需求等因素来确定。
简单场景下的实现
- 确定进程优先级:
- 静态优先级:在进程创建时就确定其优先级,且在进程运行过程中不再改变。例如,系统进程可设置较高的静态优先级,用户交互进程优先级次之,后台批处理进程优先级较低。可以根据进程的重要性和资源需求预先设定优先级值,如 0 - 100,值越大优先级越高。
- 动态优先级:进程的优先级会根据运行情况动态调整。比如,随着进程等待时间增加,适当提高其优先级,以避免长等待进程“饥饿”;或者根据进程已占用 CPU 时间,占用时间越长,优先级越低。
- 调度的具体流程:
- 初始化:创建一个进程就绪队列,用于存放所有就绪状态的进程。每个进程结构体中包含进程标识、优先级等信息。
- 新进程加入:当有新进程创建时,根据确定的优先级规则为其分配优先级,并将其插入到就绪队列合适位置。如果是基于优先级升序排列的队列,高优先级进程插入到队列头部附近;若是降序排列,则插入到队列尾部附近。
- 调度执行:调度器每次从就绪队列中选取优先级最高的进程(若存在相同优先级进程,可采用先来先服务等策略进一步选择),将 CPU 分配给该进程,使其进入运行状态。
- 进程状态改变:当运行中的进程时间片用完(如果采用时间片轮转与优先级调度结合的方式)、等待资源或完成任务时,其状态会发生改变。若等待资源,进程进入阻塞队列;若时间片用完,重新计算优先级(若采用动态优先级)后回到就绪队列;若完成任务则从系统中移除。调度器再次从就绪队列选取优先级最高的进程执行,如此循环。