一. 概述
1. 操作系统的概念、功能和目标
1.1 操作系统的概念
操作系统是指控制和管理整个计算机的软件和硬件资源,并合理地组织调度计算机的工作和资源的分配,提供给用户和其他软件方便的接口和环境,它是计算机系统中最基本的系统软件。
1.2 操作的功能
1.2.1 作为系统资源的管理者
提供的功能
- 处理机管理
- 存储器管理
- 文件管理
- 设备管理
操作系统的目标
高效、安全
1.2.2 作为用户和计算机硬件之间的接口
提供的功能
- 命令接口
联机命令接口:用户说一句,系统做一句
非联机命令接口:用户说一堆,系统做一堆 - 程序接口:由一组系统调用组成
- 图形用户界面
操作系统的目标
方便用户使用
1.2.3 作为最接近硬件的层次
提供的功能和目标
实现对硬件机器的拓展(逻辑 虚拟机)
2. 操作系统的特点
2.1 并发(最基本特点)
**并发:**并发是指两个或多个事件在同一时间间隔内发生。这些事件在宏观上是同时发生,但在微观上是交替发生的。
**并行:**是指两个或多个事件在同一时刻同时发生。
2.2 共享(最基本特点)
共享: 即资源共享,是指系统中的资源可供内存中并发执行的进程共同使用。
共享方式:
- 互斥共享方式:系统中的某些资源,虽然可以提供给多个进程使用,但是在一个时间段内只允许一个进程访问该资源。
- 同时共享方式:允许一个时间段由多个进程“同时”对它们进行访问。
2.3 虚拟
虚拟: 把物理上的实体变为若干个逻辑上的对应物。物理实体是实际存在的,逻辑上的对应物是用户感受到的。
虚拟技术:
-
空分复用技术(如虚拟存储器)
-
时分复用技术(虚拟处理器)
2.4 异步
异步: 是指 在多道程序环境下,允许多个程序并发执行,但由于资源有限,进程的执行不是一贯到底的,而是走走停停,以不可预知的速度向前推进,这就是进程的异步性。
3. 操作系统的发展和分类
3.1 手工操作阶段
缺点:用户独占全机、人机速度矛盾导致
3.2 批处理阶段
-
单道批处理系统
缺点:CPU有大量的时间是在空闲等待I/O完成
-
多道批处理系统(操作系统开始实现)
缺点:没有人机交互功能
3.3 分时操作系统
优点: 提供人机交互
缺点: 不能优先处理紧急业务
3.4 实时操作系统
分类:
**硬实时系统: ** 必须在严格的规定时间内完成处理
软实时系统: 能接受偶尔违反时间规定
3.5 网络操作系统、 分布式操作系统、个人计算机操作系统
4. 操作系统的运行机制和体系结构
4.1 运行机制
- 两种指令
- 特权指令:不允许用户使用
- 非特权指令
- 两种处理器状态
- 核心态(管态):特权指令和非特权指令都可以执行
- 用户态(目态):CPU只可以执行非特权指令
切换:
用户态 --> 核心态: 通过中断来实现,中断是唯一途径
核心态 --> 用户态: 通过执行一个特权指令来实现,将程序状态字(PSW)的标志位设置为“用户态”
- 两种程序
- 内核程序:系统的管理者,特权指令和非特权指令都可以执行,运行在核心态
- 应用程序:为了保证运行安全,只能执行非特权指令,运行在用户态
4.2 操作系统内核
- 时钟管理:实现计时功能
- 中断处理:负责实现中断机制
- 原语(设备驱动、CPU切换)
- 是一种特殊的程序
- 处于操作系统最底层,是最接近硬件的部分
- 这种程序的运行具有原子性……其运行只能一气呵成,不可中断
- 运行时间较短、调用频繁
- 对系统资源进行管理的功能
- 进程管理
- 设备管理
- 存储器管理
4.3操作系统的体系结构
4.3.1 大内核
- 将操作系统的主要功能模块都作为系统内核,运行在核心态
- 优点:高性能
- 缺点:内核代码庞大,结构混乱,难以维护
4.3.2 微内核
- 只把基本的功能保留在内核
- 优点:内核功能少,结构清晰,方便维护
- 缺点:需要频繁地在核心态和用户态之间切换,性能低
5. 中断和异常
5.1 中断机制的诞生
本质 发生中断就意味着需要操作系统的介入,开展管理工作。
5.2 中断的概念和作用
- 当中断发生时,CPU立即进入核心态
- 当中断发生后,当前运行的进程暂停运行,并由操作系统内核对中断进行处理
- 对于不同的中断信号,会进行不同的处理
- 发生了中断,就意味着需要操作系统介入,开展管理工作。由于操作系统的管理工作(比如进程切换、分配I/O设备等)需要使用特权指令,因此CPU要从用户态转为核心态。中断可以使CPU从用户态切换为核心态,使操作系统获得计算机的控制权。有了中断,才能实现多道程序并发执行。
5.3 中断的分类
- 内中断(也称为“异常”、例外、陷入)
- 自愿中断:指令中断,如系统调用时使用的访管指令(又叫小茹指令、trap指令)
- 强迫中断:
硬件故障,如缺页
软件中断,如除0运算.
- 外中断
- 外设请求,如I/O操作完成发出的中断信号
- 人工干预
- 区别
- 信号来源:内中断是CPU内部,外中断是CPU外部
- 内中断与当前执行的指令有关,而外中断无关
5.4 外中断的处理过程
二. 进程与线程
1. 进程的定义、组成、组织方式、特征
1.1 定义
程序: 就是一个指令序列
进程实体: 程序段、数据段、PCB三部分组成了进程实体 (进程映像)
PCB是进程存在的唯一标志
进程: 进程实体的运行过程,是系统进行资源分配和调度的一个独立单位
注: 严格来说,进程实体时静态的,进程则是动态的。
1.2 组成
- 程序段(程序本身运行所需的数据):存放程序代码
- 数据段(程序本身运行所需的数据):存放程序运行时使用、产生的运算数据。如全局变量、局部变量、宏定义的常量等。
- PCB(进程的管理者即操作系统所需要的数据都在PCB中):操作系统通过PCB(进程控制块)来管理进程,因此PCB中应该包含操作系统对其进行管理所需的各种信息
PCB的内容:- 进程描述信息:进程标识符PID、用户标识符UID
- 进程控制和管理信息:进程当前状态、进程优先级
- 进程分配清单:程序段指针、数据段指针、键盘、鼠标
- 处理机相关信息:各种寄存器值
1.3 组织方式
- 链接方式
- 按照进程状态将PCB分为多个队列
- 操作系统持有指向各个队列的指针
- 索引方式
- 根据进程状态的不同,建立几张索引表
- 操作系统持有指向各个索引表的指针
1.4 特征
- 动态性(最基本):进程是程序的一次执行过程,是动态地产生、变化和消失的
- 并发性:内存中有多个进程实体,各进程可并发执行
- 独立性:进程是能独立运行、独立获得资源、独立接受调度的基本单位
- 异步性:各进程按各自独立的、不可预知的速度向前推进,操作系统要提供“进程同步机制”来解决异步问题
- 结构性:每个进程都会配置一个PCB。结构上看,进程由程序段、数据段、PCB组成
2. 进程的状态与转换
2.1 状态
- 运行状态(基本):占用CPU,并在CPU上运行
- 就绪状态(基本):已经具备运行条件,但由于没有空闲CPU,而暂时不能运行
- 阻塞状态(又称等待态 基本):因等待某一事件而暂时不能运行
- 创建状态(又称新建态):进程正在被创建,操作系统为进程分配资源、初始化PCB
- 终止状态(又称结束态):进程正在从系统中撤销,操作系统会回收进程拥有的资源、撤销PCB
2.2进程状态间的转换
- 就绪态 -> 运行态
- 运行态 -> 就绪态
- 运行态 -> 阻塞态
- 阻塞态 -> 就绪态
3. 进程控制
3.1 基本概念
进程控制的主要功能是对系统中的所有实施有效的管理,它具有创建新进程、撤销已有进程、实现进程状态转换等功能
3.2 进程控制相关的原语
用原语实现进程的控制:原语采用“关中断指令”和“开中断指令”来实现一气呵成的特点。
过程:
-
更新PCB中的信息(如修改进程状态标志)
- a. 所有的进程控制原语一定都会修改进程状态标志
- b. 剥夺当前运行进程的CPU使用权必然需要保存其运行环境
- c. 某进程开始运行前必须要恢其运行环境
-
将PCB插入合适的队列
-
分配/回收资源
进程的创建
1. 创建原语
-
a. 申请空白PCB
-
b. 为新进程分配所需资源
-
c. 初始化PCB
-
d. 将PCB插入就绪队列
- 引起进程创建的事件
-
用户登录
-
作业调度
-
提供服务
-
应用请求
进程的终止
1. 撤销原语
-
从PCB集合中找到终止进程的PCB
-
若进程正在运行,立即剥夺CPU,将CPU分配给其他进程
-
终止其所有子进程
-
将进程拥有的所有资源归还给父进程或操作系统
- 引起进程终止的事件
- 正常结束
- 异常结束
- 外界干预
进程的阻塞和唤醒
1. 进程的阻塞
- 阻塞原语
- a.找到要阻塞的进程对应的PCB
- b.保护进程运行现场,将PCB状态信息设置为“阻塞态”,暂时停止进程运行
- c.将PCB插入相应事件的等待队列
- 引起进程阻塞的事件
- 需要等待系统分配某中资源
- 需要等待相互合作的其他进程完成工作
4. 进程通信
4.1 共享存储
两个进程对共享空间的访问必须是互斥的
- 基于数据结构的共享:比如共享空间里只能放一个长度为10的数组,特点:速度慢、限制多(低级通信方式)
- 基于存储区的共享:在内存中画出一块共享存存储区,数据的形式、存放位置都由进程控制,而不是操作系统,特点:速度更快(高级通信方式)
4.2 消息传递
以格式化的消息为单位,通过“发送消息/接收消息”完成。一条消息包括消息头和消息体两部分
- 直接通信方式
- 间接通信方式
4.3 管道通信
- 采用半双工通信
- 各进程互斥地访问管道
- 当管道写满时,写进程的write()系统调用被阻塞,等待读进程将数据取走。当读进程全部取完数据时,读进程的read()系统调用被阻塞
- 如果没写满,就不允许读。如果没读空,就不允许写
- 数据一旦读出,则该数据就被抛弃,意味着,读进程最多只能有一个
5. 线程概念、多线程模型
5.1 概念
线程: 是一个基本的CPU执行单元,也是程序执行流的最小单位
引入线程后,进程只作为除CPU之外的系统资源的分配单元(如打印机都是分配给进程的)
5.2 优点
- 资源分配、调度
- 并发性
- 系统开销
5.3 属性
- 线程是处理机调度的单位
- 多CPU计算机中,各个线程可占用不同的CPU
- 多个线程都有一个线程ID、线程控制块(TCB)
- 线程也有就绪、阻塞、运行三种基本状态
- 线程几乎不拥有系统资源
- 同一进程的不同线程间共享进程的资源
- 由于共享内存地址,同一进程中的线程间通信甚至无需系统干预
- 同一进程中的线程切换,不会引起进程切换
- 不同进程中的线程切换,会引起进程切换
- 切换同进程内的线程,系统开销很小
5.4 实现方式
- 用户级线程
- 由应用程序通过线程库实现。所有的线程管理工作都由应用程序负责(包括线程切换)。
- 切换线程可以在用户态下即可完成,无需操作系统干预
- 在用户看来,是有多个线程。但是操作系统内核看来,并意识不到线程的存在。(用户级线程对用户不透明,对操作系统透明)
- 内核级线程
重点: 操作系统只”看得见“内核级线程,因此只有内核级线程才是处理机分配的单位
5.5 多线程模型
- 多对一模型:多个用户级线程映射到一个内核级线程。每个用户进程对应一个内核级线程
- 一对一模型:一个用户级线程映射到一个内核级线程。每个用户进程有与用户及线程同数量的内核级线程
- 多对多模型:n用户级线程映射到m个内核级线程(n>=m)。每个用户进程对应m个内核级线程