1.Linux ramfs初步介绍
Ramfs顾名思义是内存文档系统,他工作于虚拟文档系统(VFS)层。不能格式化,能够创建多个,在创建时能够指定其最大能使用的内存大小。假如您的Linux已将Ramfs编译进内核,您就能够很容易地使用Ramfs了。创建一个目录,加载Ramfs到该目录即可。
# mkdir -p /RAM1
# mount -t ramfs none /RAM1
缺省情况下,Ramfs被限制最多可使用内存大小的一半。能够通过maxsize(以kbyte为单位)选项来改变。
# mkdir -p /RAM1
# mount -t ramfs none /RAM1 -o maxsize=10000
以上即创建了一个限定了最大使用内存大小为10M的ramdisk
2.ramfs实现原理简介
RAMFS是一个非常巧妙的,利用VFS自身结构而形成的内存文件系统。RAMFS没有自已的文件存储结构,它的文件存储于page cache中,
目录结构由dentry链表本身描述,文件则由VFS的inode结构本身描述。
常用文件类型定义
#define S_IFMT 0170000 /* type of file ,文件类型掩码*/
#define S_IFREG 0100000 /* regular 普通文件*/
#define S_IFBLK 0060000 /* block special 块设备文件*/
#define S_IFDIR 0040000 /* directory 目录文件*/
#define S_IFCHR 0020000 /* character special 字符设备文件*/
#define S_IFIFO 0010000 /* fifo */
#define S_IFNAM 0050000 /* special named file */
ramfs处理的文件类型:
1) S_IFREG
- 注册了类型;
- 注册了操作函数;
2) S_IFDIR
- 注册了类型;
- 注册了操作函数;
3) S_IFLNK
- 注册了类型;
4) 其他
- 调用Inode.c中的init_special_inode(),处理S_ISCHR/S_ISBLK/S_ISFIFO/S_ISSOCK,否则提示类型错误
ramfs对应的底层操作函数
1)mmu
- 简单处理
2)nommu
- 内存映射转换
初始化
- struct backing_dev_info ramfs_backing_dev_info,cache的预读设置
- bdi_init(),继续设置 ramfs_backing_dev_info
- register_filesystem(),注册rootfs_fs_type
分配新文件节点
- ramfs_mknod(),建立新节点调用这个函数
- ramfs_mkdir(),内部调用ramfs_mknod()
- ramfs_create(),建立 S_IFREG 类型节点
- ramfs_symlink(),建立 S_IFLNK|S_IRWXUGO 类型节点
- 新节点默认给予755权限
- 当使用new_inode(sb)时,sb指针将该fs实例的相关信息全部带入,在此基础上分配新inode。