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

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

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

1.4K20

深入浅出文件系统原理之根文件系统挂载(基于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.2K50
您找到你想要的搜索结果了吗?
是的
没有找到

深入浅出文件系统原理之基础数据结构(基于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

78520

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

linux系统调用之sys_close(基于linux0.11

进程PCB中有一个指针数组,文件描述符是数组索引,每个元素指向一个file结构体,file结构体有一个字段指向文件对应的inode。...关闭一个文件主要的步骤是 1 根据文件描述符,把指针数组对应项置空。 2 如果指向的file结构也没有其他进程使用了,则file结构体可以重用。但是他指向的inode节点需要回写到硬盘。...// 解除文件描述符->file结构体->inode的关联 int sys_close(unsigned int fd) { struct file * filp; if (fd...>= NR_OPEN) return -EINVAL; // 清除close_on_exec标记,该标记表示fork+exec时关闭该文件 current->close_on_exec...(filp = current->filp[fd])) return -EINVAL; // 当前进程的文件描述符指针置空 current->filp[fd] = NULL

2.9K10
领券