操作系统
操作系统引论
操作系统的定义
操作系统是配置在计算机硬件上的第一层软件,是对硬件系统的扩充。从用户角度看,操作系统是用户与计算机之间的接口
os的作用
- 作为用户与计算机硬件系统之间的接口,用户在OS帮助下方便、安全、快捷、可靠地操纵计算机硬件和自己的程序
- 作为计算机资源系统的管理者,即针对处理机、存储器管理、I/O设备管理、文件管理
- 实现对计算机资源的抽象,用户可以利用I/O软件提供的接口使用计算机,无需了解物理接口的实现细节。
os特征
- 并发:
- 并行是指两个或者多个事件在同一时刻发生,并发性是指两个或者多个事件在同一时间间隔内发生。
- 一个应用程序可以分为多个进程
- 共享:
- 互斥共享方式:一段时间内值允许一个进程访问的资源称为临界资源
- 同时访问方式
- 虚拟:通过某种技术将一个物理实体变为若干个逻辑上的对应物。
- 时分复用技术
- 空分复用技术
- 异步性
- 并发性和共享性是操作系统两个最主要的特征
os的主要功能
os的功能是进行处理机管理、存储器管理、设备管理、文件管理和作业管理等,OS是对计算机资源进行管理的软件,位于计算机硬件和用户之间的位置
-
处理机管理功能:
- 进程控制:为作业创建进程、撤销已结束的进程,控制进程在运行状态转换。
-
进程同步:为多个进程的运行进行协调。这里可以完成多个进程为完成同一个任务而协调他们的先后执行顺序
- 进程通信:实现相互合作的进程之间的信息交换
- 调度:作业调度和进程调度
-
存储器管理功能:
- 内存分配
- 内存保护
- 地址映射
- 内存扩充
os分类
os结构设计
-
传统操作系统结构:分层式OS结构
-
客户/服务器模式:
-
-
面向对象的程序设计
-
微内核功能提供的都是最基本的功能:进程管理,存储器管理、进程间通信、低级I/O功能。
操作票系统的发展
人工操作方式:程序员将事先已穿孔的纸袋装入纸带输入机,然后纸带输入机将纸带内容输入计算机,然后启动计算机运行。
缺点:用户独占全机,在纸带将纸带内容输入纸带输入机的时候,cpu是空闲的
脱机输入方式:实现将纸带通过纸带输入机装入磁盘,在CPU需要程序和数据的时候,从磁盘上高速调入内存。
优点:减少了cup等待纸带输入机将纸带内容输入计算机 时的cpu空闲时间,同时因为从磁盘上读取数据,大大提高了I/O速度
单道批处理程序:系统中的资源得不到充分的利用
多道批处理程序:从后备队列中选择若干个作业调入内存,共享CPU和系统中的各种资源
批处理系统:
优点:资源利用率高,系统吞吐量大
缺点:平均周转时间长,无交互能力
分时系统:用户用会话的方式控制自己的程序运行,特性包括多路性、独立性、及时性、交互性
实时系统:指系统能及时响应外部事件的请求,在规定的时间内完成对该事件的处理
进程管理
进程和线程的概念
进程是程序的一次执行,进程调度不需要硬件支持
线程:将资源属性和调度属性分开,
进程的基本状态及状态转换的原因
- 基本状态:
- 就绪状态:进程处于已经准备好的状态,只要得到CPU就可以立即执行
- 执行状态:
- 阻塞状态:因为正在执行的进程由于发生某事件暂时无法继续执行的状态
- 基本状态的转换:
- 就绪状态可以通过进程调度转换为执行状态
- 执行状态在时间片使用完之后,状态转换成为就绪
- 执行状态的进程在收到I/O请求之后,会转换成为阻塞状态,然后I/O完成之后转换成为就绪状态
PCB的作用
进程控制块的作用使一个在多道程序环境下不能独立运行的程序,成为一个能独立运行的基本单位,一个能与其他进程并发执行的进程。
进程控制的原语操作
原语是操作系统的一个执行不可中断的过程
阻塞:block
唤醒:wakeup
挂起:suspend
激活:active
进程互斥、临界区、进程同步的基本概念、同步准则
- 进程互斥:
- 进程同步机制的主要任务:对多个相关进程在执行次序上进行协调,使并发执行的诸进程之间能够按照一定的规则共享系统资源,并能很好的相互合作,是程序执行具有可再现性
- 多个进程访问临界资源时必须互斥访问,在进程中放完临界资源的代码成为临界区
- 同步机制遵循的准则:空闲让进、忙则等待、有限等待、让权等待
- 硬件同步机制:防止多个进程同时测试到锁打开的情况,测试和关锁的操作必须是连续的
- 关中断:不响应中断,从而不切换进程或者线程
- TS
- Swap
- 硬件进行进程同步不符合让权等待
记录型信号量
-
信号量机制:
-
整性信号量:一个表示资源数目的整性量S,原子操wait和signal,但是在wait操作中S<0,会一直测试,不符合让权等待
-
-
记录型信号量:增加一个进程链表用于链接上诉的所有等待进程
-
-
AND型信号量:将进程在整个运行过程中需要的所有资源一次性全部分布给给进程。只要有一个不满足,就不分配。Swait
-
信号量的应用
- 利用信号量实现进程互斥
- 利用信号量实现前趋关系:两个并发进程要实现前趋关系,可以使用同一个信号量S,初始值设置为0,需要先执行的后面使用signal,后执行的前面使用wait
经典进程同步问题
进程间通信的原理和实现方法
消息传递系统的实现方式:
- 直接消息传递系统:直接将消息发送给目标程序
- 信箱通信(间接通信方式):将消息发送给信箱
- 私用信箱:进程创建,其他用户只能往里面发信息
- 公用信箱:操作系统创建,所有用户都可以收发信息
- 共享信箱:进程创建,指定共享进程,创建者和共享进程有权取走消息
处理机调度与死锁
处理机调度的基本概念和种类
调度的实质是一种资源分配,处理机调度是对处理机资源进行分配
- 高级调度:从后备队列选一个作业调入内存,并为其创建进程
- 中级调度:决定将哪个挂起的进程从外存重新调回到内存
- 低级调度:根据某种算法决定就绪队列中的哪个进程获得处理机
选择调度算法的准则,周转时间,带权周转时间,响应时间
- 先来先服务算法(FCFS):从就绪队列中选择第一个最先进入该队列的进程,分配处理机,一直到运行完成或者发生阻塞才将处理机分配给其他进程
- 短作业优先算法(SJF):选择运行时间短的算法,预估运行时间短的的先运行
- 优先级调度算法(PSA):选择若干优先级最高的作业装入内存
- 高响应比优先算法(HRRN):优先权 = ( 等待时间 + 要求服务的时间 ) / 服务时间
常见调度算法、抢占、响应比
- 非抢占方式:进程运行完毕无法再继续运行、进程出现I/O请求而暂停执行、进程通信或同步过程中执行了某种原语
- 抢占方式:
- 优先权原则
- 短进程原则
- 时间片原则
- 轮转调度算法:取时间片大小为略大于一次典型交互所需要的时间
常见的两种实时调度算法
- 非抢占式调度算法
- 抢占式调度算法
- 最早截止时间算法:截止时间早的先执行
- 最低松弛度优先算法:截止时间减去运行时间得到松弛度,松弛度小的先执行
死锁产生的原因,四个必要条件
- 死锁定义:一组进程的每一个进程都在等待仅该进程组中其他进程才能引发的事件
- 四个条件:
- 互斥条件:一段时间内某资源只能被一个进程占用
- 请求和保持:一个进程占有一个资源,再请求另外的资源,但是另外的资源被其他进程占有造成阻塞,这个进程也对自己占有的这个资源不释放
- 不可抢占:占有的资源只能有占有资源的进程自己释放
- 循环等待条件
死锁的预防
- 破环产生死锁的四个必要条件中的一个或者几个
- 破环请求和保持条件:
- 第一种协议:进程开始运行之前,一次性申请其在整个运行过程中需要的资源,如果不满足,则让进程等待
- 第二种协议:获取进程初期需要的资源之后开始运行,边运行边释放
- 破坏不可抢占资源:
- 一个已经占有一些资源的进程发起新的资源请求时,不被满足,释放自己占有的现有资源
- 破坏循环等待条件:
- 将资源线性排序,先获得先行排序低的,再获得线性排序高的,占有线性排序低的可以获得线性排序高的,占有线性排序高的要获得线性排序低的要先释放高的,然后获得线性排序低的
利用银行家算法避免死锁
- 避免死锁:资源动态分配的过程中,防止系统进入不安全状态,以避免发生死锁
- 安全状态:系统能找到某一个进程序列,基于这个序列分配资源时,每个进程都能获得满足
- 银行家算法:进程请求一组资源时,先判断是不是有足够的资源分配给该进程,有的话再判断分配之后是不是会出现不安全状态,如果不会,才分配。
- 在每一次请求资源前,先判断请求数是不是小于实际需要的数
- 再判断现有未被占用的资源是不是足够
- 足够的话先假设分配,然后看剩下的资源再到一个序列完成剩下的所有进程
- 找的到正式分配,找不到不分配
死锁的检测与解除
- 死锁检测
- 死锁解除
存储器管理
重定位的基本概念,为什么要引入重定位?
- 主存储器简称内存或者主存,用于保存进程运行时的程序和数据
- 绝对装入方式:编译程序产生的装入模块的地址和实际内存地址完全相同,不需要对程序和数据的地址进行修改(知道程序将滞留在内存的什么位置
- 多道程序环境下,编译程序不可能预知经编译后得到的目标模块应放在内存的何处,应采用重定位方式
如何提高内存利用率:离散分配、对换机制、动态链接、虚拟存储器、存储器共享
- 单一连续分配
- 固定分区分配
- 分区大小相等和不相等
动态分区分配方式
- 分配内存
- 回收内存
- 动态分区分配算法:
- 基于顺序搜索的动态分区分配算法:
- 首次适应算法:从空闲分区链的低址部分开始找,找到满足的之后从分区中划出一块内存空间分配给请求者。
- 循环首次适应算法:从上次的找到空闲分区的地方开始寻找
- 最佳适应算法:将空闲分区按其容量已从大到小的方式连接成一条空闲分区链,每次总是将刚好的空间分配给他
- 最坏适应算法
- 基于索引搜索的动态分区分配算法:
- 快速适应算法:将空闲分区按照大小分类,需要内存的时候直接到相应大小的分区里面去找
- 伙伴系统:无论已分配或者是未分配的空闲分区,其大小均为2的k次幂,在请求分区的时候,找到两个幂次之间的空闲分区,若是没有,则向上找,将大次幂的分成两个小次幂的分区。合并分区的时候也是,将两个低次幂的可以合成一个高次幂的。
基本动态页存储管理方式:为什么引入;地址变换机构和过程(含有具有快表的情况)
- 分页管理:将程序和内存都分为大小固定页,充分利用内存空间无需紧凑
- 对于逻辑空间中的地址A,页面大小为L,则页内地址和页号的求得方法
- 关于页表的地址转换:分页地址变换机构先将有效地址的页号和页内地址计算出来,然后和页表长度比较,如果小于页表长度,将页内地址转换成为页表地址。有快表的先在块表中检索,然后才是在页表中检索。将快表中没有的页表项存入。
基本分段存储管理方式:为什么引入;地址变换机构和过程(含具有快表的情况);信息共享和保护
- 引入目的:为了满足程序员在编程和使用上的多方面要求,每个段大小不相同
- 地址转换页相似
- 信息共享和保护:
虚拟存储器的基本概念:为什么要引入;特征;实现虚拟存储的关键技术
引入目的:内存容量不够大。
特征:多次性、对换性、虚拟性
实现关键技术:分页请求系统、请求分段系统
请求分页系统的基本原理:页表机制;地址变换过程;页面请求置换算法
页表机制:
页面置换算法:
最佳置换算法:置换出最近最长时间不会被使用的页(不能实现),无法知道哪页什么时候被访问
先进先出算法:与实际进程运行规律不相适应,有些页面经常被访问
最近最久未使用置换算法:置换出内存内最近最久没有使用的算法
- 使用寄存器,每访问一次,位数改为1
- 栈:将最新访的页放在栈顶
CLOCK算法:
但是,置换修改后的页面的置换代价比较大,所以可以使用先置换访问位为0且未修改的页面
页面缓冲算法:在内存中增加空闲页面链表和修改页面链表
I/O系统
I/O控制方式:四种I/O方式的基本原理;四种I/O方式由低到高效的演变
- 中断:中断是指CPU对I/O设备发来的中断信号的一种响应,是由外部设备引起的
- 陷入:CPU内部事件引起的中断,是来自CPU出错
多中断源的处理方式
屏蔽中断
嵌套中断
设备驱动程序:是I/O系统的高层与设备控制器之间的通信和转换程序
对I/O设备的控制方式:使用轮询的课编程I/O方式、中断的可编程I/O、DMA工作(先将一段数据写入内存再触发中断)、
缓冲区管理概念,为什么引入缓冲管理
组织好缓冲区
- 引入原因:
- 缓和CPU和I/O设备间速度不匹配的矛盾
- 减少对CPU的中断频率,放宽对CPU中断响应时间的限制
- 解决数据粒度不匹配问题
- 提高CPU和I/O设备之间的并行性
单缓冲如何提高I/O速度,存在哪些不足,双缓冲、循环缓冲又如何提高CPU与I/O设备的并行性
单缓冲:每当用户进程发出一I/O请求,操作系统在主存中为之分配一个缓冲区。在接受字符设备的输入的时候,缓冲区用来暂存用户输入的字符串,此时进程需要挂起等待输入完成。在输出的时候,先将一行数据输出到缓冲区,然后将继续处理,有第二行数据输出时,如果第一行还在,进程阻塞。
双缓冲:设备输入时先将数据输入第一缓冲区,转满就送入第二缓冲区。
环缓冲区:设置多个缓冲区和多个指针,指针分别指向下一个可用空闲缓冲区,当前计算进程正在使用的缓冲区,指示输入进程下次可以使用的缓冲区
缓冲池是为了解决什么问题而映入,引入缓冲池后系统将如何处理I/O设备和CPU间的数据传输
系统较大时,设置太多专用的缓冲区会消耗大量的内存资源。设置公有缓冲区,可供多个进程共享使用,将缓冲区粪分成多个空闲队列,空白缓冲队列,输入队列,输出队列
缓冲池的工作方式及Getbuf和Putbuf过程
工作方式:先从空闲区emq使用Getbuf取得空闲区,作为输入缓冲区,装满后使用Putbuf将缓冲区连接到输入队列上面。使用Getbut获得输入队列上面的一个缓冲区,然后放到提取输入缓冲区,计算进程从中提取数据,数据用完之后将使用Putbuf将缓冲区挂到空队列。输出时,先调用Getbuf从空队列获得空缓冲区,作为输出缓冲区,装满后挂到输出队列上面,然后输出队列取输出队列队首,作为提取输出缓冲求sout。数据输出完之后,再i奥永Putbuf过程挂在空缓冲队列上
什么是设备独立性
使用逻辑设备名请求I/O,而不是物理设备名请求I/O
如何实现设备独立性
使用逻辑设备表实现逻辑设备名到物理设备的映射
什么是虚拟设备
什么是SPOOLing技术,SPOOLing技术系统的组成
多道程序中利用一道程序模拟外围机,将设备数据存入磁盘或者将传到设备。称之为SPOOLing技术或者假脱机技术
如何利用SPOOLing技术实现共享打印机
每当用户进程发出打印输出请求时,并不是马上为分配打印机,先将打印数据存到磁盘中,然后位用户进程申请一张空白的用户请求打印表,将打印表挂到假脱机文件队列上。实际上没有打印输出,但是对用户进程而,打印请求已经完成
磁盘调度的目标
减少访问文件的时间
磁盘访问时间的计算
寻道时间:T = s + m*n
旋转延迟时间:t
传输时间:T = b/rN
访问时间:
FCFS、SSTF、SCAN、CSCAN 等算法的应用及这些调度算法的演变过程,分别解决了哪些问题;各算法的性能比较
ECES:根据进程请求访问磁道的先后顺序进行调度
SSTF:访问与当前磁头距离最近的磁道
SCAN:按照一个方向想寻找最近的磁道,直到最里或者最外
CSCAN:规定次都单向移动,再最里(最外)时,回到最外(最里)