Chinaunix首页 | 论坛 | 博客
  • 博客访问: 326633
  • 博文数量: 26
  • 博客积分: 1128
  • 博客等级: 少尉
  • 技术积分: 313
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-04 13:39
文章分类

全部博文(26)

文章存档

2012年(2)

2011年(10)

2010年(14)

分类: LINUX

2010-10-23 17:16:19

  和小组同学一起学习,讨论romfs文件系统已经有2个多月了。虽然还没有具体的实践出什么,但是在此期间,学习到了很多东西。特此做一个小总结。

首先,是一些文件系统的基础。比如目录和目录项的区别。每次讨论都会提到这个问题,由于大家的基础理论知识都比较薄弱,所以这个问题就很困扰。现在就小小说一下目录和目录项的区别

linux中其实是没有目录这么一说的,因为所有的目录,设备等等都是文件。所以我们这样说:目录文件的内容是该目录的目录项,目录项是该目录下的文件和目录的相关信息。目录可以包含子目录,即目录可以层层嵌套,形成文件路径,而路径中的每一部分被称为目录项。eg/home/wuyuun/Linux (目录home,wuyun,以及文件Linux均为目录项)。现在大概清楚了吧?(由于比较菜,所以描述的不一定准确··欢迎指正。谢过啦··

还有一些简单的名词解释比如:

文件——存放一切数据或信息的仓库。

VFSVirtual Filesystem Switch----是用户的应用程序与具体文件系之间的抽象层。

硬链接的2个限制:

1)不允许给目录创建硬链接;

2)只有在同一文件系统中的文件之间才可以创建硬链接。

大概了解了一下VFS

VFS只管理挂载到系统中的实际FS,它的管理对象有:文件(file),目录项(dentry),索引节点(inode),安装点(vsfmount)。

vfs_superblock只存在与内存中,当内核对一个FS进行初始化,注册时,内存为其分配一个sb,在FS卸载时被自动删除。

由于我们学习是边学习理论基础,边开始看romfs的源码,当然由于理论基础知识的欠缺,在看源码时还是会遇到很多很多问题,因此我们的进展也比较慢,我主要负责看romfs中的super.c不过也只看了一点,因为每看一点都会遇到很多问题。然后就需要不停的去看书,查资料。第一次真正的接触到内核源码,是有点不知从何下手的,所以就先了解了一下大体的框架,然后再一步一步的深入到代码内部去。在此期间,我遇到的第一个问题就是,不懂内核的数据类型。这里我稍稍说一些,我看到的romfs源码中的数据类型,总结之后我会给大家附上我找的一些资料。详细的东西,请大家自己去学习。

内核使用的基本数据类型主要有

int就不赘述了,u32—32位整数类型,pid_t 特定内核对象pid类型

romfs super.c中首先遇到的是__u32,对此系列先总结一下:

s8 __s8→ signed char u8 __u8→ unsigned char

s16 __s16→ signed short u16 __u16→ unsigned short

s32 __s32→ signed int u32 __u32-> unsigned int

s64 __s64 → signed loong long u64 __u64 → unsigned long long

可能还会遇到的··这是直接从types.hCopy

typedef __u32 __bitwise __le32;
typedef __u32 __bitwise __be32;

为了容易辨认区分,就给他们的数据类型起了别名,以一些特殊形式定义一些数据类型后,就不再需要考虑因系统而异的程序实现细节。所以也就是说,本质的数据类型就主要是上面说到的三种。至于为什有些数据类型前面有两个下划线,这两个表示的数据类型相同,但是用有前缀的类型是用于将变量显露给用户空间的。例如:一个驱动程序通过ioctl函数与运行在用户空间的程序交换数据,应该用_ _u32来声明32位的数据类型。

在《UNIX高级环境编程》P45简单的说到一些基本系统数据类型。建议大家可以看一下,具体的类型说明可以进入内部学习。


下一章张中将会说到,我具体看的super.c的源码。只有一点点哈···但是会一点一点去学习,然后连载··嘿嘿



阅读(1569) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-10-24 16:38:27

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com