【操作系统】第二章进程与线程、处理机调度与调度算法

news2024/11/18 17:38:21

文章目录

  • 🌷 一、进程的定义、组成、组织方式及特征
    • ⭐️ 1、 进程的定义
    • ⭐️ 2、 进程实体的组成
    • ⭐️ 3、 进程的组织
    • ⭐️ 4、 进程的特征
  • 🌷 二、进程的状态与转换
    • ⭐️ 1、 状态
    • ⭐️ 2、 进程状态间的转换
  • 🌷 三、进程控制
    • ⭐️ 1、 定义
    • ⭐️ 2、 进程控制相关的原语
  • 🌷 四、进程通信
    • ⭐️ 1、 **定义**
    • ⭐️ 2、 **共享存储**
    • ⭐️ 3、 **消息传递**
    • ⭐️ 4、 管道通信(共享存储的优化)
  • 🌷 五、线程概念和多线程模型
    • ⭐️ 1、 定义
    • ⭐️ 2、 引入线程后的变化
    • ⭐️ 3、 线程的属性
    • ⭐️ 4、 线程的实现方式
    • ⭐️ 5、 线程的实现方式
    • ⭐️ 6、 多线程模型
  • 🌷 六、处理机调度
    • ⭐️ 1、 基本概念
    • ⭐️ 2、 三个层次
    • ⭐️ 3、 三层调度的联系对比
    • ⭐️ 4、 进程调度的时机
    • ⭐️ 5、 进程调度的切换与过程
    • ⭐️ 6、 进程调度的方式
  • 🌷 七、调度算法的评价指标
  • 🌷 八、调度算法
    • ⭐️ 1、 先来先服务(FCFS)
    • ⭐️ 2、 短作业优先(SJF)
    • ⭐️ 3、 高响应比优先(HRRN)
    • ⭐️ 4、 时间片轮转调度算法(RR)
    • ⭐️ 5、 优先级调度算法
    • ⭐️ 6、 多级反馈队列调度算法

🌷 一、进程的定义、组成、组织方式及特征

⭐️ 1、 进程的定义

(1) 程序:就是一个指令序列,早期的计算机只支持单道程序
(2) 进程:为了使参与并发执行的程序(含数据)能够独立地运行,必须为之配置一个专门的数据结构,称之为进程控制块(PCB)。程序段数据段PCB三部分组成了进程实体(进程映像);而撤销进程实质上是撤销进程实体中的 PCB。
注:PCB 是进程存在的唯一标志
(3) 从不同角度,进程可以有不同的定义

① 进程是程序的一次执行过程
② 进程是一个程序及其数据在处理机上顺序执行时所发生的活动
③ 进程是具有独立功能的程序在数据集合上运行的过程,它是系统进项资源分配和调度的一个独立单位
进程映像是静态的,而进程是动态的

(4) 引入进程实体的概念后,可把进程定义为:进程是进程实体的运行过程,是系统进
项资源分配和调度的一个独立单位

⭐️ 2、 进程实体的组成

(1) 程序段:存放程序代码
(2) 数据段:程序运行时使用、产生的运算数据
(3) PCB:操作系统通过 PCB 来管理进程,因此 PCB 中应该包含操作系统对其进行管理
所需的各种信息
在这里插入图片描述

⭐️ 3、 进程的组织

在一个系统中通常有数十、数百乃至数千个 PCB。为了能对他们加以有效的管理,应该使用适当的方式把这些 PCB 组织起来
(1) 链接方式:按照进程状态将 PCB 分为多个队列,操作系统持有指向各个队列的指针
在这里插入图片描述

(2) 索引方式:根据进程状态的不同,建立几张索引表,操作系统持有指向各个索引表
的指针
在这里插入图片描述

⭐️ 4、 进程的特征

(1) 动态性最基本的特征):进程是程序的一次执行过程,是动态产生、变化和消亡的
(2) 并发性:内存中有多个进程实体,各进程可并发执行
(3) 独立性进程是能独立运行、独立获得资源、独立接受调度的基本单位
(4) 异步性:各进程按各自独立的,不可预知的速度向前推进,操作系统要提供“进程同
步机制”来解决异步问题(异步性会导致并发程序执行结果的不确定性
(5) 结构性:每个进程都会配置一个 PCB。结构上看,进程由程序段、数据段、PCB 组

🌷 二、进程的状态与转换

⭐️ 1、 状态

进程是程序的一次执行。在这个执行过程中,有时进程正在被 CPU 处理,有时又需要等
待 CPU 服务,可见,进程的状态是会有各种变化。为了方便对各个进程的管理,操作系
统需要将进程合理地划分为几种状态
(1) 运行状态:占用 CPU,并在 CPU 上运行(N 核处理器,同时可运行 N 个进程
(2) 就绪状态:已具备运行条件,但由于没有空闲 CPU,而暂时不能运行
(3) 阻塞状态:因等待某一时间而暂时不能运行
(4) 创建状态:操作系统为进程分配资源、初始化 PCB
(5) 终止状态:操作系统回收进程拥有的资源、撤销 PCB

⭐️ 2、 进程状态间的转换

在这里插入图片描述

(1) 就绪态→运行态:进程被调度
(2) 运行态→就绪态:时间片到,或 CPU 被其他高优先级的进程抢占
(3) 运行态→阻塞态:进程自身做出的主动行为
(4) 阻塞态→就绪态:进程自身不能控制,是一种被动行为

🌷 三、进程控制

⭐️ 1、 定义

进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建新进程、撤销已有进程、实现进程状态转换等功能
在这里插入图片描述

用原语实现进程控制。原语的特点是执行期间不允许中断,只能一气呵成
这种不可被中断的操作即原子操作
原语采用“关中断指令”和“开中断指令”实现
关/开中断指令的权限非常大,是只允许在核心态下执行的特权指令
在这里插入图片描述

⭐️ 2、 进程控制相关的原语

(1)
① 更新 PCB 中的信息(如修改进程状态标志、将运行环境保存到 PCB、从 PCB 恢复运行环境)
② 所有的进程控制原语一定都会修改进程状态标志
③ 剥夺当前运行进程的 CPU 使用权必然需要保存其运行环境
④ 某进程开始运行前必然要恢复其运行环境

(2) 将 PCB 插入合适的队列
(3) 分配/回收资源
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

🌷 四、进程通信

⭐️ 1、 定义

进程通信就是指进程之间的信息交换。进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立
为了保证安全,一个进程不能直接访问另一个进程的地址空间。但是进程之间的信息交换又是必须实现的。为了保证进程间的安全通信,操作系统提供了一些方法

⭐️ 2、 共享存储

在这里插入图片描述

(1) 基于数据结构的共享:只能存放固定的数据结构,共享方式速度慢、限制多,是一
低级通信方式
(2) 基于存储区的共享:在内存中画出一块共享存储区,数据的形式、存放位置都由进
程控制,而不是操作系统。相比之下这种共享方式速度更快,是一种高级通信方式

⭐️ 3、 消息传递

进程间的数据交换以格式化的消息为单位。进程通过操作系统提供的“发送消息/接收消
息”两个原语进行数据交换
在这里插入图片描述

(1) 直接通信方式:消息直接挂到接收进程的消息缓冲队列上
(2) 间接通信方式:消息要先发送到中间实体(信箱)中,因此也称“信箱通信方式”
在这里插入图片描述

⭐️ 4、 管道通信(共享存储的优化)

“管道”是指用于连续读写进程的一个共享文件,又名 pipe 文件。其实就是在内存中开辟
一个大小固定的缓冲区
在这里插入图片描述

(1) 管道只能采用半双工通信如果要实现全双工通信则需要设置两个管道
(2) 各进程要互斥地访问管道
(3) 数据以字符流的形式写入管道,当管道写满时,写进程的 write()系统调用将被阻塞, 等待读进程将数据取走。当读进程将数据全部取走后,管道变空,此时读进程的 read() 系统调用将被阻塞
(4) 如果没写满,就不允许读。如果没读空就不允许写
(5) 数据一旦被读出,就从管道中抛弃,这就意味着读进程最多只能有一个,否则可能会有读错数据的情况

🌷 五、线程概念和多线程模型

⭐️ 1、 定义

引入进程的目的是为了更好地使多道程序并发执行,以提高资源利用率和系统吞吐量, 增加并发程度;引入线程是为了减小程序在并发执行时所付出的时空开销,提高操作系统的并发性能
在这里插入图片描述

可以把线程理解为“轻量级进程”,线程是一个基本的 CPU 执行单元,也是程序执行流的最小单位。引入线程之后,不仅是进程之间可以并发,进程内的各线程之间也可以并发,从而进一步提升了系统的并发度,使得一个进程内也可以处理各种任务。引入线程后,进程只作为除 CPU 之外的系统资源的分配单元(如打印机、内存地址空间等都是分配给进程的)
在这里插入图片描述

⭐️ 2、 引入线程后的变化

在这里插入图片描述

⭐️ 3、 线程的属性

(1)线程是处理机调度的单位
(2)多 CPU 计算机中,各个线程可占用不同的 CPU
(3)每个线程都有一个线程ID、线程控制块(TCB)
(4)线程也有就绪、阻塞、运行三种基本状态
(5)线程几乎不拥有系统资源
(6)同一进程的不同线程间共享进程的资源
(7)由于共享内存地址空间,同一线程中的线程间通信甚至无需系统干预
(8)同一进程中的线程切换,不会引起进程切换
(9)不同进程中的线程切换,会引起进程切换
(10)切换同进程内的线程,系统开销很小
(11)切换进程,系统开销很大

⭐️ 4、 线程的实现方式

(1) 用户级线程
用户级线程由应用程序通过线程库实现。所有的线程管理工作都由应用程序负责(包括线程切换)。用户级线程中,线程切换可以在用户态下即可完成,无需操作系统干预。
在这里插入图片描述

在用户看来,是有多个线程。但是在操作系统内核看来,并意识不到线程的存在(用户级线程对用户透明,对操作系统不透明),可以理解为“用户级线程”就是“从用户视 角能看到的线程
(2) 内核级线程(KLT,又称内核支持的线程)
内核级线程的管理工作由操作系统内核完成。线程调度、切换等工作都由内核负责,因此内核级线程的切换必然需要在核心态才能完成
在这里插入图片描述

可以理解为“内核级线程”就是“从操作系统内核视角能看到的线程

⭐️ 5、 线程的实现方式

在同时支持用户级线程和内核级线程的系统中,可采用二者组合的方式:将 n 个用户级线程映射到 m 个个内核线程上(n>=m)
在这里插入图片描述

重点:操作系统只“看得见”内核级线程,因此只有内核级线程才是处理机分配的单位

⭐️ 6、 多线程模型

(1) 多对一模型:多个用户及线程映射到一个内核级线程。每个用户进程只对应一个内核级线程

优点:用户级线程的切换在用户空间即可完成,不需要切换到核心态,线程管理的系统开销小,效率高
缺点:当一个用户级线程被阻塞后,整个进程都会被阻塞,并发度不高。多个线程不可在多核处理机上并行运行

(2) 一对一模型:一个用户及线程映射到一个内核级线程。每个用户进程有进程有与用户级线程同数量的内核级线程

优点:当一个线程被阻塞后,别的线程还可以继续执行,并发能力强。多线程可在多核处理机上并行执行
缺点:一个用户进程会占用多个内核级线程,线程切换由操作系统内核完成,需要切换到核心态,因此线程管理的成本高,开销大

(3)多对多模型:n 用户及线程映射到 m 个内核级线程(n>m)。每个用户进程对应 m 个内核级线程,是比较合理的模型

🌷 六、处理机调度

⭐️ 1、 基本概念

在多道程序系统中,进程的数量往往是多于处理机的个数的,这样不可能同时并行地处理各个进程。处理机调度就是从就绪队列中按照一定的算法选择一个进程并将处理机分配给它运行,以实现进程的并发执行

⭐️ 2、 三个层次

由于内存空间有限,有时无法将用户提交的作业全部放入内存,因此就需要确定某种规
则来决定将作业调入内存的顺序。
(1) 高级调度(作业调度)

按一定的原则从外存上处于后备队列的作业中挑选一个(或多个)作业,给他们分配内存等必要资源,并建立相应的进程(建立 PCB),以使它获得竞争处理机的权力,高级调度是外存与内存之间的调度。每个作业只调入一次,调出一次。作业调入时会建立相应的 PCB,作业调出时才撤销 PCB。高级调度主要是指调入问题,因为只有调入的时机需要操作系统来确定,但调出的时机必然是作业运行结束才调出

(2) 中级调度(内存调度)
➢ 引入了虚拟存储技术之后,可将暂时不能运行的进程调至外存等待。等它重新
具备了运行条件且内存又稍有空闲时,再重新调入内存。
➢ 这么做的目的是为了提高内存利用率和系统吞吐量
➢ 暂时调到外存等待的进程状态为挂起状态。值得注意的是,PCB 并不会一起调到外存,而是会常驻内存。PCB 中会记录进程数据在外存中的存放位置,进程状态等信息,操作系统通过内存中的 PCB 来保持各个进程的监控、管理。被挂起的进程 PCB 会被放到挂起队列中。
➢ 中级调度就是要决定将哪个处于挂起状态的进程重新调入内存
➢ 补充知识:
在这里插入图片描述

(3) 低级调度(进程调度)
➢ 主要任务是按照某种方法和策略从就绪队列中选取一个进程,将处理机分配给

➢ 进程调度是操作系统中最基本的一种调度,在一般的操作系统中都必须配置进
程调度
➢ 进程调度的频率很高,一般几十毫秒一次

⭐️ 3、 三层调度的联系对比

在这里插入图片描述

⭐️ 4、 进程调度的时机

(1) 主动放弃:进程正常终止;运行过程中发生异常而终止;进程主动请求阻塞
(2) 被动放弃:分给进程的时间片用完;有更紧急的事需要处理;有更高优先级的进程进入就绪队列
(3) 不能进行调度与切换的情况:

① 在处理中断的过程中。中断处理过程复杂,与硬件密切相关,很难做到在中断处理过程中进行进切换
② 进程在操作系统内核程序临界区中
③ 在原子操作过程中(原语)。原子操作不可中断,要一气呵成

⭐️ 5、 进程调度的切换与过程

进程切换是指一个进程让出处理机,由另一个进程占用处理机的过程
进程的切换的过程主要完成了:
① 对原来运行进程各种数据的保存
② 对新的进程各种数据的恢复
进程的切换是有代价的,因此如果过于频繁的进行进程调度、切换,必然会使整个系统的效率降低,使系统大部分时间都花在了进程切换上,而真正用于执行进程的时间减少

⭐️ 6、 进程调度的方式

(1)非剥夺调度方式
又称非抢占式,只允许进程主动放弃处理机。在运行过程中即便有更紧迫的任务到达,当前进程依然会继续使用处理机,直到该进程终止或主动要求进入阻塞态
优点:实现简单,系统开销小
缺点:无法及时处理紧急任务,适合于早期的批处理系统
(2) 剥夺调度方式
又称抢占方式,当一个进程正在处理机上执行时,如果有一个更重要或更紧迫的进程需要使用处理机,则立即暂停正在执行的进程,将处理机分配给更重要紧迫的那个进程
优点:可以优先处理更紧急的进程,也可实现让各进程按时间片轮流执行的功能(通过时钟中断)。适合于分时操作系统、实时操作系统

🌷 七、调度算法的评价指标

1、 CPU 利用率:CPU 处于“忙碌”的时间占总时间的比例
2、 系统吞吐量:单位时间内完成作业的数量
3、 周转时间:作业被提交给系统开始,到作业完成为止的这段时间间隔
➢ 包含四个部分:① 作业在外村后备队列上等待作业调度的时间;② 进程在就绪队列上等待进程调度的时间;③ 进程在 CPU 上执行的时间;④ 进程等待 I/O 操作完
成的时间
平均周转时间 = 各作业周转时间 / 作业数
带权周转时间 = 作业周转时间 / 作业实际运行的时间 = (作业完成时间 − 作业提交时间) / 作业实际运行的时间
4、 等待时间:指进程/作业处于等待处理机状态时间之和,等待时间越长,用户满意度越低
➢ 对于进程来说,等待时间就是指进程建立后等待被服务的时间之和,在等待 I/O 完成的期间其实进程也是在被服务的,所以不计入等待时间
➢ 对于作业来说,不仅要考虑建立进程后的等待时间,还要加上作业在外存后备队列中等待的时间
➢ 一个作业总共需要被 CPU 服务多久,被 I/O 设备服务多久一般是确定不变的,因此调度算法其实只会影响作用/进程的等待时间。与前面指标类似。也有“平均等待时间”来评价整体性能
5、 响应时间:指从用户提交请求到首次产生响应所用的时间

🌷 八、调度算法

⭐️ 1、 先来先服务(FCFS)

算法思想:主要从“公平”的角度考虑
算法规则:按照作业/进程到达的先后顺序进行服务
用于作业/进程调度:用于作业调度时,考虑是哪个作业先到达后备队列;用进程调
度时,考虑的是哪个进程先到达就绪队列
是否可抢占:非抢占式的算法
优点:公平、算法实现简单
缺点:排在长作业(进程)后面的短作业需要等待很长时间,带权周转时间很大,
对短作业来说用户体验不好
是否导致饥饿(长时间得不到服务):不会

在这里插入图片描述

⭐️ 2、 短作业优先(SJF)

算法思想:追求最少的平均等待时间,最少的平均周转时间、最少的平均带权周转
时间
算法规则:每次调度选择已到达的最短的作业/进程优先得到服务(指服务时间最短)
用于作业/进程调度:即可用于作业调度,也可以用于进程调度
是否可抢占:非抢占式,但有特殊的抢占式版本——最短剩余时间优先算法
优点:最短的平均等待时间、平均周转时间
缺点:不公平,对短作业有利、对长作业不利,可能产生饥饿现象。作业/进程的运行时间是由用户提供的,并不一定真实,不一定能做到真正的短作业优先
是否导致饥饿:会导致,如果源源不断有短作业到来,长作业可能无法运行
在这里插入图片描述

在所有进程都几乎同时到达时,采用 SJF 调度算法的平均等待时间、平均周转时间最少

⭐️ 3、 高响应比优先(HRRN)

算法思想:要综合考虑作业/进程的等待时间和要求服务时间
算法规则:在每次调度时先计算各个作业/进程的响应比,选择响应比最高的作业/进程为其服务。响应比 = (等待时间+要求服务时间) / 要求服务时间
用于作业/进程调度:既可用于作业调度,也可用于进程调度
是否可抢占:非抢占式。只有作业/进程主动放弃处理机时才需要调度
优点:综合考虑了等待时间和要求服务时间。等待时间相同时,要求服务时间短的优先(SJF 的优点);要求服务时间相同时,等待时间长的优先(FCFS 的优点)。对于长作业来说,随着等待时间越来越久,其响应比也会越来越大,避免了长作业饥饿问题
是否会导致饥饿:不会
在这里插入图片描述

⭐️ 4、 时间片轮转调度算法(RR)

算法思想:公平地、轮流地为各个进程服务,让每个进程在一定时间间隔内都可以得到响应
算法规则:按照各进程到达就绪队列的顺序,轮流让各个进程执行一个时间片。若进程未在一个时间片内执行完,则剥夺处理机,将进程重新放到就绪队列队尾重新排队
用于作业/进程调度:用于进程调度(只有作业放入内存建立了相应的进程后,才能被分配处理机时间片)
是否可抢占:抢占式
优点:公平、响应快,适用于分时操作系统
缺点:由于高频率的进程切换,因此有一定开销;不区分任务的紧急程度
是否会导致饥饿:不会
在这里插入图片描述
注意:如果时间片太大,使得每个进程都可以在一个时间片内就完成,则时间片轮转调度算法退化为先来先服务调度算法,并且会增大进程响应时间。因此时间片不能太大。
另一方面,进程调度、切换是有时间代价的(保存、恢复运行环境),因此如果时间片太小,会导致进程切换过于频繁,系统会花大量的时间来处理进程切换,从而导致实际用于进程执行的时间比例减少。可见时间片也不能太小

⭐️ 5、 优先级调度算法

算法思想:按照紧急程度来决定处理顺序
算法规则:每个作业/进程有各自的优先级,调度时选择优先级最高的作业/进程
用于作业/进程调度:既可用于作业调度,也可用于进程调度
是否可抢占:抢占式与非抢占式都有
优点:用优先级区分紧急程度、重要程度,用于实时操作系统。可灵活地调整作业
/进程的偏好程度
缺点:若源源不断地有高优先级进程到来,可能导致饥饿
是否会导致饥饿:会

在这里插入图片描述
在这里插入图片描述

⭐️ 6、 多级反馈队列调度算法

算法思想:对其他调度算法的折中权衡
算法规则
① 设置多级就绪队列,各级队列优先级从高到低,时间片从小到大
② 新进程到达时先进入第 1 级队列,按 FCFS 原则排队等待被分配时间片,若用完时间片进程还未结束,则进程进入下一级队列队尾
③ 只有第 k 级队列为空时,才会为 k+1 级队头的进程分配时间片
➢ 用于进程调度
是否可抢占:抢占式
优点:对各类型进程相对公平;每个新到达的进程都可以很快就得到响应;短进程只用较少的时间就可以完成;不必实现估计进程的运行时间(避免用户作假);可灵活地调整对各类进程的偏好程度
是否会饥饿:不会
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/496236.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SwiftUI 新 Alert 弹出窗口圆你文本输入之梦

概览 小伙伴们都知道,弹出 Alert 不能包含文本输入框是 SwiftUI 的阿喀琉斯之踵(Achilles’ Heel) 。当然,这说的有些夸张了。😉 不过,Alert 不能包含 TextField 在某些情况下着实不方便。于是乎,从 SwiftUI 3.0&…

JAVA模拟堆

堆的性质 堆是一种特殊的树。 只要满足以下两点,它就是一个堆: 堆是一个完全二叉树。堆中每一个节点的值都必须大于等于(或小于等于)其子树中每个节点的值。 第一点,堆必须是一个完全二叉树。完全二叉树要求&#…

O2OA (翱途) 平台 V8.0 发布新增数据台账能力

亲爱的小伙伴们,O2OA (翱途) 平台开发团队经过几个月的持续努力,实现功能的新增、优化以及问题的修复。2023 年度 V8.0 版本已正式发布。欢迎大家到 O2OA 的官网上下载进行体验,也希望大家在藕粉社区里多提宝贵建议。本篇我们先为大家介绍应用…

Android 输入系统

概述 Android 输入系统的工作原理概括来说,内核将原始事件写入到设备节点中,InputReader 不断地通过 EventHub 将原始事件取出来并翻译加工成 Android 输入事件,然后交给 InputDispatcher。 InputDispatcher 根据 WMS 提供的窗口信息将事件…

24.Stream流

Stream流 一、什么是Stream流 Stream流操作是Java 8提供一个重要新特性,它允许开发人员以声明性方式处理集合,其核心类库主要改进了对集合类的 API和新增Stream操作。Stream类中每一个方法都对应集合上的一种操作。将真正的函数式编程引入到Java中&…

2023全栈开发人员职业路线图

0. 全栈开发人员职业路线图 全栈开发人员是IT行业中薪资最高的职业之一。 如果您想成为一名全栈开发人员,以下是2023年全栈开发人员路线图上的十一个步骤: 掌握敏捷开发和Scrum学习浏览器技术,如HTML和CSS熟练掌握JavaScript或TypeScript了…

单月涨粉303.72w,反差感才是主流吗?

据新抖「直播带货风向」数据显示,抖音4月的直播商品数量达到1021.32w,较上月的695.91w环比增长50.18%,直播销量环比增加16.81%。从这几个数值就可以看出4月的抖音电商依旧如火如荼...... 那么,4月,抖音又出现哪些新的看…

“世界中医药之都” 亳州市医保局领导一行莅临万民健康交流指导

为进一步推进智慧医疗、智慧服务、智慧管理“三位一体”为主旨的“智慧中医、健康社区”项目建设。2023 年 5 月 3 日,“世界中医药之都” 亳州市医保局 局长 吴旭春 、 医保中心主任秦克靖 、 办公室主任徐伟 等一行 5 人莅临 万民健康交流 指导工作 &#xff0c…

day27_mysql

今日内容 零、 复习昨日 一、单表查询 二、多表联查 零、 复习昨日 1 DDL,DML,DQL是啥 DDL 数据定义语言(库,表,列)DML 数据操作语言(表内数据的操作增删改)DQL 数据查询语言(表内数据的查询&am…

酷游浅谈网站Javas cript型别

最近整理了一下,【酷游娜娜手机𝕍找看看nay3989提供】就决定跟大家讨论一下最近对于Javascripet的型别认识。 弱型别VS 强型别 Javascripet是一种「弱型别」的语言,所以会产生很多你意想不到恶心的事情 至于什么是弱…

软件测试、测试和开发、测试和调试【详细介绍】

目录 一、什么是软件测试 1.软件测试的定义 2.软件测试的目的 3.软件测试的不可穷性 二、开发和测试的区别 三、测试和调试的区别 一、什么是软件测试 在日常生活中,测试是无处不在的。比如新买的手机是否好用、新买的衣服穿着是否合身等等场景,均…

点成案例丨细胞培养芯片用于构建肠模型实例分享

器官芯片是一种利用微芯片制造技术制造的微流体细胞培养设备。该设备包含多个连续灌注腔室,具有多细胞层结构、组织界面、物理化学微环境以及人体血管循环等特征,可以模拟和重构人体器官的生理功能,为相关研究提供了可靠的平台。器官芯片技术…

java中设计模式总结

设计模式是实际工作中写的各种代码进行高层次抽象的总结,其中最出名的当属 Gang of Four (GoF) 的分类了,他们将设计模式分类为 23 种经典的模式,根据用途又可以分为三大类,分别为创建型模式、结构型模式和行为型模式。 有一些重…

【6D位姿估计】Point Pair Feature (PPF)

论文链接:Drost et al. Model Globally, Match Locally: Efficient and Robust 3D Object Recognition. CVPR, 2010. Model Globally, Match Locally 论文名字用 4 个词高度总结了 PPF 算法的精髓:“整体建模,局部匹配”。 下面这张图反应了论文的基本思想(算法概要): …

【鸿蒙应用ArkTS开发系列】- 导航栏Tab组件使用讲解

目录 Tabs介绍Tabs使用例子TabBar 样式设置定义菜单样式对象-NavigationItem定义一个底部菜单栏集合数据-NavigationList修改TabBuilder Tab 组件控制题外话 现在市场上的大部分应用,主页都是才用底部导航栏菜单作为页面主体框架来展示, 在鸿蒙中是使用…

STM32库函数笔记分享

之前刚开始自学的部分STM32笔记放出,希望对新入门STM32和想要复习库函数的小伙伴们起到帮助。 建立工程 1.寄存器操作方式 需要不断地查手册来了解每一位是干什么用的 优点:代码简介; 缺点:不太方便。 2.库函数操作方式 1.调用库函…

【leetcode热题100】接雨水、直方图最大矩形面积、矩阵中最大的矩形

文章目录 一、接雨水方法一:按列求(动态规划)方法二:双指针方法三:单调栈 二、直方图最大矩形面积单调栈哨兵位优化 三、矩阵中最大的矩形前缀和单调栈 一、接雨水 题目链接 题目描述: 给定 n 个非负整数…

JVM_垃圾回收器

目录 一、GC分类1.串行vs并行2.并发式vs独占式3.压缩式vs非压缩式4.年轻代vs老年代 二、GC评估指标1.吞吐量2.暂停时间3.小结 三、垃圾回收器都有哪些?1.GC发展史2.7种GC组合关系?3.为什么这么多GC4.如何查看默认GC?5.Serial GC:串行回收5.1…

字符设备驱动开发实验

我们以 chadev 这个虚拟设备为 例,完整的编写一个字符设备驱动模块。chadev 不是实际存在的一个设备,是为了方 便讲解字符设备的开发而引入的一个虚拟设备设备有两个缓冲区,一个为读缓冲 区,一个为写缓冲区,这两个缓冲…

Spring事务隔离级别详解

Spring有五大隔离级别: 1、ISOLATION_DEFAULT 2、ISOLATION_READ_UNCOMMITTED 3、ISOLATION_READ_COMMITTED 4、ISOLATION_REPEATABLE_READ 5、ISOLATION_SERIALIZABLE ISOLATION_DEFAULT 用底层数据库的设置隔离级别。 ISOLATION_READ_UNCOMMITTED 一个事…