1 操作系统引论
1.1 操作系统的目标和作用
操作系统定义:是一组控制和管理计算机软硬件资源、合理地对各类作业进行调度以及方便用户使用的程序集合
操作系统的目标:
- 方便性:操作系统使计算机易于使用
- 有效性:操作系统允许以更有效的方式使用计算机系统资源:提高系统资源利用率和吞吐量
- 可扩展性:操作系统中允许有效地开发、测试和引进新的系统功能
- 开放性:实现应用程序的可移植性和互操作性,要求具有统一的开放的环境
OS的作用
-
OS作为用户与计算机硬件系统之间的接口
- 计算机用户需要的用户命令
- 应用软件需要的System Call
最底层调用的是System Call,OS接口就是一些系统调用函数,如fork、open等
-
OS作为计算机系统资源的管理者(软硬件资源):处理机管理、存储器管理、I/O设备管理、文件管理。多用户系统选要多路复用
- 时间上复用:一种资源在时间上复用时,不同程序轮流使用;例如CPU、打印机
- 空间上复用:每个都得到资源的一部分;如内存、磁盘
-
OS用作扩充机器
1.2 操作系统发展过程
无操作系统:人工操作方式、脱机输入输出方式
单道批处理系统
- 特征:自动性、顺序性、单道性
- 优点:减少人工操作,解决了作业的自动接续
- 缺点:平均周转时间长,没有交互能力
多道批处理系统:注意计算,执行与中断画时间图(A中断>B执行也要等A中断完再C执行)
- 特征:多道性、无序性、调度性
- 优点:提高了资源利用率和吞吐能力
- 缺点:平均周转时间长,没有交互能力
在多道程序环境下允许多个进程并发执行,但只有进程在获得所需的资源后方能执行。由于资源等因素的限制,使进程的执行通常都不是“一气呵成”,而是以“停停走走”的方式运行。(你走我停)
分时操作系统:及时接收、及时处理
- 特点:多路性、独立性、及时性、交互性
实时操作系统:响应及时、可靠性高
- 分类:按任务执行周期性划分为非周期性实时任务和周期性实时任务,按截止时间划分为硬实时任务、软实时任务
- 特征:多路性、独立性、交互性、可靠性、及时性
1.3 操作系统的基本特征
现代OS基本特征
- 并发性(最重要):并行性(同一时刻)和并发性(同一时间间隔内),并发执行的过程。
- 进程(资源分配的基本单位) → 多个程序能并发执行;线程(独立运行和调度的基本单位)
- 共享性:互斥共享(每一个时间点只允许一个进程访问使用)、同时访问(微观上是进程交互使用)
- 虚拟性:时分复用、空分复用
- 异步性:多进程并发时我们没法知道程序运行的顺序、时间等;执行结果不确定,程序不可再现
并发和共享是操作系统的两个最基本的特征,他们又是互为存在的条件
1.4 操作系统的主要功能
操作系统主要任务、五个方面功能(CPU、存储器、设备、文件管理、方便用户使用的用户接口)
1.5 OS结构设计
-
无结构OS
-
模块化OS结构(模块-接口):块与块的相互关系、优缺点
-
分层式OS结构
- 层与层的关系:不依赖其上只依赖其下,下层为上层提供一个接口。理解成一个树形结构
- 层次设置考虑的因素:程序嵌套;运行频率(越活跃的放底层,靠近硬件效率高);公用模块(放底层方便所有上层调用)、用户接口
-
微内核OS结构
- 开机后常驻内存,尽可能把内核功能移到用户空间,用户模块间的通信使用消息通信
课后作业:操作系统-第1章习题解析 - 梦如三 - 博客园 (cnblogs.com)
2 进程管理
执行程序是计算机的基本任务,程序执行的关键在PC的调用
进程→进程管理块PCB
2.1 前驱图和程序执行
程序执行方式:顺序——单道批处理、并发——多道批处理
- 应用级并发(应用程序)、系统级并发(操作系统自身软件)
前驱图DAG:有向无循环图,无循环!!!
- 结点:一条语句/一个程序段
- 有向边:结点间的前驱关系,Pi 在 Pj 前完成→ i 直接前驱/ j 直接后继
顺序执行:输入→计算→打印。特征(顺序、封闭、可再现)
并发执行:Ii+1 和 Ci 重叠→并发执行
- 特征:间断性、失去封闭性、不可再现性
2.2 进程的描述
进程定义
- 进程控制块PCB
- 由程序段、相关的数据段和PCB三部分构成了进程实体
- 创建进程实质上是创建进程实体的PCB;撤销进程实质上是撤销进程的PCB
特征:动态性(程序静态进程动态)、并发性、独立性、异步性
三种基本状态:
-
就绪状态:当进程已分配到除CPU以外的所有必要资源后,只要再获得CPU便可以立 即执行。静止就绪在外存,就绪在内存。静止的要先进内存才能激活
-
执行状态:进程已经获得CPU,其程序正在执行
-
阻塞状态:正在执行的进程由于发生某事件而暂时无法继续执行时,便放弃处理机而处于暂停状态,把这种暂停状态称为阻塞状态,有时也称为等待状态
-
进程状态是唯一的
五种状态:
挂起/静止:静止就绪、静止阻塞;挂起原语、激活原语;挂起会从内存转换到外存,让出CPU
-
挂起原语Suspend(),激活原语Active()
-
谁挂起的谁来唤醒
-
挂起的原因、特征
书P39页图背过
进程映像:一个进程的程序、数据、栈、属性
进程控制块PCB:进程控制块的作用是使一个在多道程序环境下不能独立运行的程序,成为一个能独立运行的基本单位-进程
- 常驻内存;是进程的唯一标识
- 内容
- 进程标识符(内、外部)
- 处理机状态
- 进程调度信息
- 进程控制信息
- 进程控制块的组织方式:线性、链接、索引
2.3 操作系统对进程的控制
进程控制:OS内一组原语来实现
原语:操作系统内核或微核提供核外调用的过程或函数
- 执行过程不能中断
- 原子操作:不能被其它进程打断
内核:第一层扩充软件
CPU工作模式:特权模式、用户模式
- 只有操作系统工作在特权模式下,可以直接访问硬件
处理器两种执行状态:系统态(进程控制功能工作在系统态)、用户态
进程:系统进程、用户进程
内核功能:支撑(中断、时钟、原语)、资源管理(进程、存储器、设备)
调用进程的创建原语步骤:
- 申请空白PCB
- 为新进程分配资源
- 初始化进程控制块
- 将新进程插入就绪队列,启动调度
用户登录、作业调度、提供服务、应用请求→进程创建→撤销
- fork():返回父进程、子进程
进程终止:正常(return、exit)、异常(about、信号Ctrl+C)、外界干预
- 终止过程
- 进程由父进程创建,不能无缘无故出现。不能自己撤销(解挂)
进程阻塞与唤醒:block()、wakeup()
- 阻塞原因:请求系统服务,启动某种操作如I/O操作,新数据尚未到达。无新工作可做
- 阻塞过程:block→阻塞队列→重新调度(尽量不要让CPU空闲)
- 阻塞是主动的,唤醒是被动的
- 唤醒过程:从阻塞队列移出→PCB中先行状态由阻塞改为就绪→就绪队列
进程挂起与激活
- 挂起原语suspend(),活动→静止,挂起将CPU调度标值为“真”(就是允许其他进程进入CPU执行)
- 只能挂起自己或子进程
- 阻塞和挂起:都让进程暂停、释放CPU;阻塞是资源导致的,挂起可以是用户决定;阻塞还在内存,挂起就去外存了;阻塞等资源满足就恢复,挂起等将起挂起的对象来激活
- 激活原语active()
抢占策略
如果单处理器系统中有N个进程,运行的进程最多几个,最少几个?就绪进程最多几个,最少几个?
答:运行状态最多1个,最少0个;就绪状态最多N-1个,最少0个。有就绪说明已经有运行,换成阻塞就最多N个了
2.4 进程的同步
有交互的(执行要依赖其他进程状况)并发会破坏封闭性、可再现性
区分并发、并行,一个核一个并行
并发进程之间的关系:
-
互斥:多个进程不能使用同一个资源,某个进程使用该资源时其它进程必须等待
-
同步:多个进程的调用存在时序关系,某些进程的执行必须先于另一些进程
-
通信:多个进程间传递消息
-
互斥下,需要对共享变量做限制。临界资源/临界区,进入临界区加锁
临界资源:进程竞争资源首先必须解决“互斥问题”,某些资源必须互斥使用,这类资源就是临界资源。访问临界资源的那段代码称为临界区
- 临界区使用原则:空闲让进、忙则等待(一次一个)、有限等待、让权等待。临界区会减少并发
实现“上锁”:信号量机制
- 信号量实现同步的基本原理:两个或多个进程可以通过传递信号进行合作,可以迫使进程在某个位置暂时停止执行(阻塞等待),直到它收到一个可以“向前推进”的信号(被唤醒)。将实现信号灯作用的变量称为信号量
- 分类:
- 互斥信号量/资源信号量(先申请资源再申请信号,不然死锁)
- 多个进程共享一类临界资源——整型信号量/记录型信号量,同时需要多类资源且每类只占用一个——AND型信号量,同时需要多类资源、每类占用数目不同——信号量集
- 原子操作:wait/signal(进程执行signal原语时,有责任唤醒一个阻塞进程),成对用;PV操作,.value的绝对值等于该信号量阻塞队列中的等待进程数;Down/Up
- P-wait,V-signal
- 信号量-多个进程共享一类资源,AND-同时需要多类资源,信号量集-同时要多类、每种数目不一样
- 前驱关系←→信号量(代码)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KsyWJyhn-1681782649662)(操作系统.assets/image-20230412222818668.png)]
上锁一定记得释放
硬件同步机制
管程
2.5 经典进程同步问题
生产者/消费者问题
哲学家问题
读者/写者问题
2.6 进程通信
通信机制
- 低级通信
- 高级通信:共享存储器系统、管道通信(互斥、同步、确认)、消息传递系统
3 处理机调度与死锁
3,1 处理机调度层次
作业JOB:是用户在一次算题过程中或一次事务处理中,要求计算机系统所做的工作的集合
作业步:计算机系统完成一个作业所需的一系列有序的相对独立的工作步骤
作业控制块JCB
高级调度
- 多道程序步度、周转时间、吞吐量
- 用于批处理系统
批处理系统需要有作业调度,分时和实时系统无需此调度
高级调度对象——作业,低级调度对象——进程
低级/进程/短程调度
- 调度方式
- 抢占:严格的实时任务需求。原则有时间片原则、优先权原则、短作业优先原则
- 非抢占:完成/阻塞才转让。引起的因素。优缺点
- 三个机制:排队器、分配器、上下文切换机制
中级调度
进程调度在内存中,不会出来
3.2 调度队列模型和调度准则
仅有进程调度:分时系统中通常只有进程调度
有高级和低级调度:批处理系统需要进程调度和作业调度。处理机分给就绪队列首进程。设置多个阻塞队列,高优先权优先调度
三级调度都有:对系统、用户的准则(注意响应时间是提交请求到系统响应的时间,不是执行完的时间)
调度时机
进程切换:基本步骤
3.3 调度算法
先来先服务调度算法FCFS
- 带权周转时间=周转时间÷服务时间
短作业优先调度算法SPF
- 别把还没到达的也算进去了
计算的这些时间都是预估的
最短剩余时间调度算法SRT
- 执行一个的时候可能被打断(只要完成后面的时间更短),算的时候一单位时间的看,每过一个单位时间看有没有能更早结束的
优先权调度算法PSA
-
抢占、非抢占
-
优先权确定
- 静态:系统>用户,对资源的需求,用户要求。权高先执行
- 动态:可以防止长作业长时间垄断
-
高响应比优先调度算法HRRN(动态优先权机制)
- 响应比 =(等待时间+要求服务时间)÷ 要求服务时间 = 响应时间 ÷ 要求服务时间
- 每次新进程达到就计算
- 新到达的具有优先权(没理解啥意思)
- 一些计算:优先权=(当前时间-到达时间+服务时间)÷服务时间,周转时间=完成时间-到达时间,带权周转时间=周转时间÷服务时间
基于时间片的轮转调度
- 先按先来先服务,给定时间内执行不完的直接中断然后送去就绪队列末尾(时间片设置是针对每次执行一个进程的)
- 注意到达时间,在D到达前B已经因为大于时间片被放于队尾,顺序是CBD而不是CDB
- 到达的先进队尾,上一次没执行完的再放队尾
混合多种调度算法
- 多级队列调度算法:不同队列不同调度方法,前台一般时间片后台一般优先权或短作业
- 多级反馈队列:任务可以在队列之间移动
- 先进第一队列末尾按FCFS,时间片内未完成就去下一个队列,第n队列就按时间片轮转。前面队列都空了才调这个队列
基于公平原则的调度算法
3.4 实时调度
基本条件
最早截止时间优先EDF
最低松弛度优先LLF
- 松弛度=完成截止时间-剩余运行时间-当前时间
- 松弛度不降到0不抢占
优先级倒置
3.5 死锁
产生死锁的原因:竞争资源、进程间推进顺序不当
- 竞争不可抢占性资源引起死锁
- 竞争临时性资源引起进行死锁
- 进程推进顺序不当引起死锁
产生死锁的必要条件
- 互斥条件:进程对分配到的资源进行排它的使用
- 请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源要求,而该进程又被其它进程占有,请求进程阻塞,但对已经获得的资源不释放
- 不剥夺条件:进程已获得的资源,使用完之前不能被剥夺,只能用完自己释放
- 环路等待条件:发生死锁时,必然存在进程-资源的环形链
处理死锁的基本方法:
- 预防死锁:设置某些限制条件,破坏四个必要条件中的一个或几个
- 避免死锁:在资源的动态分配过程用某种方法防止系统进入不安全状态
- 检测死锁:预先不采取任何限制,也不检查是否已进入不安全区,通过设置检测机构,检测出死锁后解除
- 解除死锁:常用撤销或挂起一些进程,回收一些资源
3.6 预防死锁的方法
摒弃“请求和保持”条件:
摒弃“不剥夺”条件
摒弃“环路等待”条件
3.7 避免死锁
银行家算法
数据结构
- 可利用资源向量向量Available,每一类可利用的资源数量
- 最大需求矩阵Max:n×m,n个进程中的每一个进程对m类资源的最大需求
- 分配矩阵Allocation,n×m,已分配的资源
- 需求矩阵Need
算法
-
请求向量Request,如果Request[j]≤Need[i,j]则出错,反之继续判断Requesti[j]≤Available[j],不满足则等待,满足则分配
-
Available[j]=Available[j]-Requesti[j]
Allocation[i,j]=Allocation[i,j]+Requesti[j]
Need[i,j]=Need[i,j]-Requesti[j]
3.8 死锁的检测与解除
检测
- 资源分配图
解除
- 撤销死锁进程
- 把死锁进程恢复到前一个检查点,重新执行每个进程
- 按照某种原则诸葛选择死锁进程进行撤销,直到解除系统死锁
- 按照某种原则逐个剥夺进程资源,知道解除死锁
最小代价原则
- 花费处理机时间最少的进程
- 产生输出最少的进程
- 估计未执行部分最多的进程
- 已获得资源最少的进程
- 优先级最低的进程