目录
1.1_1 操作系统的概念、功能和目标
1.1_2 操作系统的特征
1.1_3 操作系统的发展和分类
1.1_4 操作系统的运行机制与体系结构
1.1_5 中断和异常
1.1_6 系统调用
2.1_1 .进程的定义、组成、组织方式、特征
2.1_2 进程的状态与转换
2.1_3 进程控制
2.1_4 进程通信
2.1_5 线程概念和多线程模型
2.2_1 处理机调度概念、层次
2.2_2 进程调度的时机、切换与过程、调度方式
2.2_3 调度算法的评价指标(算法基础重点)
2.2_4 FCFS、SJF、HRRN调度算法
2.2_5
2.3_1
2.3_2
2.3_3
2.3_4
2.3_5
2.3_6
2.3_7
2.3_8
2.3_9
2.3_10
2.3_11
2.4_1
2.4_2
2.4_3
2.4_4
3.1_1
3.1_2
3.1_3
3.1_4
3.1_5
3.1_6
3.1_7
3.1_8
3.1_9
3.1_10
3.1_11
3.1_8
3.1_9
3.1_10
3.1_11
3.2_1
3.2_2
3.2_3
3.2_4
4.1_1
4.1_2
4.1_3
4.1_4
4.1_5
4.1_6
4.1_7
4.1_8
4.1_9
4.1_10
4.1_11
4.1_8
4.1_9
5.1_1
5.1_2
5.1_3
5.1_4
5.1_5
5.1_6
5.1_7
5.1_8
1.1_1 操作系统的概念概念、功能和目标
- 大家都熟悉的操作系统:Windows、Linux、macOS、Android、ios
知识总览:
- 概念:
*负责管理协调硬件、软件等计算机资源的工作
*为上层用户、应用程序提供简单易用的服务
*是一种系统软件 - 功能和目标
*资源的管理者 :安全、高效。
方面:处理机管理,存储器管理,文件管理,设备管理
*向用户提供服务:方便使用。
方面:
**命令接口:
联机命令接口:用户说一句,系统做一句
脱机命令接口:用户说一堆,系统做一堆
**程序接口:由一组系统调用组成(用户通过程序间接使用(程序接口=系统调用))
**GUI用户图形界面。
*对硬件机器的扩展:扩展能力–扩充机器
图解:
操作系统(OS)是计算机系统中最基本的系统软件。
1.1_2 操作系统的特征
返回目录
知识总览:
- 并发:指两个或多个事件在同一时间间隔内发生。这些事件宏观上是同时发生的,但微观上是交替发生的。
操作系统的并发性指计算机系统中同时存在着多个运行中着的程序
操作系统和并发程序是共同诞生的 - 共享:
*互斥共享:一个时间段只允许一个进程访问该资源。
*同时共享:允许一个时间段内由多个进程“同时”对他们进行访问。(同时是宏观上的,微观上是交替地对该资源进行访问的)
其中并发和共享为两个最基本的特征,二者互为存在条件
==共享性:==指系统中的资源可供内存中多个并发执行的进程共同使用 - 虚拟:
*空分复用技术:多个运行程序的内存总和远大于内存的实际内存(虚拟存储器技术)
*时分复用技术:多个程序在同一时间间隔内同时运行在同一个CPU中(虚拟处理机)
第三章重点讲 - 异步:在多道程序环境下,允许多个程序并发执行,但由于资源有限,进程的执行不是一贯到底的,而是走走停停,以不可预知的速度向前推进。
只有系统拥有并发性,才有可能导致异步性
1.1_3 操作系统的发展和分类
返回目录
知识预览:
- 手工操作阶段
*缺:人机速度矛盾 - 批处理阶段
*单道批处理系统(世界上第一个操作系统)
**优点:缓解人机速度矛盾
**缺点:资源利用率依然很低
*多道批处理系统(操作系统开始出现(多道程序设计为标志))
**优点:多道程序并发执行,资源利用率高
**缺点:不提供人机交互能力 - 分时操作系统
**优点:提供人机交互能力
**缺点:不能优先处理紧急任务 - 实时操作系统
*硬实时:必须在绝对严格的规定时间内完成处理
*软实时:能接受偶尔违反时间规定
**优点:能优先处理紧急任务 - 网络操作系统
- 分布式操作系统
- 个人计算机操作系统
1.1_4 操作系统的运行机制与体系结构
返回目录
知识预览:
- 运行机制:
- 两种指令
∘ \circ ∘ 特权指令指令
* 不允许用户程序直接使用
∘ \circ ∘ 非特权指令 - 两种处理器状态
∘ \circ ∘ 核心态(管态)
* 该状态下CPU可以执行一切指令
* 状态可由数字标志
∘ \circ ∘ 用户态(目态)
* 此时CPU只能执行非特权指令 - 两种程序
∘ \circ ∘ 内核程序
* 操作系统的内核程序是系统的管理者,既可以执行特权指令,也可以执行非特权指令,运行在核心态。
∘ \circ ∘ 应用程序
* 为了保证系统能安全运行,普通应用程序只能执行非特权指令,运行在用户态
- 两种指令
- 操作系统内核:
- 时钟管理
∘ \circ ∘ 实现计时功能 - 中断处理
∘ \circ ∘ 负责实现中断机制 - 原语
∘ \circ ∘ 是一种特殊的程序
∘ \circ ∘ 处于操作系统最底层,是最接近硬件的部分
∘ \circ ∘这种程序的运行具有原子性—其运行只能一气呵成,不可中断
∘ \circ ∘运行时间短、调用频繁 - 对系统资源进行管理的功能:
∘ \circ ∘ 进程管理
∘ \circ ∘ 存储器管理
∘ \circ ∘ 设备管理
- 时钟管理
- 操作系统的体系结构:
- 大内核
∘ \circ ∘ 将操作系统的主要功能模块都作为系统内核,运行在核心态
∘ \circ ∘ 优点在于性能高
∘ \circ ∘ 缺点在于内核代码庞大、结构混乱、难以维护 - 微内核
∘ \circ ∘ 只把基本的功能保留在内核
∘ \circ ∘ 优点在于内核功能少、结构清晰、方便维护
∘ \circ ∘ 缺点在于需要频繁在核心态和用户态之间切换、性能低
- 大内核
1.1_5 中断和异常
返回目录
知识预览:
- 中断机制的诞生
∘ \circ ∘ 本质:发生中断就意味着需要操作系统介入,开展管理工作。
∘ \circ ∘ CPU收到计时部发出的中断信号,切换为核心态对中断进行处理。
∘ \circ ∘ 为了实现多道程序并发执行而引入的一种技术 - 中断的概念和作用
∘ \circ ∘ 中断可以使CPU从用户态切换为核心态,使操作系统获得计算机的控制权。 有了中断,才能实现多道程序并发执行。
∘ \circ ∘ “用户态”–>“核心态” 是通过中断实现的。并且中断是唯一的途径
∘ \circ ∘ “核心态”–>“用户态” 的切换是通过执行一个特权指令,将程序状态字(PSW)的标志位设置为“用户态” - 中断的分类
∘ \circ ∘ 内中断(也称异常、陷入、例外)
*自愿中断:是通过指令中断
*强迫中断:硬件故障或软件中断
信号来源于CPU的内部,与当前执行的指令有关
补充:内中断的另一种分类方式:
** 陷阱、陷入(trap)
** 故障(fault)
** 终止(abort)
∘ \circ ∘ 外中断
*外设请求
*人工干预
信号来源于CPU的外部,与当前执行的指令无关 - 外中断的处理过程
∘ \circ ∘ 每条指令执行结束后CPU会检查是否有外部中断信号
∘ \circ ∘ 若有,则需要保护被中断进程的CPU环境
∘ \circ ∘ 根据中断信号类型转入相应的中断处理程序
∘ \circ ∘ 恢复原进程的CPU环境并退出中断,返回原进程继续往下执行
个人理解:内中断就是为了并发执行,或者遇到指令错误而停止执行等。外中断就相当于我们关闭应用程序等操作
1.1_6 系统调用
返回目录
知识总览:
- 什么是系统调用,有何作用?
∘ \circ ∘ 操作系统提供给应用程序使用的接口
∘ \circ ∘ 应用程序通过系统调用来请求获得操作系统的服务
∘ \circ ∘ 系统调用会使==处理器(CPU)==从用户态进入核心态
∘ \circ ∘ 分类- 设备管理
- 文件管理
- 进程管理
- 进程通信
- 内存管理
凡是与资源有关的操作、会直接影响到其他进程的操作、一定需要操作系统的介入,即需要通过系统调用来实现
- 系统调用和库函数的区别
∘ \circ ∘ 系统调用是操作系统向上层提供是接口
∘ \circ ∘ 用的库函数是对系统调用的进一步封装
∘ \circ ∘ 当今编写的应用程序大多是通过高级语言提供的库函数间接的进行系统调用 - 系统调用背后的过程
∘ \circ ∘ 传递系统调用参数
∘ \circ ∘ 执行陷入指令
∘ \circ ∘ 执行系统调用相应服务程序
∘ \circ ∘ 返回用户程序
系统调用发生在用户态,对系统调用的处理发生在核心态,执行陷入指令会产生内中断,使处理器从用户态进入核心态
2.1_1 进程的定义、组成、组织方式、特征
返回目录
知识总览
- 定义:在计算机发展史上,“进程”是为了解决什么问题而被引入的?
- 程序:就是一个指令序列
- 早期的计算机(只支持单道程序)
- 程序段、数据段、PCB三部分组成进程实体
- PCB是进程存在的唯一标志
- 进程是程序的一次执行过程
- 进程强调其动态性
- 进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位
- 进程实体是静态的,进程则是动态的
- 组成:这些进程由哪些部分组成?
- PCB(进程的管理者,OS所需的数据都在PCB中)
∘ \circ ∘ 进程描述信息
∘ \circ ∘ 进程控制和管理信息
∘ \circ ∘ 资源分配清单
∘ \circ ∘ 处理机相关信息 - 程序段
- 数据段
- PCB(进程的管理者,OS所需的数据都在PCB中)
- 组织方式:系统中各个进程之间是如何被组织起来的?
- 链接方式
∘ \circ ∘ 按照进程状态将PCB分为多个队列
∘ \circ ∘ 操作系统持有指向各个队列的指针 - 索引方式
∘ \circ ∘ 根据进程状态不同,建立几张索引表
∘ \circ ∘ 操作系统有指向各个索引表的指针
- 链接方式
- 特征:相比于程序,进程有哪些特征?
∘ \circ ∘ 动态性:进程是程序的一次执行过程,是动态的产生、变化和消亡的(进程最基本的特征)
∘ \circ ∘ 并发性:内存中有多个进程实体,各进程可并发执行
∘ \circ ∘ 独立性:进程是能够独立运行、独立获得资源、独立接受调度(线程为出现前)的基本单位
∘ \circ ∘ 异步性:各进程按各自独立的、不可预知的速度向前推进,操作系统要提供“进程同步机制”来解决异步问题
∘ \circ ∘ 结构性:每个进程都会配置一个PCB。结构上看,进程是由程序段、数据段、PCB组成。
PCB
进程的管理者,OS所需的数据都在PCB中
- 进程描述信息
- 进程标识符PID(唯一的、不重复的)
- 用户标识符UID
- 进程控制和管理信息
- 进程当状态
- 进程优先级
- 资源分配清单
- 程序段指针
- 数据段指针
- 键盘
- 鼠标
- 处理机相关信息:各种寄存器值(可以知道程序执行到哪一句了)
图解:
2.1_2 进程的状态与转换
返回目录
知识总览:
- 状态:
∘ \circ ∘ 运行状态(Running):占有CPU,并在CPU上运行(单核只有一个进程处于运行态)
∘ \circ ∘ 就绪状态(Ready):已经具备运行条件,但由于没有空闲CPU,而暂时不能运行(万事俱备只欠CPU)
∘ \circ ∘ 阻塞状态(Waitting/Blocked又称:等待态):因等待某一事件而暂时不能运行(无资源无CPU状态)
上面为最基本的三种状态
∘ \circ ∘ 创建状态:进程正在被创建,操作系统为进程分配资源,初始化PCB
∘ \circ ∘ 终止状态:进程正在从系统中撤销,操作系统会收回进程所拥有的资源、撤销PCB - 进程状态间的转换:
∘ \circ ∘ 就绪态–>运行态
∘ \circ ∘ 运行态–>就绪态
∘ \circ ∘ 运行态–>阻塞态
∘ \circ ∘ 阻塞态–>就绪态
2.1_3 进程控制
返回目录
知识总览:
- 基本概念
- 什么是进程控制
∘ \circ ∘ 之前提供的进程组织问题
∘ \circ ∘ 指针队列
∘ \circ ∘ 索引表
- 什么是进程控制
- 如何实现进程控制---------用“原语”实现
∘ \circ ∘ 关中断、开中断
∘ \circ ∘ 之前介绍过 - 进程控制相关的原语
- 进程的创建(创建原语)
∘ \circ ∘ 申请空白PCB
∘ \circ ∘ 为新进程分配所需的资源
∘ \circ ∘ 初始化PCB
∘ \circ ∘ 将PCB插入就绪队列 - 进程的终止(撤销原语)
∘ \circ ∘ 从PCB集合中找到终止进程的PCB
∘ \circ ∘ 若进程正在运行,立即剥夺CPU,将CPU分配给其他进程
∘ \circ ∘ 终止其所有子进程
∘ \circ ∘ 将该进程所拥有的所有资源归还给父进程或操作系统
∘ \circ ∘ 删除PCB - 进程的阻塞(阻塞原语)
∘ \circ ∘ 将PCB插入相应事件的等待队列 - 进程的唤醒(唤醒原语)
∘ \circ ∘ 将PCB插入相应事件的就绪队列
阻塞和切换要成对出现 - 进程的切换 (切换原语)
- 进程的创建(创建原语)
2.1_4 进程通信
返回目录
为什么要进行进程通信
因为存在限制访问问题(保证安全)
图解:
知识总览:
-
共享存储
- 基于数据结构的共享(低级通信方式)
- 基于存储区的共享(高级通信方式)
-
消息传递(以格式化消息为单位,以发送/接受消息两个原语进行数据交换)
- 直接通信方式:消息直接挂到接收进程消息缓冲队列上
- 间接通信方式:消息要先发送到中间实体(信箱)中。因此也称“信箱通信方式”。Eg:计网中的电子邮件系统
-
管道通信
∘ \circ ∘ 管道只能采用双半工通信,某一时间段内只能实现单向的传输。如果要实现双向同时通信,则需要设置两个管道
∘ \circ ∘ 各进程要互斥的访问管道
∘ \circ ∘ 数据以字符流的形式写入管道,当管道写满时,写进程的write()系统调用将被阻塞,等待读进程将数据取走。当读进程将数据全部取走后,管道变空,此时读进程的read()系统调用将被阻塞
∘ \circ ∘ 如果没写满,就不允许读。如果没读空,就不允许写。
∘ \circ ∘ 数据一旦被读出,就从管道中被抛弃,这就意味着读进程最多只能有一个,否则可能会有读错数据的情况。
重点:
写满不能再写;读空不能再读
没写满,不能读;没读空,不能写
2.1_5 线程概念和多线程模型
返回目录
知识总览:
- 什么是线程,为什么要引入线程?
∘ \circ ∘ 还没引入线程之前,系统中各个程序只能串行执行
∘ \circ ∘ 进程是程序的一次执行。但这些功能显然不可能是由一个程序顺序处理就能实现的。
∘ \circ ∘ 有的“进程”需要做很多事,而传统的进程只能串行地执行一系列程序。为此,引入了“线程”,来增加并发度。 - 引入线程后,有什么变化?
∘ \circ ∘ 引入线程后,线程成为程序执行流的最小单位(可以把线程理解为轻量级的进程)
∘ \circ ∘ 引入线程之后,不仅是进程之间可以并发,进程内的各线程之间也可以并发,从而进一步提升了系统的并发度,并减小系统开销
∘ \circ ∘ 引入线程后,进程只作为除CPU之外的系统资源的分配单位
∘ \circ ∘ 线程成为调度的基本单位 - 线程有哪些重要的属性
∘ \circ ∘ 线程是处理机调度的单位
∘ \circ ∘ 多个CPU计算机中,各个线程可占用不同的CPU
∘ \circ ∘ 每个线程都有一个线程ID、线程控制块(TCP)
∘ \circ ∘ 线程几乎不拥有系统资源
∘ \circ ∘ 同一进程的不同线程共享进程的资源
∘ \circ ∘ 线程通信无需系统干预
略 - 线程的实现方式
- 用户级线程(从用户视角看的线程)
- 内核级线程(核心态)
- 多线程模型
- 多对一模型
∘ \circ ∘ 优点:进程管理开销小,效率高
∘ \circ ∘ 缺点:并发度低(一个线程阻塞会导致整个线程阻塞) - 一对一模型
∘ \circ ∘ 优点:各个线程可分配到多核处理机并行执行,并发度高
∘ \circ ∘ 缺点:进程管理开销大 - 多对多模型
∘ \circ ∘ 集二者之所长
- 多对一模型
2.2_1 处理机调度概念、层次
返回目录
知识总览:
- 基本概念
∘ \circ ∘ 调度就是为了安照==某种规定(算法)来决定处理任务(进程)==的顺序(生活中的排队,VIP插队的例子) - 三个层次
- 高级调度(作业调度)
外存–>内存(面向作业)发生频率低 - 中级调度(内存调度)
外存–>内存(面向进程)发生频率中 - 低级调度(进程调度)
内存–>CPU,发生频率高
- 高级调度(作业调度)
- 三层调度的联系、对比
- 补充知识
- 进程的“挂起态”
∘ \circ ∘ 暂时调到外存等待的进程状态为挂起状态(挂起态,suspend)
∘ \circ ∘ 挂起态又可以进一步细分为就绪挂起、阻塞挂起两种状态
∘ \circ ∘ 目的:为减轻系统负载,提高资源利用率,暂时不执行的进程会被调到外存从而变为“挂起态” - 七状态模型
∘ \circ ∘ 之前我们看了五进程模型,下图展示七进程模型
注意:“挂起”和“阻塞”的区别,两种状态都是暂时不能获得CPU的服务,但挂起态是将进程映像调到外存去了,而阻塞态下进程映像还在内存中。
- 进程的“挂起态”
2.2_2 进程调度的时机、切换与过程、调度方式
返回目录
知识总览:
- 时机
- 什么时候需要进程调度?
- 主动放弃
∘ \circ ∘ 进程正常终止
∘ \circ ∘ 运行过程中发生异常而终止
∘ \circ ∘ 主动阻塞(如 等待IO) - 被动放弃
∘ \circ ∘ 分给进程的时间片用完
∘ \circ ∘ 有更紧急的事情需要处理(如 IO中断)
∘ \circ ∘ 有更高优先级的进程进入就绪队列
- 主动放弃
- 什么时候不能进行进程的调度?
∘ \circ ∘ 在处理中断的过程中
∘ \circ ∘ 进程在操作系统内核程序临界区中
∘ \circ ∘ 原子操作过程中(原语)
- 什么时候需要进程调度?
- 切换与过程
- “狭义的调度”与“切换”的区别
∘ \circ ∘ 狭义的进程调度指的是从就绪队列中选中一个要运行的进程。(这个进程可以是刚刚被暂停执行的进程,也可能是另一个进程,后一种情况需要进程切换)
∘ \circ ∘ 进程切换是指一个进程让出处理机,由另一个进程占用处理机的过程 - 进程切换的过程需要做什么?
- 切换过程
∘ \circ ∘ 对原来运行进程各种数据的保存
∘ \circ ∘ 对新进程各种数据的恢复
∘ \circ ∘ 重要结论:进程调度、切换是有代价的、并不是调度越频繁、并发度就越高
- 切换过程
- “狭义的调度”与“切换”的区别
- 方式
- 非剥夺调度方式(非抢占式):只能由当前运行的进程主动放弃CPU
- 剥夺调度方式(抢占式):可由操作系统剥夺当前进程的CPU使用权
2.2_3 调度算法的评价指标
返回目录
知识总览:
-
CPU利用率(也有题目会让我们计算某设备的利用率)
-
系统吞吐量
-
周转时间
作业完成时间-作业提交时间(作业到达时间)(从提交到完成的这段时间) -
平均周转时间
-
带权周转时间
-
平均带权周转时间
-
等待时间
∘ \circ ∘ 进程/作业 等待被服务的时间之和
∘ \circ ∘ 平均等待时间即各个 进程/作业 等待时间的平均值 -
响应时间:从用户提交请求到首次产生响应所用的时间