加载2025年3月17日 | 阅读 7 分钟 在 Unix 系统中,系统负载是指计算机执行的计算工作量。通常,我们使用术语平均负载,这意味着特定时期的系统负载。计算平均负载通常有三种形式:过去一分钟、过去五分钟或过去十五分钟的负载。 计算 Unix 系统负载 Unix 系统在内核中返回三个平均负载数的无量纲指标。第一个、第二个和第三个分别代表过去一分钟、过去五分钟和过去十五分钟的负载平均值。如果用户想检查平均负载,可以通过在 Unix shell 中执行 uptime 命令来实现。 uptime 命令如下 - 用户可以通过读取 /proc/loadavg 文件来计算或访问 Linux 系统的平均负载。用户可以使用 w 和 top 命令来显示相同的三个平均负载结果。对于空闲的计算机,负载数为 0。当计算机空闲时,只执行空闲进程,该进程不包含在负载数的计数中。正在等待资源或当前使用资源的每个进程都会添加到系统中。就绪队列或运行队列中的每个进程会使负载数加 1。当进程终止时,负载数会减 1。
- 大多数 UNIX 系统包括处于运行或可运行状态的进程。可运行进程是那些等待 CPU 的进程。这些进程通常在等待磁盘活动。在 Linux 中,处于不可中断睡眠状态的进程也包含在负载数中。如果几个进程被 I/O 阻塞(即 I/O 系统繁忙或停滞),这将导致不同的结果。例如,负载数还会加上那些因 NFS 服务器故障或媒体设备速度太慢而阻塞的进程。在这种情况下,结果将是负载数增加,但这并不代表 CPU 使用率的增加,而是为用户提供关于他们将等待多长时间的 ধারণা。
- 系统将计算平均负载,作为负载数的指数衰减或加权平均值。系统返回自系统启动以来的三个平均负载值。系统也相应地返回这三个值。衰减是指数级的。对于每一分钟、五分钟和十五分钟,衰减都是指数级的。
- 由于一分钟的平均负载包含过去一分钟总负载的 63%。另外 37% 是自系统启动以来(不包括过去一分钟)的负载。对于计算 5 分钟和 10 分钟的负载。比例与 63% 和 37% 相同。也就是说,对于五分钟,它从过去 5 分钟取 63%,从系统启动以来(不包括过去 5 分钟)取 37%,15 分钟也是如此。
负载解释- 对于由 CPU 限制的单 CPU 系统,用户可能会认为平均负载是在特定时期计算系统资源利用率后的值。但在多 CPU 的情况下,用户可以通过将负载除以总处理器数来获得可比较的值。
- 例如,如果您提供“1.73 0.60 7.98”这样的值,那么一个人可能会认为单 CPU 系统的平均负载意味着在过去一分钟内,系统平均占用了 73% 的资源。有 1.73 个可运行进程,这意味着单 CPU 系统平均有 0.73 个进程需要等待执行。在过去五分钟内,计算机平均有 40% 的时间是空闲的,而在过去十五分钟内,计算机平均超负荷 698%。
- 在过去的 5 分钟内,CPU 平均有 40% 的时间处于空闲状态。这意味着平均有 6.98 个进程必须等待在 CPU 系统上轮到它们执行。
- 如果系统速度快 1.73 倍,用户也可以推断系统可以处理所有计划在上一分钟完成的进程而无需等待。
- 但是,如果系统有多个处理单元,例如有四个 CPU 且平均负载为 3.73,这意味着有 3.73 个可运行进程,每个进程将被调度到一个处理单元。
在 UNIX 系统中,线程的对待方式取决于平均负载。在某些系统中,线程被视为进程。这使得计算平均负载更容易。这意味着对于每个等待资源运行的线程,负载数将增加 1。但在实现 M:N 线程的系统中。它的工作方式不同。它在计算负载时只计算一次进程。它不受系统中线程数量的影响。它只计算当前在用户线程调度器中到内核的线程。负载数可能会因进程设置的并发级别而异。在 Linux 系统中,线程被单独计算,每次都会向负载数加 1。 CPU 负载与 CPU 利用率Ferrari 等人对几种负载指标进行了比较研究。他根据 CPU 队列长度得出了一些关于 CPU 负载的结论。他得出结论,与 CPU 利用率相比,CPU 队列长度更好。当系统负载很高时,它更好。系统将以接近 100% 的容量工作,这使得计算利用率的精确负载水平变得困难。 相比之下,CPU 队列长度可以更好地告诉用户 CPU 的负载量。例如,如果有两个系统,一个有 3 个进程,另一个有 6 个进程排在队列中。它们的 CPU 利用率都将接近 100%,但它们是不同的。 加载程序在计算机系统中,加载程序是操作系统中用于将程序和库加载到系统中的组件。加载程序负责将它们放置在内存中并使它们准备好执行。它是程序开始过程的初始阶段。 加载程序加载程序的步骤要加载程序,系统需要执行以下步骤 - 第一步是将存储程序指令的可执行文件的内容映射到内存。然后,它可能需要执行一些准备任务来为运行程序准备可执行文件。加载完成后,操作系统将控制权传递给加载的程序代码。
- 所有需要程序的操作系统都需要加载程序来执行上述任务。只有一些专门的计算系统不需要加载程序。它们有一组固定的专用程序。在嵌入式系统中,没有加载程序来加载程序;相反,它们直接从 ROM 或类似的设备执行程序的代码。
加载操作系统 - 操作系统是一个特殊的程序,它为另一个程序的执行提供了一个平台。操作系统的加载是启动过程的一部分。它也需要加载自身。
- 要加载操作系统,机器应该有一个专门的引导加载程序。在大多数操作系统中,加载程序位于程序的内存中。
- 尽管在某些操作系统中,加载程序可能位于一个可分页的内存区域。但这仅适用于支持虚拟内存的操作系统。
- 在支持虚拟内存的操作系统中,加载程序可能不会将可执行文件的组件复制到系统的实际内存中;相反,它会在子系统中声明一个虚拟内存。
- 虚拟内存映射到分配用于存储程序运行代码的内存部分。它还存储相关可执行文件的组件。
- 然后,虚拟内存会被告知需要填充的内存页面,如果按需请求。如果程序执行并遇到未分配内存的区域,内存也会被填充。
- 这意味着程序的代码部分会在程序执行并占用该部分内存后填充到内存中。可能尚未实现的代码将永远不会再次实现。
|