概念:
操作系统(operating system,简称OS)是管理计算机硬件与软件资源的计算机程序。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入设备与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。
特征:
- 共享:指系统中的资源可供内存中的多个并发进程共同使用
- 并发:指同一时间段内有多个事件发生
- 异步:是指在多道程序环境下,允许多个程序并发执行,但由于资源有限,进程的执行不是一贯到底。而是走走停停,以不可预知的速度向前推进,这就是进程的异步性。
- 虚拟:指把一个物理实体变为若干个逻辑上的对应物。虚拟技术可以归纳为:时分复用(处理器分时共享)和空分复用(虚拟存储器)。
功能:
- 管理计算机资源
- 处理机管理
- 存储器管理
- 文件管理
- 设备管理
- 提供用户与计算机硬件之间的接口
- 命令接口
- 程序接口:程序接口由一系列系统调用(广义指令)组成。用户通过调用这些系统调用来请求os为其提供服务。
- 单道批处理和多道批处理系统
- 分时操作系统
- 实时操作系统
- 网络操作系统和分布式操作系统
运行环境:
- 用户态(目态):机器处于目态时,程序只能执行非特权指令。用户程序只能在目态下运行,如果用户程序在目态下执行特权指令,硬件将发生中断,由操作系统获得控制权,从目态转换为管态的唯一途径是中断。 从管态到目态可以通过修改程序状态字来实现。
- 内核态(管态):CPU在管态下可以执行指令系统的全集。通常,操作系统在管态下运行。
中断和异常:
- 中断(外中断):指来自CPU执行指令及内存以外的事件的发生。例如:I/O事件、时钟中断等等。
- 异常(内中断):指来自CPU执行指令内部的事件。例如:地址越界、算术溢出等等。
中断处理过程:
flowchat
flow
op1=>operation: 关中断
op2=>operation: 保存断点
op3=>operation: 中断服务程序寻址
op4=>operation: 保存现场和屏蔽字
op5=>operation: 开中断
op6=>operation: 执行中断服务程序
op7=>operation: 关中断
op8=>operation: 恢复现场和屏蔽字
op9=>operation: 开中断
op10=>operation: 中断返回op1->op2->op3->op4->op5->op6->op7->op8->op9->op10
- 大内核
- 微内核
进程的概念(资源调度和分配的独立单位):
- 进程是程序的一次执行过程
- 进程是一个程序及其数据在处理机上顺序执行时所发生的活动
进程映像:由程序段、相关数据段、PCB组成
进程的状态与转换
运行态→等待态:等待使用资源;如等待外设传输;等待人工干预。 等待态→就绪态:资源得到满足;如外设传输结束;人工干预完成。 运行态→就绪态:运行时间片到;出现有更高优先权进程。 就绪态—→运行态:CPU 空闲时选择一个就绪进程。
进程控制:
- 进程的创建
- 为新进程分配PID,申请PCB
- 分配资源
- 初始化PCB
- 插入就绪队列
- 进程的终止
- 根据PID,找到PCB,读取状态
- 终止其子孙进程(有的话)
- 将资源归还给父进程
- 删除PCB
- 进程的阻塞和唤醒
- 阻塞(主动行为):将PCB状态改为阻塞态,并将PCB插入到相应的等待队列
- 唤醒(被动行为):在事件的等待队列找到PCB,改为就绪态,并插入就绪队列
- 进程的切换
- 保存处理机上下文,包括PC和其他寄存器
- 更新PCB信息
- 把PCB插入到相应队列
- 选择另一个进程执行,并更新其PCB
- 根据其PCB恢复上下文
进程的组织:
- 进程控制块(PCB):进程存在的唯一标志
- 程序段
- 数据段
进程的通信:
- 共享通信
- 低级方式:基于信号变量通信
- 高级方式:基于共享存储区通信
- 消息传递:进程间通过交换格式化的消息进行通信
- 管道通信(pipe,文件系统的一种):半双工通信
线程的概念:线程是一个基本的CPU执行单元。引入线程的目的是:减少程序在并发执行时的时空开销,可理解为**“轻量级进程”**。线程不拥有自己的资源,与同属一个进程的其他线程共享进程所拥有的资源。
线程的实现方式:
- 用户级线程:线程管理工作由应用程序完成,内核意识不到线程的存在。线程库。
- 内核级线程:线程管理工作由内核完成。
多线程模型:
- 多对一模型:将多个用户级线程映射到一个内核级线程,优点:线程管理在用户空间进行,效率高;缺点:一个线程被阻塞,整个进程就会被阻塞,属于同一个进程的线程不能在处理机上并行执行。
- 一对一模型:将每个用户线程对应一个内核级线程。优点:并发能力好;缺点:开销大,效率低(与多对一模型的优缺点是相对的)
- 多对多模型:略
概念:
- 概念:处理机调度是按照一定规则(算法)从就绪队列中选择一个进程并将处理机分配给该进程,以实现进程的并发执行。
- 层次
- 作业调度(高级调度):内存与辅存之间的调度
- 中级调度(内存调度):
- 进程调度(低级调度):就绪队列中选择一个进程并将处理机分配给该进程,以实现进程的并发执行。
调度的时机:
- 非剥夺调度:当前进程无法继续执行,需要调度另一个进程执行
- 剥夺调度:有优先级更高的进程进入就绪队列,此时要将处理机让出
OS通过将远进程的现场信息入栈来保存现场,再将新的进程现场信息入栈
调度的方式
- 非剥夺式调度(非抢占)
- 剥夺式调度(抢占)
调度的基本准则
指标 含义 CPU利用率 略 系统吞吐量 单位时间内,CPU完成的作业数 周转时间 指作业从提交到完成所需时间 等待时间 指进程处于等待处理机时间的总和 相应时间 指用户提交请求到第一次相应的时间 典型的调度算法
调度算法 思想 先来先服务(FCFS) 按进入就绪队列早的进程优先原则。优点:简单公平、缺点:效率低,有利于长作业,不利于短作业,有利于CPU繁忙型作业,不利于I/O繁忙型作业 短作业优先(STF) 按作业处理时间短的优先。优点:平均等待时间、周转时间。缺点:可能会出现饿死现象 优先级调度 按照给定的优先原则进行调度。 高相应比优先 按响应比高的优先。响应比=(等待时间+要求服务时间)/要求服务时间。综合了FCFS和SJF的优点。 时间片轮转算法(RR) 适用于分时系统,按照FCFS原则,每个作业占用处理机一个时间片 多机反馈队列 设置多级就绪队列,每个级别的就绪队列采用RR,一个时间过后,未完成的作业,进入下一级就绪队列。集众家之长。
- 基本概念
- 临界资源:一次仅允许一个进程使用的资源叫临界资源
- 同步:指为完成某种任务而建立的两个或多个进程,这些进程需要相互合作,有一定的调度次序
- 互斥:当一个进程使用临界资源时,另一个进程必须等待
- 实现互斥的基本方法:
- 软件实现方式
- 硬件实现方式
- 信号量:P和V操作
- 管程:
- 含义:类似于一个**“class”**,把对共享资源的操作封装起来,每次仅允许一个进程进入。
- 组成
- 管程的名称
- 内部的共享数据结构说明
- 对数据结构进行操作的一组函数
- 对数据结构初始化的语句
- 条件变量:将阻塞原因定义为阻塞变量
- wait
- signal
- 经典同步问题:
- 生产者-消费者
- 读者-写者
- 哲学家进餐
- 吸烟者问题
概念:指多个进程因竞争资源部而陷入一种僵局,若无外力作用,这些进程无法向前推进
死锁产生的原因:
- 系统资源竞争
- 进程非法推进
- 必要条件(重点)
- 互斥条件:同一时间段内,系统资源仅为一个进程所占用
- 不剥夺条件:进程所获得的资源未使用完之前,不能剥夺,只能主动释放
- 请求并保持条件:进程被阻塞,但对自己获得的资源不释放
- 循环等待条件:存在一个进程资源的循环等待链
死锁的处理策略
内存管理的功能有:内存空间分配与回收、地址转换、内存空间的扩充、存储保护
编译:由编译程序将用户代码编译为若干目标模块
链接:由链接程序将目标模块及需要的库函数链接在一起,形成一个完整的装入模块
- 静态链接
- 装入时动态链接
- 运行时动态链接
装入:由装入程序将装入模块装入内存
- 绝对装入:仅适用于单道程序环境。程序中的地址是绝对地址
- 可重定位装入(静态重定位):地址变换在装入时一次完成的
- 动态运行时装入(动态重定位):多次装入与装出,仅在运行时才进行地址转换
内存保护
- 上下限寄存器
- 基址寄存器和界地址寄存器
连续分配管理方式
单一连续分配:内存在此方式下分为系统区和用户区。内存中永远最多只有一道程序。
固定分区分配:将用户区划分为多个区间。可以细分为两种:分区大小相等和分区大小不等。内存可以有多道程序。产生内部碎片。
动态分区分配:内存中分区大小和数目是可变的。产生外部碎片。
连续分配管理的分配算法:
- 首次适应
- 最佳适应
- 最坏适应
- 邻近适应
非连续分配管理方式
虚拟存储器的理论基础:
- 局部性原理:包括空间和时间两个方面
虚拟存储器的定义:
在具有层次结构存储器的计算机系统中,自动实现部分装入和部分替换功能,能从逻辑上为用户提供一个比物理贮存容量大得多,可寻址的“主存储器”。虚拟存储区的容量与物理主存大小无关,而受限于计算机的地址结构和可用磁盘容量。根据所用的存储器映像算法,虚拟存储器管理方式主要有段式、页式、和段页式三种。
虚拟存储器的特征
- 多次性
- 对换性
- 虚拟性
虚拟内存的实现
- 三种实现方式
- 请求分页存储管理
- 请求分段存储管理
- 请求段页式存储管理
- 硬件支持
- 页表机制
- 中断机制
- 地址变换机构
请求分页存储管理
页表机制
页表项
- 状态位 P:指示该页是否已调入内存。 供程序访问时参考
- 访问字段 A:记录本页在一段时间内被访问的次数或最近未被访问的时间。 供选择页面换出时参考
- 修改位 M:表示该页在调入内存后是否被修改过。若修改过,则置换该页时需重写该页至外存。 供置换页面时参考
- 外存地址:指出该页在外存上的地址。供调入该页时参考
缺页中断机制:
在请求分页系统中,每当要访问的页面不在内存中,便产生一个缺页中断,请求系统将所缺的页调入内存。
地址变换机构:
页面置换算法
- 最佳置换算法(OPT):淘汰以后不使用或者在最长时间内不再访问的页面
- 先进先出置换算法(FIFO):有Belady现象,随着分配给进程的物理块增多,缺页率不减反增。
- 最近最久未使用置换算法(LRU):选择最近最长时间未访问过的页面
- 时钟置换算法(CLOCK):选择使用位为0的页面淘汰
- 改进型CLOCK置换算法:根据访问位u和修改位m,先排除(0,0),再排除(1,0),再排除(0,1),最后排除(1,1)
抖动:频繁的页面调度行为叫做抖动或颠簸,即一个进程在换页上用的时间多于执行时间
工作集:指某段时间间隔内,进程要访问的页面集合
- 文件:文件是以计算机硬盘为载体的存储在计算机上的信息集合。
- 文件属性:有文件名、文件类型、大小、时间等等。
- 文件的基本操作:创建、打开、读、写、删除等等。
- 文件的打开
- 打开:通过系统调用open将指定文件的属性从外村复制到内存打开文件表的一个表目中,并将该表目的索引返回给用户,记作fd,也称文件描述符,随后用户可以通过这个fd进行文件操作。简单来说,将FCB复制到打开文件表。
- 关闭:将文件对应的FCB引用计数减1,当引用计数为0时,回收文件所占内存,并删除在打开文件表的表目。
- 文件的逻辑结构(用户观点)
- 无结构文件(流式文件):以Byte为单位。例如:源代码文件、可执行文件等等。
- 有结构文件(记录式文件):
- 顺序文件:像一个数组一样,数组元素是文件记录
- 索引文件:根据索引表找到地址
- 索引顺序文件:以上两者的结合
- 散列文件:给定记录的键值通过散列函数直接决定记录的物理地址
- 目录结构
- 文件控制块(FCB):用来存放控制文件所需的各种信息的数据结构,以实现“按名存取”。FCB的有序集合称为文件目录,一个FCB就是一个目录项。
- 索引结点(Inode):每个文件都会有一个inode,即索引节点,里面包含了文件所有的属性信息,系统是引用inode来完成文件的增、删、改、查操作,而不是文件名。有了索引结点后,目录项只有两项:文件名和索引节点指针。根据索引结点就可以对文件进行操作,类似于PCB。
- 文件共享:
- 软链接:软链接又叫符号链接,为一个LINK文件,这个文件包含了另一个文件的路径名。可以是任意文件或目录,可以链接不同文件系统的文件。
- 硬链接:使得两个文件目录项指向同一个索引结点。删除文件时,将引用计数减1,若为0,才真正删除文件
- 文件系统层次结构
- 文件分配方式
- 连续分配
- 链接分配
- 隐式链接
- 显式链接:FAT表,给出每个磁盘块邻接的下一个磁盘块
- 索引分配
- 文件存储空间管理
- 空闲表法、空闲链表法
- 位示图
磁盘结构
磁盘调度算法
- 先来先服务FCFS
- 最短寻找时间优先(SSTF)
- 扫描算法(SCAN、电梯调度算法)
- 循环扫描(C-SCAN)算法
磁盘调度算法的性能指标
- 寻找时间
- 旋转延迟时间
- 传输时间
磁盘格式化
- 低级(物理)格式化:将硬盘划分出柱面和磁道,再将磁道划分为若干个扇区,每个扇区又划分出标识部分ID、间隔区、GAP和数据区DATA等
- 高级(逻辑)格式化:高级格式化仅仅是清除硬盘上的数据,生成引导信息,初始化FAT表,标注逻辑坏道等。
I/O设备
- 按信息交换的单位分类:
- 块设备:以数据块为单位的、传输速率高、可寻址,使用DMA
- 字符设备:以字符为基本单位、传输速率低、不可寻址,适合使用中断驱动方式
I/O控制方式
控制方式 含义 优点 缺点 程序直接控制方式 CPU对外设状态进行循环检查(轮询) 简单 CPU利用率相当低 中断驱动方式 允许I/O设备主动打断CPU的运行并请求服务 DMA方式 基本单位为块,数据直接从外设送入内存,不经过内存,仅仅在传送一个或多个数据块的开始和结束才需要CPU干预 彻底解放CPU 通道方式 I/O通道是指专门负责输入/输出的处理机。是DMA的发展,进一步减少CPU的干预,属于硬件方式。可以实现CPU、I/O设备、通道三者并行操作。
I/O调度:
确定一个好的顺序来执行这些I/O请求,来改善系统整体性能,进程之间公平的共享设备访问,减少I/O完成所需要的平均时间。
为每个设备维护一个请求队列来实现调度,当一个应用程序执行阻塞I/O系统调用时候,请求加到相应设备的队列上。I/O调度会重新安排队列顺序以改善系统总体效率和应用程序的平均响应时间。磁盘高速缓存
使用磁盘高速缓存技术来提高磁盘的I/O速度,正在运行的进程的指令既存储在磁盘上,也存储在物理内存中,也被复制到CPU的二级和一级高速缓存中。
磁盘高速缓存技术是指利用内存中的存储空间来暂存从磁盘中读出的一系列盘块中的信息。磁盘高速缓存在逻辑上属于磁盘,物理上是驻留在内存中的盘块。
缓冲区
- CPU和I/O设备间速度不匹配的矛盾
- 减少对CPU的中断频率
- 解决基本数据单元大小不匹配的问题
- 提高CPU和I/O设备之间的并行性
设备分配与回收
设备分类
- 独占式设备
- 分时式共享使用设备,比如对磁盘设备的I/O操作。
- 以SPOOLing方式使用外部设备,对I/O操作进行批处理,空间换时间的技术,虚拟设备。
设备分配的数据结构
设备控制表DCT,控制器控制表COCT,通道控制表CHCT,系统设备表SDT。
设备控制表表征一个设备,控制表表项就是各个设备的各个属性。
每个DCT都需要一个表项来表示控制器,需要一个指向控制器控制表的指针,所以DCT和COCT有一一对应的关系。
系统设备表SDT,记录已经链接到系统中所有物理设备的情况,每个物理设备占一个表目。
flowchat
> op1=>operation: 设备控制表DCT > op2=>operation: 控制器控制表COCT > op3=>operation: 通道控制表CHCT > op1->op2->op3 > ```
设备分配策略:
- 静态分配:主要用于对独占设备的分配,一次性分配作业要求的所有设备,控制器。静态分配不会出现死锁,但是设备的使用效率低。
- 动态分配:进程执行过程中根据执行需要进行,进程需要设备时,通过系统调用命令向系统提出设备请求,由系统按照事先规定的策略给进程分配所需要的设备,I/O控制器,用完之后立即释放,有可能造成进程死锁。
逻辑设备名到物理设备名的映射
设备独立性是指应用程序独立于具体使用的物理设备
逻辑设备表(LUT),用于将逻辑设备名映射为物理设备名,LUT表项包括逻辑设备名,物理设备名和设备驱动程序入口地址。系统通过查找LUT来寻找相应的物理设备和驱动程序。SPOOLing技术,假脱机技术(将独占设备改为共享设备,以空间换时间,例如打印机)
- 输入井是模拟脱机输入时的磁带,收容从输入设备输入的这些IO数据【磁带】
- 输出井是模拟脱机输出时的磁带,收容用户进程输出的数据【磁带】
- 外围控制机是由一个输入和输出进程实现的
- 输入和输出缓冲区的作用就是作为一个数据中转站