混合索引
这部分内容属于操作系统对非空闲磁盘块的管理(就是那些存放了文件数据的磁盘块),即文件的物理结构,文件如何存放在外存中、文件分配方式。主要有三种:连续、链接和索引组织方式。
【题目】
- 在一个操作系统中,如果一个盘块的大小为1KB,每个盘块号占 4 个字节,采用直接地址(为10块)、一次间接、二次间接及三次间接的混合索引结构保存文件。那么,一个进程要访问偏移量为287744B处的数据时,需要经过几次间接寻址?
【解答】
- 由题中盘块的大小和盘块号的大小可知,每个盘块可以放256个地址;
- 则逻辑块号为287744 / 256 = 1124,块内偏移量为287744 % 256 = 0;
- 又因为10 + 256 < 1124 < 10 + 256 + 256 * 256
- 而1124 – (10 + 256) = 858
- 858 / 256 = 3, 858 % 256 = 90()
- 故可从FCB的第11个地址项(0~9是直接地址项,10是一次间址项,11是二次间址项),即二次间址项中得到二次间址块的地址
- 读入二次间址块并从它的第3项中获得一个一次间址块的地址,并从它的第90项中获得对应的物理盘块号
- (文件数据)块内偏移量为0
故:由于文件的FCB已经在内存,访问偏移量为287744B处的数据时,需要经过两次间接寻址(第一次是读入二次间址块,第二次是读入一次间址块)
示意图:
我认为是这样的:
位示图法
这属于对空闲磁盘块的管理,即文件存储空间的管理的内容。主要有空闲表法,空闲链表法、位示图法和成组链接法。
【题目】
2. 使用位示图:1行开始共20行、1列开始共30列来表示空闲盘块状态,设首盘块号为1。假如当分配一个盘块号为140时,其在位示图中的行、列数应为多少?当释放一个盘块号为 301 时,其所在位示图中的行、列数为多少?(行号、列号和盘块号都是从1开始编号)
【解答】
这种问题就是自己要注意行号、列号和块号分别是从什么开始,是0还是1。
然后自己画个矩阵就明白了。
假设是三行五列的():这题行列、块号都是从1开始的。
行号/列号 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
1 | 1 | 2 | 3 | 4 | 5 |
2 | 6 | 7 | 8 | 9 | 10 |
3 | 11 | 12 | 13 | 14 | 15 |
可以看出知道盘块号block、行数m和列数n,行号i和列号j的推导:
i = block / n + 1;
j = block % n;
if( block % n == 0){
i--;
}
补充说明:如果盘块号是列数的倍数,也就是在最后一列的盘块号,可以看出行号不需要加1,那第一行来说,1~4除列数5都是0,加1才能得到正确的行数;而如果盘块号是5,除列数就刚好是行数1了。
行号/列号 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
1 | 1 | 2 | 3 | 4 | 5 |
没什么固定方法,还是自己举个栗子推推看。
个人理解,有误请指正~