CPU虚拟化

进程创建

程序加载为进程

进程状态

简而言之,进程可以处于以下三种状态之一:

  • 运行 running : 在运行状态下,进程正在处理器上运行,这意味着它正在执行指令
  • 就绪 ready : 在就绪状态下,进程已准备好运行,但由于某种原因,操作系统选择不在此时运行(还没轮到它呢)
  • 阻塞 blocked : 在阻塞状态下,一个进程执行了某种操作,导致需要等待其他事件响应后才能运行。一个常见的例子是,当进程向磁盘发起I/O请求时,它会被阻塞,因此其他进程可以被调度。

进程-状态转换

进程调度

进程调度主要有两个指标:

  • 周转时间
  • 响应时间

现在假设有三个计算任务要处理,它们是通过三个不同的进程来完成的。假设只有一个CPU,此时从CPU开始工作到结束的时间差,我们称之为周转时间。对每个进程而言,首次运行时间和接收到计算任务的时间差为响应时间。

$$ T_{\text{周转时间}}=T_{\text{完成时间}}-T_{\text{到达时间}} $$

$$ T_{\text{响应时间}}=T_{\text{首次运行}}-T_{\text{到达时间}} $$

对不同的调度简单比较如下图:

不同调度的对比

归纳为:

  • 如果进程都没有IO,那么使用SJF,整体的运行时间好于采用轮转(上下文切换带来的性能损失),但是响应时间比轮转差。
  • 如果进程有IO,使用SJF,不仅整体运行时间长,而且响应时间也差。
最后修改:2020 年 12 月 15 日
如果觉得我的文章对你有用,请随意赞赏