操作系统—王道考研之进程管理

news2024/11/17 7:46:14

by:星辰

课程视频链接:https://www.bilibili.com/video/BV1YE411D7nH

第 2 章 进程管理

2.1 进程与线程

2.1.1 进程的定义、特征、组成、组织

2.1.1.1 总览

2.1.1.2 进程的定义
(1)程序的概念

程序:一组计算机能识别和执行的指令。

是静态的,就是个存放在磁盘里的可执行文件,如:QQ.exe。

早期的计算机只支持单道程序:

(2)进程的概念

是动态的,是程序的一次执行过程,如:可同时启动多次QQ程序

  • 进程和程序的区别和联系:

区别:

1、进程是动态的,程序是静态的

2、进程有独立性,能并发执行;程序不能并发执行

3、二者无一一对应关系

4、进程异步运行,会相互制约;程序不具备此特征

但是,进程与程序又有密切的联系: 进程不能脱离具体程序而虚设, 程序规定了相应进程所要完成的动作

5、组成不同。进程包含PCB、程序段、数据段。程序包含数据和指令代码

6、程序是一个包含了所有指令和数据的静态实体。本身除占用磁盘的存储空间外,并不占用系统如CPU、内存等运行资源

7、进程由程序段、数据段和PCB构成,会占用系统如CPU、内存等运行资源

8、一个程序可以启动多个进程来共同完成

联系:

1、进程不能脱离具体程序而虚设, 程序规定了相应进程所要完成的动作

2、同一个程序多次执行会对应多个进程

(3)进程的定义

2.1.1.3 进程的特征

异步性会导致并发程序执行结果的不确定性

2.1.1.4 进程的组成
(1)总览
  • 程序段、数据段、🥇PCB

其中最主要的就是进程控制块PCB(Process Control Block)

🤔操作系统是这些进程的管理者,它要怎么区分各个进程?🧐

当进程被创建时,操作系统会为该进程分配一个唯一的、不重复的“身份证号”—— PID(Process ID,进程ID)

  • 操作系统要记录PID、进程所属用户ID(UID)

基本的进程描述信息,可以让操作系统区分各个进程

  • 还要记录给进程分配了哪些资源(如:分配了多少内存、正在使用哪些I/O设备、正在使用哪些文件)

可用于实现操作系统对资源的管理

  • 还要记录进程的运行情况(如:CPU使用时间、磁盘使用情况、网络流量使用情况等)

可用于实现操作系统对进程的控制、调度

这些信息都被保存在一个数据结构PCB(Process Control Block)中,即进程控制块

操作系统需要对各个并发运行的进程进行管理,但凡管理时所需要的信息,都会被放在PCB中

(2)PCB

PCB简介

☀PCB中记录了操作系统所需的,用于描述进程的当前情况以及控制进程运行的全部信息。

PCB的作用是使一个在多道程序环境下不能独立运行的程序(含数据),成为一个能独立运行的基本单位,一个能与其他进程并发执行的进程。

或者说,OS是根据PCB来对并发执行的进程进行控制和管理的

例如,当OS要调度某进程执行时,要从该进程的PCB中查处其现行状态及优先级;在调度到某进程后,要根据其PCB中所保存的处理机状态信息,设置该进程恢复运行的现场,并根据其PCB中的程序和数据的内存始址,找到其程序和数据;

进程在执行过程中,当需要和与之合作的进程实现同步,通信或者访问文件时,也都需要访问PCB;

当进程由于某种原因而暂停执行时,又须将器断点的处理机环境保存在PCB中。

可见,在进程的整个生命期中,系统总是通过PCB对进程进行控制的,即系统是根据进程的PCB而不是任何别的什么而感知到该进程的存在的。

所以说,PCB是进程存在的唯一标志。

  • PCB通常包含的内容:

PCB是进程存在的唯一标志,当进程被创建时,操作系统为其创建PCB,当进程结束时,会回收其PCB。

操作系统对进程进行管理工作所需的信息都存在PCB中

(3)程序段、数据段
  • PCB 是给操作系统用的
  • 程序段、数据段是给进程自己用的

2.1.1.5 进程的组织

(1)链接方式

多核CPU可有多个进程同时处于运行态

很多操作系统还会根据阻塞原因不同,再分为多个阻塞队列

(2)索引方式

2.1.2 进程的状态及转换

状态:运行、就绪、阻塞、创建、终止

转换:就绪——>运行、运行——>就绪、运行——>阻塞、阻塞——>就绪

2.1.2.1 总图

2.1.2.2 进程的状态

进程PCB中,会有一个变量 state 来表示进程的当前状态。如:1表示创建态、2表示就绪态、3表示运行态…

为了对同一个状态下的各个进程进行统一的管理,操作系统会将各个进程的PCB组织起来。

(1)三种基本状态(就绪、运行、阻塞)

(2)创建态和结束态

  • 创建态
  • 结束态
2.1.2.3 进程状态的转换
  • 进程一共有如下5种状态,那么他们之间如何实现切换呢?

  • 咱们从一个进程的从无到有看起,来了解进程5种状态之间的转换

(1)运行态一一等待态:等待使用资源或某事件发生,如等待外设传输、等待人工干预。

(2)等待态一一就绪态:资源得到满足或某事件己经发生,如外设传输结束、人工干预完成。

(3)运行态一一就绪态:运行时间片到,或出现有更高优先级进程。

(4)就绪态一一运行态:CPU空闲时被调度选中一个就绪进程执行。

  • 来一张形象生动的图片感受一下5种状态之间的切换

2.1.3 原语实现对进程的控制

2.1.3.1 总图

2.1.3.2 什么是进程控制?

2.1.3.3 原语实现对进程的控制

2.1.3.4 回忆进程的组织
  • 进程在操作系统中的组织使各个进程能够有序的进行切换和运行
2.1.3.5 进程控制大致图解

这里说明一下调度和切换的区别:

调度是指决定资源分配给哪个进程的行为,是一种决策行为

切换是指实际分配的行为,是执行行为

一般来说先有资源调度,后有进程切换

2.1.3.6 进程控制原语的相同点

  • 接下来我们就具体学习一下关于进程控制的五种原语,进程的创建、终止、唤醒、阻塞、切换;
2.1.3.7 进程控制的五种原语
(1)进程的创建原语

(2)进程的终止原语

(3)进程的唤醒和阻塞原语
  • 进程的阻塞和唤醒原语是成对存在的,必须成对使用
  • 阻塞原语是由被阻塞进程自我调用实现的
  • 唤醒原语是由一个被唤醒进程合作或被其他相关的进程调用实现的

(4)进程的切换原语

  • 学习技巧:进程控制会导致进程状态的转换。无论哪个进程控制原语,要做的无非三类事情:
    • 更新PCB中的信息
      • 所有的进程控制原语一定都会修改进程状态标志
      • 剥夺当前运行进程的CPU使用权必然需要保存其运行环境
      • 某进程开始运行前必然要恢复期运行环境
    • 将PCB插入合适的队列
    • 分配/回收资源

2.1.4 进程之间的通信

2.1.4.1 总图

2.1.4.2 什么是进程通信?
  • 图中我们可以知道什么是进程通信,以及进程通信的低级和高级方式;
  • 我们还可以知道为什么要引入进程通信方式,以及它的意义
2.1.4.3 共享储存
  • 共享一块大家都可以访问的空间,一次只能有一个进程进行读或写操作
2.1.4.4 管道通信

2.1.4.5 消息传递
  • 发送信息的进程将消息头写好,接受信息进程根据消息头读取信息或寻找信封是哪一个

2.1.5 线程概念与多线程模型

2.1.5.1 总图

2.1.5.2 为什么要引入线程?

  • 为了方便于理解,我打开了我的任务管理器,可以看出chrome一个进程,下面有很多分支,可以把这些分支当做线程看待,PID即进程和线程都有的标识符。
2.1.5.3 什么是线程?

2.1.5.4 引入线程带来的变化及进程与线程的比较

2.1.5.5 线程的属性

2.1.5.6 线程的实现方式
  • 前面我们了解了引入线程的好处和引入线程的变化,以及线程的属性,那么线程如何实现呢?
  • 线程的实现分为两类:用户级线程(User-Level Thread,UTL)和内核级线程(Kernel-Level Thread,KTL)。内核级线程又称内核支持的线程
(1)用户级线程

(2)内核级线程

(3)特殊的组合方式及重点注意

2.1.5.7 多线程模型
  • 前面我们提到了线程的实现方式,有用户级和内核级。那么这两种模式的交叉组合就会产生几种不一样的组织结构,即不一样的模型。
(1)多对一模型

(2)一对一模型

(3)多对多模型
  • 此种模型效率是三种模型中最好的

习题

1、一个进程映像是().
  • 协处理器执行的一个程序
  • 一个独立的程序+数据集
  • PCB结构与程序和数据的组合
  • 一个独立的程序

进程映像 = PCB+程序段+数据段

辅助处理器(Coprocessor),也译作协处理器,这是一种协助中央处理器完成其无法执行或执行效率、效果低下的处理工作而开发和应用的处理器。这种中央处理器无法执行的工作有很多,比如设备间的信号传输、接入设备的管理等:而执行效率、效果低下的有图形处理、声频处理等。为了进行这些处理,各种辅助处理器就诞生了。

C

2、下列关于线程的叙述中,正确的是()
  • 线程包含CPU现场,可以独立执行程序
  • 每个线程有自己独立的地址空间
  • 进程只能包含一个线程
  • 线程之间的通信必须使用系统调用函数

D可以改成:相同进程的线程之间不一定使用系统调用,不同进程的线程之间必须使用系统调用

A

3、进程之间交换数据不能通过()途径进行。
  • 共享文件
  • 消息传递
  • 访问进程地址空间
  • 访问共享存储区

其他进程没有权限访问自己的进程,更不能进行数据交换

C

4、进程与程序的根本区别是().
  • 静态和动态特点
  • 是不是被调入内存
  • 是不是具有就绪、运行和等待三种状态
  • 是不是占有处理器

A

5、下面的叙述中,正确的是( ).
  • 进程获得处理器运行是通过调度得到的
  • 优先级是进程调度的重要依据,一旦确定不能改动
  • 在单处理器系统中,任何时刻都只有一个进程处于运行状态
  • 进程申请处理器而得不到满足时,其状态变为阻塞状态

由上图可知,优先级可以被改动,B❌

由上图可知,就绪态获得处理机转为运行态就是被调度的过程,且只有就绪态可以获得处理机,阻塞态不能直接获得处理机资源,需要先获得其他资源后转为就绪态才可以被调度,从而获得处理机,所以A⭕,D❌

最后的C是最难判断的,不够严谨,单核处理机系统中有可能出现死锁,所以有可能所有的进程都处于阻塞态,没有处于运行态的进程

A

6、操作系统是根据()来对并发执行的进程进行控制和管理的。
  • 进程的基本状态
  • 进程控制块
  • 多道程序设计
  • 进程的优先权

在[2.1.1.5 进程的组织](#2.1.1.5 进程的组织)中可以知晓

B

7、在任何时刻,一个进程的状态变化()引起另一个进程的状态变化。
  • 必定
  • 一定不
  • 不一定
  • 不可能

一个运行态结束(转化为阻塞态)会导致另一个就绪态转化为运行态

一个阻塞态获得资源(转化为就绪态)不会导致另一个运行态的变化

C

8、在单处理器系统中,如果同时存在10个进程,则处于就绪队列中的进程最多有()个。
  • 1
  • 8
  • 9
  • 10

就绪队列非空——》一定有一个进程处于运行态

没有进程处于运行态——》就绪对列必为空

C

9、一个进程释放了一台打印机,它可能会改变()的状态。
  • 自身进程
  • 输入/输出进程
  • 另一个等待打印机的进程
  • 所有等待打印机的进程

显然C

10、假定系统进程所请求的一次l/O操作完成后,将使进程状态从()
  • 运行状态变为就绪状态
  • 运行状态变为阻塞状态
  • 就绪状态变为运行状态
  • 阻塞状态变为就绪状态

D

11、并发进程失去封闭性,是指() 。
  • 多个相对独立的进程以各自的速度向前推进
  • 并发进程的执行结果与速度无关
  • 并发进程执行时,在不同时刻发生的错误
  • 并发进程共享变量,其执行结果与速度有关(反复横跳)

D

12、一个进程的基本状态可以从其他两种基本状态转变过去,这个基本的状态一定是()
  • 执行状态
  • 阻塞态
  • 就绪态
  • 完成状态

C

13、通常用户进程被建立后,( ).
  • 便一直存在于系统中,直到被操作人员撤销
  • 随着进程运行的正常或不正常结束而撤销
  • 随着时间片轮转而撤销与建立
  • 随着进程的阻塞或者唤醒而撤销与建立

进程可以自动结束,不一定要被操作人员手动撤销

进程不会在过程中随着时间片轮转和阻塞或者唤醒而撤销与建立,它只会发生状态的转化,不会消失和增加

B

14、进程在处理器上执行时,( ).
  • 进程之间是无关的,具有封闭特性
  • 进程之间都有交互性,相互依赖、相互制约,具有并发性
  • 具有并发性,即同时执行的特性
  • 进程之间可能是无关的,但也可能是有交互性的

AB都对,但D更全面

同时是并行,不是并发

D

15、下面的说法中,正确的是().
  • 不论是系统支持的线程还是用户级线程,其切换都需要内核的支持
  • 线程是资源分配的单位,进程是调度和分派的单位
  • 不管系统中是否有线程,进程都是拥有资源的独立单位
  • 在引入线程的系统中,进程仍是资源调度和分派的基本单位

用户级线程不需要内核

两个反掉了

进程是拥有资源的独立单位,其中的多个线程只是共享资源

C

16、在多对一的线程模型中,当一个多线程进程中的某个线程被阻塞后( ).
  • 该进程的其他线程仍可继续运行
  • 整个进程都将阻塞
  • 该阻塞线程将被撤销
  • 该阻塞线程将永远不可能再执行

B

17、用信箱实现进程间互通信息的通信机制要有两个通信原语,它们是().
  • 发送原语和执行原语
  • 就绪原语和执行原语
  • 发送原语和接收原语
  • 就绪原语和接收原语
18、下列几种关于进程的叙述,()最不符合操作系统对进程的理解。
  • 进程是在多程序环境中的完整程序
  • 进程可以由程序、数据和PCB描述
  • 线程(Thread)是一种特殊的进程
  • 进程是程序在一个数据集合上的运行过程,它是系统进行资源分配和调度的一个独立单元

进程和程序不同,前者静态,后者动态

A

19、支持多道程序设计的操作系统在运行过程中,不断地选择新进程运行来实现CPU的共享,但其中()不是引起操作系统选择新进程的直接原因。
  • 运行进程的时间片用完
  • 运行进程出错
  • 运行进程要等待某一事件发生
  • 有新进程进入就绪状态

D

20、同一程序经过多次创建,运行在不同的数据集上,形成了()的进程。
  • 不同
  • 相同
  • 同步
  • 互斥

进程的三大组成(PCB、数据段、程序段)中有任何一个不一样,就是不同的进程

同步:两个进程需相互配合以完成工作

互斥:两个进程互斥地访问临界资源(不可同时访问)

A

21、PCB是进程存在的唯一标志,下列()不属于PCB。
  • 进程ID
  • CPU状态
  • 堆栈指针
  • 全局变量

D

22、一个计算机系统中,进程的最大数目主要受到()限制。
  • 内存大小
  • 用户数目
  • 打开的文件数
  • 外部设备数量

A

23、进程创建完成后会进入一个序列,这个序列称为().
  • 阻塞队列
  • 挂起序列
  • 就绪队列
  • 运行队列

系统创建进程时,会给进程分配资源(如分配内存、建立页表),然后就转化为了就绪态,进入就绪对列的队尾

C

24、在一个多道系统中,若就绪队列不空,就绪的进程数目越多,处理器的效率()。
  • 越高
  • 越低
  • 不变
  • 不确定

C

25、在具有通道设备的单处理器系统中实现并发技术后,()。
  • 各进程在某一时刻并行运行,CPU与I/O设备间并行工作
  • 各进程在某一时间段内并行运行,CPU与I/O设备间串行工作
  • 各进程在某一时间段内并发运行,CPU与I/O设备间并行工作
  • 各进程在某一时刻并发运行,CPU与I/O设备间串行工作

单处理系统,只能由一个进程,只能进行并发操作

C

26、进程自身决定()。
  • 从运行态到阻塞态
  • 从运行态到就绪态
  • 从就绪态到运行态
  • 从阻塞态到就绪态

A

27、对进程的管理和控制使用()。
  • 指令
  • 原语
  • 信号量
  • 信箱

要实现不可中断性

B

28、下面的叙述中,正确的是().
  • 引入线程后,处理器只能在线程间切换
  • 引入线程后,处理器仍在进程间切换
  • 线程的切换,不会引起进程的切换
  • 线程的切换,可能引起进程的切换

D

29、下面的叙述中,正确的是()。
  • 线程是比进程更小的能独立运行的基本单位,可以脱离进程独立运行
  • 引入线程可提高程序并发执行的程度,可进一步提高系统效率
  • 线程的引入增加了程序执行时的时空开销
  • 一个进程一定包含多个线程

进程切换:必须切换虚拟地址空间,TLB、Cache中的数据作废

B

30、下面的叙述中,正确的是()。
  • 同一进程内的线程可并发执行,不同进程的线程只能串行执行
  • 同一进程内的线程只能串行执行,不同进程的线程可并发执行
  • 同一进程或不同进程内的线程都只能串行执行
  • 同一进程或不同进程内的线程都可以并发执行

D

31、下列描述中,哪个不是多线程系统的特长()。
  • 利用线程并行地执行矩阵乘法运算
  • Web服务器利用线程请求HTTP服务
  • 键盘驱动程序为每个正在运行的应用配备一个线程,用来响应相应的键盘输入
  • 基于GUI的debugger用不同线程处理用户的输入、计算、跟踪等操作。

适合用多线程解决的业务场景:可以将处理逻辑拆分成多个互不相干的部分; 计算量较大,需要高并发

C

32、在进程转换时,下列()转换是不可能发生的。
  • 就绪态→运行态
  • 运行态→就绪态
  • 运行态→阻塞态
  • 阻塞态→运行态

D

33、当()时,进程从执行状态(运行态)转变为就绪态
  • 进程被调度程序选中
  • 时间片到
  • 等待某一事件
  • 等待的事件发生

等待某一事件发生:申请I/O操作(运行——》阻塞)

等待的事件发生:I/O操作完成(阻塞——》就绪)

B

34、两个合作进程(Cooperating Processes)无法利用()交换数据。
  • 文件系统
  • 共享内存
  • 高级语言程序设计中的全局变量
  • 消息传递系统

“管道”,就是一种特殊的共享文件,受文件系统的管理,基本只存在于内存当中,普通文件存在于磁盘中

全局变量存在于进程的数据段中,不同的进程不能访问本进程的数据段,所以也就无法交换全局变量

C

35、以下可能导致一个进程从运行态变为就绪态的事件是().
  • 一次IO操作结束
  • 运行进程需做I/O操作
  • 运行进程结束
  • 出现了比现在进程优先级更高的进程

D

36、()必会引起进程切换。
  • 一个进程创建后,进入就绪状态
  • 一个进程从运行状态变为就绪状态
  • 一个进程从阻塞状态变为就绪状态
  • 以上答案都不对

B

37、进程处于()时,它是处于非阻塞状态。
  • 等待从键盘输入数据
  • 等待协作进程的一个信号
  • 等待操作系统分配CPU时间
  • 等待网络数据进入内存

阻塞态:在等待除了CPU之外的某种资源的分配,或等待某事件发生

key:只有其他资源/事件都就位了(就绪态),进程才有资格等待CPU资源的分配

C

38、一个进程被唤醒,意味着().
  • 该进程可以重新竞争CPU
  • 优先级变大
  • PCB移动到就绪队列之首
  • 进程变为运行态

唤醒:转化为就绪态

A

39、进程创建时,不需要做的是().
  • 填写一个该进程的进程表项
  • 分配该进程适当的内存
  • 将该进程插入就绪队列
  • 为该进程分配CPU

D

40、计算机两个系统中两个协作进程之间不能用来进行进程间通信的是()。
  • 数据库
  • 共享内存
  • 消息传递机制
  • 管道

A

41、下列说法中,不正确的是().
  • 一个进程可以创建一个或多个线程
  • 一个线程可以创建一个或多个线程
  • 一个线程可以创建一个或多个进程
  • 一个进程可以创建一个或多个进程

一个进程一定有它的父进程,电脑开机会有一个祖先进程(最高级)

线程是进程的孩子,线程不能创建进程

C


2.2 处理机的调度

2.2.1 处理机调度的概念及层次

2.2.1.1 总览

2.2.1.2 调度的基本概念

2.2.1.3 调度的三个层次
(1)高级调度(作业调度)

作业后备队列(内存空间有限,有时无法将用户提交的作业全部放入内存)

作业:一个具体的任务

用户向系统提交一个作业 ≈ 用户让操作系统启动一个程序(来处理一个具体的任务)

高级调度(作业调度)。按一定的原则从外存的作业后备队列中挑选一个作业调入内存,并创建进程(创建PCB)。每个作业只调入一次,调出一次。作业调入时会建立PCB,调出时才撤销PCB。

简化理解:好几个程序需要启动,到底先启动哪个

(2)中级调度(内存调度)

本文提到的挂起状态在[(4)进程的挂起状态与七状态模型](# (4)进程的挂起状态与七状态模型)中讲解

内存不够时,可将某些进程的数据调出外存,等内存空闲或者进程需要运行时再重新调入内存

暂时调到外存等待的进程状态为挂起状态,被挂起的进程PCB会被放到挂起队列

中级调度(内存调度)——按照某种策略决定将哪个处于挂起状态的进程重新调入内存

一个进程可能会被多次调出、调入内存,因此中级调度发生的频率要比高级调度更高

(3)低级调度(进程调度)

低级调度(进程调度/处理机调度)—— 按照某种策略从就绪队列中选取一个进程,将处理机分配给它。

进程调度是操作系统中最基本的一种调度,在一般的操作系统中都必须配置进程调度。

进程调度的频率很高,一般几十毫秒一次。

(4)进程的挂起状态与七状态模型

暂时调到外存等待的进程状态为挂起状态(挂起态,suspend)

挂起态又可以进一步细分为就绪挂起、阻塞挂起两种状态

五状态模型→七状态模型(还是有必要掌握的)

注意“挂起”和“阻塞”的区别,两种状态都是暂时不能获得CPU的服务,但挂起态是将进程映像调到外存去了,而阻塞态下进程映像还在内存中

有的操作系统会把就绪挂起、阻塞挂起分为两个挂起队列,甚至会根据阻塞原因不同再把阻塞挂起进程进一步细分为多个队列。

(5)三层调度的联系和对比

2.2.2 进程调度的时机、切换与过程、方式

  • 时机(主动放弃与被动放弃)
  • 切换与过程(广义与狭义)
  • 方式(非剥夺与剥夺)
2.2.2.1 总览

2.2.2.2 时机

进程调度(低级调度),就是按照某种算法从就绪队列中选择一个进程为其分配处理机

(1)什么时候进行进程调度?

(2)什么时候不能进行进程调度?

(3)OS内核程序临界区与普通临界区的进程调度情况

2.2.2.3 进程调度的方式
  • 所谓进程调度方式,是指当某个进程正在处理机上执行时,若有某个更为重要或紧迫的进程需要处理,即有优先权更高的进程进入就绪队列,此时应如何分配处理机。

2.2.2.4 进程的切换和过程

  • “狭义的进程调度”与“进程切换”的区别:

狭义的进程调度指的是从就绪队列中选中一个要运行的进程。

进程切换是指一个进程让出处理机,由另一个进程占用处理机的过程。

广义的进程调度包含了选择一个进程和进程切换两个步骤。

进程切换的过程主要完成了:

  • 对原来运行进程各种数据的保存
  • 对新的进程各种数据的恢复

注意:进程切换是有代价的,因此如果过于频繁进行进程调度、切换,必然会使整个系统的效率降低,使系统大部分时间都花在了进程切换上,而真正用于执行进程的时间减少。

这个进程可以是刚刚被暂停执行的进程,也可能是另一个进程,后一种情况就需要进程切换

如:程序计数器、程序状态字、各种数据寄存器等处理机现场信息,这些信息一般保存在进程控制块

2.2.3 调度算法的评价指标

2.2.3.1 总览

2.2.3.2 CPU利用率

2.2.3.3 系统吞吐量

2.2.3.4 周转时间

2.2.3.5 等待时间

2.2.3.6 响应时间

2.2.4 作业/进程调度算法

2.2.4.1 总览

2.2.4.2 先来先服务—FCFS
  • First Come First Sever

2.2.4.3 短作业优先—SJF
  • Shortest Job First

  • 非抢占式—SJF

  • 抢占式—SJF(SRTN)

  • 注意几个细节

2.2.4.4 高响应比优先—HRRN
  • Highest Response Ratio Next

不会导致饥饿

2.2.4.5 三种算法的对比和总结

2.2.5 调度算法

2.2.5.1 总览

2.2.5.2 时间片轮转—RR
  • Round-Robin

  • 时间片为2举例

  • 时间片为5举例

  • 可能出现的问题,比如与FCFS对比

2.2.5.3 优先级调度算法

  • 非抢占式例子

  • 抢占式例子

  • 补充

2.2.5.4 多级反馈队列调度算法

  • 举个例子

2.2.5.5 三种算法的对比总结

习题

1、时间片轮转调度算法是为了()。
  • 多个用户能及时请求系统服务
  • 使系统变得高效
  • 优先级较高的进程得到及时响应
  • 需要CPU时间最少的进程最先做

雨露均沾

由图可知,有可能更低效

C、D分别是优先级调度、短作业优先调度算法

A

2、在单处理器的多进程系统中,进程什么时候占用处理器及决定占用时间的长短是由()决定的。
  • 进程相应的代码长度
  • 进程总共需要运行的时间
  • 进程特点和进程调度策略
  • 进程完成什么功能

C

3、()有利于CPU繁忙型的作业,而不利于I/O繁忙型的作业。
  • 时间片轮转调度算法
  • 先来先服务调度算法
  • 短作业(进程)优先算法
  • 优先权调度算法
4、下面有关选择进程调度算法的准则中,不正确的是()。
  • 尽快响应交互式用户的请求
  • 尽量提高处理器利用率
  • 尽可能提高系统吞吐量
  • 适当增长进程就绪队列的等待时间

显然D

5、设有4个作业同时到达,每个作业的执行时间均为2h,它们在一台处理器上按单道式运行,则平均周转时间为().
  • 1h
  • 5h
  • 2.5h
  • 8h

B

6、若每个作业只能建立一个进程,为了照顾短作业用户,应采用();为了照顾紧急作业用户,应采用();为了能实现人机交互,应采用();而能使短作业、长作业和交互作业用户都满意,应采用()。
  • FCFS调度算法
  • 短作业优先调度算法
  • 时间片轮转调度算法
  • 多级反馈队列调度算法
  • 剥夺式优先级调度算法

BECD

7、()优先级是在创建进程时确定的,确定之后在整个运行期间不再改变。
  • 先来先服务
  • 动态
  • 短作业
  • 静态

D

8、现在有己个同时到达的作业J1、J2和J3,它们的执行时间分别是T1、T2、T3,且T1<T2<T3。系统按单道方式运行且采用短作业优先调度算法,则平均周转时间是()
  • T1+T2+T3
  • (3T1+2T2+ T3)/3
  • (T1+ T2+ T3)/3
  • (T1+2T2+ 3T3)/3

B

9、设有三个作业,其运行时间分别是2h、5h、3h,假定它们同时到达,并在同一台处理器上以单道方式运行,则平均周转时间最小的执行顺序是()。
  • J1,J2,3
  • J3,J2,J1
  • J2,J1,J3
  • J1,J3,J2

短作业优先,直接按时间顺序排序(从小到大)

D

10、采用时间片轮转调度算法分配CPU时,当处于运行态的进程用完一个时间片后,它的状态是()状态。
  • 阻塞
  • 运行
  • 就绪
  • 消亡

时间片到,或者被抢走处理机,就由运行态转化为就绪态

C

11、一个作业8∶00到达系统,估计运行时间为1h。若10∶00开始执行该作业,其响应比是()。
  • 2
  • 1
  • 3
  • 0.5

C

12、关于优先权大小的论述中,正确的是().
  • 计算型作业的优先权,应高于I/O型作业的优先权
  • 用户进程的优先权,应高于系统进程的优先权
  • 在动态优先权中,随着作业等待时间的增加,其优先权随之下降
  • 在动态优先权中,随着进程执行时间的增加,其优先权降低

D

13、下列调度算法中,()调度算法是绝对可抢占的。
  • 先来先服务
  • 时间片轮转
  • 优先级
  • 短进程优先

B

==14、==作业是用户提交的,进程是由系统自动生成的,除此之外,两者的区别是()。
  • 两者执行不同的程序段
  • 前者以用户任务为单位,后者以操作系统控制为单位
  • 前者是批处理的,后者是分时的
  • 后者是可并发执行,前者则不同

B

15、进程调度算法采用固定时间片轮转调度算法,当时间片过大时,就会使时间片轮转法算法转化为()调度算法。
  • 高响应比优先
  • 先来先服务
  • 短进程优先
  • 以上选项都不对

时间片太大,导致每个进程被运行时都可以直接完成,变成了先来先服务算法

B

16、有5个批处理作业A,B、C、D、E几乎同时到达,其预计运行时间分别为10、6、2、4、8,其优先级(由外部设定)分别为3、5、2、1、4,这里5为最高优先驭。以下各种调度算法中,平均周转时间为14的是()调度算法。
  • 时间片轮转(时间片为1)
  • 优先级调度
  • 先来先服务(按照顺序10、6、2、4、8 )
  • 短作业优先

2.3 进程的同步与互斥

2.3.1 同步与互斥

2.3.1.1 总览

2.3.1.2 进程同步
  • 同步也称为直接制约关系
  • 在多道程序环境下,进程是并发执行的,不同进程之间存在着不同的相互制约关系。为了协调进程之间的相互制约关系,如等待、传递信息等,引入了进程同步的概念。进程同步是为了解决进程的异步问题。
  • 一个简单的例子来理解这个概念。
  • 例如,让系统计算1 + 2 x 3,假设系统产生两个进程:一个是加法进程,一个是乘法进程。要让计算结果是正确的,一定要让加法进程发生在乘法进程之后,但实际上操作系统具有异步性,若不加以制约,加法进程发生在乘法进程之前是绝对有可能的,因此要制定一定的机制去约束加法进程,让它在乘法进程完成之后才发生。

异步性:进程具有异步性的特征。异步性是指,各并发执行的进程以各自独立的、不可预知的速度向前推进。

2.3.1.3 进程互斥
  • 互斥,亦称间接制约关系。进程互斥指当一个进程访问某临界资源时,另一个想要访问该临界资源的进程必须等待。当前访问临界资源的进程访问结束,释放该资源之后,另一个进程才能去访问临界资源。
  • 在这里需复习一下临界资源的概念。
  • 我们把一个时间段内只允许一个进程使用的资源称为临界资源。许多物理设备(比如摄像头、打印机)都属于临界资源。此外还有许多变量、数据、内存缓冲区等都属于临界资源。
  • 对临界资源的访问,必须互斥地进行。

  • 为了禁止两个进程同时进入临界区,需遵循以下准则

2.3.2 实现临界区进程互斥的软件实现方法

2.3.2.1 总览

  • 软件实现方法的思想:在进入区设置并检查一些标志来标明是否有进程在临界区中,若已有进程在临界区,则在进入区通过循环检查进行等待,进程离开临界区后则在退出区修改标志。入区通过循环检查进行等待,进程离开临界区后则在退出区修改标志。
2.3.2.2 单标志法

2.3.2.3 双标志先检查法

2.3.2.4 双标志后检查法

2.3.2.5 Peterson算法

2.3.3 实现临界区进程互斥的硬件实现方法

2.3.3.1 总览

2.3.3.2 中断隐藏方法

2.3.3.3 TestAndSet指令
  • 执行TSL指令时,它的内部运转逻辑:
  • 假设lock现在为false,代表临界资源A空闲,那么我就可以访问这个资源,同时将lock=true,提醒别的进程,这个临界资源A我正在使用,让他们等等
  • 假设lock为true,代表临界资源正在有人使用,所以我必须等待,并且将lock=true,并不影响什么,所以没关系,只是为了让lock为false时可以上锁,将上锁与检查在一个TSL指令完成。

2.3.3.4 Swap指令
  • old是每个进程都要进行的一步,都必须将old=true
  • 分析一下这样做的原因:
  • 因为lock是某一特定临界资源的共享变量,当每一个进程准备访问这个特定的临界资源时,初始化old=true,然后进入while循环进行交换,如果当前lock是false,则交换后old=false,则当前进程可以跳出循环进入临界区代码段,同时因为交换,lock=old=true上锁,不让别的进程来打扰,别的进程会因为lock变为true,一直在while循环等待,当我使用完临界资源,则将lock=false,此时别的进程再交换old和lock就能判断old=false,可以跳出循环,使用临界资源。

2.3.4 信号量机制

2.3.4.1 总览

2.3.4.2 为什么引入信号量机制?

为了更好的解决进程互斥与同步的问题

2.3.4.3 什么是信号量机制?

2.3.4.4 整型信号量

2.3.4.5 记录型信号量

(1)举一个生动形象的例子了解记录型信号量
  • 一张图咱们回忆一下进程的状态

  • 一个例子




(2)梳理一下记录型信号量的知识点(P、V)

2.3.5 信号量机制实现进程的互斥、同步与前驱关系

2.3.5.1 总览

在看此小结内容之前,需熟悉前一节[信号量机制](#2.3.4 信号量机制)里面的知识,关于P、V操作内部实现原理等

2.3.5.2 信号量机制实现进程互斥

2.3.5.3 信号量机制实现进程同步

想象一下四则运算的顺序,加减乘除

  • 要想理解这一部分知识,必须知道P、V操作的内部实现原理

2.3.5.4 信号量机制实现前驱关系

2.3.6 进程同步与互斥经典问题

  • 生产者-消费者问题
  • 多生产者-多消费者问题
  • 吸烟者问题
  • 读者-写者问题
  • 哲学家进餐问题
2.3.6.1 总览

同步时,先V后P

2.3.6.2 生产者-消费者问题
(1)问题描述
  • 系统中有一组生产者进程一组消费者进程,生产者进程每次生产一个产品放入缓冲区,消费者进程每次从缓冲区中取出一个产品并使用。(注: 这里的“产品”理解为某种数据)
  • 生产者、消费者共享一个初始为空、大小为n的缓冲区
  • 只有缓冲区没满时,生产者才能把产品放入缓冲区,否则必须等待。
  • 只有缓冲区不空时,消费者才能从中取出产品,否则必须等待。
  • 缓冲区是临界资源,各进程必须互斥地访问。

(2)问题分析
  • 1)关系分析。生产者和消费者对缓冲区互斥访问是互斥关系,同时生产者和消费者又是一个相互协作的关系,只有生产者生产之后,消费者才能消费,它们也是同步关系
  • 2)整理思路。根据各进程的操作流程确定P、V操作的大致顺序。
    生产者每次要消耗(P)一个空闲缓冲区,并生产(V)一个产品。
    消费者每次要消耗(P)一个产品,并释放一个空闲缓冲区(V)。
    往缓冲区放入/取走产品需要互斥。
  • 3)信号量设置。设置信号量。设置需要的信号量,并根据题目条件确定信号量初值。( 互斥信号量初值一般为1,同步信号量的初始值要看对应资源的初始值是多少)

(3)如何实现?

(4)实现互斥的P操作一定要在实现同步的P操作之后

(5)知识回顾与重要考点

2.3.6.3 多生产者-多消费者问题
(1)问题描述

(2)问题分析

(3)实现方法
  • 有mutex
  • 无mutex
  • 为什么有mutex和没有mutex一样呢?

原因在于:本题中的缓冲区大小为1,在任何时刻,apple、 orange、 plate 三个同步信号量中最多只有一个是1。因此在任何时刻,最多只有一个进程的P操作不会被阻塞,并顺利地进入临界区…

  • 如果有两个盘子plate
(4)知识总结与重要考点
  • 总结:在生产者_消费者问题中,如果缓冲区大小为1,那么有可能不需要设置互斥信号量就可以实现互斥访问缓冲区的功能。当然,这不是绝对的,要具体问题具体分析。
  • 建议:在考试中如果来不及仔细分析,可以加上互斥信号量,保证各进程一定会互斥地访问缓冲区。但需要注意的是,·实现互斥的P操作一定要在实现同步的P操作之后·,否则可能引起·“死锁”·。

2.3.6.4 读者-写者问题
(1)问题描述

(2)问题分析

(3)实现方法
  • 给count加mutex互斥访问
    • 这里说一下为什么要加mutex。
    • 比如:当count=0时,第一个读者进程执行到p(rw),rw=0,假设此时时间片到了,切换到第二个读者进程,第二个进程发现count=0,则执行p(rw),但是此时rw=0,于是第二个进程被堵在p(rw)这里,同理,后面的可能会有多个进程堵在p(rw),只有当第一个进程再次获得时间片,执行count++,让count不为0,然后其他进程就可以直接绕过if直接进行count++来访问文件,但是第三个读者进程和后面的几个可能堵在p(rw)的多个读者进程则必须得等count–为0后才可以再次和写进程竞争来访问文件,对count的访问没有做到一气呵成,会导致本来一些进程一直堵在p(rw)。

  • 加一个w实现“读写公平法”
    • 在上面的算法中,读进程是优先的,即当存在读进程时,写操作将被延迟,且只要有 一个读进程活跃,随后而来的读进程都将被允许访问文件。这样的方式会导致写进程可能长时间等待,且存在写进程“饿死”的情况。
    • 若希望写进程优先,即当有读进程正在读共享文件时,有写进程请求访问,这时应禁止后续读进程的请求,等到已在共享文件的读进程执行完毕,立即让写进程执行,只有在无写进程执行的情况下才允许读进程再次运行。为此,增加一个信号量并在上面程序的writer()和 reader()函数中各增加一对PV操作,就可以得到写进程优先的解决程序。

(4)知识回顾与重要考点

2.3.6.5 吸烟者问题
(1)问题描述

(2)问题分析

(3)实现方法

(4)知识回顾与重要考点

2.3.6.6 哲学家进餐问题
(1)问题描述

(2)问题分析

(3)如何实现

(4)知识回顾与重要考点

2.3.7 管程和java中实现管程的机制

2.3.7.1 总览

2.3.7.2 为什么引入管程?

2.3.7.3 管程的组成及基本特征

2.3.7.4 管程实现生产者消费者问题

2.3.7.5 java中类似于管程的机制

习题

1、下列对临界区的论述中,正确的是()。
  • 临界区是指进程中用于实现进程互斥的那段代码
  • 临界区是指进程中用于实现进程同步的那段代码
  • 临界区是指进程中用于实现进程通信的那段代码
  • 临界区是指进程中用于访问共享资源的那段代码

D

2、不需要信号量就能实现的功能是().
  • 进程同步
  • 进程互斥
  • 执行的前驱关系
  • 进程的并发执行

D

3、若一个信号量的初值为3,经过多次PV操作后当前值为-1,这表示等待进入临界区的进程数是().
  • 1
  • 2
  • 3
  • 4

A

4、一个正在访问临界资源的进程由于申请等待I/O操作而被中断时,它是()。
  • 可以允许其他进程进入与该进程相关的临界区
  • 不允许其他进程进入任何临界区
  • 可以允许其他进程抢占处理器,但不得进入该进程的临界区
  • 不允许任何进程抢占处理器

C

5、两个旅行社甲和乙为旅客到某航空公司订飞机票,形成互斥资源的是().
  • 旅行社
  • 航空公司
  • 飞机票
  • 旅行社与航空公司

显然C

6、临界区是指并发进程访问共享变量段的()。
  • 管理信息
  • 信息存储
  • 数据
  • 代码程序

D

7、以下不是同步机制应遵循的准则的是().
  • 让权等待
  • 空闲让进
  • 忙则等待
  • 无限等待

D

8、以下()不属于临界资源。
  • 打印机
  • 非共享数据
  • 共享变量
  • 共享缓冲区

D

9、以下()属于临界资源
  • 磁盘存储介质
  • 公用队列
  • 私用数据
  • 可重入的程序代码

B

10、在操作系统中,要对并发进程进行同步的原因是().
  • 进程必须在有限的时间内完成
  • 进程具有动态性
  • 并发进程是异步的
  • 进程具有结构性

C

11、进程A和进程B通过共享缓冲区协作完成数据处理,进程A负责产生数据并放入缓冲区,进程B从缓冲区读数据并输出。进程A和进程B之间的制约关系是().
  • 互斥关系
  • 同步关系
  • 互斥和同步关系
  • 无制约关系

C

12、在操作系统中,P、V操作是一种().
  • 机器指令
  • 系统调用命令
  • 作业控制命令
  • 低级进程通信

D

13、P操作可能导致().
  • 进程就绪
  • 进程结束
  • 进程阻塞
  • 新进程创建

V操作可能导致进程就绪

C

14、原语是()。
  • 运行在用户态的过程
  • 操作系统的内核
  • 可中断的指令序列
  • 不可分割的指令序列

原语属于操作系统内核的一部分

D

15、()定义了共享数据结构和各种进程在该数据结构上的全部操作。

  • 管程
  • 类程
  • 线程
  • 程序

2.4 死锁

2.4.1.1 总览

2.4.1.2 什么是死锁?

2.4.1.3 死锁、饥饿、死循环的区别

2.4.1.4 死锁产生的四个必要条件

  • 互斥
  • 不可剥夺
  • 请求与等待
  • 循环等待

2.4.1.5 什么时候会发生死锁?

2.4.1.6 死锁的处理策略

(1)预防死锁
  • 破坏互斥条件
  • 破坏不可剥夺条件
  • 破坏请求和保持条件
  • 破坏循环等待条件
(2)避免死锁(银行家算法)
  • 什么是安全序列?

  • 避免系统进入不安全状态------银行家算法

可以用回溯来理解,也是Dijkstra这个老表想出来的

  • 使用代码实现

(3)死锁的检测和解除

  • 死锁的检测

举个例子,可以消除所有边,即无死锁发生

举个例子,不可消除所有边,即产生死锁

  • 死锁的解除

习题

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

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

相关文章

C语言及算法设计课程实验五:循环结构程序设计

C语言及算法设计课程实验五&#xff1a;循环结构程序设计一、实验目的二、实验内容2.1、统计字符个数2.2、输出所有的“水仙花数”2.3、猴子吃桃问题2.4、牛顿迭代法求方程三、实验步骤3.1、循环结构程序设计实验题目一&#xff1a;统计字符个数1、定义变量2、 输入一串字符3、…

基础IO(上)

基础IO&#xff08;上&#xff09;回顾文件知识回顾C文件接口系统文件I/O接口介绍openclosewriteread理解文件描述符fd理解0 1 2 3 4....文件描述符的分配规则重定向的本质及相关操作认识重定向重定向的具体原理重定向的操作追加重定向和输入重定向追加重定向输入重定向缓冲区的…

C++ STL源码剖析 笔记补充

写在前面 简单记录一些《C STL源码剖析中》涉及到的C语法和注意事项。 1. 静态常量成员在类内直接初始化 如果含有const static integral类型的成员变量&#xff0c;可以在类内定义时直接初始化&#xff1b; 注意integral不只是int类型&#xff0c;而是包含所有的整型&#…

< 每日算法 - Javascript解析:经典弹珠游戏 >

每日算法 - JavaScript解析&#xff1a;弹珠游戏一、任务描述&#xff1a;》 示例一&#xff1a;》示例二二、题意解析三、解决方案&#xff1a;往期内容 &#x1f4a8;一、任务描述&#xff1a; 欢迎各位来到「力扣嘉年华」&#xff0c;接下来将为各位介绍在活动中广受好评的…

HSAF实战收获

收获1&#xff1a;MySQL数据类型对应Java类型表格这里的timestamp类型在Java中对应TimeStamp类型&#xff0c;varchar和char都是对饮的String类型收获2&#xff1a;TableFieldTableField(exist false) 注解加载bean属性上&#xff0c;表示当前属性不是数据库的字段&#xff0c…

[golang Web开发] 4.golang web开发:模板引擎

一.简介 使用 Go 的 Web 模板引擎需要以下两个步骤&#xff1a; (1).对文本格式的模板源进行语法分析&#xff0c;创建一个经过语法分析的模板结构&#xff0c;其中模板源既可以是一个字符串,也可以是模板文件中包含的内容 (2).执行经过语法分析的模板&#xff0c;将ResponseWr…

Django User模型

Django User模型用户管理自定义用户模型Django自定义验证引用User模型视图开发创建序列器创建视图创建路由用户注册注册序列化器注册视图注册路由用户管理 在开发登录功能的时候需要数据库来保存用户登录信息和状态&#xff0c;Django中有个内置app 名为 django.contrib.auth …

ICT是什么

信息与通信技术&#xff08;ICT&#xff0c;information and communications technology&#xff09;是一个涵盖性术语&#xff0c;覆盖了所有通信设备或应用软件&#xff1a;比如说&#xff0c;收音机、电视、移动电话、计算机、网络硬件和软件、卫星系统&#xff0c;等等&…

(1)Nginx简介和安装教程

目录 一、下载 二、报错提醒&环境安装 1、安装gcc编译器 2、安装perl库 3、安装 zlib库 4、也可通过命令进行统一安装 三、编译及安装 四、启动并访问 1、启动 2、访问 3、问题排查 五、安装成系统文件 一、下载 官网地址&#xff1a;nginx news Nginx官网提供…

OAuth2入门

1.下载资源 演示代码&#xff1a; OAuth2-example: 演示OAuth2的认证流程https://gitee.com/lisenaq/oauth2-example克隆下载到本地&#xff1a; 导入项目&#xff1a; client 客户 authorization-server 认证服务 resource-owner 资源所有者 resource-server 资源…

儿童台灯哪个品牌更护眼推荐?儿童书桌台灯品牌排行榜

不难发现&#xff0c;近些年我国儿童近视率增长迅速&#xff0c;随着生活条件越来越好&#xff0c;对电子章产品的普及非常广泛&#xff0c;每个家庭的孩子必不可少的就是伏案完成作业&#xff0c;这样的话就需要使用到台灯&#xff0c;选购台灯的时候最好选择适合儿童的专业护…

【算法基础】高精度加法

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前是C语言学习者 ✈️专栏&#xff1a;【C/C】算法 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞…

一篇五分生信临床模型预测文章代码复现——FIgure 9.列线图构建,ROC分析,DCA分析 (三)

之前讲过临床模型预测的专栏,但那只是基础版本,下面我们以自噬相关基因为例子,模仿一篇五分文章,将图和代码复现出来,学会本专栏课程,可以具备发一篇五分左右文章的水平: 本专栏目录如下: Figure 1:差异表达基因及预后基因筛选(图片仅供参考) Figure 2. 生存分析,…

axios实战学习——使用高德地图api接口数据实现天气查询案例

文章目录&#x1f4cb;前言&#x1f3af;案例介绍&#x1f9e9;关于高德开发平台1️⃣创建应用生成Key2️⃣查看API文档&#x1f9e9;测试接口&#x1f3af;案例编写&#x1f3af;实现效果&#x1f4cb;前言 关于这个Vue axios 获取接口数据的操作&#xff0c;这篇文章就不过…

UniRx之基础入门

什么是Rx 官方ReactiveX简介&#xff1a; An API for asynchronous programming with observable streams。 通过这句话我们可以得到&#xff1a; 1.首先Rx是个编程接口&#xff0c;不同语言提供不同实现。例如JVM语言中的RxJava。 2.使用场景&#xff0c;异步编程中。 3.基…

路由器 内核开发 流程

宽 带上网已经不是什么新鲜事情&#xff0c;人们对相关的网络器件已经不再陌生&#xff0c;比如说常见的路由器。对于一般的网络用户&#xff0c;他们能知道怎样使用路由器来上网、玩游戏等就 已经感到很满足了&#xff0c;通常情况下对路由器的深层技术很少去过问研究&#xf…

Matlab和PCL中的点云滤波

而在PCL中总结了几种需要进行点云滤波处理的情况&#xff0c;这几种情况分别是&#xff1a; (1)点云数据密度不规则需要平滑。 (2)因为遮挡等问题造成离群点需要去除。 (3)大量数据需要进行“下采样”(Downsample)。 (4)噪声数据需要去除。 对应的解决方法是&#xff1a; (1)按…

什么是ITIL中的变更管理

商业环境和客户期望在不断变化&#xff0c;数字化转型已成为各行各业企业成功的关键因素。数字化转型的关键在于利用可用 应对业务挑战和抓住机遇的技术。当你分解它时&#xff0c;数字化转型基本上是信息技术管理更好地消除有问题的领域&#xff0c;并使您的 IT 基础架构能够应…

WebView缓存机制

一 前言 由于H5具备 开发周期短、灵活性好 的特点&#xff0c;所以现在 Android App大多嵌入了 Android Webview 组件进行 Hybrid 开发 但我知道你一定在烦恼 Android Webview 的性能问题&#xff0c;特别突出的是&#xff1a;加载速度慢 & 消耗流量 今天&#xff0c;我将…

Django 模型的继承

Django 模型的继承项目管理模型关联关系模块的包管理模型的继承项目管理 到目前为止&#xff0c;都是属于httprunner中的用例部分&#xff0c;针对核心功能进行的开发工作&#xff0c;要把平台做成一个用户可以使用的程度还需要些额外的功能&#xff0c;比如项目管理&#xff…