515_I-O 核心子系统
# 5.1_5_I-O 核心子系统
从小节开始我们会学习 IO 核心子系统相关的一系列功能,那么上个小节中我们知道 IO 软件的层次可以分为这样的 4 个层次,其中设备独立性软件、设备驱动程序,还有终端处理程序,这三层其实是属于操作系统的内核部分的,所以它们也称作 IO 核心子系统,又可以简称为 IO 系统。
因此其实 IO 核心子系统需要实现的功能就是这三层需要实现的功能,咱们在上个小节中已经有提过。在考研当中我们需要重点掌握的是 IO 调度、设备保护、假脱机技术、设备分配与回收、缓冲区管理这几种功能的原理和实现,我们来看一下这些事情分别需要在哪些层次实现。
# IO 子系统的功能
首先我们在上个小节中已经强调过,所有和硬件直接相关的,那肯定是设备驱动程序和中断处理程序需要负责的。但是咱们刚才提到的那些功能当中都没有直接与硬件相关的,其中假脱机技术又叫 SPOOLing 技术,它一般来说是在用户层实现的,而 IO 调度设备保护设备的分配与回收还有缓冲区管理,这几个功能是在设备独立性软件这层实现的。
这个地方大家可能会比较奇怪,刚才不是说 lO 核心子系统要实现的是这些技术吗?而假脱机技术看起来并不是 lO 核心子系统来实现的,一般来说假脱机技术都需要使用到磁盘这种设备的设备独立性软件这一层的服务,所以假脱机技术一般来说都是在用户层软件实现的,但是在咱们 408 的考研大纲中,又把假脱机技术把它归为 lO 核心子系统要实现的一个功能,所以在考试的时候如果我们遇到了,那还是以这个大纲为准。不过大家也需要知道在实际应用中,其实假脱机技术是用户层软件这样实现的
# lO 调度
这个小节中我们先简单的介绍两个我们很熟悉的功能的实现,一个是 lO 调度,一个是设备保护。
首先来看一下 IO 调度,其实 IO 调度和处理基调度是很类似的,就是用某一种算法来确定一个好的顺序来处理各个 IO 请求。比如说咱们在上一章学过的磁盘调度,其实就是用某一种算法来确定应该先满足哪些磁盘的访问请求。由于磁盘其实也是一种 IO 设备,所以其实磁盘调度也是 IO 调度的问题,除了磁盘之外,像什么打印机等等这些设备,也同样是可以采用类似于先来先服务优先以及算法或者短作业优先等等这些算法来确定一个合适的 l 调度顺序,这些咱们在之前已经训练过很多次了,所以这就不再赘述,大家只需要根据题目中提供的算法的名字,再结合咱们之前学习过的那些调度算法的思想来分析做题就可以了。所以 lO 调度其实是我们很熟悉的一个内容。
# 设备保护
接下来我们再来看一下设备保护,这个点其实咱们在上一小节也简单的提及过,其实怎么实现设备保护,这一点咱们也已经很熟悉了,因为在 UNIX 系统当中,设备会被看作是一种特殊的文件,因此其实系统也会为各个设备建立一个相应的 fcb 也就是文件控制快。那就像咱们之前在文件管理的章节中学到的一样,不同的用户对于不同的文件是有不同的访问权限的,比如说某个用户对于有的文件只能读,而对于有的文件又可以读也可以写,所以其实只要把设备看作是一种特殊的文件的话,那么当一个用户想要访问某种设备的时候,系统也会根据这个设备对应的 fcb 来判断一下这个用户是否有相应的访问权限。这样的话就实现了所谓的设备保护的功能,但它其实也是文件保护那一块所需要做的事情,这个知识点如果回忆不起来的话,可以再参考咱们在第四章中文件保护小节当中讲到的内容。
# 小结
那么这个小节我们只是简单的对 l 核心子系统需要实现哪些功能进行了一个简要的概述,并且简单提了一下 lO 调度和设备保护应该怎么实现,这都是咱们很熟悉的内容。之后的小节中我们还会展开介绍设备分配与回收,还有缓冲区管理应该怎么实现。而假脱机技术或者叫 SPOOLing 技术,它在实际当中本来是在用户层软件当中实现的,但是在 408 考研大纲中也把它归为 lO 核心子系统要实现的功能之一,所以我们按照从上之下的顺序,在下个小节会先介绍假脱机技术的实现