Merge branch 'dev'

This commit is contained in:
KimYang
2021-08-11 06:47:41 +08:00
49 changed files with 642 additions and 24 deletions

View File

@@ -24,14 +24,14 @@ module.exports = {
{
text: '数据结构',
items: [
{ text: '数据结构笔记', link: '/数据结构/', icon: 'reco-document' },
// { text: '数据结构笔记', link: '/数据结构/', icon: 'reco-document' },
// {text:'数据结构错题集',link:'/数据结构错题集/'},
{ text: "数据结构笔记(旧版)", link: '/DataStructure/', icon: 'reco-document' },
],
icon: 'reco-category'
},
{ text: '计算机组成原理', link: '/计算机组成原理/', icon: 'reco-category' },
{ text: '计算机网络', link: '/计算机网络/', icon: 'reco-category' },
// { text: '计算机组成原理', link: '/计算机组成原理/', icon: 'reco-category' },
// { text: '计算机网络', link: '/计算机网络/', icon: 'reco-category' },
{
text: '操作系统',
items: [
@@ -42,17 +42,23 @@ module.exports = {
},
// { text: '留言板', link: '/contact', icon: "reco-suggestion" },
{
text: '联系我',
text: '其他',
items: [
{ text: 'Email', link: 'mailto:Kim.Yang.HG@outlook.com', icon: 'reco-mail' },
{ text: '个人博客', link: 'https://kimyang.cn', icon: 'reco-blog' },
{ text: 'GitHub', link: 'https://github.com/KimYangOfCat', icon: 'reco-github' },
{ text: 'BiliBili', link: 'https://space.bilibili.com/240836280', icon: 'reco-bilibili' },
{ text: '微信公众号', link: 'https://mp.weixin.qq.com/s/kSfjVbzlP46oB-Ux-MPWzA', icon: 'reco-wechat' },
{ text: '赞赏', link: '/sponsor', icon: 'reco-three' },
{ text: 'RSS', link: 'https://408.kimyang.cn/rss.xml', icon: 'reco-rss' },
{
text: '联系我', items: [
{ text: '微信公众号', link: 'https://mp.weixin.qq.com/s/kSfjVbzlP46oB-Ux-MPWzA', icon: 'reco-wechat' },
{ text: '个人博客', link: 'https://kimyang.cn', icon: 'reco-blog' },
{ text: 'GitHub', link: 'https://github.com/KimYangOfCat', icon: 'reco-github' },
{ text: 'BiliBili', link: 'https://space.bilibili.com/240836280', icon: 'reco-bilibili' },
{ text: 'Email', link: 'mailto:Kim.Yang.HG@outlook.com', icon: 'reco-mail' },
]
},
],
icon: 'reco-other'
},
{ text: 'RSS', link: 'https://408.kimyang.cn/rss.xml', icon: 'reco-rss' },
],
sidebar:
{
@@ -82,7 +88,7 @@ module.exports = {
// repoLabel: '查看源码',
// 以下为可选的编辑链接选项
// 假如你的文档仓库和项目本身不在一个仓库:
// docsRepo: 'KimYangOfCat/2021-CSPostgraduate-408',
docsRepo: 'KimYangOfCat/2021-CSPostgraduate-408',
// 假如文档不是放在仓库的根目录下:
docsDir: '408Notes',
// 假如文档放在一个特定的分支下:
@@ -104,6 +110,11 @@ module.exports = {
// }
},
plugins: [
//支持数学公式
['@renovamen/vuepress-plugin-katex', {
'throwOnError': false, // (optional)
'errorColor': '#cc0000' // (optional)
}],
['@vuepress/pwa', {
serviceWorker: true,
updatePopup: {
@@ -148,22 +159,37 @@ module.exports = {
body: [
{
type: 'title',
content: '欢迎关注我的微信公众号和B站!🎉🎉🎉',
content: '更多资源请关注我的微信公众号!🎉🎉🎉',
style: 'text-aligin: center;'
},
{
type: 'image',
src: 'https://pic-bed-1256389522.cos.ap-chengdu.myqcloud.com/info/binarycode.png'
src: '/qc/wechatqc.png'
},
{
type: 'image',
src: '/qc/bilibili.png'
}
],
footer: [
{
type: 'button',
text: '赏',
link: 'https://picbed.kimyang.cn/202108090635547.png'
text: '赏',
link: '/sponsor'
}
]
}]
}], [
'vuepress-plugin-sponsor',
{
theme: 'simple',
alipay: '/sponsor/alipag.png',
wechat: '/sponsor/wechatpay.png',
qq: '/sponsor/qqpay.png',
// paypal: 'https://www.paypal.me/yokefellow',
duration: 2000
}
]
]
}
function getDataStructureSidebar1() {
@@ -175,6 +201,9 @@ function getDataStructureSidebar1() {
collapsable: true, // 可选的, 默认值是 true,
sidebarDepth: 2, // 可选的, 默认值是 1
children: [
'/数据结构/DS_1_概述/DS-1-1-代码书写规范以及语言基础',
'/数据结构/DS_1_概述/DS-1-2-算法时空复杂度分析',
'/数据结构/DS_1_概述/DS-1-3-数据结构和算法基本概念',
]
},
{
@@ -183,6 +212,8 @@ function getDataStructureSidebar1() {
collapsable: true, // 可选的, 默认值是 true,
sidebarDepth: 2, // 可选的, 默认值是 1
children: [
'/数据结构/DS_2_线性表/DS-2-1-基本概念与实现',
'/数据结构/DS_2_线性表/DS-2-1-结构体定义和基本操作',
]
},
{
@@ -191,6 +222,9 @@ function getDataStructureSidebar1() {
collapsable: true, // 可选的, 默认值是 true,
sidebarDepth: 2, // 可选的, 默认值是 1
children: [
'/数据结构/DS_3_栈和队列/DS-3-1-栈和队列的基本概念',
'/数据结构/DS_3_栈和队列/DS-3-2-栈和队列的存储结构',
'/数据结构/DS_3_栈和队列/DS-3-3-抽象数据类型',
]
},
{
@@ -199,6 +233,8 @@ function getDataStructureSidebar1() {
collapsable: true, // 可选的, 默认值是 true,
sidebarDepth: 2, // 可选的, 默认值是 1
children: [
'/数据结构/DS_4_串/DS-4-1-串数据类型的定义',
'/数据结构/DS_4_串/DS-4-2-串的模式匹配算法',
]
},
{
@@ -207,6 +243,10 @@ function getDataStructureSidebar1() {
collapsable: true, // 可选的, 默认值是 true,
sidebarDepth: 2, // 可选的, 默认值是 1
children: [
'/数据结构/DS_5_数组矩阵与广义表/DS-5-1-数组',
'/数据结构/DS_5_数组矩阵与广义表/DS-5-2-矩阵的压缩存储',
'/数据结构/DS_5_数组矩阵与广义表/DS-5-3-广义表',
]
},
{
@@ -215,6 +255,10 @@ function getDataStructureSidebar1() {
collapsable: true, // 可选的, 默认值是 true,
sidebarDepth: 2, // 可选的, 默认值是 1
children: [
'/数据结构/DS_6_树与二叉树/DS-6-1-树的基本概念',
'/数据结构/DS_6_树与二叉树/DS-6-2-二叉树',
'/数据结构/DS_6_树与二叉树/DS-6-3-树和森林与二叉树的互相转换',
'/数据结构/DS_6_树与二叉树/DS-6-4-树和二叉树的应用',
]
},
{
@@ -223,6 +267,13 @@ function getDataStructureSidebar1() {
collapsable: true, // 可选的, 默认值是 true,
sidebarDepth: 2, // 可选的, 默认值是 1
children: [
'/数据结构/DS_7_图/DS-7-1-图的基本概念',
'/数据结构/DS_7_图/DS-7-2-图的存储结构',
'/数据结构/DS_7_图/DS-7-3-图的遍历算法操作',
'/数据结构/DS_7_图/DS-7-4-最小代价生成树',
'/数据结构/DS_7_图/DS-7-5-最短路径',
'/数据结构/DS_7_图/DS-7-6-拓扑排序',
'/数据结构/DS_7_图/DS-7-7-关键路径',
]
},
{
@@ -231,6 +282,13 @@ function getDataStructureSidebar1() {
collapsable: true, // 可选的, 默认值是 true,
sidebarDepth: 2, // 可选的, 默认值是 1
children: [
'/数据结构/DS_8_排序/DS-8-1-排序的基本概念',
'/数据结构/DS_8_排序/DS-8-2-插入类排序',
'/数据结构/DS_8_排序/DS-8-3-交换类排序',
'/数据结构/DS_8_排序/DS-8-4-选择类排序',
'/数据结构/DS_8_排序/DS-8-5-二路归并排序',
'/数据结构/DS_8_排序/DS-8-6-基数排序',
'/数据结构/DS_8_排序/DS-8-7-外部排序',
]
},
{
@@ -239,6 +297,10 @@ function getDataStructureSidebar1() {
collapsable: true, // 可选的, 默认值是 true,
sidebarDepth: 2, // 可选的, 默认值是 1
children: [
'/数据结构/DS_9_查找/DS-9-1-查找的基本概念',
'/数据结构/DS_9_查找/DS-9-2-二叉排序树和平衡二叉树',
'/数据结构/DS_9_查找/DS-9-3-B-树',
'/数据结构/DS_9_查找/DS-9-4-散列表',
]
},
]

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

View File

@@ -1,3 +1,4 @@
.content {
font-size 30px
}

View File

@@ -1,8 +1,8 @@
---
home: true
heroImage: /icons@2x.png
heroText: 计算机考研 408 专业课
tagline: null
heroText: 一研为定!一战成硕!
tagline: 计算机考研 408 专业课
actionText: 开始阅读 →
actionLink: /操作系统/
footer: GPL Licensed | Copyright © 2020-present Kim Yang
@@ -10,7 +10,6 @@ footer: GPL Licensed | Copyright © 2020-present Kim Yang
<div align="center">
# CSPostgraduate-408
![Top Language](https://img.shields.io/github/languages/top/KimYangOfCat/2021-CSPostgraduate-408?color=F8008E)
![DataStructure](https://img.shields.io/static/v1?label=&message=DataStructure&color=brightgreen)

View File

@@ -1,4 +0,0 @@
---
title: 留言板
---
如果你有任何关于项目的建议,疑问与催更等等,欢迎在下面的评论区留言哟~。

13
408Notes/sponsor.md Normal file
View File

@@ -0,0 +1,13 @@
---
title: ❤️ 致谢
showSponsor: true
---
非常感谢以下朋友的赞赏:
|捐赠人|金额|日期|备注|
|-|-|-|-|
|E*t|10元|2021-05-19|非常感谢|
我所做的微小之事能对你有些许帮助,真是非常令人高兴!
如果你也想赞赏我的汗水,可以通过本页最下方的各种渠道赞赏,先行谢过啦!

View File

@@ -1,5 +1,365 @@
---
title: 进程与线程
---
## 1、进程的引入背景
在计算机操作系统中,**进程是资源分配的基本单位**,也是独立运行的基本单位。
### 1.1、前趋图
进程之间执行的前后关系可以使用前趋图来描述,其实一个有向无循环图,如:
![](https://picbed.kimyang.cn/202108101612226.png)
$s_1 \to s_2$ 代表 $s_1$ ​进程须在 $s_2$ 之前执行
### 1.2、程序的顺序执行
一个程序通常是由若干程序段组成的,他们必须按照某种先后次序执行,仅当前一个操作执行完成以后,才能继续后续操作。
程序顺序执行时有如下特征:
+ 顺序性
+ 封闭性:程序一旦开始,独占系统各种资源,不收外在因素影响,直到执行结束。
+ 可再现性:初始条件和执行环境具备,程序重复执行的结果相同。
在同一作业中,作业的输入操作,计算,操作和打印操作必须顺序执行。
### 1.3、程序的并发执行
程序的并发执行是指若干个程序或程序段同时在系统中运行,这些程序或程序段的执行在时间上是重叠的,即一个程序或程序段尚未结束,另一个程序或程序段的执行已经开始。
程序的并发执行,提高了系统的处理能力和资源利用率,有如下特征:
+ 间断性
+ 失去封闭性
+ 不可再现性
### 1.4、程序并发执行的条件
保持封闭性和可再现性是程序并发执行的主要条件。
能实现上述要求的是 Bernstein 条件:
记程序$p_i$​在执行期间所需要引用的所有变量的集合为$R(p_i)=\{a_1,a_2,\cdots,a_m\}$​​,称为读集。
记程序$p_i$​在执行期间要改变的所有变量的集合为$W(p_i)=\{b_1,b_2,\cdots,b_m\}$​​,称为写集。
1. $R(p_1)\cap R(p_2)=\emptyset$(空集)
2. $R(p_2)\cap R(p_1)=\emptyset$
3. $W(p_1)\cap W(p_2)=\emptyset$
其中前面两个条件保证一个程序在两次读操作之间,存储器中的数据不会发生改变,最后一个条件保证程序写操作的结果不会丢失。
不过 Bernstein 条件很难达到,只是理想化的状态。
## 2、进程的定义及描述
由于程序的并发执行,破坏了程序的封闭性和可再现性。故程序这种静态的概念已经不能够如实反应程序活动的这些特征。由此引入了**进程**这个概念。
### 2.1、进程的定义
自从进程概念提出之后,许多人都对进程给出了各种定义,下面是一些常见的:
+ **进程是程序在处理器上的一次执行过程**
+ **进程是可以和别的进程并行执行的计算**
+ **进程是程序在一个数据集合上的运行过程,是系统进行资源分配和调度的一个独立单位。**
+ **进城可定义为一个数据结构及能在其上进行操作的一个程序**
+ **进程是一个程序,关于某个数据集合,在处理器上顺序执行所发生的活动。**
### 2.2、进程的特征
+ **动态性**:进程是程序在处理器上的一次执行过程,因而是动态的。动态性还表现在它因创建而产生,由调度而执行,因得不到资源而暂停,最后因撤销而消亡。
+ **并发性**:多个进程同时存在于内存中,能在一段时间内同时运行。以提高资源利用率。
+ 并发性:指多个进程同时存在于内存中,能在一段时间内同时运行。以提高资源利用率。
+ **独立性**:进程是系统进行资源分配和调度的独立单位,也是一个能独立运行的基本单位。
+ **异步性**:进程以各自独立,不可预测的速度向前推进。
+ **结构特征**:每个进程都由程序段,数据段和一个进程控制块组成,进程控制块是为了记录和描述进程的运动变化的过程。
### 2.3、进程和程序的关系
+ **进程是动态的,程序是静止的**
**进程是程序的执行**,程序无执行含义。
+ **进程是暂时的,程序是永久的**
进程是一个状态变化的过程,程序可以长久保存。
+ **进程与程序的组成不同**sipccpu的现场信息程包含了程序段和数据段以及进程控制块 PCB ),而程序是有序代码的集合
每个进程包含了程序段和数据段,以及进程控制块( PCB ),而程序是有序代码的集合
+ 通过多次执行一个程序,可以产生多个不同的进程。通过调用关系,一个进程可以执行多个程序。进程可以创建其它进程,而程序不能形成新的程序。
+ 进程具有并行性,独立性,异步性,程序则没有。
#### 2.3.1、什么是进程映像?进程映像与进程的关系是什么?
由程序段,相关数据段和 PCB 三部分构成了进程映像,也叫进程实体。进程映像是静态的,进程是动态的,进程是进程实体的运行过程。
### 2.4、 进程和作业的区别
**作业是用户需要计算机完成某项任务而要求计算机所做工作的集合**。一个作业的完成。要经过**作业提交、作业收容、作业执行和作业完成**四个阶段。而**进程是已提交完毕的作业的执行过程**,是资源分配的基本单位。
两者主要区别如下:
+ 作业是用户向计算机提交任务的任务实体。
+ 一个作业可由多个进程组成,且必须至少有一个进程组成。但一个进程不能构成多个作业。
+ 作业的概念主要用在**批处理系统**中,而分时系统则没有。而进程的概念则用于几乎所有的**多道程序系统**中
### 2.5、进程的组成
+ 进程控制块( PCB ):每个进程均有一个 PCB 。它是用于标识进程的存在,记录瞬间特征的数据结构。
+ 程序段:程序段是进程中能够被进程调度程序调度到 CPU 上执行的**程序代码段**。能实现**特定功能**。
+ 数据段:一个进程的数据段可以是进程对应的程序加工处理的原始数据,也可以是程序执行时产生的中间或结果数据。
#### 2.5.1 PCB 的组成
系统根据 PCB 感知进程的存在, PCB 是进程存在的唯一标志。 PCB 所包含的内容如下:
+ **进程标识符(PID)**:唯一的进程标识符,用于区别于系统内部的其他进程。
+ **进程当前状态**:作为进程调度程序分配处理器的依据。
+ 进程队列指针: PCB 队列中下一个 PCB 的地址。系统中的 PCB 可能组成多个队列,如就绪队列,阻塞队列等。
+ **程序和数据地址**:指出进程的程序和数据所在地。
+ **进程优先级**:反应进程要求 CPU 的紧迫程度。优先级高的进程可以优先获得处理器。
+ CPU 现场保护区进程被迫阻塞后CPU 的现场信息(如指令计数器、状态寄存器、通用寄存器等)被保存在 PCB 该区域中,以便进程重新获得处理器后能够继续执行。
+ 通用信息:记录进程在执行过程中与别的进程所发生的信息交换情况。
+ 家族联系:有的系统允许进程创建子进程,从而形成一个进程家族树。可以使用**进程前驱图**来描述这种关系。
+ **占用资源清单**:进程所需资源及当前已被分配资源清单。
#### 2.5.2、为什么 PCB 是进程存在的唯一标志?
PCB 是系统为每个进程定义的一个数据结构,其作用是使程序能够独立运行。**PCB 使一个在多道程序环境下不能独立运行的含有数据的程序成为一个能够独立运行的基本单位,一个能与其他进程并发执行的进程。因此 PCB 是为了保证并程序的发执行。**创建进程,实质上就是创建进程的 PCB ,而撤销进程,实质上就是撤销进程的 PCB 。
在系统调度到某进程后,要根据 PCB 中所保存的处理机状态信息,设置该进程恢复运行的现场,并根据其 PCB 中的程序和数据的内存地址,找到其程序和数据。进程在执行过程当中。需要和与之合作的进程实现同步,通信或访问文件时,也都需要访问 PCB 。当进程由于某种原因而阻塞使了,又需要将其断点的处理结环境保存在 PCB 当中,可见在整个进程的生命周期中,系统总是通过 PCB 对进程进行控制。即系统是根据进程的 PCB 感知该进程的存在的,所以 PCB 是进程存在的唯一标志。
## 3、进程的状态与转换
### 3.1、进程的五种基本状态
+ 就绪:进程已获得除处理器外的所有资源。
+ 执行进程已获得必要资源并正在cpu中运行。
+ 阻塞:进程由于发生某事件而暂时无法执行下去。即进程缺少除了处理器外的其他资源
+ 创建:申请空白的 PCB并向 PCB 中填写一些控制和管理进程的信息,然后为其分配所需资源并转入就绪态
+ 结束:可能是正常结束也可能是因为其他原因中断退出。
![](https://picbed.kimyang.cn/202108110423288.png)
### 3.2、进程状态的相互转换
进程并非固定处于某一状态。其状态会随着自身的推进和外界条件的变化而发生变化。
#### 3.2.1、进程状态变化的典型原因:
+ 就绪$\to$执行:一个进程被进程调度程序选中。
+ 执行$\to$阻塞:请求并等待某一个事件发生。
+ 执行$\to$就绪:时间片用完或在抢占式调度中有更高优先级的进程变为就绪状态。
+ 阻塞$\to$就绪:进程因为等待的某个条件发生而被唤醒。
#### 3.2.2、进程状态的重要结论
+ 进程状态的转换并非都是可逆的
建成既不能从阻塞状态变为执行状态,也不能从就绪状态变为注册状态。
+ 进程的状态转换并非都是主动
只有从执行状态到阻塞状态是主动的。是因事件而主动调用阻塞原语。其他都是被动的。
+ 状态的唯一性
一个具体的进程,在任何一个指定的时刻,必须且只能处于一种状态。
## 4、进程的控制
进程控制:主要包括进程创建,进程撤销,进程阻塞与唤醒等。
### 4.1、进程的创建
#### 4.1.1、导致进程创建的事件
导致进程创建的事件有**用户登录,作业调度和请求服务**。
+ 用户登录:
在分时系统中,用户在终端输入登录信息,系统检测并通过后就会为该终端用户建立新进程并插入到就绪队列。即 SSH
+ 作业调度:
在批处理系统中,当作业调度按一定的算法调度到某个作业时,便将该作业中入内存,为其分配资源并创建进程,并插入到就绪队列。
+ 请求服务:
基于进程的需要,由其自身创建一个新进程并完成特定任务。
#### 4.1.2、进程的创建过程
进程创建是通过**创建原语**实现的。且主要创建过程如下:
+ 先向系统申请一个空闲 PCB并指定唯一的 PCB 标识符(PID)
+ 为新进程分配必要资源。
+ 将新进程的 PCB 初始化,为新进程填入进程名,家族信息,程序数据地址、优先级等信息。
+ 将新建成的 PCB 插入到就绪队列。
## 4.2、进程的撤销
进程的撤销是由**撤销原语**实现的。撤销原语可以采用两种策略,一种是只撤销一个具有指定标识符的进程,另一种是撤销指定进程及其所有子孙进程。导致进程撤销的事件有**进程正常,结束,进程异常结束以及外界干预**等。
#### 4.2.1、撤销原语的主要操作过程
+ 先从 PCB 集合中找到被撤销进程的 PCB 。
+ 若撤销进程正处于执行状态,则应立即停止对该进程的执行,设置重新调度标志。以便进程撤销后将处理器分配给其他进程。
+ 对于后一种撤销策略,若被撤销进程有子孙进程,还应将该进程的子孙进程予以撤销。
+ 回收撤销进程所占资源,归还给其父进程或者归还给系统。
+ 最后回收他的 PCB 。
### 4.3、进程的阻塞与唤醒
**阻塞原语P 原语)**的功能是将进程由执行状态转为阻塞状态,而**唤醒原语V 原语)**的功能则是将进程由阻塞状态转为就绪状态。
:::danger
不能简单地认为阻塞原语和唤醒原语的功能正好相反。注意它们各自将进程转的状态并不是互逆的。
:::
#### 4.3.1、阻塞原语的主要操作过程
当一个进程期待的某一事件尚未出现时,**该进程调用阻塞原语将自己阻塞起来**。
::: warning
此处是由该进程自身调用原语阻塞自己的,是一种**主动行为**。
:::
+ 首先停止当前进程的运行。应该进程正处于执行状态,故应中段处理器。
+ 保存该进程的cpu现场以便之后可以重新调用该进程并从中断点开始执行。
+ 停止运行该进程,将进程状态由执行状态改为阻塞状态,然后将该进程插入到阻塞队列中。
+ 转到进程调度程序,从就绪中队列中选择一个新的进程执行。
#### 4.3.2、唤醒原语的主要操作过程
对于处于阻塞状态的进程,当该进程期待的事件出现时,由**发现者进程调用唤醒原语将阻塞的进程唤醒**,使其进入就绪状态。
:::tip
此处是由发现者进程调用唤醒原语,而不是被阻塞进程本身调用,因此唤醒对于阻塞进程是一种**被动行为**。
:::
+ 将被唤醒进程从阻塞队列中移出。
+ 将状态改为就绪,并插入就绪队列。
### 4.4、进程切换过程
+ 保存处理及上下文。包括程序计数器和其他寄存器。
+ 更新pcb信息。
+ 把进程的pcb引入相应队列如就绪阻塞队列等。
+ 选择另一个进程执行更新其pcb。
+ 更新内存管理的数据结构。
+ 恢复出处理器的上下文。
## 5、进程通信
进程通信子进程之间的信息交换。
### 5.1、低级进程通信方式
进程的互斥与同步是一种进程间的通信方式。由于其信息量较少且效率较低。故被称为低级进程通信方式。同理可将P、V原语称为两条低级进程通信原语。
### 5.2、高级进程通信方式
+ **共享存储器系统**
为传输大量数据,在存储器中划出一块**共享存储区域,**多个进程可以通过对共享存储区进行读写来实现通信。
![](https://picbed.kimyang.cn/202108110545047.png)
+ **消息传递系统**
在消息传递系统中,进程间以**消息**为单位交换数据,用户直接利用系统提供的一组通信命令(原语)来实现通信。
![](https://picbed.kimyang.cn/202108110546422.png)
根据实现方式不同,消息传递系统可以分为以下两类:
+ 直接通信方式:发送进程直接把消息发送给接收进程,并将它挂在接收进程的消息缓冲队列上。接收进程从消息缓冲队列中取得消息。
![](https://picbed.kimyang.cn/202108110547672.png)
+ 间接通信方式:发送进程把消息发送到某个中间实体,通常称为信箱,接收进程从中取得消息。又被称为信箱通信方式。
![](https://picbed.kimyang.cn/202108110547495.png)
+ **管道通信系统**
管道是用于链接读进程和写进程以实现它们之间通信的**共享文件**。发送进程(写进程)以**字符流形式**将大量数据送入管道,接受进程(读进程)可以从管道中接收数据
<img src="https://picbed.kimyang.cn/202108110549902.png" style="zoom:150%;" />
## 6、线程
线程主要作用是减少并发执行所付出的时空开销,提高了程序并发执行的程度,从而进一步提高了系统的吞吐量。
### 6.1、线程的基本概念
线程是进程的一个相对独立的,可调度的执行单元,线程自己基本上不拥有资源,只拥有一点在运行时必不可少的资源,如程序计数器。一组寄存器和栈,但它可以与同属一个进程的其他线程共享进程拥有的全部资源。
多线程指的是一个进程中有多个线程。
#### 6.1.1、线程的实现
+ 内核级线程是指依赖于内核,由操作系统内核完成创建和撤销工作的线程。
+ 用户级线程是指不依赖于操作系统核心,由应用进程利用线程库提供创建,同步、调度和管理线程的函数来控制的线程。这种线程阻塞时,会导致整个进程都必须等待。
### 6.2、线程和进程的比较
+ 调度
+ 在传统的操作系统中,拥有资源和独立调度的基本单位都是进程。
+ 而在引入线程的操作系统中,线程是独立调度的基本单位,进程是拥有资源的基本单位。
+ 在同一进程都线程的切换不会引起进程的切换。在不同进程中进行线程切换,会引起进程的切换。
+ 拥有资源
能够拥有资源的只有进程。线程只可以访问隶属其进程的系统资源。
+ 并发性
在引入线程的操作系统中,不仅进程之间可以并发执行,而且同一进程内的多个线程也可以并发执行。
+ 系统开销
创建进程或撤销进程的开销远大于创建或撤销线程的开销。因为创建或撤消进程时,系统都要为这分配或回收资源。而线程切换时,只需要保存和设置少量寄存器的内容,因此开销很小。
### 6.3、多线程模型
![](https://picbed.kimyang.cn/202108110542363.jpeg)
+ 多对一模型
将多个用户级线程映射到一个内核级线程上。只要一个用户级线程阻塞,就会导致整个进程阻塞。
+ 一对一模型
将内核级线程与用户级线程一一对应。一个线程阻塞时,不影响其他线程的运行。缺点是创建一个用户级线程时,需要创建一个相映的内核级线程。
+ 多对多模型
将多个用户级线程映射到多个用内核级线程。一般来说,内核级线程数量不多于用户级线程数量。可以使多个用户级线程真正意义上并行执行,而且不会限制用户级线程的数量。

View File

@@ -2,4 +2,5 @@
title: 处理器调度
---
一片荒芜,期待你贡献出你的笔记~ 🥰
## 1、处理器的三级调度

View File

@@ -0,0 +1,4 @@
---
title: 代码书写规范以及语言基础
---
一片荒芜,期待你贡献出你的笔记~ 🥰

View File

@@ -0,0 +1,4 @@
---
title: 算法时空复杂度分析
---
一片荒芜,期待你贡献出你的笔记~ 🥰

View File

@@ -0,0 +1,4 @@
---
title: 数据结构和算法基本概念
---
一片荒芜,期待你贡献出你的笔记~ 🥰

View File

@@ -0,0 +1,4 @@
---
title: 线性表的基本概念与实现
---
一片荒芜,期待你贡献出你的笔记~ 🥰

View File

@@ -0,0 +1,4 @@
---
title: 结构体定义和基本操作
---
一片荒芜,期待你贡献出你的笔记~ 🥰

View File

@@ -0,0 +1,4 @@
---
title: 栈和队列的基本概念
---
一片荒芜,期待你贡献出你的笔记~ 🥰

View File

@@ -0,0 +1,4 @@
---
title: 栈和队列的存储结构
---
一片荒芜,期待你贡献出你的笔记~ 🥰

View File

@@ -0,0 +1,4 @@
---
title: 抽象数据类型
---
一片荒芜,期待你贡献出你的笔记~ 🥰

View File

@@ -0,0 +1,4 @@
---
title: 串数据类型的定义
---
一片荒芜,期待你贡献出你的笔记~ 🥰

View File

@@ -0,0 +1,4 @@
---
title: 串的模式匹配算法
---
一片荒芜,期待你贡献出你的笔记~ 🥰

View File

@@ -0,0 +1,4 @@
---
title: 数组
---
一片荒芜,期待你贡献出你的笔记~ 🥰

View File

@@ -0,0 +1,4 @@
---
title: 矩阵的压缩存储
---
一片荒芜,期待你贡献出你的笔记~ 🥰

View File

@@ -0,0 +1,4 @@
---
title: 广义表
---
一片荒芜,期待你贡献出你的笔记~ 🥰

View File

@@ -0,0 +1,4 @@
---
title: 树的基本概念
---
一片荒芜,期待你贡献出你的笔记~ 🥰

View File

@@ -0,0 +1,4 @@
---
title: 二叉树
---
一片荒芜,期待你贡献出你的笔记~ 🥰

View File

@@ -0,0 +1,4 @@
---
title: 树和森林与二叉树的互相转换
---
一片荒芜,期待你贡献出你的笔记~ 🥰

View File

@@ -0,0 +1,4 @@
---
title: 树和二叉树的应用
---
一片荒芜,期待你贡献出你的笔记~ 🥰

View File

@@ -0,0 +1,4 @@
---
title: 图的基本概念
---
一片荒芜,期待你贡献出你的笔记~ 🥰

View File

@@ -0,0 +1,4 @@
---
title: 图的存储结构
---
一片荒芜,期待你贡献出你的笔记~ 🥰

View File

@@ -0,0 +1,4 @@
---
title: 图的遍历算法操作
---
一片荒芜,期待你贡献出你的笔记~ 🥰

View File

@@ -0,0 +1,4 @@
---
title: 最小代价生成树
---
一片荒芜,期待你贡献出你的笔记~ 🥰

View File

@@ -0,0 +1,4 @@
---
title: 最短路径
---
一片荒芜,期待你贡献出你的笔记~ 🥰

View File

@@ -0,0 +1,4 @@
---
title: 拓扑排序
---
一片荒芜,期待你贡献出你的笔记~ 🥰

View File

@@ -0,0 +1,4 @@
---
title: 关键路径
---
一片荒芜,期待你贡献出你的笔记~ 🥰

View File

@@ -0,0 +1,4 @@
---
title: 排序的基本概念
---
一片荒芜,期待你贡献出你的笔记~ 🥰

View File

@@ -0,0 +1,4 @@
---
title: 插入类排序
---
一片荒芜,期待你贡献出你的笔记~ 🥰

View File

@@ -0,0 +1,4 @@
---
title: 交换类排序
---
一片荒芜,期待你贡献出你的笔记~ 🥰

View File

@@ -0,0 +1,4 @@
---
title: 选择类排序
---
一片荒芜,期待你贡献出你的笔记~ 🥰

View File

@@ -0,0 +1,4 @@
---
title: 二路归并排序
---
一片荒芜,期待你贡献出你的笔记~ 🥰

View File

@@ -0,0 +1,4 @@
---
title: 基数排序
---
一片荒芜,期待你贡献出你的笔记~ 🥰

View File

@@ -0,0 +1,4 @@
---
title: 外部排序
---
一片荒芜,期待你贡献出你的笔记~ 🥰

View File

@@ -0,0 +1,4 @@
---
title: 查找的基本概念
---
一片荒芜,期待你贡献出你的笔记~ 🥰

View File

@@ -0,0 +1,4 @@
---
title: 二叉排序树和平衡二叉树
---
一片荒芜,期待你贡献出你的笔记~ 🥰

View File

@@ -0,0 +1,4 @@
---
title: B-树
---
一片荒芜,期待你贡献出你的笔记~ 🥰

View File

@@ -0,0 +1,4 @@
---
title: 散列表
---
一片荒芜,期待你贡献出你的笔记~ 🥰

View File

@@ -8,12 +8,15 @@
"build": "vuepress build 408Notes"
},
"dependencies": {
"@renovamen/vuepress-plugin-katex": "^0.1.8",
"@vuepress-reco/vuepress-plugin-bulletin-popover": "^1.6.0",
"@vuepress-reco/vuepress-plugin-rss": "^1.0.2",
"@vuepress/plugin-pwa": "^1.8.2",
"markdown-it-katex": "^2.0.3",
"vuepress": "^1.8.2",
"vuepress-plugin-nuggets-style-copy": "^1.0.3",
"vuepress-plugin-permalink-pinyin": "^1.0.0",
"vuepress-plugin-sponsor": "^1.0.0",
"vuepress-theme-reco": "^1.6.6"
}
}

View File

@@ -1002,6 +1002,13 @@
resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b"
integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==
"@renovamen/vuepress-plugin-katex@^0.1.8":
version "0.1.8"
resolved "https://registry.yarnpkg.com/@renovamen/vuepress-plugin-katex/-/vuepress-plugin-katex-0.1.8.tgz#324c6902c4dfe19449d06bfc2de95668cc8eda6e"
integrity sha512-TTNMmWabBH84prOvthR1snCWDE+LbKprPJBFrn164DO2OgL6GTYZrGY4pbbO9cPTx2uwDuKr6+Vr47fMAROE+A==
dependencies:
katex "^0.13.10"
"@sindresorhus/is@^0.14.0":
version "0.14.0"
resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea"
@@ -2694,6 +2701,11 @@ commander@^2.20.0, commander@^2.20.3:
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
commander@^6.0.0:
version "6.2.1"
resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c"
integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==
commander@~2.19.0:
version "2.19.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a"
@@ -5230,6 +5242,20 @@ jsprim@^1.2.2:
json-schema "0.2.3"
verror "1.10.0"
katex@^0.13.10:
version "0.13.13"
resolved "https://registry.yarnpkg.com/katex/-/katex-0.13.13.tgz#15a796e95516869bc6d483443b58b2df872ee40f"
integrity sha512-cCMcil4jwMm7behpXGiQfXJA29sko/Gd/26iCsr53Dv5Jn2iHbHyEb14dm9uVrIijUXx6Zz1WhlFhHE6DckvkQ==
dependencies:
commander "^6.0.0"
katex@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/katex/-/katex-0.6.0.tgz#12418e09121c05c92041b6b3b9fb6bab213cb6f3"
integrity sha1-EkGOCRIcBckgQbazuftrqyE8tvM=
dependencies:
match-at "^0.1.0"
keyv@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9"
@@ -5570,6 +5596,13 @@ markdown-it-emoji@^1.4.0:
resolved "https://registry.yarnpkg.com/markdown-it-emoji/-/markdown-it-emoji-1.4.0.tgz#9bee0e9a990a963ba96df6980c4fddb05dfb4dcc"
integrity sha1-m+4OmpkKljupbfaYDE/dsF37Tcw=
markdown-it-katex@^2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/markdown-it-katex/-/markdown-it-katex-2.0.3.tgz#d7b86a1aea0b9d6496fab4e7919a18fdef589c39"
integrity sha1-17hqGuoLnWSW+rTnkZoY/e9YnDk=
dependencies:
katex "^0.6.0"
markdown-it-table-of-contents@^0.4.0:
version "0.4.4"
resolved "https://registry.yarnpkg.com/markdown-it-table-of-contents/-/markdown-it-table-of-contents-0.4.4.tgz#3dc7ce8b8fc17e5981c77cc398d1782319f37fbc"
@@ -5586,6 +5619,11 @@ markdown-it@^8.4.1:
mdurl "^1.0.1"
uc.micro "^1.0.5"
match-at@^0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/match-at/-/match-at-0.1.1.tgz#25d040d291777704d5e6556bbb79230ec2de0540"
integrity sha512-h4Yd392z9mST+dzc+yjuybOGFNOZjmXIPKWjxBd1Bb23r4SmDOsk2NYCU2BMUBGbSpZqwVsZYNq26QS3xfaT3Q==
md5.js@^1.3.4:
version "1.3.5"
resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
@@ -8712,6 +8750,11 @@ vuepress-plugin-smooth-scroll@^0.0.9:
dependencies:
smoothscroll-polyfill "^0.4.4"
vuepress-plugin-sponsor@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/vuepress-plugin-sponsor/-/vuepress-plugin-sponsor-1.0.0.tgz#376e21efc98d6ae271db4aaaa04cf5206b2c74f0"
integrity sha512-tXKhu1RN/zusQy1qela/SpKIKyRfzAsGNE1NZVcW99P3V4QzWigMvfNWlXipy3D4O/g8OrJza+hsSN95/4fAyA==
vuepress-theme-reco@^1.6.6:
version "1.6.6"
resolved "https://registry.yarnpkg.com/vuepress-theme-reco/-/vuepress-theme-reco-1.6.6.tgz#f286f0000b1702b9511a439469c15b0d2b1e992d"