一、操作系统的概念
操作系统是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配;以提供给用户和其他软件方便的接口和环境;它是计算机系统中最基本的系统软件。
1、操作系统的特征
并发:指两个或多个事件在同一时间间隔内发生
共享:系统中的资源可供内存中多个并发执行的进程共同使用
虚拟:把物理上的实体变为若干个逻辑上的对应物(空分/时分复用技术)
异步:多道程序环境下,允许多个程序并发执行,但是由于资源有限,进程的执行不是一贯到底,而是走走停停,以不可预知的速度向前推进
2、操作系统的发展与分类
手工操作系统:人机速度矛盾
批处理阶段:单道批处理系统、多道批处理系统
分时操作系统 :提供人机交互功能
实时操作系统:能优先处理紧急任务
网络操作系统
分布式操作系统
个人计算机操作系统
3、操作系统的运行机制
应用程序:只能执行非特权指令
内核程序(内核Kernel):可以执行特权指令
CPU有两种状态,“内核态”和“用户态”,由程序状态字寄存器(PW)控制
内核态=核心态=管态
用户态=目态
内核态->用户态:执行一条特权指令,修改PW的标志位为“用户态”
用户态->内核态:由“中断”引发,硬件自动完成变态过程
4、中断和异常
中断的分类:
内中断(异常):应用程序通过“陷入指令/访管指令”(用户态)引发内部中断,将CPU控制权还给操作系统内核
外中断(中断):与当前执行的指令无关,中断信号来源于CPU外部
5、系统调用
按功能分类:
设备管理:完成设备的请求/释放/启动等
文件管理:完成文件的读/写/创建/删除等
进程控制:完成进程的创建/撤销/阻塞/唤醒等
进程通信:完成进程之间的消息传递/信号传递等
内存管理:完成内存的分配/回收
6、操作系统的体系结构
大内核:将操作系统的主要功能模块作为系统内核,运行在核心态
微内核:只把最基本的功能保存在内核
分层结构
模块化
外核
7、操作系统的引导
8、虚拟机
第一类VMM:之间运行在硬件之上,能之间控制和分配物理资源
第二类VMM:运行在Host OS之上,依赖于Host OS为其分配物理资源
二、进程
1、进程的概念
进程(Process):是动态的,是程序的一次执行过程
2、进程的组成
进程实体是由PCB、程序段、数据段组成的。
PCB(PCB是进程存在的唯一标志,当进程被创建时,操作系统为其创建PCB,当进程结束时,会回收PCB):
进程描述信息
进程控制和管理信息
资源分配清单
处理机相关信息
程序段:包含程序指令
数据段:包含运行过程中产生的各种数据
3、进程的特征
动态性
并发性
独立性
异步性
结构性
4、进程的状态
创建态(New)、就绪态(Ready)、运行态(Running)、阻塞态(Waiting/Blocked)、终止态(Terminated)
就绪态:其他资源分配完毕,只差CPU
进程的组织方式:
链接方式(队列)、索引方式(索引表)
5、进程控制
进程的转换由原语控制(原语的执行必须一气呵成,不可中断)
进程控制原语:
1、更新PCB中的信息
2、将PCB插入合适的队列
3、分配/回收资源
6、进程的通信
各进程拥有的内存地址空间相互独立
共享存储(存储区共享和数据结构共享)
消息传递(直接通信方式和间接通信方式)
管道通信(半双工通信)
7、线程
(1)概念
线程是一个基本的CPU执行单元,也是程序执行流的最小单位。
引入线程后,进程是资源分配的基本单位,线程是调度的基本单位
(2)组成
线程只由相关堆栈(系统栈或用户栈)寄存器和线程控制表TCB组成。
寄存器可被用来存储线程内的局部变量,但不能存储其他线程的相关变量。
(3)线程的实现方式
用户级线程:“代码逻辑”的载体
内核型线程:“运行机会”的载体,内核级线程才是处理机分配的单位
多线程模型
(4)线程的状态和转换
创建/运行/就绪/阻塞/终止
(5)处理机的调度
调度:当有一堆任务要处理,但是由于资源有限,这些事情没法同时处理,这就需要某种规则来决定处理这些任务的顺序
用户向系统提交了一个作业:用户让操作系统启动的一个程序(来处理一个具体的任务)
高级调度(作业调度)
中级调度(内存调度)
低级调度(进程调度)
8、进程调度
临界资源:一个时间段内只允许一个进程使用的资源,各进程需要互斥地访问临界资源
临界区:访问临界资源的那段代码
进程调度的方式:
非剥夺调度方式(非抢占方式)
剥夺调度方式(抢占方式)
9、调度算法
CPU利用率=忙碌的时间/总时间
系统吞吐量=总共完成了多少道作业/总花费的时间
周转时间=作业完成的时间-作业被提交的时间
平均周转时间=各作业周转时间之和/作业数
带权周转时间=作业周转时间/作业实际运行的时间
平均带权周转时间=各作业带权周转时间之和/作业数
等待时间=周转时间-作业运行时间
先来先服务(FCFS)
短作业优先(SJF)
高响应比优先(HRRN) 响应比=(等待时间+要求服务时间)/要求服务时间
时间片轮转调度算法(RR)
优先级调度算法
多级反馈队列调度算法
10、进程的同步和互斥
空闲让进
忙则等待
有限等待
让权等待
进程互斥的软件实现方法
单标志法
双标志先检查法
双标志后检查法
Peterson算法
进程互斥的硬件实现方法
中断屏蔽方法
TestAndSet指令
Swap指令
11、锁
解决临界区最简单的工具就是互斥锁(mutex lock) acquire() 获得锁 release()释放锁
12、信号量机制
wait(S) 即 P(S)
signal(S) 即 V(S)
整型信号量
记录型信号量:有等待队列
同步:semaphore S=0
互斥:semaphore mutex=1
生产-消费者问题
多生产者-多消费者问题
吸烟者问题
读写问题
哲学家问题
13、管程
利用封装思想把同步互斥封装在类中,外部通过调用类中的方法实现
Java中用synchronized修饰
14、死锁
死锁:在并发环境下,各进程因竞争资源而造成的一种互相等待对方手里的资源,导致各进程都阻塞,都无法向前推进的现象。
饿死:由于长期得不到想要的资源,某进程无法向前推进的现象。
死循环:某进程执行过程中一直跳不出某个循环的现象。
死锁产生的必要条件:
互斥条件
不可剥夺条件
请求和保持条件
循环等待条件
死锁的处理策略:
预防死锁
避免死锁(银行家算法)
死锁的检测和解除
三、内存
程序执行前需要先放到内存中才能被CPU处理--缓和CPU与硬盘之间的速度矛盾
操作系统提供地址转化功能,负责程序的逻辑地址与物理地址的转换:
绝对装入:编译时产生绝对地址
可重定位装入:装入时将逻辑地址转换为物理地址
动态运行时装入:运行时将逻辑地址转换为物理地址,需要设置重定位寄存器
内存空间的分配与回收
覆盖与交换
交换(进程在内存与磁盘间动态调度)
连续分配管理方式
内部碎片:分配给某个进程的内存区域中,有些部分没有用上
外部碎片:内存中某些空闲分区太小难以利用
单一连续分配:无外部碎片,有内部碎片、存储器利用率极低
固定分区分配:实现简单,无外部碎片,会产生内部碎片,内存利用率低
动态分区分配:对分区的分配与回收,没有内部碎片,会产生外部碎片,外部碎片可以通过“紧凑”解决
动态分区算法
首次适应算法
最佳适应算法
最坏适应算法
邻近适应算法
分页存储管理
页框:将内存空间分为一个个大小相等的分区,每个分区就是一个“页框”(页框=页帧=内存块=物理块=物理页面),每个页框都有一个编号,即“页框号”,页框号从0开始
页面:将进程的逻辑地址空间也分为与页框大小相等的一个个部分,每个部分称为一个“页”或者“页面”,每个页面也有一个编号,即“页号”,页号也是从0开始
页表:操作系统为每一个进程创建一张页表
逻辑地址=(页号,页内偏移量)
物理地址=页面在内存中的起始地址+页内偏移量
基本地址变换机构
地址变换过程:
1、根据逻辑地址算出页号、业内偏移量
2、页号的合法性检查(与页表长度对比)
3、若页号合法,再根据页表起始地址、页号找到对应页表项
4、根据页表项中记录的内存块号、业内偏移量得到最终的物理地址
5、访问物理内存对应的内存单元
具有快表的地址变换机构
快表,又称联想寄存器(TLB,translation lookaside buffer),是一种访问速度比内存块很多的高速缓存(TLB不是内存!),用来存放最近访问的页表项的副本,可以加速地址变换的速度,与此对比,内存的页表常称为慢表。
TLB和普通Cache的区别:TLB只有页表项的副本,而普通Cache中可能会有其他各种数据的副本
两级页表
页目录表
基本分段存储管理
进程的地址空间:按照程序自身的逻辑关系划分为若干个段,每个段都有一个段名,每段从0开始编制
逻辑地址由段号和段内地址(段内偏移量)组成
地址变换:
1、由逻辑地址得到段号、段内地址
2、段号与段表寄存器中的段长度比较,检查是否越界
3、由段表始址、段号找到对应的段表项
4、根据段表中记录的段长,检查段内地址是否越界
5、由段表中的“基址+段内地址”得到最终的物理地址
6、访问目标单元
分段和分页的区别
分页对用户不可见,分段对用户可见
分页的地址空间是一维的,分段的地址空间是二维的
分段更容易实现信息的共享和保护(纯代码/可重入代码可以实现共享)
分页(单级页表)、分段访问一个逻辑地址都需要两次访存,分段存储中也可以引进快表机构
段页式管理方式
逻辑地址结构(段号,页号,页内偏移量)
虚拟内存
局部性原理:
时间局部性:如果执行了程序中某条指令,那么不久之后这条指令很有可能再次执行
空间局部性:一旦程序访问了某个存储单元,在不久后,其附近的存储单元也很有可能被访问
若内存空间不够,由操作系统负责将内存中暂时不用的信息换到外存中
虚拟内存技术的实现需要建立在离散分配的内存管理方式的基础上
请求分页存储管理方式
当访问的信息不在内存时,由操作系统负责将所需信息从外村调入内存
若内存空间不够,由操作系统负责将内存中暂时用不到的信息换出到外存中
页面置换算法
最佳置换算法(OPT):每次淘汰最长时间不再被访问的页面或者以后永不使用的页面
先进先出置换算法(FIFO):每次淘汰的页面是最早进入内存的页面
最近最久未使用置换算法(LRU):每次淘汰最近最久未使用的页面
时钟置换算法(CLOCK)或最近未用算法(NRU):为每个页面设置一个访问位,再将内存中的页面通过链接指针链接成一个循环队列,当某页被访问时,其访问位置为1,当需要淘汰页面时,只需检查页的访问位是否为0,是0换出,若是1,设置为0。
改进型时针置换算法:用(访问位,修改位)的形式表示各页面的状态
页面分配策略
固定分配局部置换
可变分配全局置换
可变分配局部置换
驻留集:指请求分页存储管理中给进程分配的内存块的集合
内存映射文件
内存映射文件--操作系统向上层程序员提供的功能(系统调用)
四、文件
文件——就是一组有意义的信息/数据集合
标识符:一个系统内各文件标识符唯一,对用户毫无可读性,因此标识符只是操作系统用于区分各个文件的一种内部类型
文件的逻辑结构
无结构文件
有结构文件:顺序文件、索引文件、索引顺序文件
文件目录
文件控制块(FCB):一个FCB就是一个文件目录项,FCB包含文件的基本信息,存取控制信息,使用信息
目录结构:单级目录结构,两级目录结构,多级(树形)目录结构(不利于文件共享),无环图目录结构(实现文件共享)
索引节点:除了文件名之外的所有信息放到索引节点中,每个文件对应一个索引节点
文件的物理结构
文件的分配方式:
连续分配
链接分配
索引分配
文件存储空间管理
文件卷、目录区
空闲表法:
首次适应、最佳适应、最坏适应算法来决定为文件分配哪个区间
空闲链表法
位示图法:
0表示盘块空闲,1表示盘块已分配
成组链接法
文件的基本操作
创建文件
删除文件
打开文件
关闭文件
读文件
写文件
文件共享
基于索引节点的共享方式(硬链接)
基于符号链的共享方式(软链接) 快捷方式
文件保护
口令保护
加密保护
访问控制
文件系统的层次结构
文件系统的全局结构
物理格式化
逻辑格式化
虚拟文件系统(VFS)
文件系统挂载(mounting)
五、I/O设备
I/O设备中的I/O控制器
功能:
接收和识别CPU发出的命令
向CPU报告设备的状态
数据交换
地址识别
组成:
CPU与控制器之间的接口
I/O逻辑
控制器与设备之间的接口
I/O控制方式
程序直接控制方式:CPU和I/O设备利用率低
中断驱动方式:CPU和I/O设备可以并行工作,频繁的中断处理会消耗较多的CPU时间
DMA方式(Direct Memory Access直接存储器存取):数据传输以“块”为单位,数据传输不需要经过CPU,CPU和I/O设备的并行性得到提升,CPU每发出一条I/O指令,只能读/写一个或多个连续的数据块
通道控制方式:实现复杂,需要专门的通道硬件支持,CPU、通道、I/O设备可以并行工作,资源利用率高
I/O软件层次结构
用户层软件(SPOOLing技术)
设备独立性软件(I/O调度、设备保护、设备分配与回收、缓冲区管理)
设备驱动程序
中断处理程序
硬件
输入/输出应用程序接口和设备驱动程序接口
I/O核心子系统
假脱机技术(SPOOLing技术)
输入井、输出井
用软件技术模拟脱机技术
SPOOLing技术可以把一个物理设备虚拟成逻辑上的多台设备,可以将独占式设备改造成共享设备
设备的分配与回收
静态分配:进程运行之前为其分配全部所需资源,运行结束之后归还资源
动态分配:进程运行过程中动态申请设备资源
缓冲区管理
提高CPU和I/O设备之间的并行性
一般利用内存作为缓冲区
磁盘的结构
磁盘:磁盘的表面由一些磁性物质组成,可以利用这些磁性物质记录二进制数据
磁道/柱面:磁盘的盘面被划分成一个个磁道,一个圈就是一个磁道
扇区:一个磁道又被划分为一个个扇区,每个扇区就是一个磁盘块
用(磁道号/柱面号,盘面号,扇区号)定义一个磁盘块
磁盘调度算法
先来先服务(FCFS)
最短寻找时间优先(SSTF)
扫描算法(SCAN)也叫电梯算法 优化(LOOK算法)
循环扫描算法(C-SCAN) 优化(C-LOOK算法)
减少磁盘延迟的时间的方法
交替编号
错位命名
磁盘的管理
磁盘初始化
引导块
坏块的管理
固态硬盘(SSD)
原理:基于闪存技术Flash Memory,属于电可擦除ROM,即EEPROM
组成:
闪存翻译层:逻辑地址映射为物理地址
存储介质
以页为单位读/写——相当于磁盘的“扇区”
以块为单位“擦除”