本次OS的作业中,出现了对于磁盘管理以及缓冲区使用的相关问题,在这里总结一下做题思路和方法,便于遇到类似问题时回顾。
第一道题目
本题目是有关单缓冲区和双缓冲区结构下CPU处理文件所需时间的问题:
在I/O系统中引入缓冲的主要原因是什么?某文件占10个磁盘块,现要把该文件的磁盘块
逐个读入主存缓冲区,并送用户区进行分析。一个缓冲区与磁盘块大小相等。把一个磁盘
块读入缓冲区的时间为100μs,缓冲区数据传送到用户区的时间是50μs,CPU对一块数据
进行分析的时间为50μs。分别计算在单缓冲区和双缓冲区结构下,分析完该文件的时间是
多少?
对于这道题目,我们可以将其抽象为一个生产者-消费者模型,其中磁盘为生产者,CPU为消费者,而缓冲区则是传送带。
在单缓冲区的情况下,因为我们的传送带只能放一个货物,所以一旦生产者还没有向传送带放完货物或者消费者还没有从传送带取完货物,另外一方就必须进行等待。在这样的条件下,由于CPU处理和I/O设备放入缓冲区这两个过程可以并行,因此处理一个磁盘块的时间就为Max(C,T) + M
。其中C,T和M的定义如下图:
在双缓冲区的情况下,我们相当于是拥有了两条传送带,从而使得CPU从一条传送带读取数据时,I/O设备可以向另一条传送带放入数据,进一步提高了工作的并行度。只要我们满足C+M=T
就可以使CPU和I/O设备均无需等待另一方,实现效率最大化。如果(C+M)<T
,则I/O设备可以持续向缓冲区存入数据;如果(C+M)>T
,则CPU可以持续从缓冲区读取并处理数据。同时,这样的条件下处理一个数据块的时间为’Max(C+M,T)’。具体流程如下图:
清楚了这两种结构之后,这道题目也就不复杂了,只要按照上述公式求出处理一个磁盘块的时间,再乘以磁盘块的总数,最后再特殊考虑第一个磁盘块的时间即可得出结果。之所以要特殊考虑第一个磁盘块的时间是因为第一个磁盘块I/O设备存入数据时,CPU必须等待,所以该数据块处理时间要长于正常时间。
最终结果即为:
单缓冲:(50 + 100) * 10 + (200 - 150) = 1.55ms
双缓冲:(100) * 10 + (200 - 100) = 1.1ms
第二道题目
本题目是经典的读取文件时需要访问磁盘次数的计算问题:
在文件系统中,访问一个文件 f 时首先需要从目录中找到与 f 对应的目录项。假
设磁盘物理块的大小为 1KB,一个目录项的大小为 128 字节,文件的平均大小为
100KB。该文件系统的目录结构如图所示。假定不考虑磁盘块的提前读和缓存等加
速磁盘访问的技术。回答以下问题:
1) 按照当前的目录结构,且采用串联文件方式对数据块进行组织,并且根目录的目录项已读入内存中。如果目标文件f 在第三级目录下,且其对应的第三级目录的目录项可以一次从磁盘读出,访问文件f中的一个块平均需要访问几次磁盘?
2)如果采用 i 节点的方法来构建文件目录,假定文件名占 14 个字节,i 节点的指针占 2 个字节。如果仅采用直接索引,每个第三级目录下的文件数不超过50个,且根目录的 i节点已读入内存,访问第三级目录下的一个文件的一个块平均需要访问几次磁盘?
3)假设该文件系统的空间最大容量为 16ZB(1ZB=270B)。如果文件的 FCB 中包括512 字节的索引区,且允许采用一级索引进行组织,那么该文件系统支持的最大文件是多少字节?
对于该问题,我们只要掌握了不同文件组织结构下访问磁盘的方式就不难计算,下面对于这几个问题注意解答:
1、
访问根目录:由于根目录目录项在内存中,因此无需访问磁盘
访问二级目录: 二级目录下共存有128个目录项(三级目录的目录项),占据128 * 128 / 1K = 16个磁盘块,因此最少访问1次,最多访问17次,平均8.5次
访问三级目录:由题目条件可知,仅需访问一次。
访问文件:每个文件占据100个磁盘块,因此最少访问1次,最多访问100次,平均50.5次
综上,平均需要60次
2、
访问根目录:i节点无需访问磁盘(在内存中),目录项访问一次(3个共48字节)
访问二级目录:i节点访问一次,目录项共16 * 128 / 1K = 2个磁盘块,因此平均访问1.5次
访问三级目录:i节点访问一次,目录项仅一个磁盘块(800B),访问一次
访问文件:i节点访问一次,直接索引,再访问一次
综上,平均需要7.5次
3、
要计算该文件系统支持的最大文件大小,首先要知道一个FCB中可以放多少个索引地址。所以我们需要先计算一个索引地址的大小,因为空间容量为16ZB,共有16 * 2^70 / 2^10 = 2^64个磁盘块,索引一个索引地址要64 / 8 = 8位,那么一个FCB中的512字节索引区就可以放512 / 8 = 64个索引地址,由于采用的是一级索引结构,那该文件系统支持的最大文件大小为:
64 * 1K / 8 * 1K = 8MB