操作系统引论
操作系统基本概念
- 操作系统
- 定义
- 是一组能有效地组织和管理计算机硬件和软件资源,合理对各类作业调度,以方便用户使用的程序的集合
- 目标
- 方便性
- 有效性
- 可扩充性
- 开放性
- 作用
- os作为用户与计算机硬件系统之间的接口
- os作为计算机资源的管理者
- os实现了对计算机的抽象
- 定义
操作系统发展过程
- 未配置操作系统的计算机系统
- 人工操作方式
- 脱机输入/输出方式
- 缺点:人机速度矛盾
- 单道批处理系统
- 优点:一定程度上缓解了人机速度矛盾
- 缺点:系统中的资源得不到充分利用
- 追求目标:提高系统资源利用率和系统吞吐量
- 多批道处理系统
- 优点:多道程序并发执行,资源利用率提高
- 缺点:平均周转时间长,无交互能力
- 追求目标:提高系统资源利用率和系统吞吐量
总结:批处理特点:多道性、无序性、调度性,系统利用率高、吞吐量大、平均周转时间长、但无交互能力
- 分时系统
- 优点:为了满足用户对人——机交互的需求,共享主机资源
- 缺点:不能优先处理紧急任务
- 特征:多路性,独立性,及时性,交互性
- 实时系统
- 在规定的时间内完成对该事件的处理,并控制所有实时任务协调一致地运行
- 优点:能优先处理紧急任务
- 特征:多路性、独立性、及时性、交互性、可靠性
- 微机操作系统
操作系统基本特征
- 并发
- 定义:两个或多个事件在同一时间间隔内发生
拓展:并行的定义:两个或多个事件在同一时刻发生
- 共享
- 定义:系统中的资源可供内存中多个并发执行的进程共同使用
- 互斥共享方式
- 系统中的某些资源,可以提供给多个进程(线程)使用,但是在规定的时间内,只允许一个进程访问该资源
- 同时访问方式
- 系统中的另一类资源,允许在一段时间内由多个进程“同时”对它进行访问
**并发和共享是OS最基本的特征**
- 虚拟
- 定义:在OS中,把通过某种技术将一个物理实体变为若干个逻辑上的对应物的功能称为“虚拟”
- 技术
- 时分复用技术
- 利用处理机的空闲时间运行其他程序,提高处理机的利用率
- 空分复用技术
- 利用存储器的空闲空间分区域存放和运行其他的多道程序,以此提高内存的利用率
- 时分复用技术
- 异步
- 进程是以人们不可预知的速度向前推进的,此即进程的异步性
操作系统主要功能
- 处理机管理
- 主要功能有:创建和撤销进程,对诸进程的运行进行协调,实现线程之间的信息交换,以及按照一定的算法把处理机分配给进程
- 进程控制、进程同步、进程通信、调度
- 存储器管理
- 主要任务:是为多道程序的运行提高良好的环境,提高存储器的利用率,并能从逻辑上扩充内存
- 具备:内存分配和回收,内存保护,地址映射和内存扩充
- 设备管理
- 文件管理
进程的描述与控制
进程描述
- 定义
- 1、程序的一次动态执行
- 2、具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位
- 特征
- 动态性、并发性、独立性、异步性
- 进程实体
- 程序段
- 相关的数据段
- 进程控制块(PCB)
**进程控制块(PCB)作用:为了参与并发执行的每个程序都能独立运行,在操作系统中必须为之配置一个专门的数据结构**
状态及状态转化
-
状态及状态转换
- 三种状态
- 就绪状态:分配到除CPU以外的所有必要资源
- 执行状态:进程获得CPU
- 阻塞状态:正在执行的进程由于发生某事件(如I/O请求,申请缓存区失败等)暂时无法继续执行时的状态
- 引发状态转换事件
- 就绪–>执行:进程调度
- 执行–>就绪:时间片完
- 执行–>阻塞:I/O请求
- 阻塞–>就绪:I/O完成
- 三种状态
-
转态转换图
- 创建状态
- 进程所需的资源尚不能得到满足,此时创建工作尚未完成,进程不能被调度运行,此时进程所处的状态
- 创建步骤
- 1、申请一个空白的PCB,并向PCB中填写用于控制和管理进程的信息
- 2、为该进程分配运行时所必须的资源
- 3、把该进程转入就绪状态并插入就绪队列之中
- 目的:为了保证进程调度必须在创建工作完成后进行,以确保对进程控制块的完整性;也增加了管理的灵活
- 终止状态
- 创建步骤
- 1、等待操作系统进行善后处理
- 2、将其PCB清零,并将PCB空间返还系统
- 创建步骤
- 挂起状态
- 引入原因是基于系统和用户的如下需要:
- 终端用户的需要:方便用户研究程序执行情况或对程序进行修改
- 父进程请求:挂起自己的子进程,以便考查和修改子进程或者协调各子进程间的活动
- 负荷调节的需要:实时系统工作负荷较重,把一些不重要的进程挂起,以保证系统正常运行
- 操作系统的需要
- 挂起原因:当系统资源尤其是内存资源已经不能满足进程运行的要求时,必须把某些进程挂起(suspend),对换到磁盘对换区中,释放它占有的某些资源,暂时不参与低级调度。起到平滑系统操作负荷的目的。
- 引入原因是基于系统和用户的如下需要:
- 创建状态
进程同步
-
基本概念
- 主要任务:是对多个相关进程在执行次序上进行协调,是并发执行的进程之间能按照一定的规则共享系统资源,并很好地相互合作,从而使程序的执行具有可再现性
- 临界资源:一段时间内只允许一个进程访问的资源
- 临界区:每个进程中访问临界资源的那段代码称为临界区(criticalsection)
- 同步机制应遵循的规则
- 空闲让进
- 忙则等待
- 有限等待
- 让权等待
-
硬件同步机制
- 关中断
- 利用Test-and-Set指令实现互斥
- 利用Swap指令实现进程互斥
-
信号量机制
- 整型信号量
- 缺点:在整型信号量中,只要信号量是是s<=0 就会不断的测试,并未遵循“让权等待原则”,而使进程处于忙等状态
- 记录型信号量
-
不存在“忙等”现象
-
运行态->阻塞态:调用block原语进行自我阻塞
-
阻塞态->就绪态:调用wakeup原语唤醒等待队列的第一个进程
-
P操作(wait)定义:申请一个单位资源,进程进入
P(S): 1、将信号量S的值减1,即S=S-1; 2、如果S<=0,则该进程继续执行;否则该进程置为等待状态,排入等待队列
- V操作(signal)定义:释放一个单位资源,进程出来
V(S):1、将信号量S的值加1,即S=S+1; 2、如果S>0,则该进程继续执行;否则释放队列中第一个等待信号量的进程
-
互斥:在临界资源分别PV;同步:前V后P
整型信号量和记录型信号量是共享一个临界资源
- AND型信号量
- 思想:将进程在整个运行过程中的所有资源,一次性全部分配给进程,进程使用完后再一次性释放,只要一个进程尚未分配成功,其他所有为之分配的资源也不分配给它。可避免死锁现象。
- 整型信号量
经典的进程同步问题
- 生产-消费者问题
- 哲学家进餐问题
- 读者-写者问题
进程通信类型
- 共享存储器系统
- 管道通信系统
- 消息传递系统
- 客户机-服务器系统
线程
- 目的:为了减少程序在并发执行时所付出的时空开销,使OS具有更好的并发性
- 概念:作为独立调度和分派的基本单位,因而是独立运行的基本单位
- 三种状态
- 执行状态
- 就绪状态
- 阻塞状态
- 线程与进程比较
- (1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。
- (2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。
- (3)处理机分给线程,即真正在处理机上运行的是线程。
- (4)线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。
- (5)划分尺度:线程更小,所以多线程程序并发性更高。
- (6)资源分配:进程是资源分配的基本单位,同一进程内多个线程共享其资源。
- (7)地址空间:进程拥有独立的地址空间,同一进程内多个线程共享其资源。
- (8)处理器调度:线程是处理器调度的基本单位。
- (9)执行:每个线程都有一个程序运行的入口,顺序执行序列和程序的出口,但线程不能单独执行,必须组成进程,一个进程至少有一个主线程。简而言之,一个程序至少有一个进程,一个进程至少有一个线程。
处理机调度与死锁
处理机调度
三个层次
- 高级调度
- 又称作业调度,调度对象:作业
- 主要功能:根据某种算法,决定将外存上处于后备队列中的哪几个作业调入内存,为它们创建进程、分配必要资源,并将它们放入就绪队列
- 低级调度
- 又称进程调度或短程调度,调度对象:进程
- 主要功能:根据某种算法,决定就绪队列中的哪个进程应获得处理机,并由分派程序将处理机分配给被选中的进程
- 中级调度
- 又称内存调度或中程调度
- 主要目的:挺高内存利用率和系统的吞吐量
- 主要功能:把那些暂时不能运行的进程,调至外存等待,此时进程的状态称为就绪驻外存状态(或挂起状态)。当它们具备运行条件且内存又稍有空闲时,由中级调度来决定,把外存上的那些已具备运行条件的就绪进程重新调入内存,并修改其状态为就绪状态,挂在就绪队列上等待
调度算法评价指标
- CPU利用率
- 利用率=忙碌时间/总时间
- 系统吞吐量
- 系统吞吐量=总共完成了多少道作业/总共花了多少时间
- 周转时间
- 周转时间=作业完成时间-作业提交时间
- 平均周转时间=各周转时间之和/作业数
- 带权周转时间=作业周转时间/作业实际运行的时间
- 平均带权周转时间=各作业带权周转时间之和/作业数
- 等待时间
- 等待被服务的时间之和
- 响应时间
- 用户提交请求到首次产生响应所用的时间
调度算法
- 先来先服务(FCFS)
- 非抢占式
- 优点:公平、实现简单
- 缺点:对短作业来说用户体验不好,对长作业有利,对短作业不利
- 不会产生饥饿现象
- 短作业优先(SJF)
- 优点:“最短的”平均等待时间,平均周转时间
- 等待时间=周转时间-运行时间
- 缺点:不公平。对短作业有利,对长作业不利
- 会产生饥饿现象
- 优点:“最短的”平均等待时间,平均周转时间
- 优先级(PSA)
- 优点:用优先级区分紧急程度、重要程度,适用于实时操作系统。可灵活地调整对各作业/进程的偏好程度
- 缺点:可能会产生饥饿
- 类型
- 静态优先级:创建进程时确定,之后一直不变
- 动态优先级:创建进程时有一个初始值,之后会根据情况动态地调整优先级
- 高响应比优先(HRRN)
- 在每次调度时,先计算各个作业的响应比,选择响应比最高的为其服务
- 响应比 =(等待时间+服务时间)/服务时间
- 非抢占式
- 优点:综合考虑了等待时间和运行时间
- 不会产生饥饿现象
- 在每次调度时,先计算各个作业的响应比,选择响应比最高的为其服务
- 时间片轮转调度(RR)
-** 只用于进程调度**- 抢占式,由时钟装置发出来发出时钟中断来通知CPU时间片已到
- 优点:公平,响应快,适用于分时操作系统
- 缺点:由于高频率的进程切换,因此有一定的开销;不区分任务的紧急程度
- 时间片太大会退化为先来先服务调度;时间片太小,进程切换过于频繁,会花大量时间用于进程切换
- 不会产生饥饿现象
- 多级反馈队列调度
- 用于进程调度
- 抢占式
- 优点:对各类型进程相对公平(FCFS优点),每个新到来的进程都可以能快得到响应(RR优点);短进程只要较少的时间就可以完成(SPF优点);不必实现估计进程的运行时间(避免用户作假)
- 会产生饥饿现象
- 最早截止时间优先(EDF)
- 根据截止期限动态分配优先级。截止期限越早,优先级越高;截止期限越晚,优先级越低。
- 最低松弛度优先
- 根据任务紧急(或松弛)的程度,来确定任务的优先级。任务的紧急程度愈高,为该任务所赋予的优先级就愈高,使之优先执行。在实现该算法时要求系统中有一个按松弛度排序的实时任务就绪队列,松弛度最低的任务排在队列最前面,被优先调度。
- 任务的松弛度=必须完成的时间-其本身的运行时间(还要运行的时间)-当前时间
进程调度
- 调度方式
- 非抢占式
- 抢占式
- 优先级倒置
- 条件:基于优先级抢先式的任务调度、资源共享
- 现象:高优先级进程(线程)被低优先级进程(线程)延迟或阻塞的现象
- 解决方法:规定进程在进入临界区后,其所占有的处理机不允许被抢占
死锁
-
死锁定义:如果一组进程中的每一个进程都在等待仅由该组进程中的其它进程才能引发的事件,那么该组进程是死锁的
-
产生原因
- 竞争不可抢占性资源
- 竞争可消耗资源
- 进程推进顺序不当
-
产生死锁的必要条件
- 互斥条件
- 请求和保持条件
- 不可抢占条件
- 循环等待条件
-
处理死锁的方法
- 预防死锁
- 破坏“请求和保持”条件
- 系统必须保证做到:当一个进程在请求等待资源时,它不能持有不可抢占资源。该保证可通过两种协议实现:1、第一种协议;2、第二种协议
- 简单说,资源一次性分配
- 破坏“不可抢占”条件
- 允许对进程实行抢夺
- 破坏“循环等待”条件
- 是将系统中的所有资源统一编号,进程可在任何时刻提出资源申请,但所有申请必须按照资源的编号顺序(升序)提出。
- 破坏“请求和保持”条件
- 避免死锁
- 安全状态:只要能找到一个安全序列,系统就是安全状态
- 安全序列:如果系统按照这种序列分配资源,则每个进程都能顺利完成。安全序列可以有多个。
总结:如果系统处于安全状态,就一定不会发生死锁;如果系统处于不安全状态,就可能会发生死锁。 - 银行家算法
- 检测死锁
- 是否死锁?根据资源分配图知道怎么进行死锁
- 解除死锁
- 抢占资源
- 终止(或撤销)进程
- 预防死锁
存储器管理
- 内存扩充
- 覆盖技术
- 将程序分为多个段(多个模块)。常用的模块常驻内存,不常用的段在需要的时候调入内存
- 交换技术
- 内存空间紧张时,系统将内存某些进程暂时换出外存,把外存某些已具备条件的换入内存
- 虚拟存储技术
- 覆盖技术
存储器层次
- cpu寄存器
- 主存
- 辅存
多层结构根据功能
- 寄存器
- 高速缓存
- 主存储器
- 磁盘缓存
- 固定磁盘
- 可移动储存介质
程序的装入和链接
程序的链接
- 静态链接方式
- 在程序运行之前,先将各目标模块及它们所需的库函数链接成一个完整的可执行程序,以后不再拆开
- 装入时动态链接
- 将用户源程序编译后所得到的一组目标模块,在装入内存时,釆用边装入边链接的链接方式
- 优点:便于修改和更新,便于实现对目标模块的共享
- 运行时动态链接
- 在执行过程中,当发现一个被调用的模块尚未装入内存时,立即由OS去找到该模块,并将之装入内存,将其链接到调用者模块上
- 优点:加快程序的装入过程,节省大量内存空间
程序的装入
- 绝对装入方式
- 编译时产生绝对地址
- 只适用于单道程序环境
- 可重定位装入方式
- 装入时将逻辑地址转化为物理地址
- 用于多道程序环境
- 动态运行时的装入方式
- 运行时将逻辑地址转化为物理地址,需要设置重定位寄存器
- 允许程序运行时在内存中移动位置
连续分配存储管理方式
- 单一连续分配
- 最简单的一种存储管理方式,但只能用于单用户、单任务的OS中
- 方法:将内存分为系统区(内存低端,分配给OS用)和用户区(内存高端,分配给用户用)。采用静态分配方式,即作业一旦进入内存,就要等待它运行结束后才能释放内存
- 产生内部碎片
- 固定分区分配
- 最早使用的一种可运行多道程序的存储管理方法
- 数据结构:分区说明表
- 方法:将内存空间划分为若干个固定大小的分区,除OS占一区外,其余的一个分区装入一道程序。分区的大小可以相等,也可以不等,但事先必须确定,在运行时不能改变。即分区大小及边界在运行时不能改变
- 特点
- 一个作业只能装入一个分区,当分区大小不能满足作业的要求时,该作业暂时不能装入
- 通过对“分区使用表”的改写,来实现主存的分配与回收。作业在执行时,不会改变存储区域,所以采用静态地址重定位方式。此方法易于实现,系统开销小
- 产生内部碎片
- 动态分区分配
- 一种动态划分存储器的分区方法
- 数据结构:空闲分区表;空闲分区链
- 方法:在作业进入内存时,根据作业的大小动态地建立分区,并使分区的大小正好适应作业的需要。因此系统中分区的大小是可变的,分区的数目也是可变的
- 基于顺序搜索的动态分区分配算法
- 首次适应算法(FF)
- 最快最好的也是最简单的
- 思想:从头到尾找到合适的分区
- 循环首次适应算法(NF)
- 思想:每次从上次查找结束的位置开始查找
- 最佳适应算法(BF)
- 思想:优先使用更小的分区,以保留更多大分区
- 产生外部碎片
- 最坏适应算法(WF)
- 思想:优先使用更大的分区,以防止产生太小的不可用的碎片
- 首次适应算法(FF)
- 基于索引搜索的动态分区分配算法
- 快速适应算法
- 伙伴系统
- 哈希算法
- 只有外部碎片
- 外部碎片可采用“紧凑”技术来实现
- 动态可重定位分区分配
对换
- 定义:把内存中暂时不能运行的进程或者暂时不用的程序和数据换出到外存上,以便腾出足够的内存空间,再把具备运行条件的进程或进程所要的程序和数据换入内存
- 类型
- 整体对换
- 用于分时系统
- 页面(分段)对换
- 为了支持虚拟存储系统
- 整体对换
- 进程的换入与换出
- 换出:将内存中的某些进程调出至对换区,以便腾出内存空间
- 换入:将进程从外存调入内存
非连续分配(离散分配)
- 分页存储管理方式
- 页面、物理块
- 地址结构:页号P和页内位移量W
- 页表
- 页表是存放在内存中的
- 为每个进程创建一个页表
- 作用:记录进程页面和实际存放的内存块之间的关系
- 快表
- 快表解决了两次访问内存的问题,降低系统的开销
- 分段存储管理方式
- 分段地址结构:段号、段内地址
- 三次访问
- 段页式存储管理方式
分页与分段区别
- (1)页是信息的物理单位,分页对用户不可见。段是信息的逻辑单位,分段对用户可见
- (2)页的大小固定,由系统确定,将逻辑地址划分为页号和页内地址是由机器硬件实现的。而段的长度却不固定,决定于用户所编写的程序,通常由编译程序在对源程序进行编译时根据信息的性质来划分
- (3)分页的地址空间是一维的。分段的地址空间是二维的
- (4)分段更容易实现信息的共享和保护(纯代码\可重入代码可以共享)
- (5)分页(一级页表)、分段访问一个逻辑地址都需要两次访问,分段存储也可以引入快表机制
虚拟存储器
虚拟存储器概述
- 虚拟存储器定义:具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统
- 局部性原理
- 时间局部性
- 如果程序中的某条指令被执行,则不久以后该指令可能再次执行;如果某个数据被访问过,则不久以后该数据可能再次被访问
- 原因:程序中存在着大量的循环操作
- 空间局部性
- 一旦程序访问了某个单元,在不久以后其附近的存储单元也将被访问,即程序在一段时间内所访问的地址可能集中在一定的范围之内
- 典型情况:程序的顺序执行
- 时间局部性
- 虚拟存储器特征
- 多次性
- 对换性
- 虚拟性
- 实现方法
- 1、分页请求系统
- 2、请求分段系统
请求分页管理方式
- 请求分页的页表项
- 页号、物理块号
- 状态位P:指示该页是否已调入内存,供程序访问时参考
- 访问字段A:用于记录本页在一段时间内被访问的次数
- 修改位M:标识该页在调入内存后是否被修改过
- 外存地址:用于指出该页在外存上的地址,通常是物理块
- 缺页中断:在请求分页系统中,每当要访问的页面不在内存时,便产生一缺页中断
- 越界中断:页号大于或等于页表长度;段内地址超过该段的段长
- 内存分配策略
- 固定分配局部置换
- 可变分配全局置换
- 可变分配局部置换
- 页面调入策略
- 预调页策略
- 请求调页策略
页面置换算法(会算缺页数、缺页率及页面置换次数)
- 最佳置换算法
- 先进先出(FIFO)置换算法
- 最近最久未使用(LRU)置换算法
- 最少使用(LFU)置换算法
- CLock置换算法
- 改进型Clock置换算法
磁盘存储器
磁盘访问时间
- 寻道时间
- 旋转延迟时间
- 传输时间
磁盘调度算法(会计算总寻道长度、平均寻道长度)
- 先来先服务(FCFS)
- 目标:使磁盘的平均寻道时间最少
- 思想:进程请求访问磁盘的先后次序进行调度
- 最短寻道时间优先(SSTF)
- 思想:选择从当前磁头位置出发,移动距离或时间最少的磁盘 I/ 0 请求
- 扫描算法
- 思想:处理所有向上的请求,然后再处理相反方向的请求
- 循环扫描算法
- 思想:移动磁头从磁盘一端到磁盘另一端,并且处理行程上的请求。然而,当磁头到达另一端时,它立即返回到磁盘的开头,而并不处理任何回程上的请求