面试题答案
一键面试进程从其他状态转变为就绪态的常见情况
- 等待资源释放:进程因等待某种资源(如I/O设备、内存等)而处于阻塞状态,当所需资源被释放时,进程就从阻塞态转变为就绪态。例如,一个进程请求读取磁盘文件数据,由于磁盘I/O操作较慢,该进程进入阻塞态等待数据返回。当磁盘完成数据读取,将数据返回给进程时,进程就进入就绪态,等待CPU调度执行。
- 睡眠到期:进程通过系统调用(如sleep函数)主动进入睡眠状态,当睡眠时间结束,进程从睡眠态转变为就绪态。例如,一个进程执行
sleep(5)
函数,让自身睡眠5秒,5秒时间一到,进程就从睡眠态进入就绪态,等待CPU分配时间片继续执行。 - 被其他进程唤醒:某些进程之间存在依赖关系,一个进程可能等待另一个进程的某个事件发生。当该事件发生时,等待的进程被唤醒,从阻塞态转变为就绪态。比如,进程A等待进程B计算出某个结果,进程B计算完成后向进程A发送信号,进程A收到信号后从阻塞态进入就绪态。
在简单多任务操作系统环境中,进程因资源分配变化而进入就绪态的示例
假设一个简单的多任务操作系统,有进程A、进程B和进程C,系统中有一个打印机资源。进程A正在使用打印机进行打印任务,处于运行态,进程B因等待打印机资源而处于阻塞态,进程C处于就绪态等待CPU调度。
当进程A完成打印任务,释放了打印机资源。此时,操作系统检测到打印机资源已可用,将进程B从阻塞态转变为就绪态。因为进程B所需的打印机资源已经得到满足,现在可以等待CPU调度,获取时间片后就可以继续执行与打印相关的后续操作。