From 83b58e38f349d7bddc3148662373dc6e1d65fb74 Mon Sep 17 00:00:00 2001 From: kim Date: Tue, 24 Aug 2021 00:58:54 +0800 Subject: [PATCH 1/4] :memo: add OS_2_4 --- .../操作系统/OS_2_进程管理/OS_2_4_死锁.md | 128 +++++++++++++++++- .../OS_3_内存管理/OS_3_2_虚拟内存管理.md | 3 +- 2 files changed, 128 insertions(+), 3 deletions(-) diff --git a/408Notes/操作系统/OS_2_进程管理/OS_2_4_死锁.md b/408Notes/操作系统/OS_2_进程管理/OS_2_4_死锁.md index e4b795c..e96e079 100644 --- a/408Notes/操作系统/OS_2_进程管理/OS_2_4_死锁.md +++ b/408Notes/操作系统/OS_2_进程管理/OS_2_4_死锁.md @@ -1,5 +1,131 @@ --- title: 死锁 + --- -一片荒芜,期待你贡献出你的笔记~ 🥰 +## 1、死锁的概念 + +当多个进程因竞争系统资源或互相通信而处于永久阻塞状态时,若无外力作用,这些进程都将无法向前推进。其中每一个进程都无限期地等待其他进程释放资源,这种状态被称为**死锁**。 + +## 2、死锁产生的原因和必要条件 + +### 2.1、资源分类 + +系统资源可以分为: + ++ 可剥夺资源:虽然资源占有者进程需要使用该资源,但一个进程可以强行该资源从占有的进程剥夺。 ++ 不可剥夺资源:除占有者进程不再需要使用该资源而主动释放资源,其他进程不得在占有者使用资源的过程中强行剥夺。 + +一个资源是否属于可剥夺资源,完全取决于**资源本身的性质**。 + +### 2.2、死锁产生的原因 + +竞争资源可能导致死锁了,但竞争资源并不等于死锁。 + +系统资源不足是产生死锁的根本原因,而进程推进顺序不当是产生死锁的重要原因。 + +### 2.3、死锁产生的必要条件 + ++ 互斥条件 ++ 不可剥夺 ++ 请求与保持(部分分配条件):每次申请部分资源,且在申请的同时保持已有资源 ++ 环路等待:存在一种进程资源的循环等待链 + +四个必要条件缺一不可! + +## 3、处理死锁的基本方法 + ++ **鸵鸟算法**:就是不管死锁 ++ **预防死锁**:设置某些限制条件去破坏产生死锁的 4 个必要条件中的一个或几个。 ++ **避免死锁**:在资源动态分配的过程中,用某种方法防止系统进入不安全状态。 ++ **监测及解除死锁** + +死锁预防和死锁避免有什么不同? + +死锁预防是添加严格的限制条件破坏死锁放生的条件,对系统并发性有很大的副作用。 + +死锁避免是通过算法计算,避免资源分配让系统处于不安全状态,对限制条件不严格。系统并发性更好。 + +## 4、死锁的预防 + +1. 互斥条件 + + 这会受到资源本身固有属性的限制,不能改变。 + +2. 不可剥夺 + + 对于已经获得某些资源的进程,新的资源请求不能立即被满足,则必须释放所有已经获得的资源。 + + 但是这样重复申请会增加系统开销,降低系统吞吐量。 + +3. 请求保持 + + 采用预先静态分配方法,要求进程在运行之前一次性申请所有所需的资源,在资源未满足之前,不投入运行。 + + 这种方法必须实现直到该进程所需的全部资源! + +4. 环路等待 + + 采用有序资源分配法,将系统中的所有资源都按类型赋予一个编号,要求每一个进程均严格按编号递增顺序请求资源,同类资源一次请求完。 + + 这种方法中各自资源的编号不易修改,限制了新设备的加入;也会增加程序编写的复杂性;不同作业队对资源使用的顺序不同,会造成资源浪费。 + +## 5、死锁的避免 + +### 5.1、安全状态与不安全状态 + +若在某一时刻,系统能按某种顺序来为每一个进程分配其所需的资源,使每个进程都可顺利完成,则称此时系统状态为**安全状态**,该序列为**安全序列**。若某一时刻不存在这样一个安全序列,则系统状态为**不安全状态**。 + +在某一时刻可以存在多种安全序列! + +并非所有不安全状态就是死锁状态,但当系统进入不安全状态后,便可能进入死锁状态。 + +对系统进行安全性检查是根据进程的最大资源需求而定的,而实际运行过程中进程可能不需要这么多的资源。 + +### 5.2 银行家算法 + +这个概念一般考选择题的计算问题,所以没什么概念性的东西,最好根据具体例题理解计算过程,很简单,就是一个加减法的问题。这里就不列出晦涩的描述语言了! + +## 6、死锁的检测和解除 + +### 6.1 死锁的检测 + +#### 6.1.1、系统资源分配图 + +进程的死锁问题可以用有向图更准确而形象地描述,这种有向图被称为系统资源分配图(SRAG)。 + +在 SRAG 中,用圆圈代表进程,用方框代表资源,从进程到资源的有向边是申请边,表示进程申请一个资源,从资源到进程的有向边是分配边,表示有一个资源分配了进程 。 + +![](https://picbed.kimyang.cn/202108240034150.jpg) + +#### 6.1.2、系统资源分配图的简化方法 + ++ 在 SRAG 中找出一个既不阻塞又非孤立的进程节点 P (从进程集合中找到一个存在链接的边,且资源申请数量小于系统已有空闲资源数量的进程),P 进程完成后释放所有资源,消去它所有的申请边和分配边 ++ P 释放资源之后,可以唤醒因等待这些资源而阻塞的进程,在执行前一步消去申请边和分配边 ++ 若能消去所有的边,则不会产生死锁,若不能消去所有边,则该图称为不可完全简化图。 + +**不同的简化顺序将得到相同的不可简化图**! + +这方法看起来繁琐,但其内核与银行家算法是一样的,上面写的复杂,实际就是一个加加减减的过程。建议结合实际题目理解! + +### 6.2、死锁检测算法 + +发现死锁的原理就是考察某一时刻系统状态是否安全,即是否存在一组可以实现的系统状态,能使所有进程都得到它们所申请的资源而运行结束。和银行家算法几乎一致! + +### 6.3、死锁解除 + ++ 剥夺资源 ++ 撤销进程 ++ 进程回退:让一个或多个进程回推到足够回避死锁的地步,进程回退时时自愿放弃自愿而不是被剥夺。要求系统保持进程历史信息,设置还原点。 + +## 7、死锁与饿死 + +当等待时间给进程推进和响应带来明显影响时,则称此时发生了**进程饥饿**,当饥饿到一定程度,进程所赋予的任务即使完成也不再具有实际意义的时候,该进程称为饿死。 + +死锁、饥饿与饿死有什么不同? + ++ 进程状态上:死锁进程处于等待状态(阻塞状态);而饥饿进程处于就绪状态,但却可能被饿死。 ++ 死锁进程等待的是永远不会被释放的资源,而饥饿进程等待的是会被释放但不会分配到自己的资源,表现为等待时间没有上限! ++ 死锁一定发生了循环等待,而饿死却不是了。所以资源分配图可以检测死锁,无法检测饿死 ++ 死锁一定涉及多个进程,饥饿或饿死可能只有一个! + diff --git a/408Notes/操作系统/OS_3_内存管理/OS_3_2_虚拟内存管理.md b/408Notes/操作系统/OS_3_内存管理/OS_3_2_虚拟内存管理.md index f2ced9f..6d27552 100644 --- a/408Notes/操作系统/OS_3_内存管理/OS_3_2_虚拟内存管理.md +++ b/408Notes/操作系统/OS_3_内存管理/OS_3_2_虚拟内存管理.md @@ -1,6 +1,5 @@ --- title: 虚拟内存管理 --- -# +## 1、虚拟内存的基本概念 -一片荒芜,期待你贡献出你的笔记~ 🥰 From a7d891fa8ec239fc2dca3f6168e04f4f3e9f2804 Mon Sep 17 00:00:00 2001 From: kim Date: Tue, 24 Aug 2021 01:15:49 +0800 Subject: [PATCH 2/4] :wrench: remove README file to index file --- 408Notes/.vuepress/config/sidebar.js | 110 +++++++++------------------ 1 file changed, 34 insertions(+), 76 deletions(-) diff --git a/408Notes/.vuepress/config/sidebar.js b/408Notes/.vuepress/config/sidebar.js index 512264b..5bae872 100644 --- a/408Notes/.vuepress/config/sidebar.js +++ b/408Notes/.vuepress/config/sidebar.js @@ -14,10 +14,10 @@ module.exports={ function getDataStructureSidebar1() { return [ - '/数据结构/', + // '/数据结构/', { title: '一、绪论', // 必要的 - path: '/数据结构/DS_1_概述/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 + // path: '/数据结构/DS_1_概述/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 collapsable: true, // 可选的, 默认值是 true, sidebarDepth: 2, // 可选的, 默认值是 1 children: [ @@ -28,7 +28,7 @@ function getDataStructureSidebar1() { }, { title: '二、线性表', // 必要的 - path: '/数据结构/DS_2_线性表/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 + // path: '/数据结构/DS_2_线性表/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 collapsable: true, // 可选的, 默认值是 true, sidebarDepth: 2, // 可选的, 默认值是 1 children: [ @@ -38,7 +38,7 @@ function getDataStructureSidebar1() { }, { title: '三、栈和队列', // 必要的 - path: '/数据结构/DS_3_栈和队列/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 + // path: '/数据结构/DS_3_栈和队列/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 collapsable: true, // 可选的, 默认值是 true, sidebarDepth: 2, // 可选的, 默认值是 1 children: [ @@ -59,7 +59,7 @@ function getDataStructureSidebar1() { }, { title: '五、数组、矩阵和广义表', // 必要的 - path: '/数据结构/DS_5_数组矩阵与广义表/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 + // path: '/数据结构/DS_5_数组矩阵与广义表/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 collapsable: true, // 可选的, 默认值是 true, sidebarDepth: 2, // 可选的, 默认值是 1 children: [ @@ -71,7 +71,7 @@ function getDataStructureSidebar1() { }, { title: '六、树与二叉树', // 必要的 - path: '/数据结构/DS_6_树与二叉树/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 + // path: '/数据结构/DS_6_树与二叉树/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 collapsable: true, // 可选的, 默认值是 true, sidebarDepth: 2, // 可选的, 默认值是 1 children: [ @@ -83,7 +83,7 @@ function getDataStructureSidebar1() { }, { title: '七、图', // 必要的 - path: '/数据结构/DS_7_图/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 + // path: '/数据结构/DS_7_图/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 collapsable: true, // 可选的, 默认值是 true, sidebarDepth: 2, // 可选的, 默认值是 1 children: [ @@ -98,7 +98,7 @@ function getDataStructureSidebar1() { }, { title: '八、排序', // 必要的 - path: '/数据结构/DS_8_排序/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 + // path: '/数据结构/DS_8_排序/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 collapsable: true, // 可选的, 默认值是 true, sidebarDepth: 2, // 可选的, 默认值是 1 children: [ @@ -113,7 +113,7 @@ function getDataStructureSidebar1() { }, { title: '九、查找', // 必要的 - path: '/数据结构/DS_9_查找/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 + // path: '/数据结构/DS_9_查找/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 collapsable: true, // 可选的, 默认值是 true, sidebarDepth: 2, // 可选的, 默认值是 1 children: [ @@ -184,57 +184,15 @@ function getDataStructureSidebar() { '/DataStructure/DS_3_String/DS_Doc_3_4_KMP算法的优化', ] }, - // { - // title: '五、树与二叉树', // 必要的 - // path: '/DataStructure/DS_4_TreeAndBinaryTree/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 - // collapsable: true, // 可选的, 默认值是 true, - // sidebarDepth: 2, // 可选的, 默认值是 1 - // children: [ - // '/DataStructure/DS_4_TreeAndBinaryTree/DS_Doc_4_0_树', - // '/DataStructure/DS_4_TreeAndBinaryTree/DS_Doc_4_1_树的性质', - // '/DataStructure/DS_4_TreeAndBinaryTree/DS_Doc_4_2_二叉树', - // '/DataStructure/DS_4_TreeAndBinaryTree/DS_Doc_4_3_二叉树的性质', - // '/DataStructure/DS_4_TreeAndBinaryTree/DS_Doc_4_4_二叉树的存储结构', - // '/DataStructure/DS_4_TreeAndBinaryTree/DS_Doc_4_5_二叉树的遍历', - // '/DataStructure/DS_4_TreeAndBinaryTree/DS_Doc_4_6_二叉树的构造', - // '/DataStructure/DS_4_TreeAndBinaryTree/DS_Doc_4_7_线索二叉树', - // '/DataStructure/DS_4_TreeAndBinaryTree/DS_Doc_4_8_二叉树的线索化', - // ] - // }, - // { - // title: '六、图', // 必要的 - // path: '/DataStructure/DS_5_Graph/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 - // collapsable: true, // 可选的, 默认值是 true, - // sidebarDepth: 2, // 可选的, 默认值是 1 - // children: [ - // ] - // }, - // { - // title: '七、搜索', // 必要的 - // path: '/DataStructure/DS_6_Search/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 - // collapsable: true, // 可选的, 默认值是 true, - // sidebarDepth: 2, // 可选的, 默认值是 1 - // children: [ - // ] - // }, - // { - // title: '八、排序', // 必要的 - // path: '/DataStructure/DS_7_Sort/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 - // collapsable: true, // 可选的, 默认值是 true, - // sidebarDepth: 2, // 可选的, 默认值是 1 - // children: [ - // ] - // }, - ] } function getComputerOrganizationSidebar() { return [ - '/计算机组成原理/', + // '/计算机组成原理/', { title: '一、计算机系统概述', // 必要的 - path: '/计算机组成原理/CO_1_概述/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 + // path: '/计算机组成原理/CO_1_概述/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 collapsable: true, // 可选的, 默认值是 true, sidebarDepth: 2, // 可选的, 默认值是 1 children: [ @@ -247,7 +205,7 @@ function getComputerOrganizationSidebar() { }, { title: '二、数据的表示和运算', // 必要的 - path: '/计算机组成原理/CO_2_数据/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 + // path: '/计算机组成原理/CO_2_数据/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 collapsable: true, // 可选的, 默认值是 true, sidebarDepth: 2, // 可选的, 默认值是 1 children: [ @@ -259,7 +217,7 @@ function getComputerOrganizationSidebar() { }, { title: '三、存储器层次结构', // 必要的 - path: '/计算机组成原理/CO_3_存储器/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 + // path: '/计算机组成原理/CO_3_存储器/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 collapsable: true, // 可选的, 默认值是 true, sidebarDepth: 2, // 可选的, 默认值是 1 children: [ @@ -275,7 +233,7 @@ function getComputerOrganizationSidebar() { }, { title: '四、指令系统', // 必要的 - path: '/计算机组成原理/CO_4_指令系统/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 + // path: '/计算机组成原理/CO_4_指令系统/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 collapsable: true, // 可选的, 默认值是 true, sidebarDepth: 2, // 可选的, 默认值是 1 children: [ @@ -286,7 +244,7 @@ function getComputerOrganizationSidebar() { }, { title: '五、中央处理器', // 必要的 - path: '/计算机组成原理/CO_5_CPU/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 + // path: '/计算机组成原理/CO_5_CPU/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 collapsable: true, // 可选的, 默认值是 true, sidebarDepth: 2, // 可选的, 默认值是 1 children: [ @@ -300,7 +258,7 @@ function getComputerOrganizationSidebar() { }, { title: '六、总线', // 必要的 - path: '/计算机组成原理/CO_6_总线/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 + // path: '/计算机组成原理/CO_6_总线/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 collapsable: true, // 可选的, 默认值是 true, sidebarDepth: 2, // 可选的, 默认值是 1 children: [ @@ -312,7 +270,7 @@ function getComputerOrganizationSidebar() { }, { title: '七、输入/输出系统', // 必要的 - path: '/计算机组成原理/CO_7_IO/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 + // path: '/计算机组成原理/CO_7_IO/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 collapsable: true, // 可选的, 默认值是 true, sidebarDepth: 2, // 可选的, 默认值是 1 children: [ @@ -324,7 +282,7 @@ function getComputerOrganizationSidebar() { }, { title: '八、非统考知识点补充', // 必要的 - path: '/计算机组成原理/CO_8_Other/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 + // path: '/计算机组成原理/CO_8_Other/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 collapsable: true, // 可选的, 默认值是 true, sidebarDepth: 2, // 可选的, 默认值是 1 children: [ @@ -336,10 +294,10 @@ function getComputerOrganizationSidebar() { function getComputerNetworkSidebar() { return [ - '/计算机网络/', + // '/计算机网络/', { title: '一、计算机网络体系结构', // 必要的 - path: '/计算机网络/CN_1_概述/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 + // path: '/计算机网络/CN_1_概述/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 collapsable: true, // 可选的, 默认值是 true, sidebarDepth: 2, // 可选的, 默认值是 1 children: [ @@ -349,7 +307,7 @@ function getComputerNetworkSidebar() { }, { title: '二、物理层', // 必要的 - path: '/计算机网络/CN_2_物理层/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 + // path: '/计算机网络/CN_2_物理层/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 collapsable: true, // 可选的, 默认值是 true, sidebarDepth: 2, // 可选的, 默认值是 1 children: [ @@ -360,7 +318,7 @@ function getComputerNetworkSidebar() { }, { title: '三、数据链路层', // 必要的 - path: '/计算机网络/CN_3_数据链路层/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 + // path: '/计算机网络/CN_3_数据链路层/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 collapsable: true, // 可选的, 默认值是 true, sidebarDepth: 2, // 可选的, 默认值是 1 children: [ @@ -375,7 +333,7 @@ function getComputerNetworkSidebar() { }, { title: '四、网络层', // 必要的 - path: '/计算机网络/CN_4_网络层/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 + // path: '/计算机网络/CN_4_网络层/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 collapsable: true, // 可选的, 默认值是 true, sidebarDepth: 2, // 可选的, 默认值是 1 children: [ @@ -391,7 +349,7 @@ function getComputerNetworkSidebar() { }, { title: '五、传输层', // 必要的 - path: '/计算机网络/CN_5_传输层/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 + // path: '/计算机网络/CN_5_传输层/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 collapsable: true, // 可选的, 默认值是 true, sidebarDepth: 2, // 可选的, 默认值是 1 children: [ @@ -402,7 +360,7 @@ function getComputerNetworkSidebar() { }, { title: '六、应用层', // 必要的 - path: '/计算机网络/CN_6_应用层/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 + // path: '/计算机网络/CN_6_应用层/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 collapsable: true, // 可选的, 默认值是 true, sidebarDepth: 2, // 可选的, 默认值是 1 children: [ @@ -415,7 +373,7 @@ function getComputerNetworkSidebar() { }, { title: '七、其他知识补充', // 必要的 - path: '/计算机网络/CN_7_补充/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 + // path: '/计算机网络/CN_7_补充/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 collapsable: true, // 可选的, 默认值是 true, sidebarDepth: 2, // 可选的, 默认值是 1 children: [ @@ -426,10 +384,10 @@ function getComputerNetworkSidebar() { function getOperatingSystemSidebar() { return [ - '/操作系统/', + // '/操作系统/', { title: '一、绪论', // 必要的 - path: '/操作系统/OS_1_绪论/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 + // path: '/操作系统/OS_1_绪论/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 collapsable: true, // 可选的, 默认值是 true, sidebarDepth: 2, // 可选的, 默认值是 1 children: [ @@ -441,7 +399,7 @@ function getOperatingSystemSidebar() { }, { title: '二、进程管理', // 必要的 - path: '/操作系统/OS_2_进程管理/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 + // path: '/操作系统/OS_2_进程管理/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 collapsable: true, // 可选的, 默认值是 true, sidebarDepth: 2, // 可选的, 默认值是 1 children: [ @@ -453,7 +411,7 @@ function getOperatingSystemSidebar() { }, { title: '三、内存管理', // 必要的 - path: '/操作系统/OS_3_内存管理/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 + // path: '/操作系统/OS_3_内存管理/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 collapsable: true, // 可选的, 默认值是 true, sidebarDepth: 2, // 可选的, 默认值是 1 children: [ @@ -465,7 +423,7 @@ function getOperatingSystemSidebar() { }, { title: '四、文件管理', // 必要的 - path: '/操作系统/OS_4_文件管理/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 + // path: '/操作系统/OS_4_文件管理/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 collapsable: true, // 可选的, 默认值是 true, sidebarDepth: 2, // 可选的, 默认值是 1 children: [ @@ -476,7 +434,7 @@ function getOperatingSystemSidebar() { }, { title: '五、设备管理', // 必要的 - path: '/操作系统/OS_5_设备管理/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 + // path: '/操作系统/OS_5_设备管理/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 collapsable: true, // 可选的, 默认值是 true, sidebarDepth: 2, // 可选的, 默认值是 1 children: [ @@ -486,7 +444,7 @@ function getOperatingSystemSidebar() { }, { title: '六、补充', // 必要的 - path: '/操作系统/OS_6_补充/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 + // path: '/操作系统/OS_6_补充/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 collapsable: true, // 可选的, 默认值是 true, sidebarDepth: 2, // 可选的, 默认值是 1 children: [ @@ -496,7 +454,7 @@ function getOperatingSystemSidebar() { } function getOperatingSystemWrongSetSidebar() { return [ - '/操作系统错题集/', + // '/操作系统错题集/', // '/操作系统错题集/Err_OS_1_绪论', { title: '一、绪论', // 必要的 From 8754698b56dd5ef64d098eca5aced1a2097f608c Mon Sep 17 00:00:00 2001 From: KimYangOfCat Date: Tue, 24 Aug 2021 01:20:20 +0800 Subject: [PATCH 3/4] :memo: update OS_3_2 --- 408Notes/操作系统/OS_3_内存管理/OS_3_2_虚拟内存管理.md | 1 + 1 file changed, 1 insertion(+) diff --git a/408Notes/操作系统/OS_3_内存管理/OS_3_2_虚拟内存管理.md b/408Notes/操作系统/OS_3_内存管理/OS_3_2_虚拟内存管理.md index 6d27552..4fd9581 100644 --- a/408Notes/操作系统/OS_3_内存管理/OS_3_2_虚拟内存管理.md +++ b/408Notes/操作系统/OS_3_内存管理/OS_3_2_虚拟内存管理.md @@ -3,3 +3,4 @@ title: 虚拟内存管理 --- ## 1、虚拟内存的基本概念 +### 1.1、虚拟内存引入的原因 From aa781ca4e2f40e74e178aa9affe9cc7d0395225c Mon Sep 17 00:00:00 2001 From: KimYangOfCat Date: Tue, 24 Aug 2021 02:00:36 +0800 Subject: [PATCH 4/4] :memo: update --- 408Notes/操作系统/OS_3_内存管理/OS_3_2_虚拟内存管理.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/408Notes/操作系统/OS_3_内存管理/OS_3_2_虚拟内存管理.md b/408Notes/操作系统/OS_3_内存管理/OS_3_2_虚拟内存管理.md index 4fd9581..5b75a63 100644 --- a/408Notes/操作系统/OS_3_内存管理/OS_3_2_虚拟内存管理.md +++ b/408Notes/操作系统/OS_3_内存管理/OS_3_2_虚拟内存管理.md @@ -4,3 +4,6 @@ title: 虚拟内存管理 ## 1、虚拟内存的基本概念 ### 1.1、虚拟内存引入的原因 + +### 1.2、局部性原理 +