操作系统的演进:
多道程序设计:
早期批处理系统只能一次处理一个任务
多道程序设计使得批处理系统可以一次处理多个任务
多道程序设计是指在计算机内存中同时存放多个程序
多道程序在计算机的管理程序之下相互穿插运行
多道程序的管理是操作系统的重要功能
操作系统概览
What&Why:
- 操作系统是管理计算机硬件和软件资源的计算机程序
- 管理配置内存、决定资源哦供需顺序、控制输入输出设备等
- 操作系统提供让用户和系统交互的操作界面
- 操作系统的种类是多样的,不局限于计算机
- 从手机到超级计算机,操作系统可简单也可复杂
- 在不同设备上,操作系统可向用户呈现多种操作手段
-
管理硬件、并且提供用户交互的软件系统
-
我们不可能直接操作计算机硬件
-
设备种类繁多复杂,需要统一界面
操作系统的简易性使得更多人能够使用计算机
操作系统的基本功能:
统一管理计算机资源,
操作系统实现了对计算机资源的抽象,
用户无需面向硬件接口编程
IO设备管理软件,提供读写接口
文件管理软件,提供操作文件接口
操作系统提供了用户与计算机之间的接口,
图形窗口形式
命令形式
系统调用形式
操作系统相关概念:
并发性:
并行是指两个或多个事件可以在同一时刻发生
并发是指两个或多个事件可以在同一时间间隔发生
共享性:
操作系统中的资源可供多个并发的程序共同使用,即资源共享
多个程序可以同时使用主存资源
资源共享分为:互斥共享和同时访问
互斥共享,
当资源被程序A占用时,其他想使用的程序只能等待
只有当进程A使用完以后,其他进程才可以使用该资源
同时访问,
某种资源在一段时间内并发地被多个程序访问
这种“同时”是宏观的,从宏观去看该资源可以被同时访问
虚拟性:
把一个物理实体转变为若干个逻辑实体
物理实体是真实存在的,逻辑实体是虚拟的
虚拟的技术主要有时分复用和空分复用
时分复用,
资源在时间上进行复用,不同程序并发使用
多道程序时分使用计算机硬件资源
提供资源利用率
空分复用,
实现虚拟磁盘、虚拟内存
提高资源利用率,提高编程效率
异步性:
在多道程序环境下,允许多个进程并发执行
进程在使用资源时可能需要等待或放弃
进程的执行并不是一气呵成的,而是以走走停停的形式推进
进程管理之进程实体
为什么需要进程:
进程是系统进行资源分配和调度的基本单位
进程作为程序独立运行的载体保障程序正常进行
进程的存在使得操作系统弄资源的利用率大幅提升
进程的实体:
主存中的进程形态,
标识符:唯一标记一个进程,用于区别其他进程
状态:标记进程的进程状态,如运行态
程序计数器:指向进程即将被执行的下一条指令的地址
内存指针:程序代码、进程数据相关指针
上下文数据:进程执行时处理器存储的数据
IO状态信息:被进程IO操作所占用的文件列表
记账信息:使用处理器时间、时钟总数和等
进程控制块(PCB),
用于描述和控制进程运行的通用数据结构
记录进程当前状态和控制进程运行的全部信息
使得进程是能够独立运行的基本单位
PCB是操作系统进行调度经常会被读取的信息
PCB是常驻内存的,存放在系统专门开辟的PCB区域
进程与线程,
线程是操作系统运行调度的最小单位
进程是系统进行资源分配和调度的基本单位
线程包含在进程之中,是进程实际运行工作的单位
一个进程可以并发多个线程,每个线程执行不同的任务
进程里的线程共享进程的资源
进程管理之五状态模型
就绪状态:
当进程被分配到除CPU外所有必要的资源后
只要再获得CPU的使用权,就可以立即执行
其他资源都准备好、只差CPU资源的状态为就绪状态
在一个系统中多个处于就绪状态的进程通常排成一个队列
执行状态:
进程获得CPU,其程序正在执行称为执行状态
在单处理机中,在某个时刻只能有一个进程是处于执行状态
阻塞状态:
进程因某种原因,如:其他设备未就绪而无法继续执行从而放弃CPU的状态
创建状态:
创建进程时拥有CPU但其他资源尚未就绪
终止状态:
进程由系统清理或归还PCB的状态称为终止状态
进程管理之进程同步
进程间的同步:
对竞争资源在多进程间进行使用次序的协调
使得并发执行的多个程序之间可以有效使用资源和相互合作
临界资源:
进程间同步的原则:
空闲让进:资源无占用,允许使用
忙则等待:资源占用,请求进程等待
有限等待:保证有限等待时间能够使用资源
让权等待:等待时,进程需要让出CPU
进程间同步的方法:
消息队列
共享存储
信号量
线程同步:
互斥量
读写锁
自旋锁
条件变量
作业管理之进程调度
进程调度:
计算机通过决策决定哪个就绪进程可以获得CPU使用权
保留旧进程的运行信息,请出旧进程(收拾包袱)
选择新进程,准备运行环境并分配CPU(新进驻)
进程调度的机制:
就绪状态的排队机制
选择运行进程的委派机制
新老进程的上下文切换机制
进程调度方法:
非抢占式调度
- 处理器一旦分配给某个进程,就让该进程一直使用下去
- 调度程序不以任何原因抢占正在被使用的处理器
- 直到进程完成工作或因IO阻塞才会让出处理器
抢占式调度
- 允许调度程序以一定的策略暂停当前运行的进程
- 保存好旧进程的上下文信息,分配处理器给新进程
进程调度算法:
先来先服务算法,
短进程优先调度算法,
调度程序优先选择就绪队列中估计运行时间最短的进程
不利于长作业进程的执行
高优先权优先调度算法,
进程附带优先权,调度程序优先选择权重高的进程
使得紧迫的任务可以优先处理
时间片轮转调度算法,
按先来先服务的原则排列就绪进程
每次从队列头部取出待执行进程,分配一个时间片执行
是相对公平的算法,但是不能保证及时响应用户
作业管理之死锁
死锁:
死锁的产生:
共享资源数量不满足各个进程需求
各个进程之间发生资源进程导致死锁
死锁产生的必要条件:
进程对资源的使用是排他性的使用
某资源只能由一个进程,其他进程需要使用只能等待
进程至少保持一个资源,又提出新的资源请求
新资源被占用,请求被阻塞
被阻塞的资源不释放自己保持的资源
进程获得的资源在未完成使用前不能被剥夺
获得的资源只能由进程自身释放
发生死锁时,必然存在进程-资源环形链
死锁的处理:
a.预防死锁的方法
系统规定进程运行之前,一次性申请所需要的资源
进程在运行期间不会提出资源请求
当一个进程请求新的资源得不到满足时,必须释放占有的资源
进程运行时占有的资源可以被释放
可用资源线性排序,申请必须按照需要递增申请
先行申请不再形成环路
b.银行家算法
存储管理之内存分配与回收
存储管理解决的问题:
- 确保计算机有足够的内存处理数据
- 确保程序可以从可用的内存中获取一部分内存使用
- 确保程序可以归还使用后的内存以供其他程序使用
内存分配的过程:
单一连续分配是最简单的分配方式
只能在单用户、单进程的操作系统中使用
是支持多道程序的最简单存储分配方式
内存空间被划分为若干固定大小的区域
每个分区只提供给给一个程序使用,互不干扰
根据进程实际需要,动态分配内存空间
分配内存时从开始顺序查找适合内存区
若没有,则该次分配失败
每次从头部开始,使得头部地址空间不断被划分
将空闲区按照容量大小排序
遍历空闲区链表找到最佳合适空闲区
要求有多个空闲区链表
每个空闲区链表存储一种容量的空闲区
内存回收的过程:
存储管理之段页式存储管理
页式存储管理:
字块是相对于物理设备的定义
页面则是相对逻辑空间的定义
将进程逻辑空间等分成若干大小的页面
相应把物理内存空间分成与页面大小的物理块
以页面为单位把进程空间装进物理内存中分散的物理块
页表记录进程逻辑空间与物理空间的映射
有一段连续的逻辑分布在多个页面中,将大大降低执行效率
段式存储管理:
将进程逻辑空间划分成若干段(非等分)
段的长度由连续逻辑的长度决定
主函数MAIN、子程序段X、子函数Y等
页式存储管理与段式存储管理的区别:
段页式存储管理:
分页可以有效提高内存利用率
分段可以更好满足用户需求
两者结合,形成段页式存储管理
主要逻辑:
现将逻辑空间按段氏管理分成若干段
再把内存空间按页式管理等分成若干页
存储管理之虚拟内存
虚拟内存概述:
- 有些进程实际需要的内存很大,超过物理内存的容量
- 多道程序设计,使得每个进程可用物理内存更加稀缺
- 不可能无限增加物理内存,物理内存总有不够的时候
- 虚拟内存是操作系统内存管理的关键技术
- 使得多道程序运行和大程序运行成为现实
- 把程序使用内存划分,将部分暂时不使用的内存放置在辅存
程序的局部性原理:
- 程序运行时,无需全部装入内存,装载部分即可
- 如果访问页不在内存,则发出缺页中断,发起页面置换
- 从用户层面看,程序拥有很大的空间,即是虚拟内存
- 虚拟内存实际是对物理内存的补充,速度接近于内存,成本接近于辅存
虚拟内存的置换算法:
先进先出算法(FIFO)
最不经常使用算法(LFU)
最近最少使用算法(LRU)
高速缓存的替换时机和主存页面的替换时机对比:
操作系统的文件管理
文件的逻辑结构:
a.逻辑结构的文件类型,
有结构文件:
- 文件内容由定长记录和可变长记录组成
- 定长记录存储文件格式、文件描述等结构化数据项
- 可变长记录存储文件具体内容
无结构文件:
- 也称为流式文件
- 文件内容长度以字节为单位
- 例如:excel、dll、so
b.顺序文件,
按顺序存放在存储介质中的文件
磁带的存储特性使得磁带只能存储顺序文件
是所有逻辑文件中存储效率最高的
c.索引文件,
可变长文件不适合使用顺序文件格式存储
索引文件是为了解决可变长文件存储而发明的一种文件格式
索引文件需要配合索引表完成存储的操作
辅存的存储空间分配:
i.辅存的分配方式,
连续分配,
- 顺序读取文件内容非常容易,速度很快
- 对存储要求高,要求满足容量的连续存储空间
链接分配,
- 将文件存储在离散的盘块中
- 需要额外的存储空间存储文件的盘块链接顺序
隐式:
显式:
不支持高效的直接存储(FAT记录项多)
检索时FAT表占用较大的存储空间(需要将整个FAT加载到内存)
索引分配,
- 把文件的所有盘块集中存储(索引)
- 读取某个文件时,将索引读取进内存即可
- 每个文件拥有一个索引快,记录所有盘块信息
- 索引分配方式支持直接访问盘块
- 文件较大时,索引分配方式具有明显优势
ii.存储空间管理,
空闲表,
空闲链表,
- 把所有空闲盘区组成一个空闲链表
- 每个链表节点存储空闲盘块和空闲数目
位示图,
- 维护成本低
- 可以非常容易找到空闲盘块
- 使用0/1比特位,占用空间很小
目录管理:
操作系统的设备管理
广义的IO设备:
IO设备的缓冲区:
CPU与IOO设备的速率不匹配
减少CPU处理IO请求的频率
提高CPU与IO设备之间的并行性
专用缓冲区只适用于特定的IOO进程
当这样的IO进程比较多时,对内存的消耗也很大
操作系统划分出可供多个进程使用的公共缓冲区,称之为缓冲池
SPOOLing技术:
是关于慢速字符设备如何与计算机主机交换信息的一种技术
利用高速共享设备将低速的独享设备模拟为高速的共享设备
逻辑上,系统为每一个用户都分配了一台独立的高速独享设备
把同步调用低速设备改为异步调用
在输入、输出之间增加了排队转储环节(输入井、输出井)
SPOOLing负责输入(出)并与低速设备之间的调度
逻辑上,进程直接与高速设备交互,减少了进程的等待时间,提高了进程的工作效率