print("每天进步一点点")
王道-操作系统
- 1.1操作系统的概念
- 1.2操作系统的基本特征
- 1.3操作系统的发展和分类
- 1.4 操作系统的运行机制(⭐⭐⭐ 补充)
- 1.5 中断和异常(⭐⭐⭐ 补充)
- 1.6系统调用(🍎🍎🍎)
- 1.7操作系统的体系结构
- 第一章总结
- 第二章
- 2.1.1 进程的概念、组成、特征
- 2.1.2 进程状态与转化、进程组织
- 2.1.3进程控制
- 2.1.4 进程通信
- 2.1.5 线程的概念
- 2.1.6 线程的实现方式和多线程模型
- 2.2.1 调度的概念和层次(七层模型⭐⭐⭐)
- 2.2.2 进程调度的时机、切换与过程
- 2.2.3 调度算法的评价指标
- 2.2.4 调度算法:FCFS、SJF、HRRN
- 2.2.5 调度算法:时间片轮转,优先级,多级反馈队列
- 2.3.1 进程同步、进程互斥
1.1操作系统的概念
书上的作用:
1.作为计算机系统资源的管理者
2.作为用户和计算机硬件系统之间的接口
3.实现对计算机资源的抽象。
1.2操作系统的基本特征
1.3操作系统的发展和分类
各种类型操作系统想解决的问题及解决方式。
1.4 操作系统的运行机制(⭐⭐⭐ 补充)
概念:
①程序的运行:cpu执行一条一条的机器指令的过程。
②内核程序:由许多的内核程序组成"操作系统的内核"Kernel,实现操作系统内核功能。是操作系统最重要、最核心的部分,也是最接近硬件的部分。
操作系统作为计算机资源的管理者是在内核实现的。
③应用程序:运行在操作系统之上的,如程序员编写的程序。
④特权指令:操作系统的内核作为"管理者"会让cpu执行某些特权指令。只存在内核程序中。
⑤非特权指令:应用程序只能运行"非特权指令"。
cpu在设计时就划分了特权指令和非特权指令。
⑥cpu区分应用程序和内核程序:
通过PSW程序状态寄存器中的一个二进制位标记cpu处于何种状态,以此来区分应用程序或内核程序。
⑦cpu实现状态的切换:
”“”“”“”“”“巴拉巴拉啊啊啦啦啦啦啦
详细的操作系统启动过程
”“”“”“”“”“”
1.5 中断和异常(⭐⭐⭐ 补充)
Ⅰ。中断的作用
- 一个应用程序一旦上cpu运行,就会一直运行下去,除非发生中断,一旦发生中断,cpu就会立即停止当前的应用程序,转而执行相应的内核程序进行中断信号处理。
- 中断会使cpu由用户态转为内核态,是让操作系统内核夺回cpu使用权的唯一方式。****
- 如果没有中断机制就无法实现多道程序并发
Ⅱ.中断的类型:
内中断:
例子1:试图在应用程序中执行特权指令。
例子2:执行除法指令发现除0
例子3:应用程序请求操作系统的内核服务,此时会执行一条特殊指令(注意不是特权)—陷入指令,以此来引发内部终端信号。
执行 "陷入指令"意味着应用程序主动将cpu的控制权交给操作系统内核。系统调用即是通过"陷入指令"完成的。
外部中断:
- 两个应用程序是如何在中断机制的作用下实现并发运行的?
通过时钟中断实现多道并发。
- 1.初始时处于用户态的cpu执行应用程序1,当执行了两条指令后,时间已经过了50ms,此时时钟部件给cpu发送中断信号。
此时的中断信号与当前的执行指令是无关的,源于cpu外部)
2.cpu检测到中断信号时,停止当前程序,转而运行一个内核程序来处理这个中断信号。
3.操作系统内核决定着另一个应用程序上cpu运行,所以当该内核程序结束后,会让程序2同样运行50ms。
之后以此往复
例子2:I/O中断 —由输入输出设备发来的中断信号。
如当打印机完成打印工作,向cpu发送一个中断信号。
Ⅲ 中断机制原理:
1.6系统调用(🍎🍎🍎)
Ⅰ.系统调用是操作系统提供给应用程使用的接口,可理解为一终可供应用程序调用的特殊函数,应用程序可以通过系统调用来请求获得操作系统内核的服务。
- 应用程序通过系统调用实现对共享资源的互斥共享:
Ⅱ.系统调用的过程(⭐⭐⭐)
注意:陷入指令=trap指令=访管指令
过程:
- 应用程序在请求操作系统内核服务之前,首先要给cpu传递传参指令,给cpu的相应寄存器传递参数。
- 之后执行陷入指令(trape)引发内中断,cpu转而执行相应的中断处理程序–系统调用的入口程序。根据寄存器中的参数决定用户需要那种类型的系统调用。
- 然后让该类型的系统调用的处理程序上cpu运行。内核服务结束后cpu转回用户态继续执行应用程序。
”“”“”“”“”“本节最后”“”“补充 linux系统向上提供了哪些系统调用”“”“”“”“”“”
1.7操作系统的体系结构
两种内核的优缺点:
微内核在非内核和内核态之间频繁变态…
- 典型的大内核:Linux、UNIX
- 典型的微内核:Windows NT
-
操作系统又分为非内核态、内核态。
-
内核态又根据是否只保留与硬件直接相关的模块 引出两种结构不同的内核类型。
第一章总结
第二章
2.1.1 进程的概念、组成、特征
1.程序和进程的区别:
-
程序:是静态的。放在磁盘里的可执行文件,是一系列指令的集合。
-
进程:是动态的,是程序的一次执行过程。
是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。 -
进程实体(进程映像): 是静态的。反应进程某一时刻的状态,由 PCB、程序段、数据段 构成。
(同一程序多次执行,会对应多个进程。)
2.进程的组成:
另外:
作业调度:让外存的程序调入内存的过程。
进程调度:让内存中的进程上CPU运行。
3.PCB的组成:
操作系统对进程进行管理所需要的信息都存在PCB中。
2.1.2 进程状态与转化、进程组织
- 进程PCB中会有一个变量 stats来表示进程当前的状态。
1.进程状态转化:
另外:
阻塞态 又称 等待态
创建态 ~ 新建态
终止态 ~ 结束态
2.进程的组织: 连接方式、索引方式
2.1.3进程控制
进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建新进程、撤销已有进程、实现进程状态转换等功能。
简化理解:进程控制实现进程状态的转换。
-
如何实现进程控制? 用"原语"实现。
-
为什么进程控制需要使用"原语"实现 (为啥进程控制要“一气呵成”)?
答:如果不能“一气呵成”,就有可能导致操作系统中的某些关键数据结构信息不统一的情况,影响操作系统进行别的管理工作。
例如:
- 如何实现原语的原子性?
使用 两个特权指令:“关中断指令”和“开中断指令”
实现原子性。
补充:
正常情况下:CPU每执行完一条指令都会例行检查是否有中断信号需要处理,如果有,则暂停运行当前程序,转而运行处理中断的程序。
(执行了开中断指令后,要转而处理之前没有检查的中断指令)
1. 进程控制相关的原语:
- 创建原语:
- 撤销原语:
- 阻塞原语–唤醒原语
- 切换原语: 涉及到两个进程的状态转换。
原语是如何实现保存运行环境信运行环境(进程上下文)的?
- 运行环境信息是什么?
CPU中会设计很多 “寄存器”,用来存放程序运行过程中所需的数据。
运行环境信息:即当前寄存器中保存的一些必要的信息。以免当进程再次上cpu时 信息被覆盖。
- 过程:
2.1.4 进程通信
- 进程是分配系统资源的单位,(包括内存地址空间)因此各进程拥有的内存地址空间相互独立。
- 不同进程的内存地址空间不能相互访问。
- 进程通信的三种方式
共享存储
各进程互斥访问对共享区间。
消息传递
- 进程间的数据交换以格式化的信息(Message)w为单位,进程通过操作系统提供的“发送消息/接收消息”两个原语进行数据交换。
直接通信:
接受/发送原语的对象是通信的进程
send/receive(进程,msg)
信箱通信:
进程可以在系统内核地址空间中申请一个独立的信箱。接受/发送原语的对象是信箱,而不是另一个进程。
send/receive(信箱,msg)
管道通信
注:
管道通信和共享存储的区别:
- 通信管道:相当于一个FIFO的循环队列,进程的发送/接受信息必须遵循先进先出的要求。
- 共享存储: 数据的形式、存放位置只由进程自己决定,发送/接受没有限制。
2.1.5 线程的概念
引入线程:
提高并发度。
1.线程是调度的基本单位,是程序执行流的最小单元。
2.进程是系统资源的分配单位。
- 为什么引入线程
- 引入线程的变化
- 线程的属性
2.1.6 线程的实现方式和多线程模型
多线程模型:
⭐⭐⭐只有内核级线程才是处理机调度的单位。
多对一模型:
一对一模型:
多对多模型:
2.2.1 调度的概念和层次(七层模型⭐⭐⭐)
- 作业的概念:
- 挂起的情况:
程序出现卡顿时可能就是因为启动的进程处于外存,需要先调入内存再为其分配处理机所以会出现卡顿的情况。
- ⭐⭐⭐进程的七状态模型
只要是挂起说明该进程映像,数据等资源在外存。
- 进程创建后可能由于内存没有空间无法调入内存,所以创建态后会进入就绪挂起状态。
- 当一个处于运行态的程序下处理机时可能直接调入到就绪挂起态。
4.三层调度:
内存调度是将 处于外存的挂起的程序调入内存
2.2.2 进程调度的时机、切换与过程
1.进程调度的时机:
1.需要进行进程调度与切换的时机:
2.不能进行进程调度与切换的时机:
- 1.在处理中断的过程中。
- 2.进程在 操作系统内核程序临界区
- 3.在原子操作过程中。
2.进程调度的方式
1.非抢占式:
2.抢占式:
可优先处理优先级更高的程序,也可实现让进程按各个时间片轮转,适用于分时操作系统和实时操作系统。
3.进程切换与过程
2.2.3 调度算法的评价指标
1.系统吞吐量:单位时间内完成作业的数量
2.周转时间:作业被提交给操作系统开始 到 作业完成为止这段时间间隔。
3.带权周转时间必然>=1,对于周转时间相同的作业,带权周转时间越小,该作业时间的等待时间越短。满意度越高
4.等待时间:周转时间-服务时间
一个作业被提交的一开始是*挂在外存的作业后备队列中*。作业调入内存后,***建立对应的进程,***
综上可知:如果一个进程创建后,既需要计算,有需要I/O;则⑦等待时间=周转时间-计算时间-I/O时间
作业的实际运行时间一般是不变的,调度算法优化的是作业/进程的等待时间。
2.2.4 调度算法:FCFS、SJF、HRRN
先来先服务FCFS
二、SJF、SRNT之间的区别
(非抢占式)短作业优先SJF、 短进程优先SPF
(抢占式)SRTN 最短剩余时间优先
对上述各种算法计算的结果比较:
平均等待T 平均周转T 平均带权周转T
FCFS: 4.75 8.75 3.5
SJF: 4 8 2.56
SRNT: 3 7 1.5
z
针对上述那个题目 采用SRNT算法 调度评估指标值是最小的。
优缺点中提到的 SJF 是“最短的”:是不严谨的!!
注意
更严谨的说法:
-
在所有进程同时可运行时, 采用SJF算法 的平均等待时间、平均周转时间是最短的。
-
在所有进程都几乎同时达到时, 采用SJF算法 的平均等待时间、平均周转时间是最短的。
-
抢占式的短作业/短进程优先调度算法(SRNT) 的平均等待时间、平均周转时间是最短的。
4.如果选择题中遇到 “短作业SJF/SPF 的平均等待时间、平均周转时间是最短的” 这种说法最好判断一下其他选项是否有明显错误。
FCFS 在每次调度的时候考虑的是等待时间,选取一个等待时间最长的进行调度,忽略了运行时间。
SJF 考虑的是运行时间,选择运行时间最短的的,不利于长作业调度,可能会导致饥饿。
三、高响应比优先 HEEN
既可用于作业调度也可用于进程调度
FCFS、SJF、HRRN 不考虑响应时间、事件的紧急程度一般适用于早期的批处理系统。
2.2.5 调度算法:时间片轮转,优先级,多级反馈队列
一、时间片轮转RR
时间片太大或者太小的影响:
若上述题目 时间片设置为5,则 算法退化为FCFS。
因此时间片不能过大也不能过小
二、优先级调度
非抢占式:
每次调度选择当前已经到达且优先级最高的进程。
1。当前进程主动放弃处理机时会发生调度。
抢占式版本:
每次调度选择当前已经到达且优先级最高的进程。
1。当前进程主动放弃处理机时会发生调度。
2**.就绪队列发生改变**时也需要检查是否进行抢占。
如何合理设计各类进程的优先级:
偏向于I/O繁忙型的原因:
这应该说的就是cpu运算速度与存储器的读取速度之间的鸿沟吧…
若采用动态优先级则什么时候调整?
三、多级反馈队列