CPU虚拟化
进程创建
进程状态
简而言之,进程可以处于以下三种状态之一:
- 运行 running : 在运行状态下,进程正在处理器上运行,这意味着它正在执行指令
- 就绪 ready : 在就绪状态下,进程已准备好运行,但由于某种原因,操作系统选择不在此时运行(还没轮到它呢)
- 阻塞 blocked : 在阻塞状态下,一个进程执行了某种操作,导致需要等待其他事件响应后才能运行。一个常见的例子是,当进程向磁盘发起I/O请求时,它会被阻塞,因此其他进程可以被调度。
进程调度
进程调度主要有两个指标:
- 周转时间
- 响应时间
现在假设有三个计算任务要处理,它们是通过三个不同的进程来完成的。假设只有一个CPU,此时从CPU开始工作到结束的时间差,我们称之为周转时间。对每个进程而言,首次运行时间和接收到计算任务的时间差为响应时间。
$$ T_{\text{周转时间}}=T_{\text{完成时间}}-T_{\text{到达时间}} $$
$$ T_{\text{响应时间}}=T_{\text{首次运行}}-T_{\text{到达时间}} $$
对不同的调度简单比较如下图:
归纳为:
- 如果进程都没有IO,那么使用SJF,整体的运行时间好于采用轮转(上下文切换带来的性能损失),但是响应时间比轮转差。
- 如果进程有IO,使用SJF,不仅整体运行时间长,而且响应时间也差。