【审题】“文件的数据一次性写入磁盘”意味着后面不需要“增删”,联想DS知用顺序表即OS的磁盘的【连续分配】
【注意】(2)如果是FCB与对应的文件数据块连续存储,则每次查找某文件时要先遍历前面很多“无用”的块。
注意:虽然题目要求给出“内容”,但别漏了簇号==。
注意:板子题了,第一步:求磁盘块数;第二步:求FAT表项位数。
【解析】file1的簇号106存放在FAT的100号表项中,簇号108存放在FAT的106号表项中。
【联想静态链表】
【解析】读取内存中的dir的内容找到目录文件dir1,把48号簇读入内存中,接着再读取目录文件dir1的表项(如下图左下表),不是先读取100号簇,因为要读的第5000个字节在dir1文件的第二个簇,所以根据目录文件dir1的表项了解第一个簇是100号后,根据这个【100】去找FAT,查FAT后知道100屁股后的是106号簇,把该簇从磁盘读入内存。
【正确答案】访问目录文件dir1所在的48号簇和文件file1的106号簇。
【错误答案】48、100、106号簇。
【解析】文件系统中能容纳4TB/1KB=2^32个磁盘块,要索引辣么多磁盘块需要32位“地址”即4B的块号。而索引表区用直接索引方式,所以512B的索引表区能装512B/4B=128个索引项。所以的单个文件最大长度=128×1KB=128KB
【注意】不要觉得辣么多磁盘块值能索引128个磁盘块就用32位“不值得”,要优先考虑能索引2^32个磁盘块的任意一个,故用32位=4B的块号作索引表表项;另外文件的最大长度是不可能占满all容量(4TB)的(因为有索引表区的限制)。
虽然考察的文件分配方式不同于【三种经典分配方式】,但是不要慌,仔细读题!
单个文件最大长度=预分配的连续空间+直接索引区。
(1)先算连续空间:
虽然起始块号是6B,“6×8bit能索引巨多磁盘块”——错误想法,因为此处说的是连续存储。应该根据【2B的块数】知可以表示2^16个磁盘块,即2^16 ×1KB=2^26 B。
(2)再算直接索引区:
由【起始块号】6B知块号就是6B啊。。。。
所以直接索引区一共可以有504B/6B=84个索引项,一个磁盘块=1KB,即索引区占84KB.
综上,单个文件最大长度是2^26B+84KB.
要使单个文件长度max,首先part1中用6B=48bit块号索引其实没必要(因为最多就2^32磁盘块),所以块号4B即32位就足够了,因为预分配的格式<起始块号,块数>共8B(你要读出这里的题意是指8B不变。。),所以剩下的4B=32位作为块数(块数字段最多能表示2^32个磁盘块,共4TB.),所以单个文件最大长度为4TB
注意:不要再加上“直接索引区”的84KB了,因为“连续空间”已经让4TB“占满了”。
【错解】29+1=30次
【错因】没意识到写入磁盘块也需要“访问”。。
【注意】要移动把1~29块磁盘块全部往前移一位,比如1块移动:(1)先把该块移动到内存中(读入内存),(2)再从内存中移到磁盘对应新位置(比之前前1位的位置)即内存数据写回磁盘。
【解析】
文件目录 FCB ,通过FCB知道文件的第一块存放在物理块号5,需要把5号物理块读入内存(CPU解析5号物理块,从而知道5指向7号块),以此类推,读到第29块后,随机找一个空闲物理块(写入新30的内容),同时新30的内容会先写入内存中,要把新30的链接指针改成指向旧30,并将29号指向新的30号记录,然后分别将29号记录和30号记录写回磁盘。所以共32=29次读+2次写。
【注意】这里的文件最大长度指文件的最大数据长度。
【注意】常规【最大文件长度】题,要快速写出。
【注意】不要“先入为主”误认为每个簇放1个索引结点。