Giter Site home page Giter Site logo

read-unix-v6-file-systems's Introduction

计算机系统工程Project 1项目文档

17302010002 黄元敏

一、简介

本Project主要是需要实现InodeFileDirectory层的一些接口函数,以实现一个文件系统对文件、目录的读取功能。

二、实现细节

inode.c

本文件中主要实现了inode_igetinode_indexlookup两个函数。

其中,inode_iget通过给定的inode编号从文件系统中获取对应的inode内容。主要通过计算出一个block中能够存放的inode结构数量,来计算给定的inode编号应当处于连续磁盘的具体哪个block上,以及在该block上的偏移量。而后,只需要将这个block通过disk相关的函数读取进来,返回对应偏移位置上的inode即可。

至于inode_indexlookup则是负责通过给定的文件在inode上的block编号,获取具体文件在磁盘上的block编号。实现该函数的主要思路为:对文件类型进行判断,对于小文件,直接解读inode结构中的i_addr字段,获取对应block编号上的值即可;而对于大文件,则需要判断其是否在单次间接block中,还是要去二次间接block上获取。无论何种方式,均是通过计算偏移量来获得block编号所在的磁盘block,而后在该block上获取需要的i_addr中的具体值。

file.c

本文件中的file_getblock函数目标为获取给定文件block的内容。具体实现上,通过给定的inode编号调用inode_iget获取对应inode,而后调用inode_indexlookup获取文件所在的block编号,之后就能直接从disk上读取到对应block的内容。由于函数还需要返回读取到文件的实际大小,因此,我们可以通过inode中存储的文件大小信息,来判断该文件需要多少个block来存储;再根据我们此次查询的block编号来判断是否为该文件的最后一个block。除文件的最后一个block外,其余block的大小应当占满整个block,即大小为DISKIMG_SECTOR_SIZE

directory.c

本文件中的directory_findname函数是用于查询给定目录中给定名称的文件内容并获取。在实现上,只需要读取给定的inode,通过该inode的大小来判断该inode中的存储占据了多少个磁盘block。对这些数量的block进行循环读取,再对读取到的block内容按照direntv6结构进行解析,查询其d_name是否与给定的name相同,即可找到该目录下名称为name的文件。

pathname.c

本文件中的pathname_lookup函数通过给定的绝对路径获取对应的inode编号。实现该函数的主要思路为:首先对给定的路径是否为根目录进行判断,如果是,则直接返回ROOT_INUMBER;否则对路径进行递归解析,不断切割出头上的父目录、获取对应inode、在对应inode上解析子路径,直至子路径不再包含分隔符,即到达目录最深处时,返回所在entryinode编号。

三、测试

由于没有提供sanitycheck工具,因此我通过命令行中执行给定的测试命令,并将输出与给定的gold结果进行比对来测试程序的正确性。

最终,在三个Disk Image上执行i、p两项功能均与给定的标准输出相同,通过了测试。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.