bdev文件系统

文件系统,是对磁盘数据进行组织和管理的一种机制。

可通过装载,以目录和文件的形式向用户层呈现。但,文件和目录其实只是文件系统的前端而已,只是文件系统的用户视图,其本质还在于这样的一个数据结构:inode。

那纯粹从inode角度来描述一个文件系统,会是什么情况?

伪文件系统,就是这样的一种表示,它不能装载,不可能从用户空间看到,但它不会带来任何的信息损失。看不到,不等于它不存在。

伪文件系统,包括1)负责管理块设备inode的bdev;2)负责处理管道的pipefs;3)处理套接字的sockfs; 这些都出现在 /proc/filesystems中。

伪文件系统对于内核来说,就是一个普通的文件系统,按通用方法来使用即可,对于用户来说,他不存在.

所有表示块设备的inode都保存在伪文件系统 bdev中,这些对用户层不可见。这使得可以使用标准的VFS函数,来处理块设备inode。

读取一个文件,首先必须确定文件块所属的磁盘块,也就是文件的元数据。由get_block函数(针对不同文件系统,有不同实现,祼设备也其对应函数),而这种对应关系会记录在buffer_head中,它记录了磁盘块和文件块之间的映射关系。读到的文件的元数据会缓存到该文件对应的块设备block_device的地址空间address_space,如果下次再读到同一文件,其元数据就可以从该文件对应bdev的cache中取得了。

如果,我们直接对块设备文件(如/dev/sdx)进行读写,那么块设备文件也会被缓存到内存中其对应的基树address_space中。对bdev这种特殊文件来说,其不光缓存常规文件的元数据,也会缓存真实的数据,dd命令就是这种应用。

可以通过dd if=/dev/sda of=/tmp/dest bs=1 count=4096命令,然后用free来查看cache的变化,记住在执行上述命令之前首先通过sysctl -w vm.drop_caches=3来清空文件的cache。对于文件系统层的代码来看,它根本不管你是块设备还是常规文件或者是一个字符设备文件,它只要你提供file_operations函数集合而不会平白无故给与任何文件系统以特权。

时间: 2024-11-05 02:22:06

bdev文件系统的相关文章

/proc/meminfo分析(一)

本文主要分析/proc/meminfo文件的各种输出信息的具体含义. 一.MemTotal MemTotal对应当前系统中可以使用的物理内存. 这个域实际是对应内核中的totalram_pages这个全局变量的,定义如下: unsigned long totalram_pages __read_mostly; 该变量表示当前系统中Linux内核可以管理的所有的page frame的数量.注意:这个值并不是系统配置的内存总数,而是指操作系统可以管理的内存总数. 内核是如何得到totalram_pa

使用 /proc 文件系统来访问 linux操作系统 内核的内容 && 虚拟文件系统vfs及proc详解

http://blog.163.com/he_junwei/blog/static/19793764620152743325659/ http://www.01yun.com/other/20130422/366044.html 使用 /proc 文件系统来访问 Linux 内核的内容 这个虚拟文件系统在内核空间和用户空间之间打开了一个通信窗口 简介: /proc 文件系统是一个虚拟文件系统,通过它可以使用一种新的方法在 Linux? 内核空间和用户空间之间进行通信.在 /proc 文件系统中,

Linux虚拟文件系统(VFS)学习

虚拟文件系统(Virtual Filesystem)也可称之为虚拟文件系统转换(Virtual Filesystem Switch),是一个内核软件层,用来处理与Unix标准文件系统相关的所有系统调用.其健壮性表现在能为各种文件系统提供一个通用的接口. 通用文件系统模型 VFS所隐含的主要思想在于引入一个通用的文件系统模型(common file model),这个模型能够表示所有支持的文件系统.在通用文件模型中,每个目录被看做一个文件,可以包含若干文件和其他的子目录. 通用文件模型由下列对象类

文件系统进阶(上)

一.文件系统类型 Linux文件系统: ext2, ext3, ext4, xfs(SGI), btrfs(Oracle), reiserfs, jfs(AIX), swap 光盘:iso9660 Windows:fat32, ntfs Unix: FFS(fast), UFS(unix), JFS2 网络文件系统:NFS, CIFS 集群文件系统:GFS2, OCFS2(oracle) 分布式文件系统:ceph, moosefs, mogilefs, fastdfs,glusterfs, Lu

Linux内核源代码情景分析-文件系统的安装

执行sudo mount -t ext2 /dev/sdb1 /mnt/sdb,将文件系统挂在到/mnt/sdb上.系统调用mount,映射到内核层执行的是sys_mount.假设/dev/sdb1和/mnt/sdb都位于ext2文件系统中. asmlinkage long sys_mount(char * dev_name, char * dir_name, char * type, unsigned long flags, void * data)//dev_name指向了"/dev/sdb

Linux文件系统(五)---三大缓冲区之buffer块缓冲区

在文件系统中,有三大缓冲为了提升效率:inode缓冲区.dentry缓冲区.块缓冲. (内核:2.4.37) 二.块buffer缓冲区 0.整体来说,Linux 文件缓冲区分为page cache和buffer cache,每一个 page cache 包含若干 buffer cache. > 内存管理系统和 VFS 只与 page cache 交互,内存管理系统负责维护每项 page cache 的分配和回收,同时在使用"内存映射"方式访问时负责建立映射. > VFS 负

Linux内核源代码情景分析-特殊文件系统/proc

由于proc文件系统并不物理地存在于任何设备上,它的安装过程是特殊的.对proc文件系统不能直接通过mount()来安装,而要先由系统内核在内核初始化时自动地通过一个函数kern_mount()安装一次,然后再由处理系统初始化的进程通过mount()安装,实际上是"重安装". 一.在内核初始化时调用init_proc_fs(),代码如下: static DECLARE_FSTYPE(proc_fs_type, "proc", proc_read_super, FS_

Linux内核源代码情景分析-设备文件系统devfs

我们以前多次讲过到,以主设备号/次设备号为基础的设备文件管理方式是有根本性的缺点的.这种从Unix早期一直沿用下来的方案一方面给设备号的管理带来了麻烦,一方面也破坏了/dev目录结构.Unix/Linux系统中的所有目录的结构都是层次的,惟独/dev目录是"平面"的.这不光是风格的问题,也直接影响着访问的效率和管理的方便与否. 那么理想中的/dev目录应该是什么样的呢?首先,它应该是层次的.树状的.其次,它的规模应该是可伸缩的,而且不受数量的限制(例如256个主设备号).还有,/dev

文件系统与存储:MBR/EBR类型分区建立

1 linux启动的几个阶段: 对应关系 阶段1 阶段2 阶段3 Boise(引导从u盘,硬盘,cdrom等启动) Grub Kernel 系统 preloader(完成下载+启动引导) Lk kernel Systermimg android智能机上 分区表再各个阶段的作用: 注意:Dumchar是debug信息用(用户模式读写某分区镜像等),分区表的建立等由内核block子系统来完成.dumchar调试如下: Dumchar_info的分区信息在哪里创建:??? /dev/bootimg /