- 操作系统是系统资源的管理者
- 向上层提供方便易用的服务
- 是最接近硬件的一层软件
我们通过使用QQ软件的例子来体会操作系统的功能:
那么具体提供方便易用的服务有哪些呢br> (1)GUI:图形化用户接口
用户可以使用形象的图形界面进行操作,而不再需要记忆复杂的命令,参数。
(2)命令接口
- 操作系统的并发性:指计算机系统中同时运行着多个程序,这些程序宏观上看是同时运行着的,而微观上看是交替运行的。操作系统就是伴随着多道程序技术而出现的。因此,操作系统和程序并发是一起诞生的。
- 单核CPU同一时刻只能执行一个程序,各个程序只能并发的执行。多核CPU同一时刻可以同时执行多个程序,多个程序可以并行的执行。
(2)共享:即资源共享,是指系统中地资源可供内存中多个并发执行地进程共同使用。
-
两种资源共享方式:互斥共享方式与同时共享方式
-
互斥共享方式:系统中的某些资源,虽然可以提供给多个进程使用,但一个时间段内只允许一个进程访问该资源。
-
同时共享方式:系统中的某些资源,允许一个时间段内由多个进程同时对它们进行访问。所谓的同时往往是宏观上的,而在微观上,这些进程可能是交替地对该资源进行访问的(即分时共享)。
举个例子:
互斥共享方式:比如在使用QQ和微信视频,同一时间段内摄像头只能分配给其中一个进程。
同时共享方式:使用QQ发送文件A,同时使用微信发送文件B。宏观上看,两边都在同时读取并发送文件,说明两个进程都在访问硬盘资源,从中读取数据。微观上看,两个进程是交替着访问硬盘的。
- 执行除法指令时发现除数为0
总之,若当前执行的指令是非法的,或执行指令的参数是非法的,那么就会引发一个中断信 。 - 有时候应用程序想请求操作系统内核的服务,此时会执行一条特殊的指令——陷入指令,该指令会引发一个内部中断信 。
小结:
(1)中断的作用
中断是让操作系统内核夺回CPU使用权的唯一途径,使CPU由用户态变为内核态。
执行陷入指令,意味着应用程序主动地将CPU控制权还给操作系统内核,系统调用就是通过陷入指令完成的
我们再来看外中断的例子:
进程的组成部分:PCB,程序段,数据段
小结:
进程的状态——阻塞态
在进程运行的过程中,可能会请求等待某个事件的发生,如等待某种系统资源的分配,或者等待其他进程的响应。
在这个事件发生之前,进程无法继续往下执行,此时操作系统会让这个进程下CPU,并让它进入阻塞态。当CPU空闲时,又会选择另一个就绪态进程上CPU运行。
进程的状态——终止态
假设此时运行在CPU上的进程1已经运行结束了,在运行结束时会发出一个(exit)的系统调用,请求操作系统终止该进程。
- 那么如何将各个进程的PCB组织起来/li>
链接方式与索引方式
- 链接方式
(1)执行指针——指向当前处于运行状态(执行态)的进程
(2)就绪队列指针——指向当前处于就绪状态的进程
(3)阻塞队列指针——指向当前处于阻塞态的进程
7. 进程控制及原语
如果此时我们已经将PCB2的(state)设为1,如图:
8. 线程与多线程模型
- 内核级线程的管理工具由操作系统内核完成
- 线程调度,切换等工作都由内核负责,因此内核级线程的切换必须需要在核心态下才能完成
- 操作系统会为每个内核级线程建立相应的TCB(线程控制块),通过TCB对线程进行管理。内核级线程就是从操作系统内核视角看能看到的线程。
内核级线程的优缺点:
- 优点:当一个线程被阻塞后,别的线程还可以继续执行,并发能力强。多线程可在多核处理机上并行执行。
- 缺点:一个用户进程会占用多个内核级线程,线程切换由操作系统内核完成,需要切换到核心态,因此线程管理的成本高,开销大。
多线程模型
之前我们讨论了用户级线程与内核级线程的优缺点,那么我们是否可以将这两种线程方式结合起来呢br> (1)一对一模型
9. 处理机调度
高级调度
作业:一个具体的任务
用户向系统提交一个作业 = 用户让操作系统启动一个程序(来处理一个具体的任务)
但是问题来了,我们的内存空间有限,有时无法将用户提交的作业全部放入内存,那该这么办呢/p>
- 所谓高级调度(作业调度),是按一定的原则从外存的作业后备队列中挑选一个作业调入内存,并创建进程。每个作业只调入一次,调出一次。作业调入时会建立PCB,调出时才撤销PCB。
低级调度
- 指按照某种策略从就绪队列中选择一个进程,将处理机分配给它。
- 进程调度是操作系统中最基本的一种调度,在一般的操作系统中都必须配置进程调度。
- 所谓中级调度(内存调度)是指按照某种策略决定将哪个处于挂起状态的进程重新调入内存。
- 一个进程可能会被多次调出,调入内存,因此中级调度发生的频率要比高级调度更高。
挂起状态
10. 进程调度的时机
- 进程在操作系统内核程序临界区中不能进行调度与切换
- 进程处于临界区时不能进行处理机调度
临界资源:是指一个时间段内只允许一个进程使用的资源,各进程需要互斥的访问临界资源。
临界区:指访问临界资源的这段代码。
- 内核程序临界区一般是用来访问某种内核数据结构的,比如进程的就绪队列(由各就绪进程的PCB组成)
举两个例子:
(1)内核程序临界区访问的临界资源需要尽快的释放,不可以进行进程调度和切换
CPU利用率:是指CPU忙碌的时间占总时间的比例
系统吞吐量是指:单位时间内完成作业的数量
周转时间是指:从作业被提交给系统开始,到作业完成为止的这段时间间隔
- 周转时间包括四个部分:
- 作业在外存后备队列上等待作业调度(高级调度)的时间
- 进程在就绪队列等待进程调度(低级调度)的时间
- 进程在CPU上执行的时间
- 进程等待I/O操作完成的时间
周转时间与平均周转时间
平均带权周转时间
响应时间
响应时间:指从用户提交请求到首次产生响应所用的时间。
小结:
(1)算法思想:
- 主要是从公平的角度考虑(类似于我们生活中排队买东西的例子)
(2)算法规则:
- 按照作业/进程到达的先后顺序进行服务
- 按照到达的先后顺序调度,事实上就是等待时间越久的越优先得到服务
(3)用于作业(进程)调度:
- 用于作业调度时,考虑的是哪个作业先到达后备队列
- 用于进程调度时,考虑的是哪个进程先到达就绪队列
例题:
(1)算法思想:
- 追求最少的平均等待时间,最少的平均周转时间,最少的平均带权周转时间
(2)算法规则:
- 最短的作业/进程优先得到服务(所谓”最短“,是指要求服务时间最短)
(3)用于作业(进程)调度:
- 即可用于作业调度,也可用于进程调度
- 用于进程调度时称为”短进程优先算法(SPF)
(4)是否可抢占:
- SJF和SPF是非抢占式的算法
- 但是也有抢占式的版本——最短剩余时间优先算法(SRTN)
例题:
使用非抢占式的短作业优先调度算法SJF
- 优点:最短的平均等待时间,平均周转时间
- 缺点:对短作业有利,对长作业不利。可能产生饥饿现象。
(6)短作业优先调度算法概述:
(3)用于作业(进程)调度
- 即可用于作业调度,也可用于进程调度
(4)是否可抢占/p>
- 非抢占式的算法。因此只有当前运行的作业/进程主动放弃处理机时,才需要调度,才需要计算响应比
(5)高响应比优先算法优缺点
- 优点:综合考虑了等待时间和运行时间(要求服务时间)
- 等待时间相同时,要求服务时间短的优先(SJF的优点) 要求服务时间相同时,等待时间长的优先(FCFS的优点)
- 缺点:对于长作业来说,随着等待时间越来越久,其响应比也会越来越大,从而避免了长作业饥饿的问题
例题:
(1)算法思想
- 公平的,轮流地为各个进程服务,让每个进程在一定时间间隔内都可以得到响应。
(2)算法规则
- 按照各进程到达就绪队列的顺序,轮转让各个进程执行一个时间片。若进程未在一个时间片内执行完,则剥夺处理机,将进程重新放到就绪队列队尾重新排队。
(3)用于作业(进程)调度
- 用于进程调度(只有作业放入内存建立了相应的进程后,才能被分配处理机时间片)
(4)是否可抢占/p>
- 若进程未能在时间片内运行完,将被强行剥夺处理机使用权,因此时间片轮转调度算法属于抢占式的算法。由时钟装置发出时钟中断来通知CPU时间片已到。
(5)时间片轮转调度算法的优缺点
- 优点:公平:响应快,适用于分时操作系统,不会导致饥饿
- 缺点:由于高频率的进程切换,因此有一定开销;不区分任务的紧急程度
例题:
(1)算法思想
- 随着计算机的发展,特别是实时操作系统的出现,越来越多的应用场景需要根据任务的紧急程度来决定处理顺序
(2)算法规则
- 每个作业(进程)有各自的优先级,调度时选择优先级最高的作业/进程
(3)用于作业(进程)调度
- 既可以用与作业调度,也可以用于进程调度。甚至还会用于I/O调度。
(4)是否可抢占/p>
- 抢占式,非抢占式都有。非抢占式只需在进程主动放弃处理机时进行调度即可。而抢占式还需要在就绪队列变化时,检查是否会发生抢占。
(5)优先级调度算法的优缺点
- 优点:用优先级区分紧急程度,重要程度,适合于实时操作系统。可灵活的调整对各种作业(进程)的偏好程度。
- 缺点:若源源不断地有高优先级进程到来,则可能导致饥饿。
例题:
14. 进程同步与进程互斥
异步性是指:各并发执行的进程以各自独立的,不可预知的速度向前推进
- 同步亦称直接制约关系,它是指为完成某种任务而建立的两个或多个进程,这些进程因为需要在某些位置上协调它们的工作次序而产生的制约关系。
- 进程间的直接制约关系就是源于它们之间的相互合作。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!