文件系统、系统调用

文件系统

1.概述

此处讨论的文件系统是指内核用来管理文件系统以及对文件操作的机制和实现。Linux的文件系统

包括1.磁盘文件2.设备文件3.特殊文件。

a.磁盘文件

就是侠义上的文件,包括ramdisk、ext2等文件类型

b.设备文件

设备驱动设计的文件

c.特殊文件

/dev/null,管道等。

2.vfs

Linux为支持各种不同的文件系统,设计了VFS这一层。VFS向下为各种不同的文件系统提供接入口,

向上为用户提供open、close、read、write、ioctl等文件操作接口。所以在用户层可以忽略文件类

型,不论底层是何种文件类型都可以采用统一的系统调用。每种文件系统都有自己的file_operations,

用于实现对具体文件的open、write等操作(因为底层不同的文件类型,open、write

等方法肯定不一样)。VFS的作用就是根据用户空间的参数找到具体文件的file_operations。从这个意义

上来说一个设备相当于一个文件系统,例如rtc设备是一种文件系统,i2c是另外一种文件系统,因为他

们都有自己对应的file_operations。

具体的VFS和文件的关系如下图。


3.VFS和具体文件的关联

每个进程通过open操作与具体的文件关联起来,这中连接以file数据结构作为连接,其中file数据结构中有一个

file_operation的指针f_ops。通过open操作找到具体的文件系统,然后将此文件系统的file_operations操作集

找到并赋值给file数据结构中的f_ops,即相当于指定了这个file所属的文件系统,并且open在用户层返回的就是

这个file描述符,所以后续可以直接通过这个描述符进行file_operation中的其他如read、write等操作了。


这部分的内容可以参考《情景分析》一书。

系统调用

系统调用本质上是通过swi这条软指令实现,执行这条指令之后会触发一个异常使cpu进入特权模式。ARM除用户

模式之外都可称之为特权模式,用户模式不能访问芯片的某些寄存器比如cpsr,所以用户模式不能切换到其他模

式,但是可以从其他特权模式切换回用户模式。swi可以传递软指令号,这里就是传递系统调用号,然后内核可以

根据这个swi传递进来的调用号查找内核对应的系统调用的实现。

系统调用(open)的具体实例可参考

http://blog.chinaunix.net/uid-15141543-id-2775959.html


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值