目录
1.2.1 操作系统的发展与分类(手工、批处理、分时、实时)
1.3.3 系统调用(库函数与系统调用、底层实现、访管指令)
2.1.1 进程的定义、组成、组织、特征(PCB、程序段、数据段)
2.1.2 进程的状态与转换(运行、就绪、阻塞、创建、终止)
2.1.5 线程概念和多线程模型(用户级和内核级线程、多线程)
2.2.2 进程调度的时机(主动被动)、方式(剥夺非剥夺)、切换与过程(广义狭义)
2.2.3 调度算法的评价指标(CPU利用率、系统吞吐量、周转、等待、响应时间)
2.2.4 作业/进程调度算法(FCFS先来先服务、SJF短作业优先、HRRN高响应比优先)
2.2.5 作业/进程调度算法(时间片轮转RR、优先级、多级反馈队列)
2.3.2 进程互斥的软件实现方法(单标志、双标志先检查、双标志后检查、Peterson)
2.3.3 进程互斥的硬件实现方法(中断屏蔽、TestAndSet 指令、Swap 指令)
2.3.6 进程同步与互斥经典问题(生产者-消费者、多生产者-多消费者、吸烟者、读者-写者、哲学家进餐)
2.4.2 死锁的处理策略(预防、避免[银行家算法]、检测和解除)
3.1.4 内存空间的分配与回收(单一连续分配、固定分区分配、动态分区分配)
3.1.5 动态分配分区算法(首次适应、最佳适应、最坏适应、邻近适应)
3.2.2 请求分页存储管理方式(页表机制、缺页中断机构、地址变换机构)
3.2.3 页面置换算法(最佳、先进先出、最近最久未使用、时钟、改进时钟)
3.2.4 页面分配策略(固定分配局部置换、可变分配全局置换、可变分配局部置换)
4.1.2 文件的逻辑结构(顺序文件、索引文件、索引顺序文件)
4.1.4 文件的物理结构 ---- 分配方式(连续分配、链接分配、索引分配)
4.1.5 文件存储空间管理(空闲表法、空闲链表法、位示图法、成组链接法)
4.1.6 文件的基本操作(create、delete、open、close、read、write)
4.2.2 磁盘调度算法(先来先服务、最短寻找时间优先、扫描算法、循环扫描算法)
5.1.3 控制 I/O 的几种方式(程序直接控制方式、中断驱动方式、DMA方式、通道控制方式)
5.1.4 I/O 软件层次结构(用户层软件--设备独立性软件--设备驱动程序--中断处理程序)
5.2.3 I/O 设备的分配与回收(DCT---COCT---CHCT---SDT)
5.2.4 缓冲区管理(单缓冲---双缓冲---循环缓冲---缓冲池)
第 1 章 概述
1.1 操作系统的基本概念
1.1.1 操作系统的概念、功能和目标
概念:
操作系统(Operating System,OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机地工作和资源地分配,以提供给用户和其他软件方便地接口和环境,它是计算机系统中最基本的系统软件。
功能和目标:
- 作为系统资源的管理者
- 作为用户和计算机硬件之间的接口
- 作为最接近硬件的层次
小结(梳理一下本小节的知识点叭!!!):
1.1.2 操作系统的特征(并发、共享、虚拟、异步)
- 并发
- 共享
- 虚拟
- 异步
并发性和共享性互为存在条件:
- 如果失去并发性,则系统中只有一个程序正在运行,则共享性失去存在的意义
- 如果失去共享性,则QQ和微信不能同时访问硬盘资源,就无法实现同时发送文件,也就无法并发
小结(梳理一下本小节的知识点叭!!!):
1.2 操作系统的发展与分类
1.2.1 操作系统的发展与分类(手工、批处理、分时、实时)
- 手工操作阶段
- 批处理阶段
- 分时操作系统
- 实时操作系统
- 其它三种操作系统
小结(梳理一下本小节的知识点叭!!!):
1.3 操作系统的运行机制与体系结构
1.3.1 操作系统的运行机制与体系结构(大内核、微内核)
- 运行机制
- 操作系统内核
- 操作系统的体系结构
1.3.2 中断和异常(内中断和外中断、中断处理过程)
- 中断机制的诞生
- 人们通过操作系统作为计算机的管理者,并引入中断机制,从而实现多道程序并发执行。
- 本质:发生中断就意味着需要操作系统介入,开展管理工作。
- 过程:当CPU收到计时部件发出的中断信号时,操作系统切换为核心态,并对中断进行处理(通过内核进行处理),此时意味着进程 1 的时间片已用完,换进程 2 运行,并切换为用户态。进程 2 运行时可能发出系统调用(内中断信号),请求输出,此时,CPU切换为核心态,并对中断进行处理(进程 2 暂停运行、等待 I/O 完成,换进程 3 运行,并切换为用户态)。I/O 完成后,设备向CPU发出中断信号,操作系统切换为核心态,并对中断进行处理(恢复进程 2 的运行,并切换为用户态,以完成后续工作)。
- 中断的概念和作用
- 中断的分类(内中断、外中断)
- 外中断的处理过程
小结(梳理一下本小节的知识点叭!!!):
1.3.3 系统调用(库函数与系统调用、底层实现、访管指令)
什么是系统调用?有何作用?
“系统调用” 是指操作系统提供给应用程序(程序员 / 编程人员)使用的接口,可以理解为一种可供应用程序调用的特殊函数,应用程序可以发出系统调用请求来获得操作系统的服务。
系统调用与库函数有什么区别?
系统调用的底层是如何实现的?
小结(梳理一下本小节的知识点叭!!!):
第 2 章 进程管理
2.1 进程与线程
2.1.1 进程的定义、组成、组织、特征(PCB、程序段、数据段)
- 定义
- 组成
- 组织
- 特征
小结(梳理一下本小节的知识点叭!!!):
2.1.2 进程的状态与转换(运行、就绪、阻塞、创建、终止)
进程的另外两种状态:
- 创建态(New,又称新建态):进程正在被创建,操作系统为进程分配资源、初始化PCB
- 终止态(Terminated,又称结束态):进程正在从系统中撤销,操作系统会回收进程拥有得资源、撤销PCB
小结(梳理一下本小节的知识点叭!!!):
2.1.3 进程控制(原语实现、关中断和开中断)
进程控制就是要实现进程状态的转换。
2.1.4 进程通信(共享存储、管道通信、消息传递)
- 共享存储
- 管道通信
- 消息传递
小结(梳理一下本小节的知识点叭!!!):
2.1.5 线程概念和多线程模型(用户级和内核级线程、多线程)
线程的两种实现方式:
多线程模型:
小结(梳理一下本小节的知识点叭!!!):
2.2 处理机的调度
2.2.1 处理机调度的概念、层次(高级、中级、低级调度)
什么是处理机的调度(概念):
当有一堆任务要处理,但由于资源有限,这些事情没法同时处理时,就需要确定某种规则来决定处理这些任务的顺序,这就是 “调度” 研究的问题。在多道程序系统中,进程的数量往往是多于处理机的个数的,这样不可能同时并行地处理各个进程。处理机调度,就是从就绪队列中按照一定地算法选择一个进程并将处理机分配给它运行,以实现进程地并发执行。
小结(梳理一下本小节的知识点叭!!!):
2.2.2 进程调度的时机(主动被动)、方式(剥夺非剥夺)、切换与过程(广义狭义)
- 时机
- 方式
- 切换与过程
小结(梳理一下本小节的知识点叭!!!):
2.2.3 调度算法的评价指标(CPU利用率、系统吞吐量、周转、等待、响应时间)
- CPU 利用率
- 指 CPU “忙碌” 的时间占总时间的比例
- 系统吞吐量
- 单位时间内完成作业的数量
- 周转时间
- 等待时间
- 响应时间
- 指从用户提交请求到首次产生响应所用的时间
小结(梳理一下本小节的知识点叭!!!):
2.2.4 作业/进程调度算法(FCFS先来先服务、SJF短作业优先、HRRN高响应比优先)
- 先来先服务(FCFS,First Come First Server)
- 短作业优先(SJF,Shortest Job First)
- 高响应比优先(HRRN, Highest Response Ratio Next)
小结(梳理一下本小节的知识点叭!!!):
2.2.5 作业/进程调度算法(时间片轮转RR、优先级、多级反馈队列)
- 时间片轮转调度算法(RR,Round-Robin)(分时)
- 优先级调度算法(实时)
- 多级反馈队列调度算法
小结(梳理一下本小节的知识点叭!!!):
2.3 进程的同步与互斥
2.3.1 进程的同步与互斥
什么是进程同步?
什么是进程互斥?
对临界资源的互斥访问,可以在逻辑上分为如下四个部分:
- 进入区:负责检查是否可进入临界区,若可进入,则应设置正在访问临界资源的标志(上锁),以阻止其他进程同时进入临界区
- 临界区:访问临界区资源的那段代码
- 退出区:负责解除正在访问临界资源的标志
- 剩余区:做其他处理
注意:临界区是内存中访问临界资源的代码段。进入区和退出区是负责实现互斥的代码段。临界区也可称为 “临界段”。
2.3.2 进程互斥的软件实现方法(单标志、双标志先检查、双标志后检查、Peterson)
- 单标志法
- 双标志先检查
- 双标志后检查
- Peterson 算法
Peterson 算法用软件方法解决了进程互斥问题,遵循了空闲让进、忙则等待、优先等待 三个原则,但是依然未遵循让权等待的原则。Peterson 算法相较于之前三种软件解决方案来说是最好的,但依然不够好。
小结(梳理一下本小节的知识点叭!!!):
2.3.3 进程互斥的硬件实现方法(中断屏蔽、TestAndSet 指令、Swap 指令)
- 中断屏蔽方法
- TestAndSet(TS指令 / TSL指令)
- Swap 指令(XCHG 指令)
小结(梳理一下本小节的知识点叭!!!):
2.3.4 信号量机制(整形信号量、记录型信号量)
- 整型信号量
- 记录型信号量(重点)
小结(梳理一下本小节的知识点叭!!!):
2.3.5 用信号量机制实现进程互斥、同步、前驱关系
- 信号量机制实现进程互斥
- 信号量机制实现进程同步
- 信号量机制实现进程前驱关系
小结(梳理一下本小节的知识点叭!!!):
2.3.6 进程同步与互斥经典问题(生产者-消费者、多生产者-多消费者、吸烟者、读者-写者、哲学家进餐)
- 生产者-消费者问题
小结(梳理一下本小节的知识点叭!!!): - 多生产者-多消费者问题
原因在于:本题中的缓冲区大小为 1,在任何时刻,apple、orange、plate 三个同步信号量中最多只有一个是1.因此在任何时刻,最多只有一个进程的 P 操作不会被阻塞,并顺利地进入临界区。但如果缓冲区的大小大于 1,就必须专门设置一个互斥信号量 mutex 来保证互斥访问缓冲区。
小结(梳理一下本小节的知识点叭!!!): - 吸烟者问题
小结(梳理一下本小节的知识点叭!!!): - 读者-写者问题
小结(梳理一下本小节的知识点叭!!!): - 哲学家进餐问题
如何防止死锁的发生呢?有如下三种方法:
小结(梳理一下本小节的知识点叭!!!):
2.3.7 管程和Java中实现管程的机制
为什么要引入管程?
由于信号量机制存在编写程序困难、易出错等问题,有人提出:能不能设计一种机制,让程序员写程序时不需要再关注复杂的 PV 操作(若 PV 顺序写错就会发生死锁等问题),让写代码更轻松呢?1973 年,Brinch Hansen 首次在程序设计语言中引入了 “管程” 成分 --------- 一种高级同步机制。
管程是一种特殊的软件模块,有如下这些部分则组成:
- 局部于管程的共享数据结构说明
- 对该数据结构进行操作的一组过程
- 对局部于管程的共享数据设置初始值的语句
- 管程有一个名字
管程的基本特征:
- 局部于管程的数据只能被局部于管程的过程所访问
- 一个进程只有通过调用管程内的过程才能进入管程访问共享数据,即管程内部的变量只能被管程内部的函数所修改
- 每次仅允许一个进程在管程内执行某个内部过程
关于Java管程相关详细内容可以查看 线程共享模型----之----管程 这篇文章!!!!
小结(梳理一下本小节的知识点叭!!!):
2.4 死锁
2.4.1 死锁的概念
什么是死锁?
在并发环境下,各进程因竞争资源而造成的一种互相等待对方手里的资源,导致各进程都阻塞,都无法向前推进的现象,就是 “死锁”。发生死锁后,若无外力干涉,这些进程都将无法向前推进。
死锁的处理策略:
- 预防死锁(静态)。破坏死锁产生的四个必要条件种的一个或几个。
- 避免死锁(动态)。用某种方法防止系统进入不安全状态,从而避免死锁(银行家算法)
- 死锁的检测和解除。允许死锁的发生,不过操作系统会负责检测出死锁的发生,然后采取某种措施解除死锁。
小结(梳理一下本小节的知识点叭!!!):
2.4.2 死锁的处理策略(预防、避免[银行家算法]、检测和解除)
- 预防
小结(梳理一下本小节的知识点叭!!!): - 避免【重点】
小结(梳理一下本小节的知识点叭!!!): - 检测和解除
小结(梳理一下本小节的知识点叭!!!):
第 3 章 内存管理
本章内容结构图:
3.1 内存管理相关概念
3.1.1 什么是内存?进程的基本原理,深入指令理解其过程
小结(梳理一下本小节的知识点叭!!!):
3.1.2 内存管理都管些什么?
- 操作系统负责对进程进行内存空间的分配与回收。
- 操作系统需要提供某种技术从逻辑上对内存空间进行扩充。(虚拟存储技术(操作系统的虚拟性)、覆盖技术、交换技术)
- 操作系统需要提供地址转换功能,负责程序的逻辑地址与物理地址的转换。(三种装入方式)
- 操作系统需要提供内存保护功能,保证各进程在各自存储空间内运互不干扰。
小结(梳理一下本小节的知识点叭!!!):
3.1.3 覆盖技术与交换技术的思想(实现虚拟性)
覆盖技术:
交换技术:
小结(梳理一下本小节的知识点叭!!!):
3.1.4 内存空间的分配与回收(单一连续分配、固定分区分配、动态分区分配)
本小节介绍的三种分配方式均为连续分配管理方式,指为用户进程分配的必须是一个连续的内存空间。
- 单一连续分配
- 固定分区分配
- 动态分区分配
小结(梳理一下本小节的知识点叭!!!):
3.1.5 动态分配分区算法(首次适应、最佳适应、最坏适应、邻近适应)
- 首次适应算法(First Fit)
- 最佳适应算法(Best Fit)
- 最坏适应算法(Worst Fit)
- 邻近时应算法(Next Fit)
小结(梳理一下本小节的知识点叭!!!):
3.1.6 基本分页存储管理方式
基本分页存储管理的思想就是按照固定分区分配的方法把内存分成一个个相等的小分区,再按照分区大小把进程拆分为一个个小部分,再把这一个个小部分放到内存分区中去(不要求连续)。显然,如果把分区大小设置的更小一些,内部碎片会更小,内存利用率会更高。
在明白分页的基本概念后,接下来最重要的部分就是:将进程地址空间分页后,操作系统该如何实现逻辑地址到物理地址的转换?
对于之前讲的进程在内存中连续存放时,操作系统采用动态重定位的方式实现逻辑地址到物理地址的转换。
那么,对于采用非连续存放的分页技术,操作系统应该如何实现地址的转换呢?需要完成以下四个步骤:
- 要算出逻辑地址对应的页号
- 要知道该页号对应页面在内存中的起始地址
- 要算出逻辑地址在该页面内的偏移量
- 物理地址 = 页面起始地址 + 页内偏移量
计算实际物理地址(页号和页内偏移量)的方式可大体分为两种:手算 和 利用地址的二进制表示法计算(页面大小必须为 2 的正数幂)
下面先来看一看简单的手算法:
下面介绍利用地址的二进制表示法计算:
上面两种方法可以计算出步骤 1 中的页号和步骤 3 中的页内偏移量,若想计算出步骤 2 中的页面起始地址,还需引入页表。
小结(梳理一下本小节的知识点叭!!!):
3.1.7 基本地址变换机构(重点)
用于实现逻辑地址到物理地址转换的一组硬件机构
来道例题:
小结(梳理一下本小节的知识点叭!!!):
3.1.8 具有快表的地址变换机构
小结(梳理一下本小节的知识点叭!!!):
3.1.9 两级页表
单级页表会存在什么样的问题?
问题一:页表必须连续存放,因此当页表很大时,需要占用很多个连续的页框
我们在解决进程在内存中的连续存储问题时,将进程地址空间分页,并为其建立一张页表,记录各页面的存放位置。同样的思路,也可以用于解决 “页表必须连续存放” 的问题,把必须连续存放的页表再分页。
可将长长的页表进行再分组,使每个内存块刚好可以放入一个分组(例如:页面大小为 4KB,每个页表项 4B,每个页面可存放 1K 个页表项,因此每 1K 个连续的页表项分为一组,每组刚好占一个内存块,再将各组离散地放到内块中)
问题二:没有必要让整个页表常驻内存,因为进程在一段时间内可能只需要访问几个特定的页面
可以在需要访问页面时才把页面调入内存(虚拟存储技术)。可以在页表项中增加一个标志位,用于表示该页面是否已经调入内存。
小结(梳理一下本小节的知识点叭!!!):
3.1.10 基本分段存储管理方式
与分页系统类似,分段系统中也可以引入快表机构,将近期访问过的快表项放到快表中,这样可以少一次访问,加快地址变换速度。
小结(梳理一下本小节的知识点叭!!!):
3.1.11 段页式存储管理方式
小结(梳理一下本小节的知识点叭!!!):
3.2 虚拟内存管理
3.2.1 虚拟内存的基本概念(局部性原理)
虚拟内存有以下三个主要特征:
- 多次性:无需在作业运行时一次性装入内存,而是允许被多次调入内存
- 对换性:在作业运行时无需常驻内存,而是允许在作业运行过程中,将作业换入、换出
- 虚拟性:在逻辑上扩充了内存的容量,是用户看到的内存容量远大于实际的容量
小结(梳理一下本小节的知识点叭!!!):
3.2.2 请求分页存储管理方式(页表机制、缺页中断机构、地址变换机构)
请求分页存储管理与基本分页存储管理的主要区别:
- 请求调页:在程序执行过程中,当所访问的信息不在内存时,由操作系统负责将所需信息从外存调入内存,然后继续执行程序。
- 页面置换:若内存空间不够时,由操作系统负责将内存中暂时用不到的信息换出到外存
新增步骤:
- 请求调页(查到页表项时进行判断)
- 页面置换(需要调如页面,但没有空闲内存块时进行)
- 需要修改请求页表中新增的表项
小结(梳理一下本小节的知识点叭!!!):
3.2.3 页面置换算法(最佳、先进先出、最近最久未使用、时钟、改进时钟)
- 最佳置换算法(OPT)
最佳置换算法可以保证最低的缺页率,但实际上,只有在进程执行的过程中才能知道接下来会访问到的是哪个页面。操作系统无法提前预判页面访问序列。因此,最佳置换算法实际上是无法实现的。 - 先进先出置换算法(FIFO)
- 最近最久未使用置换算法(LRU)
- 时钟置换算法(CLOCK)
- 改进型的时钟置换算法
小结(梳理一下本小节的知识点叭!!!):
3.2.4 页面分配策略(固定分配局部置换、可变分配全局置换、可变分配局部置换)
小结(梳理一下本小节的知识点叭!!!):
第 4 章 文件管理
4.1 文件系统
4.1.1 初识文件管理
文件就是一组有意义的信息/数据集合。
关于文件的管理,我们可以围绕以下几个问题来学习:
- 计算机中存放了各种各样的文件,一个文件有哪些属性?
- 文件内部的数据应该怎样组织起来?(逻辑结构)
- 文件之间又是怎样组织起来的?(目录结构)
- 从下往上看,os 应提供哪些功能,才能方便用户、应用程序使用文件?(create、delete、open、close、read、write 系统调用)
- 从上往下看,文件数据应该怎么存放在外存(磁盘)上?(物理结构)
文件共享:使多个用户可以共享使用一个文件
文件保护:如何保证不同的用户对文件有不同的操作权限
4.1.2 文件的逻辑结构(顺序文件、索引文件、索引顺序文件)
小结(梳理一下本小节的知识点叭!!!):
4.1.3 文件目录
需要对目录进行哪些操作?
- 搜索:当用户要使用一个文件时,系统要根据文件名搜索目录,找到该文件对应的目录项
- 创建文件:创建一个新文件时,需要在其所属的目录中增加一个目录项
- 删除文件:当删除一个文件时,需要在目录中删除相应的目录项
- 显示目录:用户可以请求显示目录的内容,如显示该目录中的所有文件及相应属性
- 修改目录: 某些文件属性保存在目录中,因此这些属性变化时需要修改相应的目录项(如文件重命名等)
小结(梳理一下本小节的知识点叭!!!):
4.1.4 文件的物理结构 ---- 分配方式(连续分配、链接分配、索引分配)
- 对非空闲磁盘块的管理
- 文件的分配方式
- 1. 连续分配
总结:
优点:支持顺序访问和直接访问(即随机访问);连续分配的文件在顺序访问时速度最快
缺点:不方便文件拓展;存储空间利用率低,会产生磁盘碎片 - 2. 链接分配
链接分配采取离散分配的方式,可以为文件分配离散的磁盘块。分为隐式链接和显式链接两种。- ①隐式链接
- ②显式链接
- ①隐式链接
- 索引分配
如果一个文件的大小(索引表的表项)超过了一个磁盘块的大小,一个磁盘块装不下,该如何解决?有如下三种解决方案:①链接方案;②多层方案;③混合索引- ①链接方案
- ②多层方案
- ③混合方案
小结(梳理一下本小节的知识点叭!!!):
4.1.5 文件存储空间管理(空闲表法、空闲链表法、位示图法、成组链接法)
- 1. 空闲表法
- 2. 空闲链表法
- ①空闲盘块链(以盘块为单位组成一条空闲链)
- ②空闲盘区链(以盘区为单位组成一条空闲链)
- 3. 位示图法
- 4. 成组链接法
小结(梳理一下本小节的知识点叭!!!):
4.1.6 文件的基本操作(create、delete、open、close、read、write)
- 创建文件
- 删除文件
- 打开文件
- 关闭文件
- 读文件
- 写文件
小结(梳理一下本小节的知识点叭!!!):
4.1.7 文件共享(硬链接、软链接)
硬链接 ---- 基于索引节点的共享方式
软链接 ---- 基于符号链的共享方式
Windows 系统下在桌面创建快捷方式就是软链接的实现。
小结(梳理一下本小节的知识点叭!!!):
4.1.8 文件保护(口令保护、加密保护、访问控制)
- 口令保护
- 加密保护
- 访问控制
小结(梳理一下本小节的知识点叭!!!):
4.1.9 文件系统的层次结构
4.2 磁盘管理
4.2.1 磁盘的结构
小结(梳理一下本小节的知识点叭!!!):
4.2.2 磁盘调度算法(先来先服务、最短寻找时间优先、扫描算法、循环扫描算法)
- 先来先服务(FCFS)
- 最短寻找时间优先(SSTF)
- 扫描算法(SCAN)
- 循环扫描算法(C-SCAN)
小结(梳理一下本小节的知识点叭!!!):
4.2.3 减少磁盘延迟的方法(交替编号、错位命名)
1. 交替编号
即,在读取地址连续的磁盘块时,采用(柱面号,盘面号,扇区号)的地址结构,可以减少磁头移动所消耗的时间
2. 错位命名
小结(梳理一下本小节的知识点叭!!!):
4.2.4 磁盘的管理
小结(梳理一下本小节的知识点叭!!!):
第 5 章 I/O 管理
5.1 I/O 管理概述
5.1.1 什么是 I/O 设备?有几类 I/O 设备?
小结(梳理一下本小节的知识点叭!!!):
5.1.2 控制 I/O 设备的 I/O 控制器
小结(梳理一下本小节的知识点叭!!!):
5.1.3 控制 I/O 的几种方式(程序直接控制方式、中断驱动方式、DMA方式、通道控制方式)
- 程序直接控制方式
- 中断驱动方式
- DMA方式
- 通道控制方式
注意:
一个通道可以控制多个 I/O 控制器,一个 I/O 控制器又可以控制多个 I/O 设备
小结(梳理一下本小节的知识点叭!!!):
5.1.4 I/O 软件层次结构(用户层软件--设备独立性软件--设备驱动程序--中断处理程序)
小结(梳理一下本小节的知识点叭!!!):
5.2 I/O 核心子系统
5.2.1 内核的 I/O 子系统及功能
I/O 调度
设备保护
5.2.2 假脱机技术(SPOOLing技术)
小结(梳理一下本小节的知识点叭!!!):
5.2.3 I/O 设备的分配与回收(DCT---COCT---CHCT---SDT)
小结(梳理一下本小节的知识点叭!!!):
5.2.4 缓冲区管理(单缓冲---双缓冲---循环缓冲---缓冲池)
小结(梳理一下本小节的知识点叭!!!):