Linux文件系统(操作系统的文件管理)

文章目录

  • 一.内存中的文件管理(文件与进程)
  • 二 .Linux系统视角下的计算机外设
  • 三.磁盘上的文件管理

参考Linux内核源码版本------linux-2.4.3

一.内存中的文件管理(文件与进程)

  • 操作系统之下,进程是计算机系统执行计算任务的基本单位,进程访问文件执行数据读写之前,操作系统会从外设获取相应的文件信息,在内存中建立struct file结构体对象来描述和管理文件,进程借助struct file结构体提供的文件信息执行文件操作.Linux文件系统(操作系统的文件管理)_第1张图片
  • 进程PCBstruct task_struct与文件struct file之间的关联:Linux文件系统(操作系统的文件管理)_第2张图片
    Linux文件系统(操作系统的文件管理)_第3张图片
    Linux文件系统(操作系统的文件管理)_第4张图片
  • Linux系统下,打开文件的系统调用接口:
    • int open(const char *pathname, int flags, mode_t mode);
    • 接口的返回值其实是fd_array列表中的元素数组下标,称为文件描述符,通过数组下标和fd_array列表,可以找到指定文件的struct file对象
  • Linux系统下,文件重定向接口:
    • int dup2(int oldfd, int newfd);
    • dup2接口原理:先关闭fd_array[newfd]指向的文件,然后在fd_array列表中,指针fd_array[oldfd]覆盖掉指针fd_array[newfd],后续使用oldfdnewfd执行文件操作,操作的便是同一个文件。
    • 进程替换不会影响进程PCB的大部分内容(包括struct file结构体),因此文件重定向在执行进程替换之后仍然生效.

二 .Linux系统视角下的计算机外设

Linux文件系统(操作系统的文件管理)_第5张图片

  • 操作系统之下,计算机外设与计算机内存之间的交互必须依托于进程
  • 冯诺依曼计算机除了内存和CPU外,其他的与计算机内存进行交互的IO设备Linux系统中统一被视为被进程打开的文件
  • 与其他被进程打开的文件相同,工作中的IO设备在Linux内核中被统一描述为struct file结构体对象,不同的具体IO设备的struct file对象中的成员函数指针会指向不同的接口实现:
    Linux文件系统(操作系统的文件管理)_第6张图片
  • 不同的IO设备对应的struct file中的函数指针指向不同的接口实现,这本质上就是C语言的多态编程,“Linux下一切皆文件”其实就是在Linux系统内核中体现的最早期的多态编程,这种编程模式在Linux内核中被频繁使用 (面向对象编程语言的始祖)

三.磁盘上的文件管理

  • Linux系统视角下,磁盘空间在呈线性排列,一个磁盘被分为多个分区,每个分区由多个块组构成,块组的结构如下:Linux文件系统(操作系统的文件管理)_第7张图片
  • 块组的组成部分:
    • SuperBlock(超级块):包含的是整个文件系统的全局信息,比如 inode 总个数、块总个数、每个块组的 inode 个数、每个块组的块个数等等。SuperBlock的存在意义是备份文件系统的重要全局信息,保证文件系统的安全性和稳定性
    • GroupDescriptorTable(块组描述符):包含文件系统中所有块组的属性信息,与SuperBlock的作用类似。
    • BlockBitmap(数据位图)和inodeBitmap (inode 位图): 用于标识对应的数据块或inode是空闲的,还是正在被使用中。
    • inodeTable(inode 列表):包含了块组中所有的inodeinode与磁盘文件是一一对应的关系,inode中存储磁盘文件的文件信息和文件的数据块引索
    • Data blocks(数据块):存储文件的有效数据.
      Linux文件系统(操作系统的文件管理)_第8张图片
      Linux文件系统(操作系统的文件管理)_第9张图片
      Linux文件系统(操作系统的文件管理)_第10张图片

你可能感兴趣的:(青菜的Linux专栏,linux)