操作系统实验四 文件管理

实验目的与要求

    实验目的:

(1)、掌握计算机操作系统管理进程、处理机、存储器、文件系统的基本方法。

(2)、了解进程的创建、撤消和运行,进程并发执行;自行设计解决哲学家就餐问题的并发线程,了解线程(进程)调度方法;掌握内存空间的分配与回收的基本原理;通过模拟文件管理的工作过程,了解文件操作命令的实质。

(3)、了解现代计算机操作系统的工作原理,具有初步分析、设计操作系统的能力。

(4)、通过在计算机上编程实现操作系统中的各种管理功能,在系统程序设计能力方面得到提升。

实验要求:

(1)、题目1:

    xv6采用混合索引分配方式。阅读以下英文介绍:

The on-disk inode structure, struct dinode, contains a a size and a list of block numbers. The inode data is found in the blocks listed in the dinode’s addrs array. The first NDIRECT blocks of data are listed in the first NDIRECT entries in the array; these blocks are called ‘‘direct blocks’’. The next NINDIRECT blocks of data are listed not in the inode but in a data block called the ‘‘indirect block’’. The last entry in the addrs array gives the address of the indirect block.

请联系代码分析,回答以下问题:

只采用直接分配方式,xv6支持的最大文件尺寸是多少?

结合直接分配方式和索引分配方式,xv6支持的最大文件尺寸是多少?

解析: 

(1)、题目1

    xv6采用混合索引分配方式。阅读以下英文介绍:

The on-disk inode structure, struct dinode, contains a a size and a list of block numbers. The inode data is found in the blocks listed in the dinode’s addrs array. The first NDIRECT blocks of data are listed in the first NDIRECT entries in the array; these blocks are called ‘‘direct blocks’’. The next NINDIRECT blocks of data are listed not in the inode but in a data block called the ‘‘indirect block’’. The last entry in the addrs array gives the address of the indirect block.

请联系代码分析,回答以下问题:

只采用直接分配方式,xv6支持的最大文件尺寸是多少?

结合直接分配方式和索引分配方式,xv6支持的最大文件尺寸是多少?

结合文档和源码学习,我们可以得知在xv6文件系统中,文件数据可以存储在直接块(direct blocks)和间接块(indirect block)中。

文档中的第8章8.10节描述了inode的内容和数据块的分配方式。文档提到了直接块(direct blocks)和间接块(indirect block),并且说明了它们是如何在inode的addrs数组中被组织的。文档中给出了磁盘中的文件分配示意图,如图1所示。

图 1 磁盘上的文件表示

在xv6文档中,可以在fs.h和fs.c文件中看到文件分配的具体实现。

在源码文件kernel/fs.h中,定义了struct dinode,其中包含了文件的大小(size字段)和数据块号的数组(addrs字段)。这个结构体直接关联到磁盘上的inode结构。

以下是kernel/fs.h中struct dinode的定义,它包含了直接块和间接块的地址列表:

图 2 struct inode定义

同样在源码文件kernel/fs.h中,定义了NDIRECT和NINDIRECT宏,它们分别表示直接块和间接块的数量。例如,如果NDIRECT被定义为12,这意味着有12个直接块可以被直接索引,如图3所示。

图 3 相关宏定义

在kernel/fs.c中,bmap函数处理数据块的分配,包括直接块和间接块。这个函数展示了如何根据文件的大小和块号来分配和访问数据块,如图4所示。

图 4 bmap函数定义

以下是对这两种分配方式的分析:

  1. 只采用直接分配方式:

直接块存储在inode的addrs数组中的前NDIRECT个条目。

每个条目代表一个数据块,如果只使用直接块,那么文件的最大尺寸将受限于可以直接索引的数据块数量。

根据xv6的实现,NDIRECT通常被定义为一个较小的值,例如12。这意味着有12个直接块可以被直接索引。

每个数据块的大小为BSIZE,这是一个宏定义,在xv6中通常设置为512字节或1024字节等。

因此,如果只使用直接块,xv6支持的最大文件尺寸为NDIRECT * BSIZE。

例如,如果BSIZE为1024字节,那么只使用直接块时,xv6支持的最大文件尺寸为:1024B*12=12KB

  1. 结合直接分配方式和索引分配方式:

除了直接块之外,xv6还使用一个间接块来存储更多的数据块地址。间接块本身也是一个数据块,可以存储NINDIRECT个数据块地址。

因此,间接块可以提供额外的NINDIRECT * BSIZE字节的存储空间。然而,间接块的地址是通过addrs数组中的最后一个条目来索引的,这意味着间接块可以存储的块数也受到BSIZE的限制。

假设BSIZE为1024字节,NINDIRECT通常被定义为1,每个间接块可存储的地址数为(BSIZE / sizeof(uint)),其中sizeof(uint)意义是指针所占长度,那么间接块可以存储的地址数为:1024/4=256,即间接块可以存储256个数据块的地址。

因此,结合直接分配和间接分配,xv6支持的最大文件尺寸为:

(NDIRECT+NDIRECT*(BSZIE/ sizeof(uint)))*BSIZE

若BSIZE为1024B,NDIRECT为12,则xv6支持的最大文件尺寸为:

(12+1024/4)*1024B=268KB

++++++++++++++++++++++++++++++++++++++++++++++++++++++

其他(例如感想、建议等等)。

本次实验通过深入研究xv6操作系统的源码和实验过程,加深了我对操作系统核心概念的理解,也锻炼了编程和系统分析能力。实验中,我学习了文件系统等关键领域的知识,并通过实际编码来实现操作系统中的各种管理功能,这让我对操作系统的工作原理有了更加直观的认识。通过阅读xv6文档进行学习,不但可以加深对系统的理解,也进一步提高了我自主学习的能力。同时,我也意识到操作系统设计中的复杂性和精妙之处,为我未来的学习和研究奠定了坚实的基础。

  • 22
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值