主观题:h678.设某个文件由100个物理盘块存储,对于连续文件、链接文件和索引文件,分别计算执行下列操作时的启动磁盘I/O次数(假如头
设某个文件由100个物理盘块存储,对于连续文件、链接文件和索引文件,分别计算执行下列操作时的启动磁盘I/O次数(假如头指针和索引表均在内存中):
(1)把一块加在文件的中间(新加块成为第51块);
(2)从文件的中间删去一块(删去第51块)。
答案:解:
(1) 把一块加在文件的中间(第51块):
① 对于连续文件:
最好的情况是文件末尾盘块的下一盘块是空闲的,此时将文件的后50个块搬家,需启动100次磁盘;写入新增块需启动1次磁盘;将修改后的PCB存盘,需启动1次磁盘I/O。故最好情况下总共需要启动102次磁盘I/O。一般情况下,整个文件需要搬家,这时总共需要启动202次磁盘I/O。(2分)
② 对于链接文件:
对隐式链接,为读出第51块的块号,需依次读出前50个盘块(启动50次);将新增内容及第51块的块号写入一空闲盘块中(启动1次磁盘);将读出的第50块的链接指针改为新增盘块号后写入原第50块中(启动1次磁盘)。总共需要启动52次磁盘。
对显式链接,将新增内容写入一空闲盘块中(启动1次磁盘);将修改后的内存FAT表写入磁盘(最多涉及2个盘块中的FAT,故最多启动2次磁盘);总共最多需要启动3次磁盘I/O。(3分)
③ 对于索引文件:
将新增内容写入一空闲盘块中;将修改后的内存索引表(假设是一级索引)写入索引盘块中(启动1次磁盘I/O,若该文件是多级索引或混合索引,则其索引表由多个盘块存储,就可能需要启动多次磁盘I/O).。故对于一级索引文件,总共需要启动2次磁盘I/O。(2分)
(2) 从文件的中间删去一块(删去第51块):
① 对于连续文件:
将第52块搬家到原第51块处(需启动2次磁盘I/O);同样,原第53、54、……、100块搬家,各需启动2次磁盘,共启动96次磁盘;读出文件的FCB,修改其长度后存盘(2次磁盘I/O)。因此,在不考虑回收盘块的磁盘操作的情况下,总共需要启动100次磁盘I/O。(2分)
② 对于链接文件:
对隐式链接:为读出第52块的块号,需依次读出前51个盘块(启动51次);假设第50块的内容读入缓冲区B1中,将读出的第51块的指针域(第52块的块号)写入B1的指针域中,将修改后的B1内容写入原第50块中(启动1次磁盘I/O)。因此,在不考虑回收盘块的磁盘操作的情况下,总共需要启动52次磁盘I/O。(3分)
对显式链接:将修改后的内存FAT表写入磁盘(最多启动2次磁盘);总共最多需要启动2次磁盘I/O。
③ 对于索引文件:
将修改后的内存索引表(假设是一级索引或UNIX的混合索引)写入索引盘块中(启动1次磁盘I/O,若该文件是多级索引,则其索引表由多个盘块存储,就可能需要启动多次磁盘I/O).。故对于一级索引或UNIX的混合索引文件,总共需要启动1次磁盘I/O。 (3分)
(1)把一块加在文件的中间(新加块成为第51块);
(2)从文件的中间删去一块(删去第51块)。
答案:解:
(1) 把一块加在文件的中间(第51块):
① 对于连续文件:
最好的情况是文件末尾盘块的下一盘块是空闲的,此时将文件的后50个块搬家,需启动100次磁盘;写入新增块需启动1次磁盘;将修改后的PCB存盘,需启动1次磁盘I/O。故最好情况下总共需要启动102次磁盘I/O。一般情况下,整个文件需要搬家,这时总共需要启动202次磁盘I/O。(2分)
② 对于链接文件:
对隐式链接,为读出第51块的块号,需依次读出前50个盘块(启动50次);将新增内容及第51块的块号写入一空闲盘块中(启动1次磁盘);将读出的第50块的链接指针改为新增盘块号后写入原第50块中(启动1次磁盘)。总共需要启动52次磁盘。
对显式链接,将新增内容写入一空闲盘块中(启动1次磁盘);将修改后的内存FAT表写入磁盘(最多涉及2个盘块中的FAT,故最多启动2次磁盘);总共最多需要启动3次磁盘I/O。(3分)
③ 对于索引文件:
将新增内容写入一空闲盘块中;将修改后的内存索引表(假设是一级索引)写入索引盘块中(启动1次磁盘I/O,若该文件是多级索引或混合索引,则其索引表由多个盘块存储,就可能需要启动多次磁盘I/O).。故对于一级索引文件,总共需要启动2次磁盘I/O。(2分)
(2) 从文件的中间删去一块(删去第51块):
① 对于连续文件:
将第52块搬家到原第51块处(需启动2次磁盘I/O);同样,原第53、54、……、100块搬家,各需启动2次磁盘,共启动96次磁盘;读出文件的FCB,修改其长度后存盘(2次磁盘I/O)。因此,在不考虑回收盘块的磁盘操作的情况下,总共需要启动100次磁盘I/O。(2分)
② 对于链接文件:
对隐式链接:为读出第52块的块号,需依次读出前51个盘块(启动51次);假设第50块的内容读入缓冲区B1中,将读出的第51块的指针域(第52块的块号)写入B1的指针域中,将修改后的B1内容写入原第50块中(启动1次磁盘I/O)。因此,在不考虑回收盘块的磁盘操作的情况下,总共需要启动52次磁盘I/O。(3分)
对显式链接:将修改后的内存FAT表写入磁盘(最多启动2次磁盘);总共最多需要启动2次磁盘I/O。
③ 对于索引文件:
将修改后的内存索引表(假设是一级索引或UNIX的混合索引)写入索引盘块中(启动1次磁盘I/O,若该文件是多级索引,则其索引表由多个盘块存储,就可能需要启动多次磁盘I/O).。故对于一级索引或UNIX的混合索引文件,总共需要启动1次磁盘I/O。 (3分)