操作系统基础1
第 1 章 计算机系统概述
1.1 操作系统的基本概念
1.1.1 操作系统的概念、功能和目标(系统资源的管理者、提供接口、作为扩充机器、虚拟机)
1.熟悉的操作系统举例
2.操作系统的层次结构
3.操作系统的概念
- 是系统最基本最核心的软件,属于系统软件
- 控制和管理整个计算机的硬件和软件资源
- 合理的组织、调度计算机的工作与资源的分配
- 为用户和其它软件提供方便的接口和环境
4.操作系统的功能和目标
- 先放一张思维导图,大致知道操作系统的具体功能和目标,然后再一一展开叙述。
- 用一个直观的例子来理解上述图中操作系统的功能:
- 我们假设:用户是雇主,操作系统是工人(用来操作机器),计算机是机器(由处理机(CPU)、存储器、设备、文件几个部件构成)
- 工人有熟练的技能去控制和协调各个部件的工作,这就是
操作系统对资源的管理
- 同时,工人必须接受雇主的命令,这就是
“接口”
- 有了工人,机器就能发挥更大的作用,因此工人就成了
“扩充机器”
- 工人操作机器、机器有了更大的作用比如GUI界面,于是工人便成了
扩充机器
,去扩充GUI界面等功能
(1)作为计算机系统资源的管理者
- 管理软硬件资源、合理的组织、调度计算机的工作与资源的分配
1. 处理器(CPU)管理
- 在多道程序环境下,cpu的分配和运行都以进程(或线程)为基本单位,因此对cpu的管理可理解为对进程的管理。进程管理的主要功能包括
进程控制、进程同步、进程通信、死锁处理、处理机调度
等。附上一张图理解对进程的管理。
2. 存储器管理
- 为多道程序的运行提供良好的环境,方便用户使用及提高内存的利用率,主要包括
内存分配与回收、地址映射、内存保护与共享和内存扩充
等功能。
3.文件管理
- 计算机中所有的信息都是以文件的形式存在的,操作系统中负责文件的管理的部分称为文件系统,文件管理包括
文件存储空间的管理、目录管理及文件读写管理和保护
等。
4. 设备管理
- 设备管理的主要任务是完成用户的I/O请求,方便用户使用各种设备,并提高设备的利用率,主要
包括缓存管理、设备分配、设备处理和虚拟设备
等功能。 - 以上4种管理功能都由“工人”负责,“雇主”无序关注。
(2)作为用户与计算机硬件系统之间的接口
- 为了让用户方便、快捷、可靠的操作计算机硬件并执行自己的程序,操作系统提供了用户接口
- 操作系统提供的接口分为两类:
命令接口和程序接口
命令接口
:用户可以直接
使用的,利用这些操作命令来组织和控制作业的执行程序接口
:用户通过程序间接
使用的,编程人员可以使用它们来请求操作系统服务
1. 命令接口
命令接口分为两类:联机命令接口和脱机命令接口,用户可以
直接
调用联机命令接口
:又称交互式命令接口,适用于分时或实时系统的接口,由一组键盘操作命令组成。用户输入一条指令,操作系统就执行一条指令;脱机命令接口
几个概念;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
:又称批处理接口,使用于批处理系统,由一组作业控制命令组成。用户输入一堆指令,操作系统运行一堆指令。在操作系统运行这些命令时用户不可干预。
> 批处理(Batch),也称为批处理脚本。顾名思义,批处理就是对某对象进行批量的处理,通常被认为是一种简化的脚本语言,它应用于DOS和Windows系统中。批处理文件的扩展名为bat 。![在这里插入图片描述](https://img-blog.csdnimg.cn/20200220182828410.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkxNDYwNA==,size_16,color_FFFFFF,t_70)
###### 2. 程序接口
- 程序接口:由一组`系统调用(也称广义指令)`组成
- 用户通过在程序中使用这些系统调用来请求操作系统为其提供服务,只能通过用户程序`间接`调用
- 如使用各种外部设备、申请分配和回收内存及其它各种要求
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020022018383578.png)
> 动态链接库英文为DLL,是Dynamic Link Library的缩写。DLL是一个包含可由多个程序,同时使用的代码和数据的库。
- 比如常见的图形用户界面程序接口GUI
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200220184655178.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkxNDYwNA==,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200220184339565.png)
##### (3)作为扩充机器(虚拟机)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200220184843350.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkxNDYwNA==,size_16,color_FFFFFF,t_70)
- 没有任何软件支持的计算机称为`裸机`
- 覆盖了软件的机器称为`扩充机器或虚拟机`
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200220185203629.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkxNDYwNA==,size_16,color_FFFFFF,t_70)
### 1.1.2 操作系统的特征(并发、共享、虚拟、异步)
- 操作系统是一种系统软件,但与其它系统软件和应用软件有很大的不同,它有自己的特殊性,及基本特征。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200220220130442.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkxNDYwNA==,size_16,color_FFFFFF,t_70)
#### 1.并发
- `并发`:两个或多个事件在同一`时间间隔内`发生,这些事件在宏观上是同时发生的,在微观上是交替发生的, 操作系统的并发性指系统中同时存在着多个运行的程序
- `并行`:两个或多个事件在同一`时刻`发生
- 一个单核(CPU)同一时刻只能执行一个程序,因此操作系统会协调多个程序使他们交替进行(这些程序在宏观上是同时发生的,在微观上是交替进行的)
- 操作系统是伴随着“多道程序技术出现的”,因此操作系统和并发是一同诞生的
- 在如今的计算机中,一般都是多核cpu的,即在同一`时刻`可以并行执行多个程序,比如我的计算机是8核的,我的计算机可以在同一时刻并行执行8个程序,但是事实上我们计算机执行的程序并不止8个,因此并发技术是必须存在的,并发性必不可少。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200220201755124.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkxNDYwNA==,size_16,color_FFFFFF,t_70)
#### 2.共享
- 资源共享即共享,是指系统中的资源可以`供内存中多个并发执行的进程`共同使用
- 共享分为两类:互斥共享和同时共享
##### (1)互斥共享
- 计算机中的某个资源在一段时间内只能允许`一个进程`访问,别的进程没有使用权
- 临界资源(独占资源):在一段时间内只允许一个进程访问的资源,计算机中大多数物理设备及某些软件中的栈、变量和表格都属于临界资源,它们被要求互斥共享
- 举个例子:比如QQ和微信视频。同一段时间内摄像头只能分配给其中一个进程
##### (2)同时共享
- 计算机中的某个资源在在一段时间内可以`同时`允许`多个`进程访问
- 同时共享通常要求一个请求分为几个时间片段间隔的完成,即交替进行,“分时共享”
- 这里的`同时`指在宏观上是同时的,在微观上是交替进行访问的,只是cpu处理速度很快,我们感觉不到,在宏观上感觉是在同时进行
- 举个例子:比如QQ在发送文件A,微信在发送文件B,宏观上两个进程A和B都在访问磁盘,在我们看来是同时进行的,但是在微观上两个进程A和B是交替进行访问磁盘的,只是时间太短,cpu处理速度太快,我们感觉不到。
- `注意`:有时候多个进程可能真的是在同时进行资源访问,比如玩游戏时可以放音乐,游戏声音和音乐声音都能听见
##### (3)并发性和共享性互为存在条件
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200220204551232.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkxNDYwNA==,size_16,color_FFFFFF,t_70)
#### 3.虚拟
> 多道程序设计:是指在计算机内存中同时存放几道相互独立的程序,使它们在管理程序控制之下,相互穿插的运行。 两个或两个以上程序在计算机系统中同处于开始到结束之间的状态。这就称为多道程序设计。多道程序技术运行的特征:多道、宏观上并行、微观上串行。
- 虚拟是把一个物理上的实体变为若干逻辑上的对应物。
- 物理实体(前者)是实际存在的;而后者是虚的,是用户感觉上的事务
- 虚拟技术:用于实现虚拟的技术
- 虚拟处理器(CPU):通过多道程序设计技术,采用让多道程序并发执行的方法,分时来使用一个CPU,实际物理上只有一个CPU,但是用户感觉到有多个CPU
- 虚拟存储器:从逻辑上扩充存储器容量,用户感觉到的但实际不存在的存储器
- 虚拟设备:将一台物理设备虚拟为逻辑上的多台设备,使多个用户在同一时间段内访问同一台设备,即同时共享,用户宏观上感觉是同时的,但实际上是微观交替访问同一台设备的
- 操作系统的虚拟技术科归纳为:
- 时分复用技术:如处理器的分时共享
- 空间复用技术:如虚拟存储器
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200220215401443.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkxNDYwNA==,size_16,color_FFFFFF,t_70)
#### 4.异步
- 异步:多道程序环境允许多个程序`并发`执行,但由于资源有限,如cpu只有一个,进程的执行并不是一贯到底的,而是走走停停的,它以不可预知的速度向前推进。
- 比如A进程正在占用CPU计算,B进程这时也想占用CPU计算,B进程只有等,等A进程算完了,A进程去访问磁盘资源了,这时B进程再占用CPU进行计算,B进程还没计算完,A进程从磁盘取出资源了,A进程发现B这时在占用CPU,这时A进程就需要等待,等B算完后再继续到CPU中进行计算。由于每个进程占用资源的时间不固定,所以进程的执行以不可预知的速度前进
## 1.2 操作系统的发展和分类
### 1.2.1 操作系统的发展和分类(手工、单道/多道批处理、分时、实时、网络、分布式、嵌入式、个人计算机)
#### 1.操作系统的分类及其特征优劣
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200222160313682.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkxNDYwNA==,size_16,color_FFFFFF,t_70)
#### 2.操作系统的发展历程
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200222161909768.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkxNDYwNA==,size_16,color_FFFFFF,t_70)
## 1.3 操作系统的运行机制和体系结构
### 1.3.1 操作系统的运行机制和体系结构(大内核、小内核)
#### 1.操作系统的运行机制和体系结构
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020022223135066.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkxNDYwNA==,size_16,color_FFFFFF,t_70)
#### 2.操作系统内核在计算机系统中的层次结构
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200222231536872.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkxNDYwNA==,size_16,color_FFFFFF,t_70)
#### 3.操作系统体系结构类比
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200222231654803.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkxNDYwNA==,size_16,color_FFFFFF,t_70)
#### 4.操作系统用户态和核心态的转换
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200223155949457.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkxNDYwNA==,size_16,color_FFFFFF,t_70)
### 1.3.2 中断和异常(内中断和外中断、中断处理过程)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200223165736223.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkxNDYwNA==,size_16,color_FFFFFF,t_70)
### 1.3.3 系统调用(执行过程、访管指令、库函数与系统调用)
#### 1.系统调用知识框架图
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200223183347138.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkxNDYwNA==,size_16,color_FFFFFF,t_70)
#### 2.系统调用和库函数的区别
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200223182336630.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkxNDYwNA==,size_16,color_FFFFFF,t_70)
#### 3.系统调用的执行过程
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200223182805329.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkxNDYwNA==,size_16,color_FFFFFF,t_70)
## 1.0.0 第一章操作系统概述错题整理
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200307232926108.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkxNDYwNA==,size_16,color_FFFFFF,t_70)
**1.操作系统与用户通信接口通常不包括(`D`)**
A:shell
B:命令解释器
C:广义指令
D:缓存管理指令
解析:广义指令是系统调用命令;命令解释器属于命令接口,shell是命令解释器,它属于命令接口;系统中的缓存全部由操作系统管理,对用户是透明的,操作系统不提供管理系统缓存的系统调用。
**2.计算机开机后,操作系统最终被加载到(`D`)**
A:BIOS
B:ROM
C:EPROM
D:RAM
解析:系统开机后,操作系统的程序会被自动加载到内存中的系统区,这段区域是RAM;涉及到组成原理的各类存储介质。
**3.在分时操作系统中,时间片一定,(`C`)响应时间越长**
A:内存越多
B:内存越少
C:用户数越多
D:用户数越少
解析:在分时操作系统中,时间片固定时,用户数越多,每个用户分到的时间片就越少,响应时间自然就变成。
**4.设某计算机系统有一个CPU,一台输入设备,一台打印机。**
现有两个进程同时进入就绪态,且A进程先得到CPU的运行,进程B后运行。
进程A的运行轨迹:计算50ms,打印信息100ms,再计算50ms,打印信息100ms,结束;
进程B的运行轨迹:计算50ms,输入数据80ms,再计算100ms,结束。
画出他们的时序关系图,并说明:
(1) 开始运行后,cpu有无空闲等待?若有,在哪段时间内等待?计算CPU的利用率。
CPU在100~150ms时间段内空闲,利用率250/300=83.3%
(2) 进程A运行时有无等待现象?若有,在何时发生等待现象?
进程A无等待现象
(3) 进程B运行时有无等待现象?若有,在何时发生等待现象?
进程B有等待现象,0~50ms, 180~200ms
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200224181138849.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkxNDYwNA==,size_16,color_FFFFFF,t_70)
**5.下列操作系统的各个功能组成部分中,(`A`)可不需要硬件的支持**
A:进程调度
B:时钟管理
C:地址映射
D:中断系统
解析:中断系统和地址映射都需要硬件的支持,因为中断指令和地址映射中的重定位都是离不开硬件的支持的。而时钟管理,重置时钟等是由硬件直接完成的。进程调度由调度算法决定CPU使用权,由操作系统实现,无序硬件的支持。
**6.下列选项中,在用户态`执行`的是(`A`)**
A:命令解释程序
B:缺页处理程序
C:进程调度程序
D:时钟中断处理程序
解析:命令解释程序属于命令接口,用户可以直接调用;缺页处理程序、时钟中断处理程序都属于中断,在核心态执行;进程调度程序在核心态执行;
**7.下列选项中,不可能在用户态`发生`的是(`C`)**
A:系统调用
B:外部中断
C:进程切换
D:缺页
解析:系统调用是提供给用户的程序接口,在用户态发生,被调用程序在核心态下执行;外部中断使用户态到核心态的“门”,也发生在用户态,在核心态完成中断处理程序;进程切换属于系统调用执行过程中的事件,只能发生在核心态;缺页发生后,在用户态发生缺页中断,然后进入核心态执行缺页中断服务程序;
**8.在操作系统中,只能在核心态执行的指令是(`C`)**
A:读时钟
B:取数
C:广义指令
D:寄存器清“0”
解析:广义指令即系统调用命令,必然工作在核心态;注意区分“调用”和“执行”,广义指令的调用可以在用户态发生,调用广义指令的那条指令不一定是特权指令,但广义指令存在于核心态中,所以执行一点在核心态
**9.下列选项中,必须在核心态下执行的指令是(`D`)**
A:从内存中取数
B:将运算结果装入内存
C:算术运算
D:输入/输出
解析:输入/输出指令涉及到中断操作,而中断操作是由系统内核负责的,工作在核心态。A、B、C选项均可通过汇编语言编程来实现,因此它们可在用户态下执行。
`操作系统管理内存时,管理的是内存中的数据放在哪里,哪里可以放数据,哪里不可以放数据(内存保护),哪里空闲等问题,而内存中的数据是什么,怎么读和写,都不是核心态关心的。`
**10.为什么说直到出现中断和通道技术后,多道程序概念才变得有用?**
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200224201308333.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkxNDYwNA==,size_16,color_FFFFFF,t_70)时钟中断:表示一个固定的时间片已到,让处理机执行计时、启动定时运行的任务等,主要任务是处理和时间相关的信息及决定是否执行调度程序;
外部中断处理过程中,PC值由中断隐指令自动保存,而通用寄存器内容由操作系统保存;
第 2 章 进程管理
2.1 进程与线程
2.1.1 进程的定义、特征、组成、组织
1.进程的定义
(1)程序的概念
(2)进程的概念
- 进程和程序的区别和联系:
区别:
1)进程是动态的;程序是静态的。
(2)进程有独立性,能并发执行;程序不能并发执行。
(3)二者无一一对应关系。
(4)进程异步运行,会相互制约;程序不具备此特征。
但是,进程与程序又有密切的联系: 进程不能脱离具体程序而虚设, 程序规定了相应进程所要完成的动作。
(5)组成不同。进程包含PCB、程序段、数据段。程序包含数据和指令代码。
(6)程序是一个包含了所有指令和数据的静态实体。本身除占用磁盘的存储空间外,并不占用系统如CPU、内存等运行资源。
(7)进程由程序段、数据段和PCB构成,会占用系统如CPU、内存等运行资源。
(8)一个程序可以启动多个进程来共同完成。
联系:进程不能脱离具体程序而虚设, 程序规定了相应进程所要完成的动作。
(3)进程的定义
2.进程的特征
3.进程的组成
- 而其中最重要的就是
进程控制块PCB
(Process Control Block) - PCB简介:
PCB中记录了操作系统所需的,用于描述进程的当前情况以及控制进程运行的全部信息。 PCB的作用是使一个在多道程序环境下不能独立运行的程序(含数据),成为一个能独立运行的基本单位,一个能与其他进程并发执行的进程。 或者说,`OS是根据PCB来对并发执行的进程进行控制和管理的。` 例如,当OS要`调度`某进程执行时,要从该进程的PCB中查处其现行状态及优先级;在调度到某进程后,要根据其PCB中所保存的处理机状态信息,设置该进程恢复运行的现场,并根据其PCB中的程序和数据的内存始址,找到其程序和数据; 进程在`执行`过程中,当需要和与之合作的进程实现同步,通信或者访问文件时,也都需要访问PCB; 当进程由于某种原因而`暂停`执行时,又须将器断点的处理机环境保存在PCB中。 可见,在进程的整个生命期中,系统总是通过PCB对进程进行控制的,即系统是根据进程的PCB而不是任何别的什么而感知到该进程的存在的。 所以说,PCB是进程存在的唯一标志。
PCB通常包含的内容:
4.进程的组织
(1)链接方式
(2)索引方式
2.1.2 进程的状态(运行、就绪、阻塞、创建、终止)及转换(就绪->运行、运行->就绪、运行->阻塞、阻塞->就绪)
1.思维导图总览
2.进程的状态
(1)三种基本状态(就绪、运行、阻塞)
(2)创建态和结束态
- 创建态
- 结束态
3.进程状态之间的转换
- 进程一共有如下5种状态,那么他们之间如何实现切换呢?
0.思维导图
1.什么是进程控制?
2.原语实现对进程的控制
- 关于原语的作用和处在操作系统内核的重要地位可参考:https://blog.csdn.net/weixin_43914604/article/details/104452762
3.回忆进程的组织
- 进程在操作系统中的组织使各个进程能够有序的进行切换和运行
4.进程控制大致图解
这里说明一下调度和切换的区别:
调度
是指决定资源分配给哪个进程的行为,是一种决策行为切换
是指实际分配的行为,是执行行为
一般来说现有资源调度,后有进程切换
5.进程控制原语的相同点
- 接下来我们就具体学习一下关于进程控制的五种原语,
进程的创建、终止、唤醒、阻塞、切换;
6.进程控制的五种原语
(1)进程的创建原语
(2)进程的终止原语
(3)进程的唤醒和阻塞原语
- 进程的阻塞和唤醒原语是
成对存在
的,必须成对使用
。 阻塞原语
是由被阻塞进程自我调用实现的唤醒原语
是由一个被唤醒进程合作或被其他相关的进程调用实现的
(4)进程的切换原语
2.1.4 进程之间的通信(共享通信、消息传递、管道通信)
0.思维导图
1.什么是进程通信?
- 图中我们可以知道什么是进程通信,以及进程通信的低级和高级方式;
- 我们还可以知道为什么要引入进程通信方式,以及它的意义
2.共享存储
- 共享一块大家都可以访问的空间,一次只能有一个进程进行读或写操作
3.管道通信
4.消息传递
0.思维导图
1.为什么要引入线程?
- 为了方便于理解,我打开了我的任务管理器,可以看出chrome一个进程,下面有很多分支,可以把这些分支当做线程看待,PID即进程和线程都有的标识符。
2.什么是线程?
3.引入线程带来的变化及进程与线程的比较
4.线程的属性
5.线程的实现方式
- 前面我们了解了引入线程的好处和引入线程的变化,以及线程的属性,那么线程如何实现呢?
- 线程的实现分为两类:
用户级线程
(User-Level Thread,UTL)和内核级线程
(Kernel-Level Thread, KTL)l。内核级线程又称内核支持的线程
。
(1)用户级线程
(2)内核级线程
(3)特殊的组合方式及重点注意
6.多线程模型
- 前面我们提到了线程的实现方式,有用户级和内核级。那么这两种模式的交叉组合就会产生几种不一样的组织结构,即不一样的模型。
(1)多对一模型
(2)一对一模型
(3)多对多模型
- 此种模型效率是三种模型中最好的
2.2 处理机的调度
2.2.1 处理机调度的概念及层次
0.思维导图
1.调度的基本概念
2.调度的三个层次
(1)高级调度( 作业调度)
(2)中级调度(内存调度)
(3)进程的挂起状态与七状态模型
(4)低级调度(进程调度)
(5)三层调度的联系和对比
2.2.2 进程调度的时机(主动放弃与被动放弃)、切换与过程(广义与狭义)、方式(非剥夺与剥夺)
0.思维导图
1.时机
(1)什么时候进行进程调度?
(2)什么时候不能进行进程调度?
(3)OS内核程序临界区与普通临界区的进程调度情况
2.进程调度的方式
- 所谓进程调度方式,是指当某个进程正在处理机上执行时,若有某个更为重要或紧迫的进程需要处理,即有优先权更高的进程进入就绪队列,此时应如何分配处理机。
3.进程的切换和过程
2.2.3 度算法的评价指标(cpu利用率、系统吞吐量、周转时间、等待时间、响应时间)
0.思维导图
1.CPU利用率
2.系统吞吐量
3.周转时间
4.等待时间
5.响应时间
2.2.4 作业/进程调度算法(FCFS先来先服务、SJF短作业优先、HRRN高响应比优先)
0.思维导图
1.先来先服务—FCFS
- First come first sever
2.短作业优先—SJF
- Shortest Job First
- 非抢占式—SJF
- 抢占式—SJF(SRTN)
- 注意几个细节
3.高响应比优先—HRRN
- Highest Response Ratio Next
4.三种算法的对比和总结
2.2.5 作业/进程调度算法(时间片轮转调度算法、优先级调度算法、多级反馈队列调度算法)
0.思维导图
1.时间片轮转—RR
- Round-Robin
- 时间片为2举例
- 以时间片为5举例
- 可能出现的问题,比如与FCFS对比
2.优先级调度算法
- 非抢占式例子
- 抢占式例子
- 补充
3.多级反馈队列调度算法
- 举个例子
4.三种算法的对比总结
2.3 进程的同步与互斥
2.3.1 进程的同步与互斥
0.思维导图
1.进程同步
同步也称为直接制约关系。
- 在多道程序环境下,进程是并发执行的,不同进程之间存在着不同的相互制约关系。为了协调进程之间的相互制约关系,如等待、传递信息等,引入了进程同步的概念。进程同步是为了解决进程的异步问题。
- 一个简单的例子来理解这个概念。
- 例如,让系统计算1 + 2x3,假设系统产生两个进程: 一个是加法进程,一个是乘法进程。要让计算结果是正确的,一定要让加法进程发生在乘法进程之后,但实际上操作系统具有
异步性
,若不加以制约,加法进程发生在乘法进程之前是绝对有可能的,因此要制定一定的机制去约束加法进程,让它在乘法进程完成之后才发生。
异步性:进程具有异步性的特征。异步性是指,各并发执行的进程以各自独立的、不可预知的速度向前推进。
2.进程互斥
互斥,亦称间接制约关系
。进程互斥
指当一个进程访问某临界资源时,另一个想要访问该临界资源
的进程必须等待。当前访问临界资源的进程访问结束,释放该资源之后,另一个进程才能去访问临界资源。- 在这里需复习一下
临界资源
的概念。 - 我们把一个时间段内只允许一个进程使用的资源称为临界资源。许多物理设备(比如摄像头、打印机)都属于临界资源。此外还有许多变量、数据、内存缓冲区等都属于临界资源。
- 对临界资源的访问,必须互斥地进行。
- 为了禁止两个进程同时进入
临界区
,需遵循以下准则
2.3.2 实现临界区进程互斥的软件实现方法
0.思维导图
- 软件实现方法的思想:在进入区设置并检查一些标志 来标明是否有进程在临界区中,若已有进程在临界区,则在进入区通过循环检查进行等待,进程离开临界区后则在退出区修改标志。
入区通过循环检查进行等待,进程离开临界区后则在退出区修改标志。
1.单标志法
2.双标志先检查法
3,双标志后检查法
4.Peterson算法
2.3.3 实现临界区进程互斥的硬件实现方法
0.思维导图
1.中断隐藏方法
2.TestAndSet指令
- 执行TSL指令时,它的内部运转逻辑:
- 假设lock现在为false,代表临界资源A空闲,那么我就可以访问这个资源,同时将lock=true,提醒别的进程,这个临界资源A我正在使用,让他们等等
- 假设lock为true,代表临界资源正在有人使用,所以我必须等待,并且将lock=true,并不影响什么,所以没关系,只是为了让lock为false时可以上锁,将上锁与检查在一个TSL指令完成。
3.Swap指令
- old是每个进程都要进行的一步,都必须将old=true
- 分析一下这样做的原因:
- 因为lock是某一特定临界资源的共享变量,当每一个进程准备访问这个特定的临界资源时,初始化old=true,然后进入while循环进行交换,如果当前lock是false,则交换后old=false,则当前进程可以跳出循环进入临界区代码段,同时因为交换,lock=old=true上锁,不让别的进程来打扰,别的进程会因为lock变为true,一直在while循环等待,当我使用完临界资源,则将lock=false,此时别的进程再交换old和lock就能判断old=false,可以跳出循环,使用临界资源。
2.3.4 信号量机制(整型信号量、记录型信号量P、V)
0.思维导图
1.为什么引入信号量机制?
- 为了更好的解决进程互斥与同步的问题
2.什么是信号量机制?
3.整型信号量
4.记录型信号量
(1)举一个生动形象的例子了解记录型信号量
- 一张图咱们回忆一下进程的状态
- 一个例子
(2)梳理一下记录型信号量的知识点(P、V)
2.3.5 信号量机制实现进程的互斥、同步与前驱关系
0.思维导图
- 在看此小结内容之前,需熟悉这一篇博客里面的知识,关于P、V操作内部实现原理等https://blog.csdn.net/weixin_43914604/article/details/104951182
1.信号量机制实现进程互斥
2.信号量机制实现进程同步
- 想象一下四则运算的顺序,加减乘除;
- 要想理解这一部分知识,必须知道P、V操作的内部实现原理
3.信号量机制实现前驱关系
2.3.6 进程同步与互斥经典问题(生产者-消费者问题、多生产者-多消费者问题、吸烟者问题、读者-写者问题、哲学家进餐问题)
0.前言
- 同步时,前V后P。
1.生产者-消费者问题
(1)问题描述
- 系统中有
一组生产者进程
和一组消费者进程
,生产者进程每次生产一个
产品放入缓冲区,消费者进程每次从缓冲区中取出一个
产品并使用。(注: 这里的“产品”理解为某种数据) - 生产者、消费者
共享
一个初始为空、大小为n的缓冲区
。 - 只有缓冲区
没满
时,生产者
才能把产品放入
缓冲区,否则必须等待。 - 只有缓冲区
不空
时,消费者
才能从中取出
产品,否则必须等待。 - 缓冲区是临界资源,各进程必须
互斥
地访问。
(2)问题分析
- 1)关系分析。生产者和消费者对缓冲区互斥访问是
互斥关系
,同时生产者和消费者又是一个相互协作的关系,只有生产者生产之后,消费者才能消费,它们也是同步关系
。 - 2)整理思路。根据各进程的操作流程确定P、V操作的大致顺序。
生产者每次要消耗(P)一个空闲缓冲区,并生产(V)一个产品。
消费者每次要消耗(P)一个产品,并释放一个空闲缓冲区(V)。
往缓冲区放入/取走产品需要互斥。 - 3)信号量设置。设置信号量。设置需要的信号量,并根据题目条件确定信号量初值。( 互斥信号量初值一般为1,同步信号量的初始值要看对应资源的初始值是多少)
(3)如何实现?
(4)实现互斥的P操作一定要在实现同步的P操作之后
(5)知识回顾与重要考点
2.多生产者-多消费者问题
(1)问题描述
(2)问题分析
(3)实现方法
① 有mutex
② 无mutex
③ 为什么有mutex和没有mutex一样呢?
- 原因在于:本题中的缓冲区大小为1,在任何时刻,apple、 orange、 plate 三个同步信号量中最多只有一个是1。因此在任何时刻,最多只有一个进程的P操作不会被阻塞,并顺利地进入临界区…
④ 如果有两个盘子plate
(4)知识总结与重要考点
总结
:在生产者_消费者问题中,如果缓冲区大小为1,那么有可能不需要设置互斥信号量就可以实现互斥访问缓冲区的功能。当然,这不是绝对的
,要具体问题具体分析。建议
:在考试中如果来不及仔细分析,可以加上互斥信号量,保证各进程一定会互斥地访问缓冲区。但需要注意的是,·实现互斥的P操作一定要在实现同步的P操作之后
·,否则可能引起·“死锁”
·。
3.读者-写者问题
(1)问题描述
(2)问题分析
(3)实现方法
① 给count加mutex互斥访问
- 这里说一下为什么要加mutex。
- 比如:当count=0时,第一个读者进程执行到p(rw),rw=0,假设此时时间片到了,切换到第二个读者进程,第二个进程发现count=0,则执行p(rw),但是此时rw=0,于是第二个进程被堵在p(rw)这里,同理,后面的可能会有多个进程堵在p(rw),只有当第一个进程再次获得时间片,执行count++,让count不为0,然后其他进程就可以直接绕过if直接进行count++来访问文件,但是第三个读者进程和后面的几个可能堵在p(rw)的多个读者进程则必须得等count–为0后才可以再次和写进程竞争来访问文件,对count的访问没有做到一气呵成,会导致本来一些进程一直堵在p(rw)。
② 加一个w实现“读写公平法”
- 在上面的算法中,读进程是优先的,即当存在读进程时,写操作将被延迟,且只要有 一个读进程活跃,随后而来的读进程都将被允许访问文件。这样的方式会导致写进程可能长时间等待,且存在写进程
“饿死”
的情况。 - 若希望写进程优先,
即当有读进程正在读共享文件时,有写进程请求访问,这时应禁止后续读进程的请求,等到已在共享文件的读进程执行完毕,立即让写进程执行,只有在无写进程执行的情况下才允许读进程再次运行
。为此,增加一个信号量并在上面程序的writer()和 reader()函数中各增加一对PV操作,就可以得到写进程优先的解决程序。
(4)知识回顾与重要考点
4.吸烟者问题
(1)问题描述
(2)问题分析
(3)实现方法
(4)知识回顾与重要考点
5.哲学家进餐问题
(1)问题描述
(2)问题分析
(3)如何实现
(4)知识回顾与重要考点
2.3.7 管程和java中实现管程的机制
0.思维导图
1.为什么引入管程?
2.管程的组成及基本特征
3.管程实现生产者消费者问题
4.java中类似于管程的机制
2.4 死锁
2.4.1 死锁详解(预防、避免、检测、解除)
0.思维导图
1.什么是死锁?
2.死锁、饥饿、死循环的区别
3.死锁产生的四个必要条件
4.什么时候会发生死锁?
5.死锁的处理策略
(1)预防死锁
① 破坏互斥条件
② 破坏不可剥夺条件
③ 破坏请求和保持条件
④ 破坏循环等待条件
(2)避免死锁
① 什么是安全序列?
- 所谓安全序列
② 安全序列、安全状态、不安全状态、死锁之间的联系
③ 避免系统进入不安全状态——银行家算法
- 使用代码实现
(3)死锁的检测和解除
① 死锁的检测
- 举个例子,可以消除所有边,即无死锁发生
- 举个例子,不可消除所有边,即产生死锁
② 死锁的解除
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 吕小医's BLOG!