mapengpeng1999@163.com 操作系统4~处理机调度

2023-11-19

处理机调度

1.三级调度体系

1.处理机调度主要是对处理机运行时间进行分配,即:按照一定算法或策略,将处理机运行时间分配给各个并发进程,同时尽量提高处理机的使用效率。
2.现代操作系统中,按调度所实现的功能分3种类型,高级调度、中级调度和低级调度,它们一起构成三级调度体系。
3.低级调度是该体系中不可缺少的最基本调度。

1.1 高级调度

1. 高级调度(high-level scheduling)

又称作业调度/长程调度,它根据某种算法将外存上、处于后备作业队列中的若干作业调入内存,为作业分配所需资源并建立相应进程。
2. 作业分为若干个相对独立又互相关联的加工步骤,每个步骤称为一个作业步。每个作业步可对应一个或多个进程。

  1. 作业一般要经历提交、后备、执行、完成四个状态。高级调度的基本单位是作业,不是进程。

在这里插入图片描述

在这里插入图片描述

为管理和调度作业,系统为每个作业设置了一个作业控制块(JCB),它记录作业的相关信息。JCB是作业在系统中存在的标志,只有作业执行完或中途退出时,JCB才会撤消。同时,OS根据JCB中的信息,对作业进行调试与管理。 JCB记录了作业所需资源及资源使用情况,但资源的分配和释放由存储管理、设备管理程序完成。

在这里插入图片描述

作业调试算法:

  • 先来先服务:把最先提交的作业调入内存;
  • 短作业优先:把CPU运行时间最短的作业最先调入内存。
  • 最短剩余时间优先:剩余运行时间最短的作业优先调入内存。
    高级调度通常出现在需进行大量作业处理的批处理系统中,这类系统的设计目标是最大限度提高系统资源利用率和保持各种系统活动的充分并行。
    分时操作系统和实时操作系统中,终端用户作业被直接送入内存,一般不需要作业调度。

1.2 中级调度

​ 中级调度(middle-level scheduling)又称内存调度,它是进程在内存和外存之间的对换。
​ 引入中级调度目的是:内存空间非常紧张或CPU无法找到可执行就绪进程时,就把某些晢时不能运行的进程换到外存上去等待(挂起),释放出其所占用的内存资源给其它进程使用。当这些进程重新具备运行条件且内存空闲时,不规则重新调入内存并修改其状态。
​ 具有中级调度的系统中,进程除3个基本状态外,还具有静止就绪和静止阻塞两个状态。

在这里插入图片描述

1.3 低级调度

低级调度(low-level scheduling):又称 进程调度 / 短程调度 / 底层调度,它决定哪个就绪态进程获得处理机,即: 选择某个进程从就绪态变为执行态。
低级调度是三级调度中的最终调度,又称。在这级调度中真正实现了处理机的分配,是系统不可缺少的最基本调度。 在仅具有进程调度的系统中,调度队列模型如下图所示:

在这里插入图片描述

通常出现以下情况,进程调度将被激活:
(1)新进程建立后,由调度程序决定运行父进程还是子进程。
(2)运行状态的进程正常结束或这被强行终止。
(3)正在执行的进程,因某种原因被阻塞。
(4)分配给运行进程的时间片用完。
(5)抢占调度方式下,优先级更高的进程申请运行。
进程调度功能主要包括:
① 选择就绪进程
② 进程切换:中心工作是两个进程执行现场的切换。

1.4 三级调度关系

分级调度系统中,各级调度分别在不同的时机进行。一个用户作业,通常要经历高级调度、中级调度、低级调度,才能完成整个作业程序的运行。
在系统中,不同状态的进程,会加入不同的队列,以便于调度和管理。

作业进入系统时,加入作业后备队列;

内存中的就绪进程,形成就绪队列;

阻塞态进程,形成阻塞队列;

在外存中处于挂起态的进程,形成就绪挂起/阻塞挂起队列。

在这里插入图片描述

2.进程调度目标和调度方式

2.1 进程调度目标

通用调度目标:
(1)公平性:保证每个进程得到合理的CPU时间及执行速度。
(2)高效率:保证CPU充分利用,防止空闲等待。
(3)低响应时间:保证交互命令的及时响应和执行。
(4)高吞吐量:实现系统高吞吐量,缩短每个进程等待时间。
(5)特殊应用要求:保证优先运行实时进程及特殊应用程序。

操作系统类型不同,调度目标也不同:
(1)多道批处理OS
强调高效利用系统资源及高作业吞吐量。进程提交给CPU后,即不再与外部进行交互。系统按照调度策略,安排它们运行,直到所有进程完成为止。
(2)分时OS
更关心多个用户的公平性+及时响应性,不允许某个进程长时间占用CPU。分时系统多采用时间片轮转调度算法,或在此基础上改进的其他算法。
分时OS中,CPU在各进程间频繁切换,会增加系统时空开销。此类系统最关注的是交互性+各进程均衡性,对进程的执行效率和系统开销,往往要求并不苛刻。

(3)实时OS
必须保证实时进程的请求,得到及时响应,往往不考虑处理机的使用效率。实时系统采取的调度算法,最大特点是可抢占性。
(4)通用OS
通用OS中,对进程调度没有特殊限制和要求,选择进程调度算法时,主要追求CPU使用的公平性以及使用各类资源的均衡性。

2.2 进程调度方式

(1)非抢占方式(Nonpreemptive)

某进程一旦获得CPU使用时间,其他进程就不能中断它的执行,即使当前等待的进程优先级更高,直到执行态进程完成或发生某个事件主动放弃CPU,才能调度其他进程。
此调度方式下,引起进程调度常见原因有:

  • 执行态进程执行完毕或因某事件无法继续执行;
  • 执行态进程提出I/O请求而暂停;
  • 在进程通信或同步中执行了某种原语而主动放弃CPU使用权,如P原语、阻塞原语等。
    这种调度方式实现简单、系统开销小,适用于大多数批处理系统。但它难以满足实时任务的要求。

(2)抢占方式(Preemptive)
在进程并发执行中,如就绪进程中,某个进程优先级比当前执行态进程的优先级更高,则无论当前进程是否结束,系统允许高优先级进程抢占当前进程的CPU并立即执行。
抢占式调度可确保高优先级进程立即获得处理机。支持抢占式调度的系统中,一般抢占原则如下:
①优先权原则:就绪的高优先权进程,有权抢占低优先权进程的CPU。
② 短作业优先原则:就绪的短作业,有权抢占长作业的CPU。
③ 时间片原则:一个时间片用完后,系统重新进程调度。

3.调度算法评价准则

3.1 面向用户的评价准则

(1) 作业周转时间
作业周转时间:指从作业被提交给系统开始,到作业完成为止的这段时间间隔,该指标越短越好。
此指标由四部分组成:在外存后备队列中的等待时间;进程在就绪队列上等待调度的时间;进程在CPU上的执行时间;进程在等待I/O操作完成的时间。后三项在整个作业过程中可重复发生。
常采用多个作业的平均周转时间进行评价:

  • 平均周转时间:系统中所有作业的周转时间之和 / 作业个数
  • 带权周转时间:某作业的周转时间 / 在CPU上运行时间。
    (2) 响应时间
    指从进程输入第一个请求,到系统给出首次响应的时间间隔,响应时间越短越好。
    响应时间由三部分组成:进程请求传送到处理机的时间、处理机对请求信息进行处理的时间、响应信息回送到显示器显示的时间。
    第一、三项很难减少,但第二项可通过合理调度算法减少。

(3)截止时间
截止时间指用户或其他系统对运行进程可容忍的最大延迟时间。在实时系统中,通常用该准则衡量一个调度算法是否合格。实际系统评价中,主要考核开始截止时间和完成截止时间。
(4) 优先权准则
在批处理、分时和实时系统中选择调度算法时,为保证某些紧急作业得到及时处理,必须遵循优先权准则。因此,系统对不同进程设立优先级,高优先级进程优先获得处理机的使用权。

3.2 面向系统的评价准则

面向系统的调度指标有4个:
(1)系统吞吐量:单位时间内系统完成的进程数目,反映系统的最大处理能力。影响该指标因素有:进程平均服务时间、系统资源利用率、进程调度算法等。
(2)处理机利用率:CPU有效工作时间/CPU总的运行时间。
(3) 各类资源均衡利用:最好让不同类型、不同需求的进程搭配运行,使CPU及其它资源均衡利用。
(4) 调度算法实现准则:算法的有效性和易实现性。

4.典型进程调度算法

4.1 先来先服务调度算法

​ FCFS( First Come First Service)算法按进程就绪的先后顺序调度进程,越早到达的进程,越先执行。FCFS算法的优缺点:
​ ① 有利于长进程,不利于短进程,排在长进程后边的短进程往往等待的时间较长,导致其周转时间过长,没有体现出短进程优先原则。
​ ② 有利于处理机繁忙进程,不利于输入输出繁忙进程。
​ ③ 算法简单,易于实现,系统开销小。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4.2 短作业(进程)优先调度算法

1.短作业SJF(Shortest Job First)算法从后备队列中,选择一个或若干个估计运行时间最短的作业调入内存,并为它们创建进程运行。
2.短进程优先调度算法则从就绪队列中,选出一个估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直到进程结束。
3.如进程在执行过程中,因某事件而阻塞并放弃处理机时,系统重新调度其他短进程。

算法优缺点:
优点:照顾了短进程,缩短了短进程的等待时间,提高了系统的总体吞吐量。
缺点:对长进程不利,甚至会导致长进程长时间无法得到关注而使得系统整体性能下降;完全未考虑进程的紧迫程度,不能保证紧迫进程被及时处理;进程运行时间很难精确估计,短进程不一定能被优先调度。

在这里插入图片描述

在这里插入图片描述

4.3 最短剩余时间优先调度算法

​ 最短剩余时间优先调度算法(SRTF,Shortest Remaining Time First),采用抢占式调度策略。当新进程加入到就绪队列中时,如它需要的运行时间<当前运行的进程所需的剩余时间,则执行切换。
​ 这种算法能保证新的短作业一进入系统就能得到服务。但是要不断统计各进程的剩余时间且进程切换较为频繁,系统开销较大。

4.4 时间片轮转调度算法

1.时间片轮转算法(RR,Round Robin)依据公平服务的原则,将处理机的运行时间划分成等长的时间片,轮转式分配给各就绪进程使用。
2.采用此算法的系统中,所有就绪进程按照先来先服务的原则排成一个队列,每次调度时将处理机分派给队首进程。
3.如进程在一个时间片内没执行完,则调度程序强行将该进程中止,进程由执行态变为就绪态并把处理机分配给下一个就绪进程。
4.该算法能保证就绪队列中的所有进程在一给定的时间段内均能获得处理机运行。

时间片分配方式有两种:
① 一次性时间片。 调度程序每次调度时,不管进程上次占用CPU时时间片是否用完,都为进程重新分配一个时间片。
② 累计时间片。如进程占用CPU时没有使用完时间片就发生了进程切换,则剩余时间片将作为下次调度的时间片。只有当该进程累计使用完时间片后,调度程序才为它重新分配一个时间片。这样能保证每个进程严格按照调度程序分配的时间片使用CPU,更好地控制进程的执行速度。

在这里插入图片描述

在这里插入图片描述

4.5 优先级调度算法

​ 优先级调度算法(Priority Scheduling)为每个进程赋予一个整数,表示其优先级。就绪进程按照优先级的大小顺序排队,调度程序选择优先级最高的进程获得CPU。该算法常被用于批处理系统中。
​ 优先级调度算法可以是抢占式或非抢占式。抢占式中,一旦就绪队列中出现了更高优先级的进程,则调度程序就进行一次抢占调度。非抢占式中,只有当前进程阻塞、时间片用完或执行结束,才把CPU让给其它高优先级进程。
​ 优先级调度算法总体又分为:静态/动态优先级调度。
​ ① 静态优先级调度:进程优先级在创建时确定,在进程的整个运行期间都不改变。此类调度中优先级是个常数。

② 动态优先级调度:进程在创建时被赋予的优先级可随进程执行或等待时间的增加而改变,这可防止低优先级进程长期得不到运行。
优先级调度算法的主要优缺点:
① 调度灵活,能适应多种调度需求。优先级的分配决定了进程的等待时间,也影响到系统吞吐量,动态优先级更是增加了系统调度的灵活性。
② 进程优先级的划分,确定每个进程优先级比较困难。
③ 抢占式调度增加了系统开销。抢占式调度增加了调度程序的执行频率,也增加了进程切换次数,加大了系统开销。

在这里插入图片描述

在这里插入图片描述

4.6 高响应比优先调度算法

一个作业或进程的响应比R定义为:
R = 响应时间/需运行时间
=(等待时间+需运行时间)/ 需运行时间
= I + 等待时间 / 需运行时间
HRRF调度程序开始调度时,首先计算各个后备作业或各个就绪进程的响应比 ,然后选择值最大的作业或进程。
OS每隔固定时间,会计算并修改所有进程的响应比R。如作业等待时间相同,则进程的运行时间越短,R越大,因而此算法有利于短作业。

​ 当执行时间相同时,进程等待时间越长,R越大,因而此算法体现了FCFS。
​ 对于长作业,作业的响应时间随等待时间增加而加大,因此此算法也照顾了长作业,避免长作业长时间无法获得CPU。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4.7 多级反馈队列调度算法

多级反馈队列调度算法(MFQ,Multilevel Feedback Queue)综合了时间片轮转调度算法及优先级调度算法,并加以改进。

​ 该算法中设置多个调度队列,并为每个队列赋予不同的优先级和时间片。当新进程到达后,先放入优先级最高的队列中,按FCFS原则排队等待,若被调度程序选中则按时间片轮转算法被调度执行。当轮到它执行时,如它能在规定时间片内完成则撤离系统,如在规定时间片内未完成,调度程序就将它放入第二级队列的尾部……,如此下去,当它降到最低优先级队列后,便在该队列中按时间片流转算法运行,不再队列转换。
时间片的大小,与队列优先级成反比。第一级队列优先级最高,时间片最小。
调度时,仅当第一级队列空闲时,才调度第二级队列中的进程,依此类推….

在这里插入图片描述

在这里插入图片描述

5.线程调度算法

​ 支持线程技术的OS中,存在两个层面的并发活动:进程并发和线程并发,在此系统中,线程是低级调度的基本单位。

5.1 用户级线程调度

​ 用户级线程是在用户态下创建的,系统内核并不知道线程的存在。因此,系统内核只为进程服务,从就绪进程队列中选中一个进程,并分配给它一个CPU时间片。该进程内的线程调度程序,决定进程内哪个线程运行。
​ 假定获得时间片的线程是A1,因并发执行的多个线程不存在时钟中断,故A1执行时不受时钟中断干扰。如A1用完了进程A的时间片但未完成,系统内核会调度另一个进程执行。当进程A再次获得时间片时,线程A1恢复运行,如此反复直到A1完成。

在这里插入图片描述

5.2 核心级线程调度

在支持线程技术的系统中,内核直接调度线程。线程调度时,内核不考虑该线程属于哪个进程。
被选中的线程获得一个时间片,如它执行时间超过了此时间片,则它被系统强制挂起。
如线程在给定时间片内阻塞,内核线程调度程序就调度另一个线程运行。后者和前者可能属于或不属于同一个进程。

在这里插入图片描述

6.实时调度算法

6.1 实时调度目标和所需必要信息

1.在实时系统中,每个实时任务都有一个时间约束要求。实时调度(real-time scheduling)目标就是:合理安排这些任务的执行次序,使之满足各实时任务的时间约束要求。
2.通常,一个特定任务与一个截止时间相关联。截止时间包括:开始截止时间(任务在某时间以前,必须开始执行)、完成截止时间(任务在某时间以前必须完成)
3.实时调度策略主要考虑:如何使硬实时任务,在规定的截止时间内完成(或开始)。同时,尽可能使软实时任务也在规定截止时间内完成(或开始)。

多数操作系统都无法实现直接依据任务截止时间进行调度,它们一般通过提高响应速度来完成。
通常,实时系统中同时有多个周期性任务并发执行,形成任务流,它们都要求系统做出实时响应。
如:系统中有n个周期性任务,其中任务出现的周期为Pi,执行任务所需CPU时间为Ci,则系统能处理任务流条件是:(C1/P1 + C2/P2 + …… +Cn/Pn)<=1(可调度测试公式)
满足可调度测试公式的实时任务流才是可调度的。在考虑调度算法时,还需要以下信息:

(1)任务成为就绪态、准备执行的时间。
(2)开始/完成截至时间,通常不能二者都知道,只能知道第一个。
(3)任务执行需要的时间。
(4)任务执行时的资源要求。
(5)任务的优先级。通常硬实时任务优先级高。
(6)任务的分解成子任务的具体情况。

6.2 抢占调度和快速切换机制

严格的实时系统中,如硬实时系统,允许优先权高的实时任务,抢占优先权低的任务,从而满足实时任务对截止时间的要求。如一个实时任务不抢占就能够满足自己的截止时间,则不宜采取抢占调度。
实际应用中,系统判断能否满足截止时间并不容易。如系统小,需处理的任务较少,则容易判断;如系统较大,则很难判断。
快速切换机制可实现对实时任务的快速切换,此机制常用硬件装置实现快速中断。在软件实现上,可通过提高分派程序对任务切换的速度,来提高系统的性能。

6.3 典型实时调度算法

1.最早截止时间优先调度算法(EDF, Earliest Deadline First)
基本思想:根据实时任务的开始截止时间,确定任务的优先级,截止时间越早,优先级越高。调度程序把所有可运行的进程,按截止时间放在一个以表格形式存在的就绪队列中,队首任务截止时间最早。调度程序调度时,总是选队首进程。
对新到达的实时任务,系统查看其截止时间。如截止时间先于正在运行任务的截止时间,则新进程抢占当前进程的CPU使用权。
最早截止时间优先调度算法是抢占式调度算法,适用于周期性和非周期实时任务的调度。

在这里插入图片描述

2.速率单调调度算法(RMS, Rate Monotonic Scheduling)
算法面向周期性实时任务,它是非抢占式调度算法。RMS根据任务的周期大小给每个实时任务赋予不同的优先级,周期最短的任务具有最高的优先级。该算法广泛应用于工业实时控制系统的周期性任务调度。
RMS为每个任务赋予的优先级与该任务的任务速率成正比关系。任务速率越大,任务的优先级越高。任务速率是任务周期的倒数,以赫兹为单位。任务周期是指一个任务到达至下一个任务到达之间的时间范围,包括任务被CPU执行的时间和等待下一个任务到达的CPU空闲时间。所以,该算法又称为优先级随速率单调的调度算法。
RMS调度是非抢占式调度,相对于EDF调度更容易实现。两者在处理机利用率上差别不大,都可以达到90%左右。

7.Linux进程调度概述

Linux内核主要包括进程调度、内存管理、设备管理和驱动、虚拟文件系统和网络通信五部分。
1.调度方式
Linux根据进程调度策略(policy)将进程划分为实时进程和普通进程两类 。
实时进程优先于普通进程运行。实时进程采用时间片轮转和先进先出的调度策略。
普通进程则采用动态优先调度策略

Linux内核中的函数schedule()是实现进程调度的函数,它通过调用函数goodness()来选择最值得运行的进程获得CPU。Linux内核为每个进程都分配了一定的时间片和优先级,以保证CPU上始终是优先级最高的进程在运行。当选中一个进程后,之后的进程切换工作由函数schedule()调用switch_mm()和switch_to()来实现。其中,switch_mm()负责切换虚拟内存,switch_to()负责切换系统堆栈。
在Linux中,进程切换的方式有两种,一种是主动调度方式,进程自己通过系统调用,将自己转换成阻塞、僵死、暂停等状态;另一种是被动调度方式,进程由系统空间返回到用户空间,即从中断、系统调用或异常返回到用户空间执行时,其可执行的时间片已经用完,系统将转入schedule()函数重新调用进程。

2 调度时机
一般来讲,引起Linux系统中进程调度的原因主要有以下几种。

(1)CPU上正在运行进程的状态发生改变,不再占用CPU。
(2)就绪队列中增加了新进程。
(3)正在执行进程的时间片用完。
(4)执行系统调用的进程返回到用户态。
(5)系统内核结束中断处理返回到用户态。
(6)直接执行调度。

3 调度算法

(1)在调度算法的实现上,涉及到Linux进程控制块(task_struct结构)中的四个域:rt_priority、policy、priority(nice)和counter。调度程序根据这四个参数对进程进行调度,分配CPU。其中,policy的值表示不同类型进程的调度策略,其取值范围如下。
1)SCHED_OTHER(值为0):普通进程优先级轮转法。
2)SCHED_FIFO(值为1):实时进程先来先服务算法。
3)SCHED_RR(值为2):实时进程优先级轮转算法。
(2)Linux中的进程调度以进程的优先级为调度依据。调度算法所使用的数据结构相对简单,并将多种调度策略有机地结合起来,同时兼顾各类进程的特点。
(3)Linux中的内核线程采取了与进程一样的表示和管理方式,Linux使用进程调度统一处理进程和内核线程,通过进程调度可得知线程调度的情况。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mapengpeng1999@163.com 操作系统4~处理机调度 的相关文章

  • 终端连接控制(stty的编写)

    终端连接控制 stty的编写 一 背景 文件与目录在之前已经学习过了 文件中包含着数据 这些数据可以被读出 写入 也可以用以操作 但文件不仅仅是计算机唯一的数据来源 计算机的数据还可以来自于许多的外部设备 比如扫描仪 照相机 鼠标等输入设备
  • texlive支持中文的简单方法

    1 确保tex文件的编码方式是UTF 8 2 在文档开始处添加一行命令即可 即 usepackage UTF8 ctex 如下所示 documentclass article usepackage UTF8 ctex begin artic
  • 计算机网路基础 - 一些基本概念与网络结构

    1 基本概念 计算机网络 通信技术 计算机技术 是两项技术紧密结合的产物 通信系统的基础模型 计算机网络 是指将地理位置不同 具有独立功能的多台计算机及其外部设备 通过通信线路连接 在网络操作系统 网络管理软件及网络通信协议的管理和协调下
  • 线程和进程的区别(面试必备)

    参考文章 https www jianshu com p 2dc01727be45 线程与进程的区别通俗的解释 https www jianshu com p 8ad441510860 附加可参考文章 https baijiahao bai
  • windows下命令行修改系统时间;修改系统时间的软件

    找了很久 都没有找到 还找了关键词 dos下修改系统时间 因为看到linux下修改系统时间是用hwclock 命令写入主板芯片 而我由于某些原因想自动化修改系统时间 所以找windows下修改系统时间的软件 没有找到 有一个 意天禁止修改系
  • VMware-Ubuntu安装bochs

    我的运行环境是VMware的Ubuntu 首先大家可以按照CSDN上的教程按照符合自己需求的虚拟机 我在上午还在VMware和virtualBox之间做选择 但是由于已经安装过了VMware 所以我就直接用了VMware 当然了 一千人眼中
  • Linux网络安全-Zabbix入门(一)

    一 基本概念 1 监控目的 运行情况 提前发现问题 2 监控资源类别 公开 tcp udp 端口 私有 cpu 磁盘 监控一切需要监控的东西 只要能够想到 能够用命令实现的都能用来监控 如果想远程管理服务器就有远程管理卡 比如Dell id
  • Ubuntu 10.10下安装TFTP的步骤 tftp-hpa版本

    背景 由于想要在tq2440板子上用tftp下载kernel 所以要在自己的PC机的Ubuntu 10 10上安装tftp服务 所以就去网上找了些教程 但是很悲剧 按照那些教程去操作 结果还都是无法正常运行tftp服务 最后还是从一个外国人
  • gpuz怎么看显存颗粒

    gpuz可以帮助一些用户查看电脑的一切显卡参数 对于想要了解显卡的网友来说使用起来是非常方便的 不过有些网友是刚开始使用 还不知道gpuz怎么看显存颗粒 下面小编就教下大家gpuz查看显存颗粒的方法 首先 显存颗粒是显存的物理存储组成单元
  • office2013 excel 打开时提示excel词典xllex.dll文件丢失或损坏

    今天打开Excel时 发现报错 xllex dll文件丢失或损坏 我用的是office2013 网上找了好多都是2007的dll文件 导入不了 于是乎重装office 问题解决 但还是把xllex dll烤出来做个备份吧 参考下面步骤即可
  • Java堆的自动垂直缩放

    多年以来 java一直是贪婪的应用程序的同义词 这种类型的应用程序在晚上打开冰箱并吞噬所有可用资源 直到崩溃 该行为的主要原因是缺乏一种有效的方式来将操作系统在Java堆中分配且不再使用的内存交还给操作系统 However with the
  • nslookup命令详解

    nslookup命令用于查询DNS的记录 查看域名解析是否正常 在网络故障的时候用来诊断网络问题 nslookup的用法相对来说还是蛮简单的 主要是下面的几个用法 1 直接查询 这个可能大家用到最多 查询一个域名的A记录 nslookup
  • Linux系统编程:多线程交替打印ABC

    引言 分享关于线程的一道测试题 因为网上基本都是Java的解决方法 决定自己写一篇来记录一下线程的学习 问题描述 编写一个至少具有三个线程的程序 称之为线程 A B 和 C 其中线程 A 输出字符 A 线程 B 输出字符 B 线程 C 输出
  • 操作系统笔记六(文件管理)

    1 文件逻辑结构 1 1逻辑结构的文件类型 分类 有结构文件 例如 PNG文件 无结构文件 1 2顺序文件 1 3索引文件 2 辅存的存储空间分配 2 1分配方式 连续分配 直接分配连续的存储空间 链接分配 隐式链接 在盘块内指定下一个盘块
  • 深入ftrace kprobe原理解析

    Linux krpobe调试技术是内核开发者专门为了编译跟踪内核函数执行状态所涉及的一种轻量级内核调试技术 利用kprobe技术 内核开发人员可以在内核的绝大多数指定函数中动态插入探测点来收集所需的调试状态信息而基本不影响内核原有的执行流程
  • 使用inet_ntop转换IPv6地址时在macOS和linux上的行为不一样

    下面这段python代码在macOS和linux时运行的结果是不同的 import socket ip socket inet pton socket AF INET6 1 2 3 0 5 6 7 8 print socket inet n
  • 图解五种磁盘调度算法, FCFS, SSTF, SCAN, C-SCAN, LOOK

    一 FCFS 调度 先来先服务 磁盘调度的最简单形式当然是先来先服务 FCFS 算法 虽然这种算法比较公平 但是它通常并不提供最快的服务 例如 考虑一个磁盘队列 其 I O 请求块的柱面的顺序如下 98 183 37 122 14 124
  • linux 使用systemctl 启动服务报错: Error: No space left on device

    By default Linux only allocates 8192 watches for inotify which is ridiculously low And when it runs out the error is als
  • Common块和Bss段的区别

    昨天看 程序员的自我修养 链接 装载与库 发现不是很理解为什么要用common块 然后仔细看了一番 有了自己的理解 common块 用来存放弱符号 而全局未初始化变量是弱符号 但是难道不是应该存放在 bss段吗 为什么要有common块呢
  • Linux(13):例行性工作排程

    例行性工程 听谓的排程是将工作安排执行的流程之意 Linux 排程就是透过 crontab 与 at 这两个东西 两种工作排程的方式 一种是例行性的 就是每隔一定的周期要来办的事项 一种是突发性的 就是这次做完以后就没有的那一种 at at

随机推荐

  • QT实现电子时钟

    QT实现电子时钟 实现方法 实现效果 代码 头文件 源文件 实现方法 主窗口QDialog调用QLCDNumber窗口 实现效果 代码 头文件 dialog h ifndef DIALOG H define DIALOG H include
  • Git使用(3)常见报错

    仅限于当时当地情况下的处理方式 不代表所有情况 Q Refusing to fetch into current branch refs heads master of non bare repository A 在当前分支下fetch g
  • (详细步骤和代码)利用A100 GPU加速Tensorflow

    利用A100 GPU加速Tensorflow NVIDIA A100 基于 NVIDIA Ampere GPU 架构 提供一系列令人兴奋的新功能 第三代张量核心 多实例 GPU MIG 和第三代 NVLink Ampere Tensor C
  • 2022-2028年中国商用车产业园区行业市场竞争态势及未来前景分析报告

    智研咨询发布的 2022 2028年中国商用车产业园区行业市场竞争态势及未来前景分析报告 共十五章 首先介绍了商用车产业园区行业市场发展环境 商用车产业园区整体运行态势等 接着分析了商用车产业园区行业市场运行的现状 然后介绍了商用车产业园区
  • 用elasticsearch聚合函数实现distinct查询

    1 等价的sql Sql代码 SELECT DISTINCT field1 field2 FROM test index test type 等价于 Sql代码 SELECT field1 field2 FROM test index te
  • VMware-Ubuntu安装bochs

    我的运行环境是VMware的Ubuntu 首先大家可以按照CSDN上的教程按照符合自己需求的虚拟机 我在上午还在VMware和virtualBox之间做选择 但是由于已经安装过了VMware 所以我就直接用了VMware 当然了 一千人眼中
  • 功能实现题

    目录 32 如何利用linux的指令来查询一个文件的行数 33 linux下统计一个文件中每个id的出现次数 34 Linux 在多个文件中查找字符串 35 如何查看占用cpu最多进程 36 如何找到 Java 进程中哪个线程占用了大量 C
  • 安装XView库

    空间 MS Windows 95 98 ME NT 2000 XP The file xview 3 2p1 4 18c cygwin tar bz2 in the cygwin directory contains a set of XV
  • 解决django从脚本文件(或其他文件)中导入app中的model时报错xxx.models.DeviceModel doesn‘t declare an explicit app_label

    完整报错 RuntimeError Model class xxxx models DeviceModel doesn t declare an explicit app label and isn t in an application
  • SpringBoot中关闭Mybatis以及RocketMQ日志打印

    SpringBoot工程集成了Mybatis和RocketMQ 也集成了Log4j 项目中自己的日志都可以通过log4j来管理 日志打印通过通过日志级别可以管理 一直很正常 后来项目上线正常稳定运行一段时间后 要求只打印ERROR级别日志
  • mysql drop table 死锁

    1 场景 mysql出现大量的drop table阻塞操作 2 从会话表 processlist 里面和事务表INNODB TRX里面并找不到正在占用锁的会话和事务 3 分析锁信息 INNODB LOCKs 和INNODB LOCK wai
  • 使用 Oracle的存储过程实现数据加密和解密

    我们都知道 几乎所有的数据库都有存储过程 但在实际开发中 它有什么用途了 下面使用Oracle的存储过程 采用Oracle自带的dbms obfuscation toolkit desencrypt对数据进行加密 需要注意的是密码的长度必须
  • Linux网络安全-Zabbix入门(一)

    一 基本概念 1 监控目的 运行情况 提前发现问题 2 监控资源类别 公开 tcp udp 端口 私有 cpu 磁盘 监控一切需要监控的东西 只要能够想到 能够用命令实现的都能用来监控 如果想远程管理服务器就有远程管理卡 比如Dell id
  • springboot后端返回图片,vue前端接收并显示的解决方案

    后端图片数据返回 后端通过二进制流的形式 写入response中 controller层 获取签到二维码 GetMapping sign up pict public void signUpPict Long id Long semId H
  • 【树状数组该回炉重造了】Codeforces Round #813 (Div. 2) E2. LCM Sum (hard version)

    参考题解 题意 T T T 组数据 每组数据给定 l l l 和 r r
  • 一步步实现扫雷

    扫雷 首先去建立三个文件 头文件 game h 用于存放每个函数的声明 源文件1 game c 用于放置每个函数的定义 源文件2 test c 用于实现扫雷的整体逻辑 关于扫雷的实现 首先需要定义棋盘 这里我们实现9 9的棋盘 但是面对用户
  • Zabbix配置SNMP trap告警的例子

    官方文档 3 SNMP 陷阱 1 安装Trap组件包 yum install y net snmp utils net snmp perl net snmp 2 下载并复制接收Trap脚本 wget https sourceforge ne
  • doris-查询原理

    目录 一 查询简介 二 查询流程 1 Query 接收 2 Query Parse 3 Query Analyze 4 Query Rewrite 5 Plan 5 1 Query 单机Plan 5 2 Query 分布式Plan 6 Qu
  • 【bug】antd全局的主题色样式被覆盖,被修改为`antd`默认的主题色

    背景 项目本身修改了主题色 配置如下 umi配置文件 export default theme primary color 2F54EB 全局主色 需要对图片上传组件做封装 并在项目中统一引用 如下 import TdsUpload fro
  • mapengpeng1999@163.com 操作系统4~处理机调度

    处理机调度 1 三级调度体系 1 处理机调度主要是对处理机运行时间进行分配 即 按照一定算法或策略 将处理机运行时间分配给各个并发进程 同时尽量提高处理机的使用效率 2 现代操作系统中 按调度所实现的功能分3种类型 高级调度 中级调度和低级