主观题:h677.设某个文件由100个物理盘块存储,对于连续文件、链接文件和索引文件,分别计算执行下列操作时的启动磁盘I/O次数(假如头
设某个文件由100个物理盘块存储,对于连续文件、链接文件和索引文件,分别计算执行下列操作时的启动磁盘I/O次数(假如头指针和索引表均在内存中):
(1)把一块加在文件的开头;
(2)从文件的开头删去一块。
答案:解:
(1) 把一块加在文件的开头
① 对于连续文件:
一般情况下该文件存储处的前一个物理盘块不会正好是空闲的,因此需要寻找磁盘中有101个空闲盘块的连续空间,找到后将新增块写入该连续空闲空间的第一个盘块中(启动1次磁盘I/O);然后读出文件原第一个块,写入该连续空间的第二个盘块中(启动2次磁盘I/O),……,文件的原100个物理块搬家,共需启动200次磁盘I/O;将修改后的PCB存盘,需启动1次磁盘I/O。故把一块加在连续文件的开头,一般情况下,总共需要启动202次磁盘I/O。 (3分)
② 对于链接文件:
将新增块内容及文件头指针写入一空闲盘块中(启动1次磁盘),将新的头指针写入该文件的PCB中(启动1次磁盘),故总共需要启动2次磁盘I/O。(2分)
③ 对于索引文件:
将新增内容写入一空闲盘块中;将修改后的内存索引表(假设是一级索引)写入索引盘块中(1次I/O,若该文件是多级索引,则其索引表由多个盘块存储,就需要启动多次磁盘I/O).。故对于一级索引文件,总共需要启动2次磁盘I/O。 (3分)
(2) 从文件的开头删去一块:
① 对于连续文件:
读出该文件的PCB(启动1次磁盘I/O),修改其首块号为文件原第2块的块号,文件长度(盘块数)减1,将修改后的PCB存盘(启动1次磁盘)。因此,在不考虑回收盘块的磁盘操作的情况下,总共需要启动2次磁盘I/O。 (2分)
② 对于链接文件:
对隐式链接,为读出第1块以获得第2块的块号(启动1次磁盘),将内存中的头指针修改为第2块的块号,读出该文件的FCB(启动1次磁盘),修改PCB中的头指针,将修改后的PCB存盘(启动1次磁盘)。因此,在不考虑回收盘块的启动磁盘操作的情况下,总共需要启动2次磁盘I/O。
对显式链接,将修改后的内存FAT表写入磁盘(最多涉及2个盘块中的FAT,故最多启动2次磁盘)。总共最多需要启动2次至少启动1次磁盘I/O。 (3分)
③ 对于索引文件:
将修改后的内存索引表(假设是一级索引)写入索引盘块中(1次I/O,若该文件是多级索引或混合索引,则其索引表由多个盘块存储,就需要启动多次磁盘I/O).。故对于一级索引文件,总共需要启动1次磁盘I/O。 (2分)
(1)把一块加在文件的开头;
(2)从文件的开头删去一块。
答案:解:
(1) 把一块加在文件的开头
① 对于连续文件:
一般情况下该文件存储处的前一个物理盘块不会正好是空闲的,因此需要寻找磁盘中有101个空闲盘块的连续空间,找到后将新增块写入该连续空闲空间的第一个盘块中(启动1次磁盘I/O);然后读出文件原第一个块,写入该连续空间的第二个盘块中(启动2次磁盘I/O),……,文件的原100个物理块搬家,共需启动200次磁盘I/O;将修改后的PCB存盘,需启动1次磁盘I/O。故把一块加在连续文件的开头,一般情况下,总共需要启动202次磁盘I/O。 (3分)
② 对于链接文件:
将新增块内容及文件头指针写入一空闲盘块中(启动1次磁盘),将新的头指针写入该文件的PCB中(启动1次磁盘),故总共需要启动2次磁盘I/O。(2分)
③ 对于索引文件:
将新增内容写入一空闲盘块中;将修改后的内存索引表(假设是一级索引)写入索引盘块中(1次I/O,若该文件是多级索引,则其索引表由多个盘块存储,就需要启动多次磁盘I/O).。故对于一级索引文件,总共需要启动2次磁盘I/O。 (3分)
(2) 从文件的开头删去一块:
① 对于连续文件:
读出该文件的PCB(启动1次磁盘I/O),修改其首块号为文件原第2块的块号,文件长度(盘块数)减1,将修改后的PCB存盘(启动1次磁盘)。因此,在不考虑回收盘块的磁盘操作的情况下,总共需要启动2次磁盘I/O。 (2分)
② 对于链接文件:
对隐式链接,为读出第1块以获得第2块的块号(启动1次磁盘),将内存中的头指针修改为第2块的块号,读出该文件的FCB(启动1次磁盘),修改PCB中的头指针,将修改后的PCB存盘(启动1次磁盘)。因此,在不考虑回收盘块的启动磁盘操作的情况下,总共需要启动2次磁盘I/O。
对显式链接,将修改后的内存FAT表写入磁盘(最多涉及2个盘块中的FAT,故最多启动2次磁盘)。总共最多需要启动2次至少启动1次磁盘I/O。 (3分)
③ 对于索引文件:
将修改后的内存索引表(假设是一级索引)写入索引盘块中(1次I/O,若该文件是多级索引或混合索引,则其索引表由多个盘块存储,就需要启动多次磁盘I/O).。故对于一级索引文件,总共需要启动1次磁盘I/O。 (2分)