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