操作系统概论
文章目录
- 操作系统概论
- 操作系统的目标:
- 基本特征:
- 主要功能
- 发展
- 操作系统的运行机制
- 时钟管理
- 中断机制:
- 指令
- 程序
- 处理机状态
- 原语:由若干指令组成的程序段,完成特定功能
- 系统数据结构
- 系统调用
- 体系结构
- 进程--资源分配和调度的基本单位
- 线程
- 进程和程序的区别:
- 进程和线程的区别:线程降低了创建撤销和切换可执行实体的难度和成本
- 处理机调度
- 处理机调度层次:
- 算法:
- 进程通信
- 进程同步
- 进程同步实现方法:
- 死锁
- 解决死锁的方法
- 内存管理
- 进程运行的基本原理:
- 用户程序的主要处理阶段
- 连续分配管理方式:
- 动态分区算法
- 非连续分配管理方式:直接分散的装入不连续的分区
- 分页与分段方式对比
- 虚拟内存管理
- 页面置换算法
- 虚拟存储器的实现方法
- 输入输出管理
- I/O设备
- I/O设备组成
- I/O控制器的基本功能:
- I/O控制器的组成
- I/O通道
- 假脱机系统组成
- 假脱机系统特点
- 假脱机打印实现
- 缓冲的引入
- 磁盘访问时间
- 磁盘调度算法
- 文件系统
- 单级文件目录
- 两级文件目录
操作系统:(OS)用于控制和管理计算机的硬件和软件资源的程序集合
计算机系统的构成:用户,应用程序,操作系统(OS),硬件(裸机)
OS->系统软件
管理与配置内存,决定资源供需的优先次序,控制输入与输出设备,提供网络与管理文件系统等基本事务,提供一个让用户与系统交互的操作界面。
- 硬件交互
- 对(硬件)资源共享进行调度管理
- 解决并发操作处理中存在的协调问题
- 数据结构复杂,外部接口多样,便于用户使用
操作系统的目标:
有效性(系统资源利用率,系统吞吐量)————管理系统(硬件)资源
方便性————用户
可扩充性
开放性————扩充机器
基本特征:
-
并发:时间段内执行多个程序,时刻上是单个程序(分时交替执行)
并行:同一时刻执行二到多个程序
-
共享:计算机系统资源被多个进程共用
- 同时访问:同一时段允许多个程序同时访问共享资源
- 互斥访问:独占式,多个程序在同一个共享资源上独立而互不干扰的工作
- 共享硬件设备(打印机,音频,视频设备)
并发与共享互为前提,资源共享,多道程序同时访问;多道程序,需要共享
-
异步:以不可预知的速度进行
- 运行时机
- 因何暂停
- 时间片
- 程序性能
-
虚拟:物理实体划分为多个逻辑实体
- 时分复用技术TDM
- 虚拟处理机
- 虚拟设备
- 空分复用技术SDM
- 虚拟磁盘
- 虚拟储存器
- 时分复用技术TDM
基本特征:并发,共享(互为存在条件)
主要功能
- 系统资源的管理
- 处理机管理:进程控制,同步,通信,死锁处理,处理机调度。
- 存储器管理:内存分配,内存保护,地址映射,共享,扩充
- 文件管理:文件存储空间的管理,目录管理,文件读写管理于保护
- I/O设备管理:缓冲管理,设备分配,设备处理,虚拟设备
- 用户接口
- 程序接口
- 命令接口
- GUI图形用户接口
- 对计算机资源的抽象
- 硬件资源抽象成软件资源,方便使用
- 开放简单的访问方式,隐藏实现细节
发展
-
手工操作阶段:人机速度矛盾,用户独占,CPU等待人工
- 脱机输入/输出:外围机,内存一次一个程序
-
批处理阶段:(出现操作系统)
- 单道批处理:监督程序,缓解人机速度矛盾,系统资源利用率低,一道程序,CPU等待IO
- 多道批处理:调度程序,多道程序并发执行,资源利用率高(I/O时CPU不闲置),无人机交互,平均周转时间长
-
分时操作系统:(公平)提供人机交互,不可以优先处理紧急事务(不可以插队)(人与人的交互性)
- 多路性:时间片轮转
- 独立性:用户独立
- 及时性:短时间内响应
- 交互性:请求多种服务
-
实时操作系统:可以处理紧急事务(人与系统的交互性-资源共享),周期/非周期任务,硬实时:规定时间内完成,软实时:截止时间不严格
- 即时性:用户能接受的等待时间
- 可靠性:多级容错,保障系统和数据安全
可靠性 实时>分时 交互性 分时>实时
-
微机操作系统:个人计算机
-
网络操作系统:资源共享,远程通信
-
分布式操作系统:分布性,并行性
操作系统的运行机制
时钟管理
- 计时:提供系统时间
- 时钟中断:比如进程切换
中断机制:
- 提高多道程序环境下的CPU利用率
- 内中断(异常,内部信号)
自愿中断-指令中断
强迫中断:硬件中断,软件中断- 陷入/应用程序:主动引发:陷入指令(访管指令)由CPU产生
- 故障:由错误条件引发
- 终止:由致命错误引发
- 外中断(外部信号):外设请求,人工干预
中断处理过程:
- 产生中断:关中断(CPU不响应高级中断请求)–保存断点–引出服务程序–保存现场和屏蔽字–开中断
- 执行中断服务程序(此时CPU可以并发)
- 回收中断:关中断–恢复现场和屏蔽字–开中断–中断返回
指令
特权指令:(非用户指令)只允许操作系统使用。例:IO指令,中断指令
非特权指令:普通运算指令
(访管指令:用户自愿进入核心态)
程序
内核程序:系统管理者,执行一切指令,运行在核心态上
应用程序:普通用户程序,只能执行非特权指令运行在用户态上
处理机状态
用户态(目态):非特权指令
核心态(管态、内核态):所有指令
用户->核心:通过中断(硬件完成)
核心->用户:特权指令psw的标志位:0为用户,1为核心
原语:由若干指令组成的程序段,完成特定功能
- 处在操作系统最底层,最接近硬件
- 运行具有原子性,操作不可中断
- 运行时间短,,调用频繁
操作系统通过原语实现进程控制
系统数据结构
- 进程管理:作业控制块,进程控制块
- 存储器管理:存储器分配与回收
- 设备管理:缓冲区,设备控制块
系统调用
系统提供OS接口,在用户态发生,由核心态处理
- 有操作系统实现,给应用程序调用
- 是一套接口的集合
- 应用程序访问内核服务的方式
体系结构
-
传统的操作系统结构-无结构OS
- 一系列程序的集合,过程将可以相互调用
- 结构复杂且混乱,难以调试、阅读和维护
-
模块化结构OS:模块-接口法OS
- 基于分解和模块化原则
- 按照功能划分模块/子模块,规定模块间的接口
- 模块独立性标准:高内聚、低耦合
优点:提高OS设计的正确性,可理解性和可维护性,增强了适应性,加速开发过程
缺点:男易扩展后续需求,设计没有统一标准,导致模块接口设计不可靠
-
分层式OS
- 有序分层:自顶向下依次依赖
- 自底向上设计,每一步基础可靠
优缺点:易保正系统正确性,易扩充和维护,层次通信导致效率降低
-
微内核OS系统:
- 足够小的内核,只实现核心功能,进程调度,低级存储器管理,中断和陷入管理
- 应用机制与策略分离原理
- 采用面向对象技术
优点:扩展性,可靠性,可移植性提高,支持分布式系统,融入了面向对象技术
缺点:比早期的OS,降低了一定的效率
进程–资源分配和调度的基本单位
目的:更好的描述和控制程序并发执行,实现操作系统的并发性和共享性
定义:计算机程序关于某数据集合的一次运行活动,是系统进行资源分配和调度的基本单位。
组成:
-
PCB:保护进程运行期间相关的数据,是进程存在的唯一标志
- 程序段:能被进程调度到CPU的代码,可被多个进程共享
- 数据段:存放数据,存放原始数据和中间数据
特征:
- 动态性:创建生,撤销亡
- 并发性:多个进程同时运行
- 独立性:独立资源分配
- 异步性:相互独立,互不干扰
状态:
- 运行态:进程占用CPU
- 就绪态:进程准备运行,获得了除处理机以外的一切资源,得到处理机即可运行
- 阻塞态:进程等待某一事件不能使用CPU
- 创建状态:进程正在被创建
- 结束状态:进程正在从系统消失
状态变化:
- 就绪->运行:就绪的进程获得处理机资源(时间片)
- 运行->就绪:时间片用完或有更高级的进程进入
- 运行->阻塞:进程所需资源未准备好
- 阻塞->就绪:进程等待的事件到来
线程
目的:更好的使用多道程序并发执行提高资源利用率和系统吞吐量
程序执行的最小单位(运算调度的最小单位)
进程和程序的区别:
进程是动态的,程序是静态的,程序是有序代码的集合
进程是程序的执行
进程是暂时的,程序是永久的,进程是状态变化的过程
进程的组成包括程序、数据、和进程控制块(进程状态信息)
通过多次执行,一个程序可对应多个进程
通过调用关系,一个进程可包括多个程序
进程和线程的区别:线程降低了创建撤销和切换可执行实体的难度和成本
- 调度:线程是调度的基本单位,不同线程的切换不影响进程的切换
- 进程是资源分配的基本单位
- 引入线程和进程都是为了提高系统的并发性
- 线程间的切换相比进程减少了系统的开销
- 进程之间的地址空间是相互独立的,同一进程的线程共享地址空间
- 线程间的通信比同一进程间的通信简单
处理机调度
概念:对处理机进行分配,即从就绪队列中按照既定的算法(公平、高效)选择一个进程并将处理机分配给它运行,以实现进程的并发执行
前提作业,进程数远大于处理机数
目的:提高资源利用率,减少处理及空闲时间
调度程序:快速响应,考虑系统效率(平均周转时间)和调度算法开销
处理机调度层次:
- 高级调度(作业调度):后备作业调入内存,调入一次,调出一次
- 中级调度(内存对换):进程在内,外存区的对换
- 低级调度(进程调度):从就绪队列选择进程到处理机,基本调度,频率高(时间片)
调度方式:
- 剥夺(抢占)式:
- 暂停当前进程
- 分配给另一个进程
- 优先,短优先,时间片
- 非剥夺式
- 进程请求
- 等待当前进程完成或阻塞
- 缺:适用于批处理,不适用分时/实时
调度准则:
CPU利用率=忙碌时间/总时间、
系统吞吐量=完成作业数/总时间、
周转时间=完成时间-提交时间 带权周转=周转时间/实际运行时间
等待时间=等待调度时间
响应时间=提交-第一次响应时间间隔
调度时机:运行完\时间片完\I/O操作\原语操作\高优先级(剥夺式)
调度过程:保存镜像->调度算法->进程切换(分配处理机)->处理机回收
算法:
- 先来先服务FCFS
- 队列,等待完成或阻塞
- 顺序执行
- 非抢占式
- 短作业优先、SJF:预估周转时间最短优先
- ,最少的平均(带权)周转
- 非抢占式
- 平均周转时间最少
- 优先级调度算法、HRRN:优先级高的先调度
- 静态/动态
- 系统>用户,交互>非交互,I/O>计算
- 高响应比调度算法、PSA:响应比高的优先
- 非抢占式
- (等待时间+服务时间)/服务时间>=1
- 长时间等待时间越久,更容易获得处理机
- 时间片轮转、RR:公平
- 队列顺序,轮流使用时间片,时钟中断
- 抢占式
- 进程调度
- 适用于分时系统
- 多级反馈队列调度算法MFQ:PSA+RR
- 多个优先级排序
- 优先级高->低,时间片小->大
- 未执行完的,降级一次,时间片扩大一次
- 进程调度,抢占式
进程通信
进程间的信息交换,进程是资源分配的基本单位,内存空间彼此独立,
- 共享存储
- 共享数据结构:
- OS提供并控制共用
- 用户负责同步
- 低级通信:少量数据,效率低
- 共享存储区:存在安全隐患
- 共用内存的一块区域
- 由进程控制数据的形式和方式
- 高级通信:大量数据,效率高
- 共享数据结构:
- 消息传递:
- 直接通信:
- 指明ID,使用send发送使用receive接受,
- 维护消息缓冲队列,消息:(消息头(双方ID)+消息类型+长度+消息体)
- 间接通信:原语操作
- 信箱媒介
- 可以广播
- 直接通信:
- 管道通信
- 用于读/写进程的共享文件,pipe文件
- 本质是固定大小的缓冲区
- 同时间段只能单向通信,双通信要两个管道
- 先进先出(FIFO)组织传输
- 系统调用read()和write()读写
进程同步
**引入原因:**协调进程之间的相互制约关系
制约关系:
同步:直接制约,进程合作,因需要在某些位置上协调工作次序二等待,传递信息所产生
互斥:间接制约,排他性使用共享资源
临界资源:一次只允许一个进程访问的资源
临界区:在每个进程中访问临界资源的那段程序(代码)
临界区互斥:
- 空闲让进:一次只允许一个进程进入临界区
- 忙则等待:由于临界区进程只能有一个,所以其他进程必须等待
- 有限等待:进入临界区的进程要在有限时间内退出,以便于其他进程能够及时进入
- 让权等待:若进程不能进入自己的临界区,则应让出CPU,避免”忙等“
互斥访问实现:进入加锁->访问共享资源->退出解锁->其余代码
进程同步实现方法:
- 软件实现
- 单标志:违背空闲让进
- 双标志先检查后赋值:违背忙则等待
- 双标志后检查先赋值:违背空闲让进,有限等待
- 皮特森算法:违背让权等待
- 硬件实现
- 中断屏蔽:
- TS指令:违背让权等待
- Swap指令:交换变量的值(原子操作),违背让权等待
信号量机制:PV操作(p-等待、v-唤醒)
- 整形信号量:违背让权等待
- 记录型信号量:进程阻塞不会忙等
信号量S 负几表示有几个等待进程,0没有可用资源,没有等待进程,正几表示有几个可用资源
管程???
死锁
原因:非剥夺资源的竞争和进程的不恰当推进顺序
定义:多个进程因争夺资源产生的僵局,没有外力,则无法推进
必要条件:
- 互斥:共享资源的排他访问
- 不剥夺:访问时不可剥夺
- 请求并保持:保持当前资源并请求访问另一个资源
- 循环等待:多个进程都在等待其他进程释放资源->等待链
解决死锁的方法
- 预防:
- 破坏互斥条件
- 破坏不剥夺条件
- 破坏请求和保持条件
- 破坏循环等待条件
- 避免:
- 安全状态:安全一定不死锁,不安全不一定死锁
- 银行家算法:判断是否会导致死锁,是则拒绝,否则允许
- 检测:死锁定理:资源分配图不可完全简化
- 资源分配图
- 解除:资源剥夺、撤销进程、进程回退
n个资源被x个进程竞争,每个进程最多要求m个资源,则系统不会发生死锁时。
x取值不超过?
x*(m-1)<= n
内存管理
目的:更好的支持多道程序并发执行
功能
- 内存空间的分配与回收存储的保护与共享:
- 各道作业互不干扰地址转换:
- 逻辑地址->相应的物理地址内存扩充:
- 虚拟存储技术和自动覆盖技术,从逻辑上扩充内存
存储器的结构:
进程运行的基本原理:
-
程序的装入
- 绝对装入:
- 装入前知道装入位置,
- 单道程序环境
- 可重定位装入:
- 不可预知位置
- 多道程序环境
以上均一次性全部装入
- 动态运行装入
- 一次只装入部分
- 绝对装入:
用户程序的主要处理阶段
- 编辑:创建源文件
- 编译:编译,生成目标文件
- 链接:将所需库函数链接与目标模块链接,生成可执行文件
- 静态链接:装入前链接
- 装入时动态链接:
- 运行时动态链接
- 装入:装入内存执行
- 运行:得出结果
涉及到逻辑地址与物理地址的变化 以及 内存保护
内存扩充???
连续分配管理方式:
- 单一连续:用户区内存独占
- 实现简单,无外部碎片,不一定要内存保护
- 单用户单任务,内部碎片,存储利用率低
- 固定分区:多道程序,多个固定分区
以上都是预先分好分区
- 动态分区:
- 空闲分区表[分区号|大小|起始地址|状态]
- 回收相邻空间要合并,更新表或链的记录
动态分区算法
- 基于顺序的
- 首次适应:从低地址查找合适空间
- 循化首次适应:从上次查找的下一个开始
- 最佳适应:优先使用最小空闲空间
- **最坏适应:**优先使用最大连续空间
- 基于索引搜索的
- 快速适应
- 伙伴系统
- 哈希算法
以上作业必须连续
动态分区重定位:
紧凑:移动或重定位作业地址利用碎片空间
非连续分配管理方式:直接分散的装入不连续的分区
- 基本分页存储:大小相等的(逻辑)页或(物理)块-需要页表(PCB中)记录程序分了多少页,以及页号
- 基本分段存储:不同大小的段
- 段页式存储
计算
基本变换计算
物理地址=(页号->块号)+偏移量
页号p=逻辑地址A/页面长度(大小)L
偏移量W=逻辑地址A%页面长度L
分页与分段方式对比
同:
- 都是非连续分配(离散分配)
- 都通过地址映射实现地址变换
异
- 页是物理单位,段是逻辑单位
- 页大小固定由系统决定,段不固定由编译系统划分
- 页是一维的地址空间,段是二维的
- 分段有利于信息共享和保护
虚拟内存管理
概念:具备请求调入和置换的,从逻辑上对内存容量扩充的存储器系统
虚拟内存=内存+外存
局部性原理:
- 时间
- 空间
虚拟内存特征
- 多次
- 对换
- 虚拟
常规存储器特证
- 一次性
- 驻留性
页面置换算法
- 最佳置换OPT:无法实现,最小缺页率
- FIFO先进先出置换:淘汰最早进入的
- 最近最久置换算法:淘汰最近最久未使用的页面
- 时钟置换NRU:设计访问位,访问后置为一,淘汰时置为零跳过,为零时淘汰
- 改进型时钟置换:
虚拟存储器的实现方法
- 请求分页系统=分页+请求调页+页面置换
- 请求分段系统=分段+请求调段+分段置换
缺页率:f=访问失败(需要调入)次数/总的访问次数
- 页面大小
- 进程所分配物理块的数目
- 页面置换算法
- 程序固有特性
输入输出管理
I/O设备
交互类,存储类,网络通信
I/O设备组成
机械部件:
电子部件:I/O控制器,设备控制器,CPU与硬件之间的桥梁
I/O控制器的基本功能:
- 接受并识别CPU命令
- 向CPU报告设备状态
- 数据交换
- 地址识别
I/O控制器的组成
- CPU与控制器间的接口
- I/O逻辑
- 控制器与设备间的接口
I/O通道
概念:I/O通道是特殊的处理机,具备执行i/O指令的能力,并通过执行i/o通道程序来控制I/O操作
通道执行过程:
- cpu向通道发送I/O指令
- 通道收到指令取出并执行通道程序
- 完成任务后,通道向CPU发送中断信号
假脱机系统组成
- 输入输出井
- 输入输出缓冲区
- 输入输出进程
- 井管理程序
假脱机系统特点
- 提高i/o速度
- 独占设备改为共享设备
- 实现了虚拟设备功能
假脱机打印实现
- 磁盘缓冲区
- 打印缓冲区
- 假脱机管理进程和假脱机打印进程
缓冲的引入
- 缓和CPU与I/O设备速度矛盾
- 减少CPU中断频率,放宽响应时间限制
- 解决数据粒度不匹配问题
- 提高CPU和I/O设备并行性
磁盘访问时间
- 寻道时间=(磁盘速度*n条磁道)+磁臂启动时间k
- 平均旋转延迟时间=1/2*磁盘秒转速r
- 传输时间=读写字节数/r*磁道字节数
- 访问时间=寻道时间+延迟时间+传输时间
磁盘调度算法
- FCFS:请求时间顺序
- SSTF:最近
文件系统
单级文件目录
优点:
- 简单
缺点:
- 查找速度慢
- 不允许重名
- 不便于文件共享
两级文件目录
- 提高了检索速度
- 不同UFD中文件名可以相同
- 不同用户可以使用不同的文件名访问同一个共享文件
相对路径:当前目录到数据文件
绝对路径:从树根开始的路径