操作系统CPU利用率计算及多道程序系统性能指标求解
Hey there, let's tackle these two OS questions step by step—they're fundamental concepts that are key to understanding how systems utilize resources.
CPU利用率衡量的是CPU用于实际工作的时间占总时间的比例,常见的计算方式有以下几种:
- 基于采样的统计方法:操作系统会定期(比如每10毫秒)对CPU状态进行快照,记录它是在运行进程、等待I/O还是处于空闲状态。利用率的计算公式为:
(总采样数 - 空闲采样数) / 总采样数 × 100%。我们常用的top、vmstat等工具,背后就是用这个逻辑来展示实时CPU使用率的。 - 基于进程累计时间的计算:每个进程都会记录两个核心时间值:
utime(用户态运行时间)和stime(内核态运行时间)。把所有活跃进程的这两个时间加总,再除以系统启动到当前的总运行时间,就能得到整体CPU利用率:CPU利用率 = (Σ(utime + stime) / 系统总运行时间) × 100% - 短窗口实时计算:针对特定的时间窗口(比如1秒),统计CPU处于忙碌状态的毫秒数,利用率就是
(忙碌毫秒数 / 窗口总毫秒数) × 100%。比如1秒内CPU忙了820毫秒,那利用率就是82%。
先明确题目条件:每个作业包含N个时长为T的周期,每个周期一半时间(T/2)用于计算,一半时间(T/2)用于I/O;采用简单轮转调度,且I/O操作可与CPU计算重叠。我们假设系统处于稳态——有足够多的作业持续进入系统,能让CPU和I/O设备保持忙碌。
CPU利用率
由于每个作业的计算时间和I/O时间各占一半,只要系统中有至少2个作业,CPU就能达到100%利用率:当一个作业完成计算进入I/O阶段时,另一个作业立刻接手CPU,完全没有空闲时间。
吞吐量
吞吐量指的是每时间周期T内完成的平均作业数。每个作业总共需要N × (T/2)的计算时间,而每T时间内CPU能提供完整的T时长计算资源,因此吞吐量为:
吞吐量 = T / (N × T/2) = 2/N
举个例子:如果N=2,每T时间能完成1个作业;如果N=4,每T时间能完成0.5个作业(也就是每2T时间完成1个)。
平均周转时间
周转时间是作业从提交到完成的总时长。在稳态轮转调度下,每个作业的计算阶段需要等待其他活跃作业轮流使用CPU后才能执行。假设系统的多道程序度为M(同时运行的作业数),平均周转时间的计算公式为:
平均周转时间 = T × ((N-1)×M + 2) / 2
如果取最小的有效多道程序度M=2(刚好能让CPU和I/O都不空闲),公式可以简化为:
平均周转时间 = N×T
这个结果很直观:每个作业的计算阶段和其他作业的I/O阶段完全重叠,完成N个周期的总时间刚好是N×T。
内容的提问来源于stack exchange,提问作者Matt Belle

