面试题答案
一键面试运行态、就绪态和阻塞态转换条件及过程
- 运行态 -> 就绪态
- 条件:时间片用完或有更高优先级的进程进入就绪队列。
- 过程:当进程的时间片用完,调度器会暂停当前进程的执行,将其状态从运行态变为就绪态,并把它放入就绪队列。若有更高优先级进程进入就绪队列,调度器可能会抢占当前运行进程的CPU,将其置为就绪态。
- 运行态 -> 阻塞态
- 条件:进程等待某种事件(如I/O操作完成、信号量获取等)发生。
- 过程:当进程发起I/O请求(如读取文件),由于I/O操作速度慢,进程不能继续执行,于是操作系统将该进程状态改为阻塞态,并把它放入阻塞队列,此时进程让出CPU。
- 阻塞态 -> 就绪态
- 条件:所等待的事件发生(如I/O操作完成、信号量可用等)。
- 过程:当阻塞进程等待的事件完成,比如I/O操作结束,操作系统会将该进程从阻塞队列移到就绪队列,其状态变为就绪态,等待CPU调度执行。
- 就绪态 -> 运行态
- 条件:调度器选中该就绪态进程。
- 过程:调度器从就绪队列中选择一个进程,为其分配CPU资源,该进程状态变为运行态,开始在CPU上执行。
实际场景举例
- 运行态 -> 就绪态
- 场景:在分时操作系统中,多个用户进程共享CPU。如系统中有三个进程A、B、C,进程A正在运行,时间片到后,调度器暂停A的执行,将其放入就绪队列,此时A从运行态变为就绪态,调度器可能接着调度B进入运行态。
- 运行态 -> 阻塞态
- 场景:一个网络爬虫进程正在运行,当它发起下载网页的请求时,需要等待网络响应。此时进程进入阻塞态,让出CPU,操作系统可调度其他就绪态进程运行。
- 阻塞态 -> 就绪态
- 场景:上述网络爬虫进程等待下载网页,当网络数据到达,下载完成,该进程所等待的事件发生,操作系统将其从阻塞队列移到就绪队列,变为就绪态等待CPU调度继续处理下载的数据。
- 就绪态 -> 运行态
- 场景:系统启动后,多个后台服务进程处于就绪态等待调度。当调度器根据调度算法(如先来先服务)选中其中一个进程,该进程就从就绪态变为运行态,开始执行服务任务。