操作系统学习(二)(B站视频)

2019.5.25

页面置换算法

当内存中产生缺页中断时,如果内存中已有空闲空间,则可以直接进行选取,调用之后,更改页表。
若无空间,则需要调出某些页面,然后把该页调入其中,所以,具体调出哪些页面,涉及到了相关的调度算法。
1. 页面调度算法有哪几种?

进程

2019.5.30
2. 每一个进程对应着一个单独PCB,Process Control Block,有什么用?进程存在的唯一标识是什么?

2019.5.31
3. PCB包含了哪些内容?

4. 进程的五个生命期阶段?

5. 哪三种情况下可以创建进程?

6. 哪三种情况下,进程会进入阻塞状态?是谁来决定进程从运行状态进入阻塞状态的?

7. 进程唤醒的两种情况,进程唤醒后会进入哪?

8. 进程的三种基本状态?哪种情况运行状态会转换为就绪状态或堵塞状态?

2019.6.1
9. 什么是进程的挂起?进程的挂起分为哪几种?

10. OS如何管理进程?

11. 历史上是先有的进程,才有的线程,有没有想过,为什么要搞一个线程?

12. 什么是进程,什么是线程,线程有什么进程无法拥有的特点?

13. 一般浏览器是用进程实现的,所用的网页共用一个进程,如果其中一个网页崩了,也就是一个线程崩了,其共享的代码全崩了,所有网页都崩了,但是谷歌的Chorome浏览器是安排的每一个浏览器一个进程,所以网页之间互不干扰。

14. 切换进程和线程哪一个快,为什么?

15. 线程的三种主要实现方式?

16. 线程中,父线程可以生成子线程,在Linux系统中,用于线程创建的函数有fork和execute()两个函数,fork用于复制线程,exec用于重写子进程,然后父进程会等待子线程的结束,而做wait操作,这是为什么?

17. 名次概念解释

  • CPU使用率
  • 吞吐量
  • 周转时间
  • 响应时间
  • 等待时间

18. 进程的几种调度算法?

19. 什么叫操作系统在进程上是抢占的,和非抢占的?

20. 对于CPU中突发的进程,往往CPU并不容易准确知道这个进程大概运行多久,为此,可以通过前一两次循环,预估整个进程的用时。

21. HRRN进程调度算法是什么?

22. Round Robin 算法?

23. 如上所示,单一的进程调度算法往往不能兼顾进程平均周转时间、平均响应时间等,那么操作系统如何兼顾这些算法呢?

24. 在进程调度算法中,什么是多级反馈队列?

25. 什么是实时系统,实时系统有什么特点,有哪些调度算法?

26. 进程间切换和进程内的线程切换是由内核控制的吗?

27. 有死锁的资源之间一定有环,但是有环的不一定出现死锁,没资环循环的会出现死锁吗?
在这里插入图片描述

27.
如图所示,如果每一个资源类均只有一个实例,也就是一个资源,则会必然会产生死锁
在这里插入图片描述

28. 死锁的四个必要条件?

28.

  • 互斥
  • 持有和继续等待
  • 不可剥夺
  • 循环等待

29. 操作系统对于死锁的态度和处理办法:
在这里插入图片描述
因为操作系统处理死锁的开销太大了,需要作出很多的约束来处理这个问题,所以一般是写程序的时候需要注意的问题,而不是由操作系统完成。

30. 死锁预防、死锁避免、死锁解决和死锁的强度是逐渐降低的,分别有哪些方法?

30.

死锁预防
死锁预防的强度是最大的,其目的是完全不产生死锁,其核心在于解决死锁的四个必要条件

  • 互斥——————让互斥资源变为不互斥的,这种情况比较少。
  • 资源请求和保持————————可以让进程一次性获得其所有资源,但是这样效率很低,容易产生进程饥饿。
  • 不可剥夺——————变为可剥夺(杀死进程)。
  • 循环等待——————设定资源的顺序,按照特定顺序安排进程进行,常见于嵌入式系统,因为这种系统一般资源不是很多。

死锁避免
死锁避免的核心:确保系统永远不会进入不安全状态:
著名算法:银行家算法
在这里插入图片描述
不可完全杜绝死锁产生,主要是系统针对进程申请的资源信息,进行校验,判断其是否会产生死锁,若产生,则不给予对应的资源。
主要在于:

  • 预先声明进程所需要的资源最大数,进行限定分配
  • 动态检查资源分配情况,确保没有环形等待。
    PS:环形等待状态并不意味着死锁,但这是一种不安全的状态。

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

31. 什么是管程,管程有哪些特点?

31.
管程是操作系统为进程并发管理所定义的一个数据结构,这个数据结构包含了对进程的操作。
管程的一些特性:

  • 模块化:管程作为一个数据结构,可以作为程序单独编译。
  • 封装性:具体内部的函数可以不可见,但提供接口外部供调用
  • 抽象的数据结构:里面不仅有数据,还有对数据的操作。
  • 互斥:每次只允许一个进程在管程中进行。

答案

1.

  • 最优页面调度算法
  • 最近最少使用页面调度算法(LRU)
  • 时钟页面调度算法(Clock)
  • 二次算法(改进时钟算法)
  • 还有个奇怪的算法

2.
PCB控制块,是操作系统控制进程运行所用的信息集合。
当进程被创建时,一个PCB块页随之产生,da那个进程终止时,回收其PCB块。
一个进程对应一个单独的PCB控制块,所以PCB块是进城的唯一识别标识。

3.
PCB是一个进程存在的标识,所以其包括的内容有三类:

  • 进程的标识信息,相当于身份证号,包括进程的标识,其父进程的标识,用户标识等。
  • 进程的状态信息保存区,用来保存进程的运行现场。比如各种寄存器和栈指针等。
  • 进程的控制信息。比如状态信息,进程间通信信息,所用资源等。

4.
分别是:创建、运行、等待(堵塞)、唤起、结束。

5.
进程创建的三种情况:

  • 系统初始化创建
  • 用户请求创建新进程
  • 通过父进程创建,即正在执行的进程执行了创建新进程的系统调用。

6.
进程阻塞的三种情况:

  • 请求并等待CPU的服务
  • 等待数据资源
  • 启动某种操作,无法马上完成

一般理解是进程自己阻塞了自己,因为只有进程自身才知道自己何时要等待某种事件的发生,即进入等待状态。

7.

  • 等待的事件已下达,比如请求的CPU指令已下达
  • 需要的资源已经满足

当进程被唤醒时,将该进程的PCB插入到就绪队列中。

8.
就绪、等待和运行状态。
状态与生命期不一样,线程的五个状态是,创建,就绪,等待,运行和死亡。
在这里插入图片描述
时间片用完时,运行态转为就绪态,等待事件时,转入堵塞态。
五种基本状态如图:
在这里插入图片描述

9.
挂起,顾名思义,就是挂出去,这里是指从内存挂到外存中去,基于需存的概念,当程序暂时不用时,可将进程挂起,放到磁盘上。
进程挂起分为就绪到就绪挂起、阻塞到阻塞挂起和运行到就绪挂起。

在这里插入图片描述
在这里插入图片描述
其中优先级的关系是,阻塞转为阻塞挂起>就绪专为就绪挂起>运行转为就绪挂起,但最优先考虑的还是进程本身的优先级,优先级高的自然先处理他的状态,不管是就绪、等待还是运行,都先考虑它。
如果要把阻塞挂起重新变为运行状态,需要把它变为就绪挂起,再变为就绪,再变为运行。

注意:阻塞挂起状态可以变为就绪挂起状态,如果其优先级高,也可以从外存写入内存,变为阻塞状态。

10.
OS通过PCB来控制和管理进程,进程有不同的状态,不同的状态下,各有一个队列。在这里插入图片描述
严格意义上讲,不只是一个队列,如下图:
在这里插入图片描述

11.
对于以下问题:
在这里插入图片描述
如果是这样的程序,在解压的时候,就没有读取和播放,设备利用率很低。

在这里插入图片描述
如何实现并发和充分利用流水线操作,需要引入线程的概念,每一个线程单独执行任务。

12.
进程可以从两个方面来理解

  • 资源平台
  • 可执行的代码——也就是线程

线程是进程中的一条执行流程,线程可以并发,而且线程具有相同的存储空间。
线程也有对应的线程控制块TCB(Tread Control Block)在这里插入图片描述

14.
切换线程快,因为线程都在同一个存储空间里,不需要切换页表,而不同进程的存储空间不同,需要切换页表,花费更多时间。

15.

  • 用户线程:操作系统看不见(操作不了)的线程。
  • 内核线程:操作系统看得见的线程。(TCB块放在内核中)
  • 轻量级进程:目前Solaris和Linux操作系统采取的方式,是内核支持的用户线程,一个进程可以有一个或多个轻量级进程组成,每个轻量级进程由一个单独的内核线程来支持。

现在的Windows系统主要采取内核线程的实现方式,来实现线程的创建、终止、管理和调度等,缺点是切换线程、终止线程的开销要稍微大一点。

用户线程的优缺点
优点:快,因为无需在内核中进行
缺点:

  • 当线程阻塞时,用户线程对应的进程也会堵塞,因为操作系统无法中断该线程,让其他线程继续运行。
  • 操作系统无法控制线程,只能等线程主动交出CPU使用权后,该进程里的其他线程才可以使用对应的资源。
  • 操作系统的时间片是按照进程分的,所以具体到线程的时间片会比较少,速度可能会比较慢。(而内核线程的时间片是按照线程分的,时间更多)

内核线程的优缺点
优点:时间片多,由操作系统直接操作,可停止线程,帮助协调使用CPU的资源。
缺点:开销大,每一次线程的切换都对应了从内核态到用户态的切换。(而用户线程则一直在用户态实现)

16.
因为操作系统只能处理父进程的资源回收,而子进程的资源回收需要父进程完成。所以需要用wait函数等到子进程的exit函数返回对应的值后,执行其资源回收。

17.

在这里插入图片描述
一个良好的操作系统进程调度算法希望实现:
在这里插入图片描述

在这里插入图片描述

18.
在这里插入图片描述

19.
当一个进程进行到一半,能够被其他进程打断抢占资源的时候,是抢占的。比如一个进程共用时9,已经用了2,但是来了一个新的进程,用时是5,那么可抢占的情况下,该进程会从运行态转为就绪态,换新的进程进行。
这种进程调度算法叫SRT:Shortest Remain-Time. 最短剩余时间算法,是SPN的变种
最短作业优先算法的平均周转时间是最小的:
在这里插入图片描述

算法的缺点:
在这里插入图片描述

20.
具体如下:
在这里插入图片描述

21.
不仅考虑进程执行的时间,还考虑了响应的时间
在这里插入图片描述

22.
轮训算法,也是时间片算法,就是给每个进程同样的时间片,比较公平,但是平均进程等待时间较久,而且切换上下文需要开销。
所以时间片的设置要合理,一般经验来说,早期Linux时间片为0.01秒,后来随着性能提升,变为了0.001秒。
在这里插入图片描述

23.
很简单,操作系统对不同特点的进程采用不同的算法调度,已经学了FCFS、RR、SPN、HRRN算法
可以把就绪状态的进程分为不同的队列:
针对优先级高的,因为都很重要,可以使用RR算法
优先级低的,都不是很重要,可以采取类似于批处理的算法,先来先服务,FCFS,简单实用。

在这里插入图片描述

24.
多级反馈队列调度算法是一种进程调度算法,是为了兼顾短作业优先和高优先级的进程优先得到响应的一种算法,其特点在于,不同的优先级的进程对应不同的时间量子,时间量子内没有完成的进程,其优先级会降低,
在这里插入图片描述

进程调度算法概括:
在这里插入图片描述

25.
realtime 实时系统,一般是指机床等设备的系统,其特点在于对时间的重要要求,也就是说 时间的重要程度可能要高于 性能。

  • 硬实时系统:比如机床到点必须关闭,否则会造成伤亡
  • 软实时系统:比如看视频录像分析,可以卡,但是最好

26.
进程切换分两步:
1.切换页目录以使用新的地址空间
2.切换内核栈和硬件上下文
对于linux来说,线程和进程的最大区别就在于地址空间,对于线程切换,第1步是不需要做的,第2是进程和线程切换都要做的。

猜你喜欢

转载自blog.csdn.net/alexhu2010q/article/details/90545663