书面作业:文件系统1

提示:HDU OS

文章目录

  1. 在某个文件系统中,每个盘块为512个字节,文件控制块占64个字节,其中文件名占8个字节。如果索引节点编号占2个字节,对一个存放在磁盘上256个目录项的目录,试着比较引入索引节点前后,为找到其中一个文件的FCB,平均启动磁盘的次数。

    引入inode之前:
    FCB占用块数:256 * 64 / 512 = 32
    平均启动磁盘的次数: (1 + 32)/ 2 = 16.5

    引入inode之后:
    FCB占用块数:256 * ( 2 + 8 ) / 512 = 32 inode不包括文件名
    平均启动磁盘的次数: (1 + 5)/ 2 + 1 = 4
    找 inode所在块 + 找文件数据所在块

  2. 解释i节点在文件系统中的作用。
    在Linux中,i节点的物理地址字段中有多少个地址项?
    每个地址项代表什么意思?
    若盘块大小为4KB,每个盘块号4B,一个1100个数据块的文件如何通过i节点索引这些数据块?请使用图作答。

    i节点在文件系统中的作用:
    what:

    1. 记录文件的权限和属性(除文件名以外 所有描述信息
    2. 一个文件占用一个inode
    3. 同时记录文件数据所在的block号码

    why:

    1. 减少目录文件大小()
    2. 减少平均磁盘启动次数
    3. 大大提高目录检索效率

    Linux inode 物理地址字段 地址项 :15
    12个直接记录区
    1个间接记录区
    1个双间接记录区
    1个三间接记录区
    所谓间接:再拿一个block当作记录block号码的记录区书面作业:文件系统1_第1张图片
    图来自:《鸟哥的Linux私房菜》

    block: 4KB
    每个block可以记录 4K/4 = 1024个记录
    直接:12个
    1个间接:1024个 即13-1036
    2个间接:还需要记录 1100 - 1024 - 12 = 64个 1037-1100
    得到一下图
    书面作业:文件系统1_第2张图片

  3. 在UNIX中,每个i节点中有10个直接地址和一、二、三级间接索引。
    若每个盘块512B,每个盘块地址4B,则一个1MB的文件分别占用多少间接盘块?
    20MB的文件呢?

    1个block可以存储:512/4 = 128个记录
    文件数据占用block:1M/512 = 2M/1K = 2048个记录
    直接:10个 还剩2038
    间接:2038/128 = 16个block
    双间接:1
    总共占用 17个间接block

    文件数据占用block:20M/512 = 40M/1K = 40K个记录
    直接:10个
    间接:(40K-10)/128 = 320个block
    双间接:319/128 = 3
    三间接:1
    总共占用 324个间接block

  4. 有一个文件包含4个逻辑记录(每个逻辑记录的大小与磁盘块大小相等,均为512B),分别存放在第100,160,60,55号磁盘块上,回答如下问题:
    (1)若物理结构采用显示链接结构(FAT文件系统),画出该文件的FAT结构。
    (2)若要读该文件的第1560字节处的信息,应该访问哪一个磁盘块?若FAT已经在内存中,需要进行多少次磁盘I/O操作?
    (3)若该文件系统采用单级索引结构,且该文件位于当前目录下,则读取该文件的第1560字节处的信息需要进行多少次磁盘I/O操作?

    书面作业:文件系统1_第3张图片
    提示:鸟哥的画法 我感觉这样更容易懂

    (1) 书面作业:文件系统1_第4张图片

    (2)
    1560/512 = 3
    所以访问第4块 即55号 (书上答案60是错误的)
    若FAT已经在内存中 需要1次磁盘I/O操作
    不在内存,需要2次磁盘I/O操作 一次读入FAT表 一次找55块

    FAT也能实现随机存取

    (3)
    2

  5. 在某个文件系统中,外存为硬盘,物理块大小为512B,有文件A包含598个记录,每个记录占255B,每个物理块放2个记录,文件A所在的目录如下图所示。文件目录采用多级树形目录结构,由根目录结点,作为目录文件的中间结点和作为信息文件的树叶组成,每个目录项(FCB)占127B,每个物理块放4个目录项,根目录的第一块常驻内存,请回答:
    书面作业:文件系统1_第5张图片
    (1)若文件的物理结构采用隐式链接存储方式,链指针地址占2B,那么要将文件A读入内存,至少需要存取多少次磁盘?
    (2)若文件为连续文件,那么要读文件A的第487个记录至少要存取几次硬盘?
    (3)一般为减少读盘次数,可采取什么措施,请给出一种改进办法,并说明此时可以减少几次存取操作?

    (1)
    因为127 * 4 + 2 <= 512
    一个block可存放4个目录项和一个链指针 (链式存储结构下
    根目录找到文件A需要读盘5次

    1. bin&dev&etc&boot信息存放在root第1块(题目说了根目录的第1块常驻内存,所以不算入访盘次数),usr和tmp信息在root的第二块,访盘1次获得前四个目录项的信息,结果发现没找到usr,所以访盘1次,找到了usr。(目前共访盘1次)
    2. 同理,like&marg&mik&za在usr的第一块,you和he在usr第二块,通过从前到后对比,第一块没有匹配的(访盘1次),第二块有匹配的目录项(访盘1次),找到he。(目前共访盘3次)
    3. file1和dir1在he的第一块,所以访盘1次获得dir1的目录信息,(目前共访盘4次)
    4. file1和dir1在he的第一块,所以访盘1次获得dir1的目录信息,(目前共访盘4次)
      参考
      因为 252 * 2 + 2 <= 512
      一个block可存放2个记录和next block address (链式存储结构下
      所有记录需要读硬盘次数:598/2=299次 (读disk以block为单位

    =>A读入内存至少需要 299 + 5 = 304 次

    (2)
    找到文件需5次读盘,
    只需1次读取硬盘就可以读出第487个记录 (索引存储结构
    .
    =>A读入内存至少需要 5 + 1 = 6 次

    (3)
    inode
    (我猜 这也是为什么WIN用FAT Linux用Ext2
    若一个目录项占16B,则一个盘块可存放512/16=32个目录项,而原来的一个盘块存放4个目录。采用索引分配的链接方案(可用1个或多个盘块来存放该文件的所有盘块号)。
    (由(1)中链指针地址为2B,255 × 2+2=512B)一个盘块可存放255个盘块号(链指针地址),留1个2B作为指向下一个存储索引块的磁盘块号。由前面已知查找目录时需启动5次磁盘。文件A共有299个盘块,则查找文件A的某一记录时需2次取得所有盘块号(2个链接的索引块/表),再启动一次磁盘即可把A中的任意一条记录读入内存。
    所以查找一条记录最多需要5(目录文件仍旧为链接方式)+3=8次访盘,而原来的链接方法查找一条记录,读盘次数为6~304(即5次找到文件A,然后A一共有299个磁盘,该记录可能在这299个磁盘中任意一个里).

你可能感兴趣的:(操作系统,操作系统)