当前课程知识点:操作系统 >  第二十讲 死锁和进程通信 >  20.2 死锁处理方法 >  20.2 死锁处理方法

返回《操作系统》慕课在线视频课程列表

20.2 死锁处理方法在线视频

20.2 死锁处理方法

下一节:20.3 银行家算法

返回《操作系统》慕课在线视频列表

20.2 死锁处理方法课程教案、知识点、字幕

下面我们来讨论死锁的处理方法

死锁的处理方法呢

我们通常情况下可以理解为

跟我们的消防的方法是很类似的

这里头呢 我们基本上可以按照

消防的那些处理方法来进行类比

首先第一个 就是死锁预防

确保系统永远不会进入死锁状态

比如说我们在消防里头

为了避免火灾

我在一些敏感的区域里头

我就会限定 在这个区域里头

不允许用任何的火

好 那这样一来的话

在这个区域里出现火灾的

可能性也就没有了

那对于死锁来说呢

我们也是一样的

我们在那里呢

死锁可能出现的时候

有四个必要条件

那我们把那四个必要条件里的

任何一个去掉

它就不会进入死锁了

但是这时候呢

实际上它的问题是说

你不让它使用这些资源

不让那四个条件得到满足

那这时候呢 实际上可能的问题是

系统的资源利用效率比较低

那这就是第二种做法

就是死锁避免

这可以理解为

我们采用严格的监管措施

到底是否是允许用火

有一个严格的审批流程

比如说在某些区域里头

你不可以完全禁止用火

那这时候呢 我就会说

什么样的人 有什么样的资质的人

能够处理这个问题的人 你可以用

比如说在林区的防火

只有相应的 有资质的人

你可以在这里头去使用

这是我们这里的第二种做法

在使用之前进行判断

只允许不会出现死锁的进程请求资源

这就是我们在这里头 死锁避免

再有一种做法呢

是我在管理不过来的时候

那我就会允许第三种做法

死锁检测和恢复

是否会出现死锁

这个事我管不过来

那我也就不管了

比如说像在居民用火

你不允许他不用火是不可能的

你进行严格的监管呢也做不到

那这怎么办呢

我们就预备一个消防队

出了问题之后我派消防队去

那么这也是一样的

我检测到系统进入死锁状态后

那我就进行恢复

而在我们这几种做法里头呢

在我们实际的操作系统里呢

通常情况下我们把这件事情

指派给应用进程来处理

通常操作系统是忽略死锁的存在

这是我们目前

大多数操作系统的做法

那有了这样一个非常粗的介绍之后

我们下边就来具体看一下

这三种做法里的情况

第一个 死锁预防

也就是说

我们限制进程申请资源的方式

那怎么来限制呢

就是限制的结果是

不满足死锁的必要条件

怎么能做到不满足死锁的必要条件呢

我们有四个条件

任何一个不满足就可以了

比如说第一个互斥

我们把需要互斥访问的资源

封装成可以同时访问的

那这件事情就没了

一个实际的例子是说我们的打印机

在早期的时候 打印机每个进程

可以往打印机上送打印作业

那这时候 在送的过程当中呢

是必须互斥的

如果说两个进程同时往一台打印机上

送打印作业

那这时候打出来的结果

是谁也不能用了

而现在呢 我们在使用打印机的时候

你基本上感觉不到这一条

原因在于 我们在打印机里加了缓冲

只有当前一个送完了之后

它才会去接收另一个的打印请求

那这就是我们现在的

网络打印机的做法

好 那这样一来的话

它就可以大家一起使用

只是说在打印机内部

它给你协调谁先谁后

这是第一个 把互斥条件去掉

第二个是说 我把持有并等待

这个条件给去掉

那在这个条件里头呢

实际上是我申请到的一部分资源

我再去申请另一部分资源

那我怎么可以把它去掉呢

一种做法是说你在请求资源的时候

你不能占用任何资源

这指什么意思呢

这指是说你要想申请资源的话

你就必须一次

把所有的资源全部申请到

如果说你已经申请了一部分

然后再去申请的话

那就会出现死锁的可能性

这个呢 有一个形象的比喻是说

我们在贷款的时候

你希望去做一个项目

好 这时候呢

需要银行给你贷款

那你可以说 我一次把所有

我需要的钱全部贷出来

这样就避免一种情况是说

我做到一半 我钱不够用了

这种情况

但是这时候呢 它的问题是

它的资源效率会是利用比较低的

这种做法更细化下去的一种

可以操作的做法就是

我进程在开始的时候

申请所有需要的资源

如果说我不满足

我这个申请的要求的话

那就不允许它开始

那这样一来每一个开始进程

它就确信它一定能执行到结束

这样的话我这个问题也解决掉了

这是它最主要的问题

资源利用效率太低

你比如说像我们修一个水电站

持续几年 十几年的时间

那你最开始的时候

一口气把它需要的资金全部到位

那这时候实际上

它的利用效率是非常低的

那第三个做法呢 是非抢占

我们在前边说有一个条件

你分配资源之后

进程不主动放弃的话

我是没有办法回收的

这样的话 我才能构成

循环无限期等待

如果说在这里头加一个条件

一旦你申请的资源不能立即分配

你就释放你已经占用的所有资源

如果说我们有这一条的话

那这件事情也没有了

这个对于我们刚才说的

单向通行桥梁的情况

就是一旦两辆车撞上了

那这时候两辆车都会往回倒

那再来申请的时候

这个单向通行的桥梁呢

也就能通行了

只有在这里头 进程能够获取到

它所有需要的资源

它才给它分配

这样的话实际上某种角度上

跟我们前面说的

去掉持有并等待这个条件的做法

有类似的地方

也相当于在那里头呢

我是要申请一次全部申请

在这地方呢 我申请

在我再申请的时候

我必须需要的资源都有

我才能够往下申请

最后一个 循环等待

我们怎么把它去掉呢

实际上就是对资源排序

按照我们固定的顺序来申请资源

这时候我就不存在循环等待了

这时候它会有啥问题呢

和我们前边的做法有类似的地方

按照顺序来申请

可能你先申请的某一项资源

实际上我是后用到

这时候也会有效率下降的问题

这是我们说到的死锁预防

通过这一类办法呢

我们可以避免死锁出现的四个条件

任何一个不成立 那这事就没了

第二类做法呢 是死锁避免

这是针对第一类做法

如果说我想完全禁止掉

它出现死锁的话

那这时候呢 我的资源利用效率低

那提高资源利用效率的办法呢

就是给我自己分配资源的时候

把这个手续变得更复杂

那这里做法就是

我利用额外的先验信息

在分配资源的时候

我来判断是否会出现死锁

如果说有可能出现死锁

那我就不分配给你

那只是没有可能出现死锁的情况

我才分配给你

这就是我们这里说的死锁避免

这就有点像在银行里 你去借款

它依据你的信用情况

来判断我借给你之后

你是否会如期归还

如果说我判断完的结果

你是有可能不如期归还

当然我判断完之后

你有可能不如期归还

你也有可能是能归还的

好 我判断完了之后

只是信用比较好的

我才分配给它资源

当然这种情况它也是有风险的

那在计算机系统里头呢

就是你对先验知识的准确性了

具体做法是这样的

要求进程事先声明你的需求量

也就是说你最大的需求资源数是多少

银行里头可以满足这个资源数

那我就把这资源分配给你

那这时候呢 实际上相当于

我限定提供和分配资源的时候

我必须能确保满足进程的最大需求

如果不能满足的话

我就是会有麻烦的 会出现死锁

那我就不分配给你

那这时候说 我们怎么知道

它是否会有麻烦呢

那这时候就是 我们动态进行检查

那这时候就是我们前面说到的

资源分配图 在这就能用得上了

我判断分配给你这个资源之后

不会出现死锁

我就把它分配给你

这是第二种做法

那在这第二种做法里头呢

就有一个比较麻烦的事

银行或者说系统必须来动态地判断

我是否分配给你资源之后

不会出现死锁

那这就是我们这里说到的

系统资源分配安全状态

你在请求的时候系统判断是否安全

安全了我才分配给你

那怎么算是安全呢

实际上就是针对

所有进程已占用的资源

我来找出一个进程的执行序列

这个序列执行

保证我已有的资源能够满足

这个序列执行到结束

如果能行的话

我这系统的状态就是安全的

好 你要求分配的资源

我就是可以分配给你了

稍微具体一点是这样的

我当前所有占用资源的进程

P1到Pn

我在这里给它做一个排序

这个排序有这样一个要求

Pi要求的资源

它小于我当前可用的空闲资源

和Pj已经占用的资源

这个Pj是在这个序列当中

小于i的所有之间

也就是说在它之前的

这些进程已经占用的资源

加上现在可用的这些空闲的资源

它俩搁在一起

是否能满足进程PI的要求

如果能满足

对于所有这些都能满足的话

那这就是安全的

这就相当于是什么样的做法呢

就是第一个进程Pi

它没有再往前的进程了

所以这时候呢

当前可用的资源

必须能够满足P1的需求

那这时候它就是安全的

如果说后续的某一个Pi

它请求的时候

当前可用的不够

前边还有一些被其他进程占用了

那这时候它就等待

等待你前边的这些进程执行结束

那你的占用资源不就回来了吗

由于有上边的一条回来的资源

就能够满足我的要求了

搁在一起我就可以执行完毕了

执行完之后

我这事就行了

等到整个序列当中的

任何一个进程都执行结束

最后一个也就能满足它的需求

到这我们整个系统里的

占有资源的进程都能正常的完成

那我的系统就是安全的

有了这个描述之后

我们的安全和死锁之间的关系呢

就可以用这个图来表示

说我们在这个系统里头

处于安全状态的

它一定不会出现死锁

那是不是说我不安全的

就一定会死锁呢

也不是这样的

就好比说银行

我把这个款贷出去

有可能对方还不了我

但是他也有可能能还我

如果他能还的话

这件事情也是可做的

这就看你的风险有多大了

实际上我们在这画了一个更大的圈

用不安全其中包括死锁状态

我只是对于安全情况我来分配资源

这样的话

从而保证我系统不会出现死锁

如果说不安全

是有可能出现死锁的

我们避免出现死锁

我就在这画的这条线上

来保证我系统是处于安全的状态

到这我们说清楚了

死锁的处理的三类办法

基本上是按照我们消防的

那三类办法来做处理

操作系统课程列表:

第零讲 在线教学环境准备

-0.1 Piazza讨论区

--piazza访问和使用

--html

-0.2 在线实验平台

--实验平台使用帮助

--平台使用帮助

--Gitlab使用帮助

--IBM内部账号初始化

-0.2在线实验平台

--Raw HTML

第一讲 操作系统概述

-1.1 课程概述

--视频

-第一讲 操作系统概述--练习

-1.2 教学安排

--视频

-1.3 什么是操作系统

--Video

-1.4 为什么学习操作系统,如何学习操作系统

--Video

-1.5 操作系统实例

--视频

-1.6 操作系统的演变

--视频

-1.7 操作系统结构

--视频

第二讲 实验零 操作系统实验环境准备

-2.1 前言和国内外现状

--2.1 前言和国内外现状

-2.2 OS实验目标

--2.2 OS实验目标

-2.3 8个OS实验概述

--2.3 8个OS实验概述

-2.4 实验环境搭建

--2.4 实验环境搭建

-2.5 x86-32硬件介绍

--2.5 x86-32硬件介绍

-2.6 ucore部分编程技巧

--2.6 ucore部分编程技巧

-2.7 演示实验操作过程

--2.7 演示实验操作过程

--Q6

--Q7

--Q10

第三讲 启动、中断、异常和系统调用

-3.1 BIOS

--3.1 BIOS

-3.2 系统启动流程

--3.2 系统启动流程

-3.3 中断、异常和系统调用比较

--3.3 中断、异常和系统调用比较

-第三讲 启动、中断、异常和系统调用--3.3 中断、异常和系统调用比较

-3.4 系统调用

--3.4 系统调用

-第三讲 启动、中断、异常和系统调用--3.4 系统调用

-3.5 系统调用示例

--3.5 系统调用示例

-3.6 ucore+系统调用代码

--3.6 ucore+系统调用代码

第四讲 实验一 bootloader启动ucore os

-4.1 启动顺序

--4.1 启动顺序

-4.2 C函数调用的实现

--4.2 C函数调用的实现

-4.3 GCC内联汇编

--4.3 GCC内联汇编

-4.4 x86中断处理过程

--4.4 x86中断处理过程

-4.5 练习一

--4.5 练习一

-4.6 练习二

--4.6 练习二

-4.7 练习三

--4.7 练习三

-4.8 练习四 练习五

--4.8 练习四练习五

-4.9 练习六

--4.9 练习六

第五讲 物理内存管理: 连续内存分配

-5.1 计算机体系结构和内存层次

--5.1 计算机体系结构和内存层次

-5.2 地址空间和地址生成

--5.2 地址空间和地址生成

-5.3 连续内存分配

--5.3 连续内存分配

-5.4 碎片整理

--5.4 碎片整理

-5.5 伙伴系统

--5.5 伙伴系统

-第五讲 物理内存管理: 连续内存分配--5.6 练习

第六讲 物理内存管理: 非连续内存分配

-6.1 非连续内存分配的需求背景

--6.1 非连续内存分配的需求背景

-6.2 段式存储管理

-- 6.2 段式存储管理

-6.3 页式存储管理

--6.3 页式存储管理

-6.4 页表概述

--6.4 页表概述

-6.5 快表和多级页表

--6.5 快表和多级页表

-6.6 反置页表

--6.6 反置页表

-6.7 段页式存储管理

--6.7 段页式存储管理

-第六讲 物理内存管理: 非连续内存分配--6.8 练习

第七讲 实验二 物理内存管理

-7.1 了解x86保护模式中的特权级

--7.1 了解x86保护模式中的特权级

-第七讲 实验二 物理内存管理--7.1 了解x86保护模式中的特权级

-7.2 了解特权级切换过程

--7.2 了解特权级切换过程

-第七讲 实验二 物理内存管理--7.2 了解特权级切换过程

-7.3 了解段/页表

--7.3 了解段/页表

-第七讲 实验二 物理内存管理--7.3 了解段/页表

-7.4 了解UCORE建立段/页表

--7.4 了解ucore建立段/页表

-第七讲 实验二 物理内存管理--7.4 了解UCORE建立段/页表

-7.5 演示lab2实验环节

--7.5 演示lab2实验环节

第八讲 虚拟存储概念

-8.1 虚拟存储的需求背景

--8.1 虚拟存储的需求背景

-8.2 覆盖和交换

--8.2 覆盖和交换

-8.3 局部性原理

--8.3 局部性原理

-8.4 虚拟存储概念

--8.4 虚拟存储概念

-8.5 虚拟页式存储

--8.5 虚拟页式存储

-8.6 缺页异常

--8.6 缺页异常

第九讲 页面置换算法

-9.1 页面置换算法的概念

--9.1 页面置换算法的概念

-9.2 最优算法、先进先出算法和最近最久未使用算法

--9.2 最优算法、先进先出算法和最近最久未使用算法

-第九讲 页面置换算法--9.2 最优算法、先进先出算法和最近最久未使用算法

-9.3 时钟置换算法和最不常用算法

--9.3 时钟置换算法和最不常用算法

-第九讲 页面置换算法--9.3 时钟置换算法和最不常用算法

-9.4 Belady现象和局部置换算法比较

--9.4 Belady现象和局部置换算法比较

-第九讲 页面置换算法--9.4 Belady现象和局部置换算法比较

-9.5 工作集置换算法

--9.5 工作集置换算法

-第九讲 页面置换算法--9.5 工作集置换算法

-9.6 缺页率置换算法

--9.6 缺页率置换算法

-第九讲 页面置换算法--9.6 缺页率置换算法

-9.7 抖动和负载控制

--9.7 抖动和负载控制

第十讲 实验三 虚拟内存管理

-10.1 实验目标:虚存管理

--10.1 实验目标:虚存管理

-第十讲 实验三 虚拟内存管理--10.1 实验目标:虚存管理

-10.2 回顾历史和了解当下

-- 10.2 回顾历史和了解当下

-第十讲 实验三 虚拟内存管理--10.2 回顾历史和了解当下

-10.3 处理流程、关键数据结构和功能

--10.3 处理流程、关键数据结构和功能

-第十讲 实验三 虚拟内存管理--10.3 处理流程、关键数据结构和功能

-10.4 页访问异常

--10.4 页访问异常

-第十讲 实验三 虚拟内存管理--10.4 页访问异常

-10.5 页换入换出机制

--10.5 页换入换出机制

-第十讲 实验三 虚拟内存管理--10.5 页换入换出机制

第十一讲 进程和线程

-11.1 进程的概念

--11.1 进程的概念

-第十一讲 进程和线程--11.1 进程的概念

-11.2 进程控制块

--11.2 进程控制块

-第十一讲 进程和线程--11.2 进程控制块

-11.3 进程状态

--11.3 进程状态

-第十一讲 进程和线程--11.3 进程状态

-11.4 三状态进程模型

--11.4 三状态进程模型

-11.5 挂起进程模型

--11.5 挂起进程模型

-第十一讲 进程和线程--11.5 挂起进程模型

-11.6 线程的概念

--11.6 线程的概念

-第十一讲 进程和线程--11.6 线程的概念

-11.7 用户线程

--11.7 用户线程

-第十一讲 进程和线程--11.7 用户线程

-11.8 内核线程

--11.8 内核线程

-第十一讲 进程和线程--11.8 内核线程

第十二讲 进程控制

-12.1 进程切换

--12.1 进程切换

-第十二讲 进程控制--12.1 进程切换

-12.2 进程创建

--12.2 进程创建

-第十二讲 进程控制--12.2 进程创建

-12.3 进程加载

--12.3 进程加载

-第十二讲 进程控制--12.3 进程加载

-12.4 进程等待与退出

--12.4 进程等待与退出

-第十二讲 进程控制--12.4 进程等待与退出

第十三讲 实验四 内核线程管理

-13.1 总体介绍

--13.1 总体介绍

-13.2 关键数据结构

--13.2 关键数据结构

-13.3 执行流程

--13.3 执行流程

-13.4 实际操作

--13.4 实际操作

第十四讲 实验五 用户进程管理

-14.1 总体介绍

--14.1 总体介绍

-14.2 进程的内存布局

--14.2 进程的内存布局

-14.3 执行ELF格式的二进制代码-do_execve的实现

--14.3 执行ELF格式的二进制代码-do_execve的实现

-14.4 执行ELF格式的二进制代码-load_icode的实现

--14.4 执行ELF格式的二进制代码-load_icode的实现

-14.5 进程复制

--14.5 进程复制

-14.6 内存管理的copy-on-write机制

--14.6 内存管理的copy-on-write机制

第十五讲 处理机调度

-15.1 处理机调度概念

--15.1 处理机调度概念

-第十五讲 处理机调度--15.1 处理机调度概念

-15.2 调度准则

--15.2 调度准则

-15.3 先来先服务、短进程优先和最高响应比优先调度算法

--15.3 先来先服务、短进程优先和最高响应比优先调度算法

-第十五讲 处理机调度--15.3 先来先服务、短进程优先和最高响应比优先调度算法

-15.4 时间片轮转、多级反馈队列、公平共享调度算法和ucore调度框架

--15.4 时间片轮转、多级反馈队列、公平共享调度算法和ucore调度框架

-第十五讲 处理机调度--15.4 时间片轮转、多级反馈队列、公平共享调度算法和uc

-15.5 实时调度和多处理器调度

--15.5 实时调度和多处理器调度

-第十五讲 处理机调度--15.5 实时调度和多处理器调度

-15.6 优先级反置

--15.6 优先级反置

-第十五讲 处理机调度--15.6 优先级反置

第十六讲 实验六 调度器

-16.1 总体介绍和调度过程

--16.1 总体介绍和调度过程

-16.2 调度算法支撑框架

--16.2 调度算法支撑框架

-16.3 时间片轮转调度算法

--16.3 时间片轮转调度算法

-16.4 Stride调度算法

--16.4 Stride调度算法

第十七讲 同步互斥

-17.1 背景

--17.1 背景

-17.2 现实生活中的同步问题

--17.2 现实生活中的同步问题

-第十七讲 同步互斥--17.2 现实生活中的同步问题

-17.3 临界区和禁用硬件中断同步方法

--17.3 临界区和禁用硬件中断同步方法

-第十七讲 同步互斥--17.3 临界区和禁用硬件中断同步方法

-17.4 基于软件的同步方法

--17.4 基于软件的同步方法

-第十七讲 同步互斥--17.4 基于软件的同步方法

-17.5 高级抽象的同步方法

--17.5 高级抽象的同步方法

-第十七讲 同步互斥--17.5 高级抽象的同步方法

第十八讲 信号量与管程

-18.1 信号量

--18.1 信号量

-第十八讲 信号量与管程--18.1 信号量

-18.2 信号量使用

--18.2 信号量使用

-第十八讲 信号量与管程--18.2 信号量使用

-18.3 管程

--18.3 管程

-第十八讲 信号量与管程--18.3 管程

-18.4 哲学家就餐问题

--18.4 哲学家就餐问题

-18.5 读者-写者问题

--18.5 读者-写者问题

第十九讲 实验七 同步互斥

-19.1 总体介绍

--19.1 总体介绍

-19.2 底层支撑

--19.2 底层支撑

-第十九讲 实验七 同步互斥--19.2 底层支撑

-19.3 信号量设计实现

--19.3 信号量设计实现

-第十九讲 实验七 同步互斥--19.3 信号量设计实现

-19.4 管程和条件变量设计实现

--19.4 管程和条件变量设计实现

-第十九讲 实验七 同步互斥--19.4 管程和条件变量设计实现

-19.5 哲学家就餐问题

--19.5 哲学家就餐问题

第二十讲 死锁和进程通信

-20.1 死锁概念

--20.1 死锁概念

-第二十讲 死锁和进程通信--20.1 死锁概念

-20.2 死锁处理方法

--20.2 死锁处理方法

-第二十讲 死锁和进程通信--20.2 死锁处理方法

-20.3 银行家算法

--20.3 银行家算法

-第二十讲 死锁和进程通信--20.3 银行家算法

-20.4 死锁检测

--20.4 死锁检测

-第二十讲 死锁和进程通信--20.4 死锁检测

-20.5 进程通信概念

--20.5 进程通信概念

-第二十讲 死锁和进程通信--20.5 进程通信概念

-20.6 信号和管道

--20.6 信号和管道

-第二十讲 死锁和进程通信--20.6 信号和管道

-20.7 消息队列和共享内存

--20.7 消息队列和共享内存

-第二十讲 死锁和进程通信--20.7 消息队列和共享内存

第二十一讲 文件系统

-21.1 文件系统和文件

--21.1 文件系统和文件

-第二十一讲 文件系统--21.1 文件系统和文件

-21.2 文件描述符

--21.2 文件描述符

-第二十一讲 文件系统--21.2 文件描述符

-21.3 目录、文件别名和文件系统种类

--21.3 目录、文件别名和文件系统种类

-第二十一讲 文件系统--21.3 目录、文件别名和文件系统种类

-21.4 虚拟文件系统

--21.4 虚拟文件系统

-第二十一讲 文件系统--21.4 虚拟文件系统

-21.5 文件缓存和打开文件

--21.5 文件缓存和打开文件

-第二十一讲 文件系统--21.5 文件缓存和打开文件

-21.6 文件分配

--21.6 文件分配

-第二十一讲 文件系统--21.6 文件分配

-21.7 空闲空间管理和冗余磁盘阵列RAID

--21.7 空闲空间管理和冗余磁盘阵列RAID

-第二十一讲 文件系统--21.7 空闲空间管理和冗余磁盘阵列RAID

第二十二讲 实验八 文件系统

-22.1 总体介绍

--22.1 总体介绍

-第二十二讲 实验八 文件系统--22.1 总体介绍

-22.2 ucore 文件系统架构

--22.2 ucore 文件系统架构

-第二十二讲 实验八 文件系统--22.2 ucore 文件系统架构

-22.3 Simple File System分析

--22.3 Simple File System分析

-第二十二讲 实验八 文件系统--22.3 Simple File System分析

-22.4 Virtual File System分析

--22.4 Virtual File System分析

-第二十二讲 实验八 文件系统--22.4 Virtual File System分

-22.5 I/O设备接口分析

--22.5 I/O设备接口分析

-第二十二讲 实验八 文件系统--22.5 I/O设备接口分析

-22.6 执行流程分析

--22.6 执行流程分析

第二十三讲 I/O子系统

-23.1 I/O特点

--视频

-第二十三讲 I/O子系统--23.1 I/O特点

-23.2 I/O结构

--816C80A0F5E3B8809C33DC5901307461

-第二十三讲 I/O子系统--23.2 I/O结构

-23.3 I/O数据传输

--C58221E14388B9DB9C33DC5901307461

-第二十三讲 I/O子系统--23.3 I/O数据传输

-23.4 磁盘调度

--567A3F1FCBFB3F4C9C33DC5901307461

-第二十三讲 I/O子系统--23.4 磁盘调度

-23.5 磁盘缓存

--C327536B80D25CE79C33DC5901307461

-第二十三讲 I/O子系统--23.5 磁盘缓存

html

-html

--html

20.2 死锁处理方法笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。