文件系统简介

您所在的位置:网站首页 uc文件 文件系统简介

文件系统简介

2023-03-15 17:29| 来源: 网络整理| 查看: 265

 在简单的介绍文件系统之前一定要先简单的说明一下物理的存储介质。为什么要介绍物理存储介质呢?

      主要是为了说明“everything is files”。好吧……既然大家知道一切皆文件了,我们在此就不介绍物理存储介质了。但是还是希望大家能够对物理的介质进行读写操作,真正的感受下,读取文件系统第一个分区的第一个扇区的感觉。这样便于我们理解文件系统的概念。

     首先我们查看下在设备上的/dev/block目录,因为磁盘作为块设备就存在于这个文件下。在板子上,会是MMC开头的文件。例如mmcblk0即为第一个分区,而此分区又分成了mmcblk0p1……。我们在读取分区信息的时候只需要,读取mmcblk0的前512字节的数据并按照十六进制的方式输出即可。

     在linux中支持这很不同格式的文件系统,而这些文件系统相互之间怎样进行通信便成了一个很大的问题,当我们需要对数据今次那个cp的时候,我们需要知道“源文件系统”和“目的文件系统”。这样进行两种文件系统的一次拷贝过程也许消耗资源不多,但是我们如果频繁的进行不同的文件系统之间的数据拷贝时,就不能忽略对资源的消耗了。因此,我们必须要采取适当的措施把这种复杂的过程抽象出来形成单独的部分,这种情况下便产生了虚拟文件系统VFS。

       VFS是什么?

       请自行查阅。

       这里不得不提一下,FUSE。FUSE(file system in user space)提供了一种在用户空间实现自己的文件系统的平台。我们可以借助这个文件系统完成自己的文件系统的扩展。具体内容自行查阅。此处比较出名的应用就是实现了linux对NTFS格式文件的支持。

 一点差异

       2.4内核中貌似维护了一个文件系统的目录,而在2.6内核中本人并没有发现。

      在2.6内核中,文件系统中,在启动的过程中,文件系统会对驱动进行注册,完成注册之后,会在后续的时间里,完成对设备的扫描并且根据设备的类型进行轮询。当轮询的过程,发现设备插入时就会将设备与驱动类型进行匹配,如果能够匹配在mount成功,否则mount失败并报告相应的错误。

    2118  SYSCALL_DEFINE5(mount, char __user *, dev_name, char __user *, dir_name,    2119         char __user *, type, unsigned long, flags, void __user *, data)    2120 {    2121     int ret;    2122     char *kernel_type;    2123     char *kernel_dir;    2124     char *kernel_dev;    2125     unsigned long data_page;    2126    2127     ret = copy_mount_string(type, &kernel_type);    2128     if (ret < 0)    2129         goto out_type;    2130    2131     kernel_dir = getname(dir_name);    2132     if (IS_ERR(kernel_dir)) {    2133         ret = PTR_ERR(kernel_dir);    2134         goto out_dir;    2135     }    2136    2137     ret = copy_mount_string(dev_name, &kernel_dev);    2138     if (ret < 0)    2139         goto out_dev;    2140    2141     ret = copy_mount_options(data, &data_page);    2142     if (ret < 0)    2143         goto out_data;    2144    2145     ret = do_mount(kernel_dev, kernel_dir, kernel_type, flags,    2146         (void *) data_page);    2147    2148     free_page(data_page);    2149 out_data:    2150     kfree(kernel_dev);    2151 out_dev:    2152     putname(kernel_dir);    2153 out_dir:    2154     kfree(kernel_type);    2155 out_type:    2156     return ret;    2157 }

这就是内核中文件系统mount的入口宏定义函数。在此函数中的do_mount()、do_remount()、do_newmount()函数会帮你完成你想要完成的任务,你只需要坐着喝茶就好。

文件系统简介 文件系统简介 文件系统简介 【文件系统】FAT12文件系统简介 文件系统 之 linux文件系统简介 proc文件系统简介 FAT 12 文件系统简介 Linux 集群文件系统简介 cramfs文件系统简介 FAT12文件系统简介 嵌入式Linux文件系统简介 Irrlicht引擎:文件系统简介 FAT文件系统简介 /proc文件系统简介 嵌入式Linux文件系统简介 FAT16文件系统简介 FAT16文件系统简介(一) 嵌入式文件系统简介 触摸屏相关的一点拙见--以及android系统中linux内核部分的编译 linux-3.10.5.tar.xz (如何解压tar.xz的压缩文件) 中断处理--上下半部机制 Android system_server进程的初始化过程(包含jvm的初始化) STL 简介,标准模板库 文件系统简介 ecshop二次开发 restlet2.1 学习笔记(四) 获取、返回XML类型参数 ubuntu10.10server操作系统下安装RabbitMQ以及简单设置 在web service 中的android调用soap Read by other session 等待说明 Android上层启动过程的几个关键点 dev C++ windows程序 undefine reference to Android国际化对应国家代码


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3