SWI(Software Interrupt),可以直译为
软中断
,在 RISC OS中使用 SWI 来访问操作系统例程或第三方生产的模块。许多应用使用模块来给其他应用提供低层外部访问。
ARM微处理器支持的异常指令
有如下两条:
— SWI 软件
中断指令
— BKPT 断点
中断指令
1、SWI指令
SWI指令的格式为:
SWI{条件} 24位的
立即数
SWI指令用于产生软件中断,以便
用户程序
能调用操作系统的系统例程。操作系统在 SWI的
异常处理
程序中提供相应的系统服务,指令中 24位的
立即数
指定
用户程序
调用系统例程的类型,相关参数通过
通用寄存器
传递,当指令中 24位的立即数被忽略时,用户程序调用系统例程的类型由通用寄存器 R0的内容决定,同时,参数通过其他通用寄存器传递。
指令示例:
SWI 0x02 ;该指令调用操作系统编号位02的系统例程。
2、BKPT指令
BKPT指令的格式为:
BKPT 16位的立即数
BKPT指令产生软件断点中断,可用于程序的调试。
SWI 的例子有:
* 文件器 SWI,它辅助读写磁盘、设置属性等。
* 打印机驱动器 SWI,用来辅助使用打印
并行端口
。
* FreeNet/Acorn TCP/IP
协议栈
SWI,用 TCP/IP 协议在 Internet 上发送和接收数据。
在以这种方式使用的时候,SWI 允许操作系统拥有一个模块结构,这意味着用来建立完整的操作系统的所需的代码可以被分割成许多小的部分(模块)和一个模块处理程序(handler)。
当 SWI 处理程序得到对特定的例程编号的一个请求的时候,它找到这个例程的位置并执行它,并传递(有关的)任何数据。
VFS
VFS的作用就是采用标准的Unix系统调用读写位于不同物理介质上的不同文件系统。VFS是一个可以让open()、read()、write()等系统调用不用关心底层的存储介质和文件系统类型就可以工作的粘合层。
所谓VFS就是Virtual File System虚拟文件系统,也称为虚拟文件系统开关(Virtual Filesystem Switch).
这是Linux档案系统对外的接口。任何要使用档案系统的程序都必须经由这层接口来使用它。
VFS是一个异构文件系统之上的
软件
粘合层(注:有时也把VFS称为可堆叠的文件系统(Stackable Filesystem),因为VFS可以无缝地使用多个不同类型的文件系统,就像把多个文件系统堆叠在一起一样,故而得名)。通过VFS,可以为访问文件系统的
系统调用
提供一个统一的抽象接口。
VFS最早由Sun公司提出以实现NFS(Network FileSystem,
网络文件系统
)。但是现在很多Unix系统都采用了VFS(包括Linux、FreeBSD、Solaris等)。
Linux下的VFS:
VFS的作用就是采用标准的Unix系统调用读写位于不同物理介质上的不同文件系统。VFS是一个可以让open()、read()、write()等系统调用不用关心底层的存储介质和文件系统类型就可以工作的粘合层。在古老的
DOS操作系统
中,要访问本地文件系统之外的文件系统需要使用特殊的工具才能进行。而在Linux下,通过VFS,一个抽象的通用访问接口屏蔽了底层文件系统和物理介质的差异性。
每一种类型的文件系统代码都隐藏了实现的细节。因此,对于VFS层和
内核
的其它部分而言,每一种类型的文件系统看起来都是一样的。
在Linux中,VFS采用的是
面向对象
的编程方法。