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是进程和线程切换都要做的。
