绪论
操作系统的基本概念
计算机的硬件,软件以及软件的各部分之间是一种层次结构的关系.硬件在最底层,其上层是操作系统,实用程序和应用程序在操作系统之上,这些程序均已操作系统为支撑,并向用户提供完成工作所需的各种服务.
引入操作系统的目的:
-
提供一个计算机用户和计算机硬件系统之间的接口,使计算机系统更易于使用
-
有效地控制和管理计算机系统地各种硬件和软件资源,使之得以更有效地利用
-
合理组织计算机系统地工作流程,以改善系统性能
操作系统的特征:
-
并发性(并行性):并行性是指两个或多个事件在同一时刻发生,并发性是指两个或多个事件在同一时间间隔内发生.
-
共享性:系统中的硬件和软件资源不再为某个程序所独占,而是供多个用户共同使用.并发和共享是操作系统的两个最基本的特征,二者之间互为存在条件.
-
虚拟性:在操作系统中,虚拟是指把一个物理上的实体变为若干个逻辑上的对应物,前者是实际存在的,后者是虚拟的,这只是用户的一种感觉.
-
异步性:系统中的每道程序何时执行,多道程序间的执行顺序以及完成每道程序所需的时间都是不确定,因而也是不可预知的.
操作系统的五大基本功能:处理器管理,存储器管理,设备管理,文件管理,用户接口
操作系统的发展与分类
脱机输入/输出技术是为了解决CPU和I/O设备之间速度不匹配的矛盾而提出的,此技术减少了CPU的空闲等待时间,提高了I/O速度
单道批处理系统:自动性,顺序性,单道性
多道批处理系统:多道,宏观上并行,微观上串行,分配处理器,分配内存空间,分配I/O设备,组织程序和数据并保证安全性和一致性,组织作业
分类:批处理操作系统,分时操作系统,实时操作系统
其它操作系统:嵌入式操作系统,集群操作系统,网络操作系统,分布式操作系统
操作系统的运行环境
处理器的执行状态分为两种:
-
核心态:操作系统管理程序执行时机器所处的状态,有较高特权,能执行包括特权指令的一切指令,能访问所有寄存器和存储区
-
用户态:用户程序执行时机器所处的状态,具有较低特权的执行状态,只能执行规定指令,只能访问指定的寄存器和存储区
特权指令:只能由操作系统内核部分使用,不允许用户直接使用的指令,如I/O指令,设置中断指令,清内存指令,存储保护指令和设置时钟指令
时钟管理:时钟是计算机中各部件中最关键的设备
中断机制:只有一部分属于内核,负责保护和恢复中断现场的信息,转移控制权到相关的处理程序
通常异常会引起中断,而中断未必是由异常引起的
系统调用:操作系统提供用户接口之一,是由操作系统实现的所有系统调用所构成的集合,即程序接口或应用编程接口,是应用程序同系统之间的接口
操作系统的体系结构
操作系统的体系结构主要包括模块组合结构,层次结构和微内核结构
进程管理
进程和线程
在计算机操作系统中,进程是资源分配的基本单位,也是独立运行的基本单位.
程序的顺序执行特征:顺序性,封闭性,可再现性
程序的并发执行特征:间断性,失去封闭性,不可再现性
进程的定义:
-
进程是程序在处理器上的一次执行过程
-
进程是可以和别的进程并行执行的计算
-
进程是程序在一个数据集合上的运行过程,是系统进行资源分配和调度的一个独立单位
-
进程可定义为一个数据结构及能在其上进行操作的一个程序
-
进程是一个程序关于某个数据集合在处理器上顺序执行所发生的活动
进程的特点:动态性,并发性,独立性,异步性.结构特征
进程和程序的关系:
- 进程是暂时的,程序是永久的
- 进程是动态的,程序是静止的
- 进程和程序的组成不同,进程的组成包括程序段,数据段和进程控制块
- 通过多次执行,一个程序可以产生多个不同的进程;通过调用关系,一个进程可以执行多个程序.进程可以创建其它进程,而程序不能形成新的程序
- 进程具有并发特性(独立性,异步性),程序则没有
进程和作业的区别:
- 作业时用户向计算机提交任务的任务实体
- 一个作业可由多个进程组成,且必须至少由一个进程组成,但一个进程不能构成多个作业
- 作业的概念主要用在批处理系统中.像UNIX这样的分时系统则没有作业的概念,而进程的概念则用在几乎所有的多道程序系统中
进程的组成:
- 进程控制块(PCB).每个进程均有一个PCB,它是一个既能标识进程的存在,又能刻画执行瞬间特征的数据机构.当进程被常见时,系统为它申请和构造一个相应的PCB
- 程序段:程序段是进程中能被进程调度程序调度到CPU上执行的程序代码段,能实现相应的特定功能
- 数据段:一个进程的数据段可以是进程对应的程序加工处理的原始数据,也可以是程序执行时产生的中间或结构数据
系统根据PCB感知进程的存在,PCB是进程存在的唯一标志
PCB的内容:
- 进程标识符(PID).每个进程都有唯一的进程标识符,以区别于系统内部的其他进程
- 进程当前状态.说明进程的当前状态,以作为进程调度程序分配处理器的依据
- 进程队列指针.用于记录PCB队列中下一个PCB的地址
- 程序和数据地址.指进程的程序和数据所在的地址
- 进程优先级.反映进程要求CPU的紧迫程度,优先级高的进程可以优先获得处理器
- CPU现场保护区.
- 通信信息.记录进程在执行过程中于别的进程所发生的信息交换情况
- 家族联系.有的系统允许进程创建子进程,从而形成一个进程家族树
- 占有资源清单.进程所需资源及当前已分配资源清单
PCB是为了保证程序的并发执行.系统总是通过PCB对进程进行控制的
进程的5种基本状态:
- 就绪状态.进程已获得了除处理器以外的所有资源,一旦获得处理器,就可以立即执行
- 执行状态(运行状态).进程已获得必要的资源并正在CPU上执行
- 阻塞状态(等待状态).正在执行的进程,由于发生某事件而暂时无法执行下去.当进程处于阻塞状态时,即使把处理器分配给该进程,它也无法运行
- 创建状态.进程正在被创建,尚未转到就绪状态.申请空白的PCB,并向PCB中填写一些控制和管理进程的信息;然后有系统为该进程分配运行时所需的资源;最后把该进程转入就绪状态
- 结束状态.进程正在从系统中消失,可能时正常结束或其它原因中断退出运行
进程状态的相互转换:
-
就绪状态—>执行状态.一个进程被进程调度程序选中
-
执行状态—>阻塞状态.请求并等待某个事件发生
-
执行状态—>就绪状态.时间片用完或正抢占式调度中有更高优先级的进程变为就绪状态.
-
阻塞状态—>就绪状态.进程因为等待的某个条件发生而被唤醒
-
进程状态的转换并非都是可逆的,进程既不能从阻塞状态变为执行状态,也不用从就绪状态变为阻塞状态
-
进程之间的状态转换并非都是主动的,在很多情况下都是被动的,只有从执行状态到阻塞状态是程序的自我行为,其它都是被动的.
-
进程状态的唯一性,一个具体的进程在任何一个指定的时刻必须且只能处于一种状态
注:执行状态只能由就绪状态转换,而无法由阻塞状态直接转换
进程的控制包括进程的创建,进程的撤销,进程的阻塞于唤醒
线程的定义:
- 线程是进程的一个执行单元,比进程更小
- 线程是进程内的一个可调度实体
- 线程是程序(或进程)中相对独立的一个控制流序列
- 线程本身不能单独运行,只能包含在进程中,只能在进程中执行
- 总结:线程是进程内一个相对独立的,可调度的执行单元.线程自己基本上不拥有资源,只拥有一点在运行时必不可少的资源(如程序计数器,一组寄存器和栈),但它可以于同属一个进程的其它线程共享进程拥有的全部资源
- 多线程指的是一个进程中有多个线程,这些线程共享该进程资源.这些线程驻留在相同的地址空间中,共享数据和文件.如果一个线程修改了一个数据项,其它线程可以了解和使用此结果数据.一个线程打开并读一个文件时,同一进程中其它线程也可以同时读此文件
线程的实现:
- 内核级线程是指依赖于内核,由操作系统内核完成创建和撤销工作的线程.在支持内核级线程的操作系统中,内核维护进程和线程的上下文信息并完成线程切换工作.一个内核级线程由于I/O操作而阻塞时,不会影响其他线程的运行.这时处理器时间片分配的对象是线程,所以有多个线程的进程将获得更多处理器时间
- 用户级线程是指不依赖操作系统核心,有应用程序利用线程库提供创建,同步,调度和管理线程的函数来控制的线程.由于用户级线程的维护由应用程序完成,不需要操作系统内核了解用户级线程的存在,因此可用于不支持内核级线程的多进程操作系统,甚至是单用户操作系统.由于操作系统内核不了解用户线程的存在,当一个线程阻塞时,整个线程都必须等待.这时处理器的时间片时分配给进程的,当进程内有多个线程时,每个线程的执行时间相对减少
线程于进程的比较:
- 调度.线程时独立调度的基本单元,进程是拥有资源的基本单元
- 拥有资源.进程是拥有资源的基本单元,而线程不拥有系统资源,但线程可以访问其隶属进程的系统资源
- 并发性.不仅进程之间可以并发执行,同一进程进程内的多个线程之间也可以并发执行,大大提高了系统的吞吐量
- 系统开销.进程系统开销远大于线程开销.由于同一进程内的多个线程共享进程的地址空间,因此,多线程之间的同步与通信非常容易实现,甚至无需操作系统的干预
多线程模型:多对一模型,一对一模型,多对多模型
进程通信:
- 进程通信是指进程之间的信息交换.进程的互斥和同步就是一种进程间的通信方式,由于进程互斥与同步交换的信息量较少且效率较低,因此称这两种进程通信方式为低级进程通信方式
- 高级进程通信方式:共享存储器系统,消息传递系统,管道通信系统
处理器的调度
调度是操作系统的一个基本功能,几乎所有资源在使用前都需要调度
在多道程序环境下,一个作业从提交到执行,通常都要经历多级调度,如高级调度,中级调度和低级调度
高级调度.又称为宏观调度,作业调度或者长程调度,运行频率较低,通常为几分钟一次
中级调度.又称为中程调度或者交换调度
低级调度.又称为微观调度,进程调度或者短程调度,运行频率很高
作业调度为进程调度做准备,进程调度使进程被调用.换言之,作业调度的结果是为了作业创建进程,而进程调度的结果是进程被执行
作业调度次数少,进程调度频率高
有的系统可以不设置作业调度,但进程调度必须有
调度的基本原则:CPU利用率.系统吞吐量.响应时间.周转时间
进程调度
功能:
- 记录系统中所有进程的有关情况以及状态特征
- 选择获得处理器的进程
- 处理器分配
引起进程调度的原因:
- 当运行进程运行结束.
- 当运行进程因某种原因从运行状态进入阻塞状态
- 执行完系统调用等系统程序后返回用户进程,这时可以看作系统进程执行完毕,从而可以调度一个新的用户进程
- 在采用抢占调度方式的系统中,一个具有更高优先级的进程要求使用处理器,则使当前运行进程进入就绪队列
- 在分时系统中,分配给该进程的时间片已用完
不能进行进程调度的情况:
- 处理中断的过程中
- 在操作系统内核程序临界区中
- 其他需要完全屏蔽中断的原子操作过程中
进程调度的方式:抢占方式,非抢占方式
常见调度算法:先来先服务调度算法.短作业优先调度算法.优先级调度算法.时间片轮转调度算法.高响应比优先调度算法.多队列调度算法.多级反馈队列调度算法
同步与互斥
两种形式的制约关系:间接相互制约关系(互斥).直接相互制约关系(同步)
注:同类进程即为互斥,不同类进程即为同步
临界资源:同时仅允许一个进程使用的资源
临界资源的访问过程4部分:进入区,临界区,退出区,剩余区
每个进程的临界区代码可以不相同.至于每个进程对临界资源进行怎样的操作,这和临界资源及互斥同步管理是无关的
互斥的定义:当一个进程进入临界区使用临界资源时,另一个进程必须等待
互斥准则:空闲让进.忙则等待.有限等待.让权等待
同步:多个相互合作的进程在一些关键点上可能需要互相等待或互相交换消息
互斥实现方法:软件方法和硬件方法
信号量:一个确定的二元组(s,q),其中s是一个具有非负初值的整型变量,q是一个初始状态为空的队列.信号量的值仅能由P操作和V操作改变.操作系统利用它的状态对进程和资源进行管理.P操作相当于申请资源,V操作相当于释放资源.P操作和V操作在系统中一定是成对出现的.
信号量的分类:整型信号量,记录型信号量(资源信号量)
信号量的应用:实现进程同步,实现进程互斥
注:在有多个信号量同时存在时,P操作往往是不能颠倒顺序的,必须先对资源信号量进行P操作,再对互斥信号量进行P操作,这样可以在占有信号量访问权时保证有资源可以使用,否则会产生占有使用权而无资源可用的"死等"现象
死锁
当多个进程因竞争系统资源或相互通信而处于永久阻塞状态时,若无外力作用,这些进程都将无法向前推进.这些进程中的每一个进程,均无限期地等待此组进程中某个其他进程占有都,自己永远无法得到的资源,这种现象称为死锁
死锁定义的结论:
- 参与死锁的进程至少有两个
- 每个参与死锁的进程均等待资源
- 参与死锁的进程中至少有两个进程占有资源
- 死锁进程是系统中当前进程集合的一个子集
死锁产生的原因:竞争资源
死锁产生的必要条件:互斥条件,不剥夺条件,请求与保持条件,环路等待条件
处理死锁的基本方法:鸵鸟算法,预防死锁,避免死锁,检测及解除死锁
死锁的预防:破环死锁产生的4个必要条件之一.
死锁解除:剥夺资源.撤销进程,进程回退
当等待时间给进程推进的响应带来明显影响时,则称此时发生了进程饥饿,当饥饿到一定程度时,进程所赋予的任务即使完成也不再具有实际意义时,称该进程被饿死,在忙时等待条件下发生的饥饿,称为活锁.
饿死和死锁的联系:
- 从进程状态考虑,死锁进程都处于等待;忙时等待的进程并非处于等待状态,但却可能饿死
- 死锁进程等待的永远不会被释放的资源;而饿死进程等待的是会被释放但却不会分配给自己的资源,表现为等待时间没有上界
- 死锁一定发生了循环等待,而饿死则不然.这表明通过资源分配图可以检测死锁存在与否,但却不能检测是否有进程饿死
- 死锁一定涉及多个进程,而饥饿或被饿死的进程可能只有一个
内存管理
内存管理基础
内存管理的功能:内存的分配和回收,地址变换,扩充内存,存储保护
从源程序到执行的过程经历了编译,链接,装入三个步骤
逻辑地址:程序的与段相关的偏移地址部分
物理地址:指出现在CPU外部地址总线上的寻址物理内存的地址信号,是逻辑地址变换后的最终结果地址,物理地址空间是指内存中物理地址单元的集合
内存保护是为了防止一个作业有意或无意地破环操作系统或其他作业,常用地内存保护方法有界限寄存器方法和存储保护键方法
覆盖技术:把一个大的程序划分为一系列覆盖,每个覆盖是一个相对独立地程序单位
交换技术:把暂时不用地某个程序及数据部分从内存移到外存中,以便腾出必要的内存空间;或是指定的程序或数据从外存读到相应的内存中,并将控制权转给它,让其在系统运行的一种内存扩充技术.
连续分配管理方式:
- 单一连续分配是一种最简单的存储管理方式,通常只能用于单用户,单任务的操作系统中
- 固定分区分配方法时最早使用的一种可运行多道程序的存储管理方法,它将内存空间划分为若干个固定大小的分区,每个分区中可以装入一道程序.分区地大小可以不等,但事先必须确定,在运行时不能改变.固定分区分配中,程序通常采用静态重定位方式装入内存
- 动态分区分配又称为可变式分区分配,是一种动态划分存储器的分区方法.这种分配方法并不实现将主存划分为一块块的分区,而是在作业进入主存时,根据作业的大小动态地建立分区,并使分区地大小正好满足作业的需要.因此,系统中分区的大小是可变的,分区的数目也是可变的
非连续分配管理方式:
- 基本分页存储管理方式
- 基本分段存储管理方式
- 基本段页式存储管理方式
虚拟内存管理
局部性原理:时间局部性,空间局部性
虚拟内存的定义及特征:
基于局部性原理,在程序装入使,一方面可将程序的一部分放入内存,而将其余部分放在外存,然后启动程序(部分装入).在程序执行过程中,在所访问的信息不在内存中时,再由操作系统将所需的部分调入内存(请求调入).另一方面,操作系统将内存中暂时不使用的内容置换到外存上,从而腾出空间存放将要调入内存的信息(置换功能).从效果上看,计算机系统好像为用户提供了一个存储容量比实际内存大得多的存储器,这种从逻辑上扩充内存容量的存储器系统称为虚拟存储器.
特征:离散性,多次性,对换性,虚拟性
请求分页原理:
再分页存储管理系统的基础上,通过增加请求调页功能,页面置换功能所形成的一种虚拟存储系统.请求分页=基本分页+请求调页功能+页面置换功能
请求分页管理方式的优点:
- 可以离散存储程序,降低了碎片数量
- 提供虚拟存储器,提高了主存利用率,有利于多道程序运行,方便用户
请求分页管理方式的缺点:
- 必须有硬件支持
- 有些情况下系统会产生抖动现象
- 程序最后一页仍然存在未被利用的部分空间
页面置换算法:用来选择换出页面的算法
- 最佳置换(OPT)算法.在预知一个进程的页面号引用串的情况下,每次都淘汰以后不再使用的或以后最迟再被使用的页面
- 先进先出(FIFO)算法.每次总是淘汰最先进入内存的页面,也就是淘汰在内存驻留时间最长的页面
- 最近最少使用(LRU)算法.选择最近最长时间没有被使用的页面予以淘汰,其思想是用以前的页面引用情况来预测将来会出现的页面引用情况,也就是假设一个页面刚被访问,那么不久该页面还会被访问,即最佳置换算法是"向后看",而最近最少使用算法则是"向前看
- 时钟置换(CLOCK)算法.是LRU和FIFO的折中.作为LRO的近似算法,CLOCK算法给每个页面设置一个访问位,用以标识该页面最近有没有被访问过
- 改进型时钟(CLOCK)算法
- 其他页面置换算法:最不常用置换算法,页面缓冲算法
工作集与页面分配策略
工作集理论:为了解决抖动现象,引入了工作集的概念.工作集是基于局部性原理假设的.如果能预知程序在某段时间间隔内要访问哪些页面,并能提前将它们调入内存,将大大降低缺页率,从而减少置换工作,提高CPU利用率
工作集模型的原理:让操作系统监视各个进程的工作集,主要是监视各个工作集的大小.若有空闲的物理块,则可以调一个进程到内存以增加多道程度;若工作集的大小总和增加超过了所有可用物理块的数量总和,则操作系统可以选择一个内存中的进程对换到磁盘中去,以减少内存中进程数量来防止抖动的发生
页面分配策略:固定分配局部置换,可变分配全局置换,可变分配局部置换
页面调入策略:请求调页策略,预调页策略
从何处调入页面:系统拥有足够的对换区空间,系统缺少足够的对换区空间,UNIX方式
抖动现象与缺页率
抖动现象.若选用的页面置换算法不合适,可能会出现抖动现象:刚被淘汰的页面,过后不久又要访问,并且调入不久后又调出,如此反复,使得系统把大部分时间用在了页面的调入调出上,而几乎不能完成任何有效的工作
缺页率.衡量页面置换算法的重要指标.
请求分段存储管理系统
文件管理
文件系统基础
文件的基本概念
文件是具有文件名的组相关元素集合,在文件系统中是最大的数据单位
文件的组成结构:数据项,记录,文件
文件的属性:名称,标识符,文件类型,文件位置,文件大小建立时间用户标识等
文件的分类:
- 按照用途分类:系统文件,库文件,用户文件
- 按保护级别分类:只读文件,读写文件,执行文件,不保护文件
- 按信息流向分类:输入文件,输出文件,输入/输出文件
- 按数据形式分类:源文件,目标文件,可执行文件
文件操作
文件系统及实现
文件系统一种合理的层次结构可分为用户接口,文件目录系统,存取控制验证,逻辑文件系统与文件信息缓冲区和物理文件系统
目录的实现:
- 线性表:最为简单的目录实现方法是使用存储文件名和数据块指针的线性表
- 散列表:散列表根据文件名得到一个值,并返回一个指向线性表中的元素指针
文件的实现
外存分配方式:
文件的物理结构是指一个文件在外存上的存储组织形式,与外存分配方式有关.外存分配方式指的是如何为文件分配磁盘块.采用不同的分配方式将形成不同的文件物理结构.一般来说,外存的分配采用两种方式:静态分配和动态分配.
静态分配是在文件建立时一次性分配所需的全部空间,动态分配则是根据动态增长的文件长度进行分配,甚至可以一次分配一个物理块
常用的外存分配方法又连续分配,链接分配和索引分配
磁盘组织与管理
磁盘的物理结构:磁盘时典型的直接存取设备,这种设备允许文件系统直接存取磁盘上的任意物理块.磁盘机一般由若干磁盘片组成,可沿一个固定方向高速旋转
磁盘结构中的信息:引导控制块,分区控制块,目录结构,文件控制块
磁盘的访问时间=寻道时间+旋转时间+传输时间
当有多个进程都请求访问磁盘时,应采用一种适当的调度算法,以使各进程对磁盘的平均访问时间(主要是寻道时间)最短.
几种常用算法:先来先服务算法,最短寻道时间优先算法,扫描算法或电梯调度算法,循环扫描算法
先来先服务(FCFS)算法:简单,公平,未对寻道进行优化,所以平均寻道时间较长,仅适合磁盘请求较少的场合
最短寻道时间优先(SSTF)算法:比FCFS算法减少了平均寻道时间,有更好的寻道性能.但并非最优,而且会导致"饥饿"现象
扫描(SCAN)算法:兼顾较好的寻道性能和防止"饥饿"现象,被广泛应用在中小型机器和网络中
磁盘管理:
在磁盘能存储数据前,它必须分成扇区以便磁盘控制器能进行读和写操作,这个过程称为低级格式化.各级格式化为磁盘的每个扇区采用独特的数据结构.
设备管理
I/O设备概述
设备的分类:
- 按设备的使用特性分类:存储设备,人机交互设备,网络通信设备
- 按信息交换单位分类:字符设备,块设备
- 按传输速率分类:低速设备,中速设备,高速设备
- 按设备的共享属性分类:独占设备,共享设备,虚拟设备
设备管理的功能:设备分配,设备处理,缓冲管理,设备独立性
I/O控制方式:程序直接控制方式,中断控制方式,DMA控制方式和通道控制方式
- 程序直接控制方式,过程简单但CPU利用率相当低
- 中断控制方式,CPU和I/O设备间可以并行工作了,大大提高了CPU利用率,但多次中断CPU耗费了大量CPU时间
- DMA控制方式,设备和CPU可以并行工作,同时设备与内存的数据交换速度加快,并且不需要CPU干预,但仍然存在一定的局限性
- 通道控制方式,解决了I/O操作的独立性和各部件工作的并行性,由于需要更多的硬件,因此其成本较高
通道控制方式与DMA控制方式的区别:
首先,DMA控制方式中需要CPU来控制所传输数据块的大小,传输的内存,而通道控制方式中这些信息都是由通道来控制管理的,其次,一个DMA控制器对应一台设备与内存传递数据,而一个通道可以控制多台设备与内存的数据交换
I/O设备管理软件一般分为四层:中断中断处理程序,设备驱动程序,设备独立性软件和用户软件
- 中断处理程序.中断处理是控制输入/输出设备和内存与CPU直接的数据传送主要方式
- 设备驱动程序
- 设备独立性软件,实现一般设备都需要的I/O功能,并向用户空间软件提供一个统一的接口
- 用户层软件
I/O核心子系统
I/O核心子系统是设备控制的各类方式,其提供服务主要由I/O调度,高速缓存与缓冲区,设备分配与回收,假脱机技术
假脱机技术:
系统中独占设备的数量有限,往往不能满足系统中多个进程的需要,从而成为系统的"瓶颈",使许多进程因等待而阻塞.另外,分配到独占设备的进程,在整个运行期间往往占有但不经常使用设备,使设备利用率偏低,为克服这种缺点,人们通过共享设备来虚拟独占设备,将独占设备改造成共享设备,从而提高了设备利用率和系统的效率,该技术称为假脱机(SPOOLing)技术.
参考资料
天勤计算机