首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

深入浅出文件系统原理之文件读取(基于linux0.11

这篇文章讲的是文件系统树,我们知道,文件系统的数据是存在硬盘里的,这里来看一下,这些数据是怎么组织成一棵树,又是怎么进行遍历的。下面就是这棵树。 ?...下面我们以读取文件为线索,看一下过程是怎么样的。 1 我们要先根据文件路径找到文件对应的inode节点。假设是个绝对路径。文件路径是/a/b/c.txt。...从inode的结构体结构中,我们知道inode有一个字段保存了文件的内容。所以这时候就把根目录文件文件内容读进来,是一系列的dir_entry结构体。...发现他是一个普通文件。至此,我们找到了这个文件对应的inode节点。完成fd->file结构体->inode结构体的赋值。 4 然后我们开始读取文件的内容。根据fd我们找到对应的inode节点。...5 至此,完成了文件的查找和读取。

1.5K20

深入浅出文件系统原理之根文件系统挂载(基于linux0.11

看完文件系统的基础数据结构。我们接着解析的根文件系统的挂载,因为这是文件系统被使用的起点。根文件系统的挂载是在操作系统初始化的时候进行的。对应的函数是mount_root。...// 系统初始化时挂载根文件系统 void mount_root(void) { int i,free; struct super_block * p; struct m_inode * mi...(p=read_super(ROOT_DEV))) panic("Unable to mount root"); // 获取根文件系统的第一个inode节点,里面存的是根目录的数据 if...>s_imount = mi; // 设置当前进程的根文件目录和当前工作目录 current->pwd = mi; current->root = mi; free=0; // 文件系统的逻辑数据块和...后续的对文件系统的使用都是基于这个根文件系统的根节点的。

2.3K50
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    深入浅出文件系统原理之基础数据结构(基于linux0.11

    想写一个系列的文章,逐步介绍文件系统的实现原理。采用的是linux0.11版本。这是第一篇文章。首先介绍一下文件系统的基础数据结构。这是后面的基础,需要先熟悉。所谓数据结构决定算法。...下面是文件系统在硬盘的结构图。 ?...,即文件系统的个数 #define NR_SUPER 8 #define NR_HASH 307 // 缓存文件系统数据的buffer个数,操作系统启动的时候初始化该变量 #define NR_BUFFERS...short i_uid; // 文件大小 unsigned long i_size; unsigned long i_time; // 文件的用户组id unsigned char...2 的s_log_zone_size次方等于文件系统的块大小(硬盘块的 大小和文件系统块的大小不是一回事,比如硬盘块的大小是1kb, 文件系统是4kb) */ unsigned

    79820

    linux系统调用之write源码解析(基于linux0.11

    buf,count); printk("(Write)inode->i_mode=%06o\n\r",inode->i_mode); return -EINVAL; } 这里我们只分析一般文件的写...That way leads to madness anyway. */ // 如果设置了追加标记位,则更新当前位置指针到文件最后一个字节 if (filp->f_flags & O_APPEND...i:-1); } file_write的大概逻辑就是根据inode中记录的文件信息,根据需要写入的位置算出,硬盘的位置或者说块号。如果对应的块已经存在,则直接返回对应的块号,否则需要新建块。...{ struct buffer_head * bh; int i; if (block<0) panic("_bmap: block<0"); // 文件的大小最大值...所以我们看到,我们写文件的时候,数据不是直接到硬盘的,只是在缓存里,系统会有线程定期更新缓存到硬盘。

    3.5K40
    领券