以为会狠狠考概念,没想到没考啥概念,计算也比较简单!
introduction
操作系统是一组控制和管理计算机系统中的各种软硬件资源,合理地组织计算机系统的工作流程,方便用户使用的程序的集合
操作系统的目标和作用
- convenience方便性:方便用户使用计算机系统;
- efficiency有效性:提高系统资源的利用率;
- 可扩充性、开放性;
操作系统功能
- 从资源管理的角度
- 处理机管理
- 存储器管理
- 设备管理
- 文件管理
- 用户接口
- 从用户接口的角度
操作系统的分类
- 批处理操作系统,单道,多道。
- 分时操作系统
- 实时操作系统,两个基本特征:及时性、可靠性
- 通用操作系统,兼有批处理、分时处理、实时处理OS三者中的两者
如果操作系统具有很强的交互性,可同时供多个用户使用,但时间响应不太及时,则属于 分时系统 类型;如果操作系统可靠,时间响应及时但仅有简单的交互能力则属于 实时系统 类型;如果操作系统在用户提交作业后,不提供交互能力,它所追求的是计算机资源的高利用率,大吞吐量和作业流程的自动化,则属于 批处理系统 类型。
并发和并行的区别
- 并发是指一个处理器同时处理多个任务,并行是指多个处理器或者是多核的处理器同时处理多个不同的任务。
- 并发是逻辑上的同时发生(simultaneous),而并行是物理上的同时发生。
操作系统的特征
- 并发性
- 共享性,资源互斥使用(临界资源)、同时使用
- 虚拟性,一个物理实体映射为多个逻辑实体
- 异步性,在多道程序环境下,每道程序的推进时间与顺序受运行环境的影响,是不确定的;程序执行结果不确定
多道程序设计:在内存中同时存放多道用户作业,使它们都处于执行的开始点和结束点之间
操作系统接口
- 作业级接口
- 命令行
- GUI
- 批处理
- 程序级接口
- 系统调用
操作系统结构
- 简单结构
- 分层结构
- 微内核结构
CPU管理
- 进程,进程是程序的一次执行过程,是系统进行资源分配和调度的一个基本单位
- 进程特征
- 动态性:有生命周期
- 并发性:并发执行
- 独立性:独立获得资源、独立运行单位
- 异步性:推进速度不可预知道、执行结果不确定
- 结构性:由程序段、数据段和PCB组成
- 进程与程序
- 进程是程序的一次执行,是一个动态的概念;而程序是一组有序的指令,是一种静态的概念。即进程是程序执行的动态过程,而程序则是进程运行的静态文本。
- 一个进程可以执行一个或几个程序,同一个程序也可能由几个进程同时执行。
- 程序可长期保存,而进程是有生命周期的。
- 进程是并发实体, 而程序则不是
- 进程与线程:
- 调度方面:线程作为调度分派的基本单位,而进程则是资源分配和调度的一个基本单位;
- 并发性方面:进程之间可以并发,一个进程的多线程之间也可并发执行;
- 拥有资源方面:进程作为拥有资源的基本单位,而线程只拥有少量必不可少的资源,但它可以访问所属进程的资源
- 系统开销方面:进程切换要涉及到进程环境的切换,开销较大,而线程间切换只需保存和设置少量的寄存器内容,开销远小于进程切换开销。
- 进程的组成:程序、数据、PCB
- PCB:记录OS所需的、用于描述进程的当前情况以及控制进程运行的全部信息,是进程存在的唯一标志,常驻内存。
- 进程标识符
- 处理机状态(CPU现场)
- 进程调度信息:状态、优先级、时间、事件
- 进程控制信息:地址、通信信息、资源
- PCB:记录OS所需的、用于描述进程的当前情况以及控制进程运行的全部信息,是进程存在的唯一标志,常驻内存。
- 进程状态和控制
- 就绪态:进程已经获得除处理机以外的所有资源,只要获得处理机即可执行
- 执行态:进程已经获得处理机,正在处理机上执行
- 等待态:进程正在等待某一事件的发生,如等待I/O完成、等待信号量等
- 创建态:进程正在被创建
- 终止态:进程已经完成执行,但PCB仍然保留,以便父进程得到该进程的有关信息
进程的互斥与同步
- 临界区和临界资源:每个进程中访问临界资源的那段程序称为临界区,临界资源是一次仅允许一个进程使用的共享资源。
- 进程的互斥:进程在运行中争用系统资源,对于独占型资源,只能一个进程使用完,另一个进程才能使用。
- 临界区问题要求:
- 互斥
- 进步,没有进程在临界区时,若有其他进程需要进入,则一定有一个进程能进入
- 有限等待,要求从申请进入临界区到进入临界区之间,其他进程进入临界区的次数有上界
- 进程的同步:在异步环境下,互相合作的进程按各自独立的速度向前推进,但在某些确定点上必须协调工作。即当某个进程到达这些点后,等待另一进程发来信息,否则就只能停下来等待其操作的完成,进程间的这种协同关系称为进程同步。
- 进程互斥的实现:
- peterson
- 硬件同步:原子指令test_and_set
- 互斥锁封装
- 进程同步和互斥实现
- 信号量PV,可以通过计数量和等待进程列表实现一个非自旋的信号量,减弱了忙等待的影响
- 条件变量
- 管程
- IPC问题
- 生产者消费者问题
- 读者写者问题
- 哲学家进餐问题
线程
- 引入线程目的:提高系统效率、提高系统资源利用率、减少进程并发执行时所付出的时空开销,使OS具有更好的并发性。
- 进程内一个可调度的实体,CPU调度的基本单位,包括ID,程序计数器寄存器组和堆栈。
- 内核和用户线程
- 用户线程:存在于用户空间中,其创建、撤消和切换都不需系统支持。
- 内核支持线程:是依赖于内核的,其创建、撤消和切换都是由内核实现的。
- 模型
- 一对一,映射一个用户线程到一个内核线程,一个线程阻塞,其他线程可以正常继续执行。
- 多对一,映射多个用户线程到一个内核线程,线程管理由用户程序库完成,效率高;当一个线程阻塞时,整个进程都会阻塞。无法用于多处理器核系统,因为内核一次只能调度一个线程。
- 多对多,映射多个用户线程到数量更少或相等的内核线程,一个线程阻塞,内核可以调度另一个线程。
CPU调度
三级调度
- 长期调度从缓存池中选择进程加载到内存,负责控制多道程序程度(内存中进程数量);执行频率低,间隔时间长
- 中期调度选择进程从内存中取出,降低多道程序程度,之后进程可被重新调入内存并从中断处执行;
- 短期调度从就绪队列中选择进程,分配给cpu执行;执行频率高,速度快
调度方式
- 抢占式
- 非抢占式
调度时机
- 现运行进程任务完成或出现异常
- 现运行进程因某种原因由执行变成阻塞状态
- 时间片用完
- 采用可剥夺调度方式时,有更高优先级进程进入就绪队列
调度算法(调度的都是就绪队列不是等待队列)
- 先来先服务FCFS
- 短作业优先SJF。如何获得下一个CPU执行时间?指数平均预测。
- 基于优先级的调度算法。存在饥饿问题,解决方法,增加就绪队列中等待时间过长的进程的优先级。
- 时间片轮转RR。
- 多级队列调度算法,根据进程属性,如优先级,将就绪队列分成多个单独队列,每个队列使用自己的调度算法。
- 多级反馈队列调度算法,允许进程在队列之间移动。比如进程使用了过多CPU时间,将其放入下一级队列,当进程在一个队列中等待时间过长,则将其放入上一级队列。
多处理器调度
- 非对称多处理器ASMP:主处理器负责进程调度和IO处理,其他处理器负责执行代码
- 对称多处理器SMP:所有进程有一个共同的就绪队列或者每个处理器有自己的就绪队列
- 处理器亲和性
- 软亲和性:操作系统试图保持进程运行在同一处理器上,但不保证
- 强亲和性:允许进程运行在处理器子集上
- 多核处理器调度
- 设计了多线程处理器核,每个核分配2或多个硬件线程
- 两个级别的调度:操作系统选择软件线程运行在哪个硬件线程;每个核选择运行哪个硬件线程
实时CPU调度,应该支持抢占
- 单调速率调度,优先级和周期成反比,即更频繁的事件有更高的优先级
- 最早截止期限,不要求是周期或者CPU长度固定
- 比例分享调度
死锁
-
产生死锁的原因:
- 系统资源不足;
- 进程推进顺序不合适;
-
死锁产生的必要条件
- 互斥条件:一个资源每次只能被一个进程使用
- 占有并等待:一个进程因请求资源而阻塞时,对已获得的资源保持不放;一个进程应该至少占有一个资源,并等待另一个资源,而该资源为其他进程占有
- 非抢占条件:进程已获得的资源,在末使用完之前,不能强行剥夺,只能完成后主动释放
- 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系
-
解决死锁的策略:
- 设计无死锁的系统:静态预防、动态避免;
- 允许出现死锁然后排除:检测并解除
-
预防
- 资源的静态分配方法:进程运行前一次性申请全部资源,破坏请求和保持条件.
- 资源的顺序分配法:系统的全部资源进行编号,只允许按编号顺序递增地申请,破除环路等待。
- 一个已占有资源的进程,若要申请新的资源,必须先放弃已占有的资源,破坏请求保持条件。
-
死锁避免
- 安全状态:当多个进程动态申请资源时,系统按某一顺序逐次地为每个进程分配所需资源,使每个进程都可以在最终得到最大需求量后依次顺利完成;否则为不安全状态;让系统在动态分配资源的过程中,不要进入不安全状态。
- 银行家算法
-
死锁检测
- 每种资源只有一个实例:资源分配图和等待图
- 多个实例:类似于银行家算法
-
死锁恢复
- 终止进程
- 终止所有死锁进程
- 逐个终止死锁进程,直到死锁解除
- 抢占资源
- 选择牺牲进程
- 回滚
- 终止进程
存储器管理
逻辑地址:CPU生成的地址
物理地址:内存看到的地址,即内存地址寄存器的地址
动态加载:程序只有被需要时才会加载
动态链接时,每个库引用都会保留存根,用来指示如何定位适当的内存驻留程序,或者在程序不在内存时加载库。
swap技术
把主存中暂时不能运行的进程调出到外存(快速磁盘),以便腾出足够的内存空间,再将具备运行条件的进程调入内存;
- 从逻辑上扩充内存空间,从而使整个系统资源利用率提高;
- 整体对换:以进程为单位,进程对换;
- 部分对换:页面对换,分段对换;
- 换出时应保证进程是空闲的;如果正在等待IO操作就会发生错误,解决方法不能换出等待IO的进程或者IO使用系统缓冲区
连续内存分配
- 固定分区:分区容量和数目固定不变,大小可不等,每个分区容纳一道作业。
- 动态分区,作业装入内存时根据作业大小建立分区
- 空闲分区的分配算法:
- 首次适应:空闲区按地址递增顺序排列
- 最佳适应:空闲区按容量递增顺序排列
- 最坏适应:空闲区按容量递减顺序排列
- 可重定位分区:重定位寄存器、紧凑技术
页表
- 多级页表
- 哈希页表
- 倒置页表
快表(TLB):存放被频繁访问的页面的页表项,设置快表是为了提高内存访问速度,内存访问时间的计算(与快表命中率相关);
虚拟内存
请求调页:页面在程序执行期间被请求时才加载到内存
对标记为无效的页面的访问会产生缺页错误
硬件支持
- 一定容量的内存;
- 较大容量的外存;
- 缺页(段)中断机构;
- 地址变换机构
页面置换算法
文件系统
磁盘分配
- 连续分配。优点:简单、顺序访问速度快。缺点:外部碎片、文件大小受限、难以支持动态增长,无法实现预知文件大小。
- 链接分配。优点:不需要知道文件大小,可以动态增长,无需合并磁盘空间。缺点:只能有效用于顺序访问,指针占据空间,难以实现随机访问、指针导致文件容易被破坏,可靠性低。使用FAT文件分配表,可以缓存FAT,改善随机访问时间。
- 索引方法。将所有指针放在一起构成索引块。
- 索引块的组织:链接;多级索引;组合方法。
空闲空间管理
- 位向量
- 链表
IO
为什么要引入缓冲区?
- 缓和CPU和I/O设备速度不匹配的矛盾。
- 降低对CPU的中断频率。
- 提高CPU和I/O设备之间的并行性,从而提高系统的吞吐量和设备利用率
设备独立性:是指应用程序独立于具体使用的物理设备,它可提高设备分配的灵活性和设备的利用率。
为了实现设备独立性,用户程序不直接使用物理设备名(或设备的物理地址),而使用逻辑设备名来请求某类设备;而系统在实际执行时,将逻辑设备名转换为某个具体的物理设备名,实施I/O操作。
四种IO方式