文章目录
操作系统引论
1.1 操作系统的基本内容
1.1.1 操作系统的目标和作用
操作系统的定义:操作系统是一组控制和管理计算机硬件和软件资源,合理地对各类作业进行调度,以及方便用户使用计算机的程序集合。
- 操作系统的目标:
- 方便性:使计算机系统更容易管理。(对用户)
- 有效性:提高计算机系统资源利用率、系统吞吐量。(对计算机系统)
- 可扩充性:方便地添加新的功能和模块,并能修改老的功能模块。(对操作系统本身)
- 开放性:遵循世界标准规范,使其与其他系统之间彼此兼容、方便地实现互联。(对其他操作系统)
- 操作系统的作用:
- 作为计算机系统资源的管理者
- 作为用户和计算机硬件之间的接口:命令、系统调用、图标-窗口
- 实现了对计算机系统资源的抽象:隐藏了对硬件操作的细节。
1.1.2 操作系统的发展过程
-
人工操作方式
- 缺点:
- 用户独占全机、CPU等待人工操作。
- 缺点:
-
脱机IO方式
- 优点:
- 减小CPU的空闲时间。
- 提高IO速度。
- 优点:
-
单道批处理方式
引入监督程序
- 优点:
- 提高系统资源利用率
- 增大了系统吞吐量
- 缺点:
- 资源得不到充分利用。因为系统中仅存在一道程序,每逢程序发出IO的时候,CPU便会处于等待状态。
- 优点:
-
多道批处理方式
- 优点:
- 多道程序并发执行,共享计算机资源。
- 资源利用率提高。
- 系统吞吐量变大。
- 缺点:
- 平均周转时间长
- 没有人机交互能力
- 优点:
-
分时操作系统
计算机以时间片为单位轮流为各个用户服务。
- 特点:
- 多路性:
- 独立性:
- 及时性:
- 交互性:
- 特点:
-
实时操作系统
提高系统响应时间,对随机发生的外部事件做出及时响应。
- 分类:
- 硬实时任务:
- 软实时任务:
- 分类:
-
微机操作系统:
- 最早的微机操作系统:8位CP/M
- 16位单用户单任务操作系统:MS-DOS
- Windows 95是单用户多任务操作系统
- UNIX,Windows7,Windows XP是多用户多任务操作系统(Linux)
1.1.3 操作系统的基本特征和功能
- 操作系统的基本功能:
- 并发性:
- 共享性:
- 虚拟性:
- 异步性:
- 操作系统的功能:
- 处理机管理
- 进程控制:为作业创建进程、撤销进程、并控制进程在过程中的状态变化
- 进程同步:对进程执行次序进行协调,是进程能有条不紊地运行。
- 进程通信
- 进程调度
- 存储器管理
- 设备管理
- 文件管理
- 用户接口
- 处理机管理
1.1.4 操作系统的结构
-
无结构OS
- 缺点:
- 调试和维护不方便
- 可读性和可扩充性差
- 缺点:
-
模块化结构OS
- 优点:
- 正确性高、适应性好
- 缺点:
- 模块的划分和接口的规定比较困难,OS结构不够清晰
- 优点:
-
分层式结构OS
- 优点:
- 正确性高,扩充性和维护性更好。
- 结构清晰
- 优点:
-
微内核结构OS
采用客户/服务器模式和面向对象的程序设计技术。
- 优点:
- 提高了系统的可扩展性
- 提供对分布式系统的支持。
- 优点:
进程控制
1.1 进程的基本概念
- 程序顺序执行特点:
- 顺序性
- 封闭性
- 可再现性
- 程序并发执行特点:
- 间断性
- 失去封闭性
- 不可再现性
- 进程的定义 && 目的
- 定义:进程是程序的一次执行过程
- 目的:使程序并发,提高计算机系统资源利用率,以及系统吞吐量
- 线程的目的:减小并发执行的开销,提高程序执行的并发度。
- 进程的特点:
- 动态性:进程是程序的一次执行过程
- 并发性:多个进程实体同时存在内存中
- 独立性:进程能够独立运行
- 异步性:进程可以按照各自独立的、不可预知的速度向前推进。(os保证进程并发执行的结果是可在现的)
- 进程的状态
- 就绪态
- 进程创建的事件:
- 用户登录
- 作业调度
- 提供服务
- 应用请求
- 进程终止的事件:
- 正常结束:
- 异常结束:RE
- 外界干预:
- 父进程请求
- 父进程终止
- 操作员干预
- 进程创建的事件:
- 阻塞态
- 引起阻塞和唤醒的时间:
- 请求共享资源失败
- 等待IO操作
- 新数据尚未到来
- 等待新任务到达
- 引起阻塞和唤醒的时间:
- 执行态
- 就绪态
- PCB
- 包含的信息:
- 进程标识符
- 进程控制信息:程序段、数据段的地址
- 进程调度信息:进程状态、优先级等
- 处理机状态:寄存器的值
- 包含的信息:
1.2 进程同步
- 程序之间的制约关系:
- 间接相互制约:主要源于资源共享
- 直接相互制约:主要源于进程合作
- 使用硬件实现
- 中断方式
- TestandSet指令
- Swap指令
- 使用信号量实现
- 生产者和消费者问题
- 哲学家进餐问题
- 读者和写者问题
1.3 进程通信
高级通信是指用户可直接利用操作系统所提供的一组通信原语。
-
共享存储器系统:
通过共享存储区的读写来交换数据
如果使用共享数据结构来进行通信,则必须由程序员来实现、且只能进行少量的数据交换。属于低级通信方式
-
管道通信
利用共享的文件
-
消息传递系统
指进程之间的数据交换以格式化的消息为单位。
-
直接通信(消息队列)
使用send(receiver, message), receive(sender, message)原语直接将信息发送给目标用户
使用消息缓冲队列PCB中还要添加:
- mq:消息缓冲队列队首指针
- mutex:消息缓冲队列的互斥信号量
- sm:消息缓冲队列的资源信号量
-
间接通信
通过某种中间实体,即信箱来实现通信。不仅能实现实时通信,还能实现非实时通信
-
-
客户机-服务器系统
- 套接字
- 远程过程调用
- 远程方法调用
1.4 线程
-
什么是线程,为什么要进入线程
-
为什么要引入线程
因为一个进程可能一次性要做很多事情,增加并发度
-
-
引入线程后发生的变化
- 资源分配和调度
- 进程是资源分配的基本单位,线程是处理机调度的基本单位
- 并发性
- 线程之间能够并发执行、进程之间也能并发执行
- 系统开销
- 传统的进程间并发,需要切换进程的运行环境,系统开销大
- 同一进程内的线程切换不需要切换进程环境,系统开销小
- 资源分配和调度
-
线程的重要属性
- 线程几乎不拥有资源
-
线程的实现方式
- 用户级线程:使用线程库实现
- 线程的切换由线程库实现,线程管理通过应用程序负责
- 线程切换在用户态下实现
- 操作系统不能意识到线程的存在
- 优点:
- 不需要切换到核心态,线程管理的效率高,系统开销小
- 缺点:
- 当一个进程被阻塞的时候,整个进程都会阻塞,并发度不高
- 内核级线程:(处理及调度的基本单位)
- 由操作系统来管理
- 线程的调度和切换都需要操作系统内核负责
- 优点:
- 当一个线程被阻塞的时候,别的线程还可以继续执行,并发能力强
- 缺点:
- 线程的切换需要操作系统内核完成,因此线程的管理成本高,开销大。
- 用户级线程:使用线程库实现
-
多线程模型
- 一对一模型:
- 优点:
- 当一个线程被阻塞后,别的线程还可以执行,并发能力强。
- 缺点:
- 管理成本高,开销大
- 优点:
- 多对一模型:
- 优点:
- 管理成本低,开销小
- 缺点:
- 并发度不高
- 优点:
- 多对多模型:
- 优点:
- 并发度高
- 管理成本低,开销小
- 优点:
- 一对一模型:
1.3 知识点回顾
- 引入进程的目的:使程序并发,提高计算机系统资源利用率,提高系统吞吐量
- 引入线程的目的:减少系统并发执行的开销,提高程序执行的并发程序。
- 引入线程的好处:提高资源利用率,增加系统吞吐量。
- 若应终端用户的请求而暂停执行的进程,应转变为静止状态,(如果是就绪态->静止就绪;阻塞态->静止阻塞)
- 处理机中:
- 用户态:如果有N个程序,处于就绪态的程序最多有N-1个,处于阻塞态的程序最多有N-1个。
- 核心态:如果有N个程序,处于就绪态的程序最多有N个,处于阻塞态的程序最多有N个。
处理机调度
1.1 基本概念
-
调度的层次
-
高级调度(作业调度)
- 目的:把作业调度到内存中
-
中级调度(内存调度)
- 目的:决定哪些挂起的进程调度回内存中
-
低级调度(进程调度)
-
目的:决定哪些进程上处理机运行
-
分类
-
抢占式:
只允许进程主动放弃处理机
- 引起进程切换的因素:
- 进程主动放弃处理机
- 进程运行出错
- 进程阻塞(请求IO等)
- 引起进程切换的因素:
-
抢占式
可以优先处理紧急任务
1. 进程调度的因素: 1. 时间片原则 2. 短作业优先原则(SPF,SJF) 3. 优先权原则
-
-
-
-
调度队列模型:
- 低级调度
- 高级调度+低级调度:
- 引入作业后备队列
- 高级调度+中级调度+低级调度
- 可以将进程挂起到外存中
- 不能进行进程切换的情况:
- 处理中断的过程中
- 原语
- 在操作系统内核程序的临界区中
-
调度算法的评价:
-
CPU利用率: 有 效 时 间 总 时 间 \frac{有效时间}{总时间} 总时间有效时间
-
吞吐量:单位时间处理作业的数量
-
周转时间
-
周转时间:作业完成时间 - 作业提交时间
-
带权周转时间:
等 待 时 间 + 运 行 时 间 运 行 时 间 \frac{等待时间+运行时间}{运行时间} 运行时间等待时间+运行时间
-
周转时间和带权周转时间越小越好
-
-
响应时间:
用户提交请求到系统首次响应所需要的时间。在交互式系统中,使用响应时间来衡量一个调度算法的好坏。
-
截至时间:
某个作业完成的最迟开始时间
-
-
作业调度算法
- FCFS
- 用于进程调度,也用于作业调度
- 优先级:开始时间
- 特点:
- 有利于长作业,不利于短作业
- 非抢占式
- 不会饥饿
- SJF、SPJ
- 用于进程调度,也用于作业调度
- 优先级:运行时间
- 特点:
- 有利于短作业,不利于长作业
- 非抢占式
- 会饥饿
- HRRN
- 高相应比优先算法(highest response ratio next)
- 用于作业调度
- 优先级: 等 待 时 间 + 要 求 服 务 时 间 要 求 服 务 时 间 \frac{等待时间+要求服务时间}{要求服务时间} 要求服务时间等待时间+要求服务时间(类似带权周转时间)
- 特点:
- 非抢占式
- 不会出现饥饿
- 等待时间相同时,SJP
- 要求服务时间相同时,FCFS
- 时间片轮转调度算法
- 时间片太大,退化成FCFS
- 时间片太小,系统开销变大
- 新进程在下处理机的进程的后面
- 特点:
- 非抢占式
- 用于进程调度
- 抢占式优先算法
- 目的:更好满足紧迫作业的要求,主要用于比较严格的实时系统
- 特点:
- 抢占式
- 导致低优先级饥饿
- 多级反馈队列调度算法
- 抢占式:当进程在处理 i 级的时候,出现[1 - i-1]的进程P。则P进程会抢占CPU。原进程返回 i 级队列
- 会出现饥饿
- FCFS
-
进程死锁
-
产生死锁的原因:
- 系统资源竞争
- 进程之间推进顺序不当
-
必要条件:
- 互斥条件
- 请求和保持条件
- 不可抢占条件
- 循环等待条件
-
处理死锁的基本方法
-
预防死锁:
-
破坏 请求和保持条件
- 进程运行前申请全部所需要的资源
- 优点:简单易于实现
- 缺点:资源利用率低
-
破坏 不可抢占条件
当一个进程得不到资源的时候,就主动释放全部的资源。
缺点:
- 实现复杂
- 可能导致前一阶段的工作失效。适用于易保存和恢复状态的资源。
-
破坏 循环等待条件
- 顺序资源分配法
- 给进程编号,当进程需要申请 i 号资源的时候,需要放弃大于 i 号的全部资源。
- 顺序资源分配法
-
-
避免死锁:
- 使用某种方式防止系统进入不安全状态
- 安全状态:
- 存在一个序列,可以满足所有进程的需求
- 安全状态不会发生死锁,不安全状态可能发生死锁。
- 银行家算法:
- 步骤:
- 先判断是否超过 need
- 判断是否超过 available
- os试探性分配资源给进程,然后进行安全性检测
- 找到一个满足need < available的进程,然后把它的allocation加入available中
- 重复,直到全部满足
- 如果可以,则分配资源
- 步骤:
-
死锁的检测:
- 死锁定理:(充分条件)(?)
-
死锁的解除:
- 资源剥夺法:suspend
- 撤销进程法:kill
- 进程回退法:回退
-
-