点击文末小卡片免费获取软件测试全套资料资料在手涨薪更快1. 平均负载平均负载是指单位时间内系统处于可运行状态和不可中断状态的平均进程数也就是平均活跃进程数它和CPU使用率并没有直接关系。可运行状态的进程是指正在使用CPU或者等待CPU资源的进程。当我们使用类似于ps命令时这些进程通常以R状态Running或Runnable显示。不可中断状态的进程是指处于内核态关键流程中的进程这些流程无法被中断。例如最常见的情况是等待硬件设备的I/O响应。这类进程在ps命令中以D状态Uninterruptible Sleep也称为Disk Sleep显示。举个例子当一个进程正在进行磁盘读写操作时为了保证数据的一致性在收到磁盘响应之前该进程不能被其他进程或中断打断。此时该进程处于不可中断状态。如果该进程被打断可能会导致磁盘数据与进程数据不一致的问题。因此不可中断状态实际上是系统对进程和硬件设备的一种保护机制。从理想角度来看每个CPU都刚好运行一个进程将充分利用每个CPU的资源。例如当平均负载为3时对于只有3个CPU的系统而言表示所有CPU都被完全占用。对于4个CPU的系统而言意味着CPU有50%的空闲时间。而对于只有1个CPU的系统而言意味着有一半的进程无法竞争到CPU资源。所以可总结如下平均负载高于CPU核心数时通常意味着系统负载较重。这可能是因为有更多的进程在竞争CPU资源导致CPU使用率较高。如果平均负载远高于CPU核心数可能会导致进程排队等待CPU造成性能下降。平均负载低于或接近CPU核心数时通常表示系统负载较轻。这意味着CPU使用率相对较低系统有足够的处理能力来处理当前的工作负载。2. 平均负载与CPU使用率之间关系先说一个小栗子假设一个系统有4个CPU核心如果平均负载是2表示平均活跃进程数为2。这并不直接告诉我们每个CPU核心的使用率是多少。可能有两个CPU核心各自运行一个进程而其他两个CPU核心处于空闲状态也可能有一个CPU核心运行两个进程而其他三个CPU核心处于空闲状态。因此平均负载为2时并不能确定具体的CPU使用率。总结起来CPU密集型进程当系统中有大量的CPU密集型进程正在执行它们会消耗大量的CPU资源导致CPU使用率升高。同时这些进程也会占用系统的可运行状态使得平均负载也升高。在这种情况下CPU使用率和平均负载是一致的都反映了系统的高负载状态。I/O密集型进程如果系统中有大量的I/O密集型进程它们可能会频繁地进行I/O操作并等待I/O响应。在等待I/O的过程中进程不会占用CPU资源因此CPU使用率可能相对较低。然而这些等待I/O的进程会进入不可中断状态导致平均负载升高。因此在这种情况下平均负载可能比CPU使用率更高。大量等待CPU的进程调度当系统中存在大量的进程在等待CPU调度时它们可能会竞争有限的CPU资源。这会导致CPU使用率的升高因为CPU正在不断地被分配给各个进程。同时这些等待CPU调度的进程会占用系统的可运行状态使得平均负载升高。因此在这种情况下CPU使用率和平均负载可能都比较高。3. CPU上下文切换CPU上下文切换是指操作系统在多任务环境下将当前正在运行的进程或线程的上下文信息保存起来并加载下一个即将运行的进程或线程的上下文信息的过程。上下文是指进程或线程在执行过程中的状态信息包括程序计数器记录下一条要执行的指令地址、寄存器的值、堆栈指针、打开的文件、内存映射等。上下文切换的目的是在多个进程或线程之间共享CPU时间使得每个进程或线程都能得到适当的执行时间。当一个进程或线程的时间片时间片是操作系统分配给每个进程或线程的执行时间段用完或发生某种事件如I/O操作完成时操作系统会进行上下文切换具体过程如下保存当前进程或线程的上下文信息操作系统会将当前进程或线程的上下文信息保存到内存中包括寄存器的值、程序计数器等。加载下一个进程或线程的上下文信息操作系统从就绪队列中选择下一个即将执行的进程或线程并将其上下文信息从内存中加载到寄存器和其他相关硬件中。切换到下一个进程或线程的执行操作系统将控制权转移到下一个进程或线程使其开始执行。这个过程可能包括更新页表、设置内存映射、打开文件等操作。上下文切换是一个开销较大的操作因为它涉及到大量的数据保存和加载操作。因此减少上下文切换的次数对系统性能至关重要。一些常见的导致上下文切换的情况包括抢占式调度、I/O操作、中断处理和多核处理器上的并发执行等。3-1 进程上下文切换进程上下文切换是操作系统在多任务环境下从一个进程切换到另一个进程时所进行的上下文切换过程。它涉及保存和加载进程的上下文信息以便在重新调度时能够继续执行进程。进程上下文切换的过程如下保存当前进程的上下文当操作系统需要切换到另一个进程时它会先保存当前正在运行进程的上下文信息。这包括保存进程的程序计数器、寄存器的值、堆栈指针、打开的文件、内存映射等。这些信息通常保存在进程的控制块Process Control BlockPCB中PCB是操作系统用来管理进程的数据结构。加载下一个进程的上下文操作系统从就绪队列中选择下一个即将执行的进程并加载该进程之前保存的上下文信息。这包括将进程的程序计数器、寄存器的值、堆栈指针等从其PCB中加载到相应的寄存器和硬件中。切换到下一个进程的执行一旦新进程的上下文信息加载完毕操作系统会将控制权转移到该进程使其开始执行。这可能涉及更新页表、设置内存映射、打开文件等操作以确保新进程能够正确地运行。进程上下文切换是一个开销较大的操作因为它涉及大量的数据保存和加载。上下文切换的频繁发生会导致系统性能下降。因此优化上下文切换的效率对于提高系统的多任务处理能力至关重要。进程上下文切换通常发生在以下情况下抢占式调度当操作系统采用抢占式调度策略时一个优先级更高的进程可能会抢占正在执行的进程的CPU时间从而导致上下文切换。I/O操作当进程需要进行I/O操作时例如等待磁盘读写完成操作系统会将该进程切换出去让其他进程继续执行。一旦I/O操作完成操作系统会将该进程的上下文切换回来使其继续执行。时间片用完操作系统为每个进程分配一定的时间片当一个进程的时间片用完时操作系统会将其上下文保存并切换到下一个进程以保证公平分配CPU时间。进程间通信在进程间通信的过程中操作系统可能需要进行上下文切换以便让不同的进程能够相互交互和共享数据。进程在系统资源不足比如内存不足时要等到资源满足后才可以运行这个时候进程也会被挂起并由系统调度其他进程运行。当进程通过睡眠函数 sleep 这样的方法将自己主动挂起时自然也会重新调度。3-2 线程上下文切换线程和进程最大的区别在于线程是调度的基本单位而进程是资源拥有的基本单位。在内核中的任务调度过程中调度对象实际上是线程而进程只是为线程提供了虚拟内存、全局变量等资源。因此可以将线程视为进程的子任务。当进程包含多个线程时这些线程共享相同的虚拟内存和全局变量等资源。在上下文切换时这些资源是不需要被修改的。然而线程也有自己的私有数据例如栈和寄存器等。在上下文切换时需要保存和加载线程的私有数据。因此线程的上下文切换可以分为两种情况前后两个线程属于不同的进程在这种情况下由于资源不共享线程的上下文切换过程与进程的上下文切换相似。前后两个线程属于同一个进程在这种情况下由于虚拟内存是共享的上下文切换时虚拟内存等资源保持不变只需要切换线程的私有数据和寄存器等非共享数据。可以看出同一个进程内的线程切换相比多进程间的切换消耗更少的资源。这也是使用多线程代替多进程的一个优势。3-3 中断上下文切换中断上下文切换是指当计算机系统发生硬件中断或异常时操作系统需要从当前正在执行的上下文中切换到中断处理程序的上下文并在中断处理程序执行完毕后再切换回原来的上下文。中断上下文切换是操作系统为了响应中断事件而进行的一种上下文切换过程。下面是中断上下文切换的详细过程1、中断触发计算机系统中的硬件设备如时钟、键盘、磁盘等或异常条件如除零错误、页错误等触发了中断信号通知操作系统需要进行相应的处理。这会导致当前正在执行的指令被暂停。2、保存当前上下文在响应中断前操作系统会保存当前正在执行的任务的上下文信息。这包括保存程序计数器、寄存器的值、堆栈指针等。这些信息通常保存在被中断任务的内核栈或专用的中断栈中。3、切换到中断处理程序一旦当前上下文保存完毕操作系统会切换到中断处理程序的上下文。中断处理程序是预先定义好的用于处理特定中断的代码段。操作系统会根据中断类型和优先级选择相应的中断处理程序。4、中断处理程序执行操作系统开始执行中断处理程序处理中断事件。中断处理程序根据中断类型进行相应的处理可能包括读取输入设备的数据、处理异常错误、更新系统状态等。5、恢复原上下文一旦中断处理程序执行完毕操作系统会从中断处理程序的上下文中恢复原来被中断任务的上下文。它会将之前保存的程序计数器、寄存器的值、堆栈指针等信息恢复到相应的寄存器和硬件中。6、继续执行被中断任务一旦原上下文恢复完毕操作系统会继续执行被中断的任务。它会从中断发生时的位置继续执行指令使任务在中断处理后继续正常运行。7、与进程上下文切换不同中断上下文切换并不牵涉到进程的用户态User Mode。当发生中断时即使当前正在执行的进程处于用户态操作系统也不需要保存和恢复该进程的虚拟内存、全局变量等用户态资源。中断上下文只包括内核态Kernel Mode中断服务程序执行所必需的状态。这些状态包括CPU寄存器的值、内核堆栈的指针、硬件中断参数等。这些信息足够操作系统在中断处理程序中进行必要的操作而不需要涉及进程的用户态资源。换句话说中断上下文切换仅涉及到内核态的数据和状态因为中断处理程序运行在内核态中。它是为了响应硬件中断而发生的目的是尽快处理中断事件并返回到被中断的任务。这种区分是为了提高中断响应的效率。通过仅保存和恢复与中断处理相关的内核态数据可以减少上下文切换的开销从而更快地响应中断并恢复正常的执行。中断上下文切换的过程需要保存和恢复大量的上下文信息因此会引入一定的开销。优化中断上下文切换的方式是减少保存和恢复的上下文信息量以提高系统的响应速度。最后感谢每一个认真阅读我文章的人礼尚往来总是要有的虽然不是什么很值钱的东西如果你用得到的话可以直接拿走这些资料对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴我走过了最艰难的路程希望也能帮助到你凡事要趁早特别是技术行业一定要提升技术功底。