概述
概念、功能
- 操作系统是系统资源的管理者
- 处理机管理CPU
- 存储器管理
- 文件管理
- 设备管理
- 向上层提供方便易用的服务
- GUI
- 用户接口
- 命令接口
- 联机命令接口(交互式命令接口)
- 脱机命令接口(批处理命令接口)
- 程序接口 (可以在程序中进行系统调用来使用程序接口)
- 命令接口
- 是最基本的系统软件(是最接近硬件的一层软件)
纯硬件 ==> 操作系统 ==> 应用程序(软件) ==> 用户
特征
并发
系统中同时存在着多个运行着的程序
宏观上同时发生,微观上交替发生
并发一般都会有并行的特点,如I/O处理与CPU处理
并行
同一时刻同时发生
单核CPU程序只能并发执行
多核CPU程序可以并行发生
共享
系统中的资源可供内存中多个并发执行的进程同时使用
-
互斥共享方式
-
同时共享方式
宏观上同时,微观上交替对资源进行访问,即分时共享
有的宏观上同时微观上也同时
并发与共享互为同时存在条件
虚拟
把一个物理上的实体变为若干个逻辑上的对应物
- 空分复用技术(虚拟存储器)
- 时分复用技术(虚拟处理器)
没有并发就谈不上虚拟
异步
系统资源有限,进程的执行不是一贯到底的, 而是走走停停即阻塞,这就是进程的异步性
只有存在并发性,才会存在异步性
操作系统发展
- 手工操作阶段
- 批处理阶段
- 单道批处理系统
- 多道批处理系统
中断、并发
- 分时操作系统
时间片 人机交互
- 实时操作系统
紧急任务
- 硬实时系统
- 软实时系统
- 网络操作系统
- 分布式操作系统
分布性和并行性
- 个人计算机操作系统
程序运行
- 应用程序 - 非特权指令
- 内核程序 - 特权指令
CPU 中有一个寄存器叫程序状态字寄存器(PSW),其中有个二进制位,1表示“内核态”,0表示“用户态”
- 内核态(管态)
- 运行的是内核程序,此时可以执行特权指令
- 用户态(目态)
- 运行的是应用程序,此时只能执行非特权指令
中断
中断是让操作系统夺回CPU使用权的唯一途径
没有中断,何来并发
-
内中断(异常)
来自CPU内部,与当前指令有关
陷入指令/trap指令/访管指令(与系统调用有关)
-
外中断
- 时钟部件的中断信号
- I/O中断
-
中断向量表
不同的中断信号,需要用不同的中断处理程序来处理
系统调用
应用程序可以通过系统调用来请求获得操作系统内核的服务
广义指令指的是执行系统调用指令,处在内核态
系统中的各种共享资源都由操作系统内核统一掌管,因此凡是与共享资源有关的操作(如存储分配、I/O操作、文件管理等),都必须通过系统调用的方式向操作系统内核提出服务请求,由操作系统内核代为完成。这样可以保证系统的稳定性和安全性,防止用户进行非法操作。
体系结构
-
大内核
高性能
-
微内核
内核功能少,结构清晰
进程管理
- 程序:是静态的,就是个存放在磁盘里的可执行文件,就是一系列的指令集合
- 进程:是动态的,是程序的一个执行过程
概念
进程的组成
-
进程管理块PCB
PCB是进程存在的唯一标志,当进程被创建时,操作系统为其创建PCB,当进程结束时,会回收其PCB。
操作系统对进程进行管理工作所需的信息都存在PCB中
- 进程描述信息,区分各个进程
进程ID:PID
进程所属用户ID:UID
- 实现操作系统对资源的管理
- 正在使用哪些内存区域
- 正在使用哪些I/O设备
- …
- 实现操作系统对进程的控制与管理
- CPU、磁盘使用情况统计
- 进程当前状态
- 处理机相关信息,实现进程切换
- PSW、PC等各种寄存器的值
- 进程描述信息,区分各个进程
- 程序段、数据段
PCB是给操作系统用的,程序段、数据段是给进程自己用的
进程是动态的,进程实体是静态的
进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位
进程的特征
- 动态性:最基本特征
- 并发性
- 独立性:独立获得资源、独立接受调度的基本单位
- 异步性
- 结构性:PCB
额外的-封闭性:一个进程一旦开始执行,其执行结果与外界因素无关,即是否共享变量
状态与转换、组织
- 创建态:
分配资源、初始化PCB
- 就绪态
- 运行态
- 阻塞态
- 终止态
进程控制
实现进程状态转换
通过原语来实现,因为原语的执行是一气呵成的,具有’'原子性",否则会造成操作系统中某些关键数据结构信息不统一。
可以通过开中断与关中断这两个特权指令来实现原子性
创建原语
系统用于创建进程
- 申请空白PCB
- 为新进程分配所需资源
- 初始化PCB
- 将PCB插入就绪队列,从创建态变为就绪态
撤消原语
- 找到终止进程的PCB
- 若在运行,剥夺CPU
- 终止所有子进程
- 归还资源给父进程或CPU
- 删除PCB
阻塞原语与唤醒原语
必须成对使用
- 找到PCB
保护进程运行现场
,停止进程运行- 将PCB插入相应事件的等待队列
唤醒原语与其相反
切换原语
运行前需要把程序放入内存,CPU从内存中取出指令执行
- 将运行环境信息存入PCB(一些必要的寄存器信息)
- 将PCB移入相应队列
- 选择另一个进程执行并更新其PCB
- 根据PCB恢复进程所需的运行环境
无论哪个进程控制原语,要做的无非三类事情:
更新PCB中的信息
a. 所有的进程控制原语一定都会修改进程状态标志
b. 剥夺当前运行进程的CPU使用权必然需要保存其运行环境
c. 某进程开始运行前必然要恢复期运行环境
将PCB插入合适的队列
分配/回收资源
进程通信
进程通信就是指进程之间的信息交换。进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立。为了保证安全,一个进程不能直接访问另一个进程的地址空间。
- 共享存储
- 基于数据结构的共享:低级通信方式
- 基于存储区的共享:高级通信方式
两个进程对共享资源的访问必须是互斥的(互斥访问通过操作系统提供的工具实现)
-
管道通信:在内存中开辟一个大小固定的缓冲区(共享空间的优化)
- 半双工通信,只能实现单向通信
- 互斥进行
-
消息传递
计算机网络
- 直接通信方式
- 间接通信方式
线程
线程理解为“轻量级进程”。**线程是一个基本的CPU执行单元,也是程序执行流的最小单位。**引入线程之后,不仅是进程之间可以并发,进程内的各线程之间也可以并发,从而进一步提升了系统的并发度。
影响
- 引入线程后,进程只作为除CPU之外的系统资源的分配单元(如打印机、内存地址空间等都是分配给进程的)。线程则作为处理机的分配单元。
- 引入线程后并发带来的开销减小
- 提高并发度
属性
- 每个线程有线程控制块TCB、线程ID
- 线程也有三种基本状态
- 线程几乎不拥有系统资源
- 每个线程拥有一个栈和一个程序计数器。栈和程序计数器用来保存线程的执行历史和线程的执行状态,是线程私有的资源
- 同一进程的不同线程共享进程的资源
- 同一进程的不同线程切换时不需要切换进程环境,开销小
实现方式
- 用户级线程
- 用户级线程由应用程序通过线程库实现,所有的线程管理工作都由应用程序负责(包括线程切换)
- 用户级线程中,线程切换可以在用户态下即可完成,无需操作系统干预。
- 在用户看来,是有多个线程。但是在操作系统内核看来,并意识不到线程的存在。“用户级线程”就是“从用户视角看能看到的线程”
优点:用户级线程的切换在用户空间即可完成,不需要切换到核心态,线程管理的系统开销小,效率高
缺点:当一个用户级线程被阻塞后,整个进程都会被阻塞,并发度不高。多个线程不可在多核处理机上并行运行。
- 内核级线程
- 内核级线程的管理工作由操作系统内核完成。
- 线程调度、切换等工作都由内核负责,因此内核级线程的切换必然需要在核心态下才能完成。
- 操作系统会为每个内核级线程建立相应的TCB(Thread Control Block,线程控制块),通过TCB对线程进行管理。“内核级线程”就是“从操作系统内核视角看能看到的线程”
优点:当一个线程被阻塞后,别的线程还可以继续执行,并发能力强。多线程可在多核处理机上并行执行。
缺点:一个用户进程会占用多个内核级线程,线程切换由操作系统内核完成,需要切换到核心态,因此线程管理的成本高,开销大。
多线程模型
- 多对一模型
多个用户级线程映射到一个内核级线程。且一个进程只被分配一个内核级
线程。操作系统只“看得见”内核级线程,因此只有内核级线程才是处理机分配的单位。
优点与缺点与用户级线程一样
- 多对多模型
n 用户级线程映射到m 个内核级线程(n >= m)。每个用户进程对应m 个内核级线程。克服了多对一模型并发度不高的缺点(一个阻塞全体阻塞),又克服了一对一模型中一个用户线程库进程占用太多内核级线程,开销太大的缺点。
用户级线程是“代码逻辑”的载体
内核级线程是