本篇文章介绍“内建文件系统”和“网络通信”。官网:http://www.sylixos.com。
SylixOS内部提供了多种标准的文件系统,方便用户使用,这些文件系统是SylixOS编译内核时内建的,如果需要更多的文件系统如:NTFS则需要通过内核模块运行时动态加入。
SylixOS的文件系统实际上就是一组虚拟的设备驱动,它提供两组API接口,对上符合I/O系统虚拟文件系统(VFS)标准,对下要求设备符合块设备标准。文件系统在I/O系统中的结构如下图所示。
SylixOS文件系统使用I/O系统提供的标准VFS进行挂载,然后通过标准I/O操作函数进行访问,换句话说,操作一个普通文件与操作一个设备文件没有什么不同。
SylixOS目前内建的文件系统包括:
1. 根文件系统
2. PROC文件系统
3. FAT文件系统
4. YAFFS文件系统
5. NFS文件系统
6. ROMFS文件系统
其中ROMFS文件系统是只读文件系统,系统的关键性文件都可以放在此文件系统中确保安全。如果通过mount挂载文件系统则FAT、NFS,YAFFS也都可以挂载成只读文件系统。
PROC文件系统是保存操作系统信息和进程信息的文件系统,这个文件系统对应的文件实体都在操作系统内核中,是内核反馈出来的运行参数和信息,例如每一个进程的进程号都是一个对应的文件夹,里面存放着进程当前运行的信息,例如:进程对应的可执行文件,进程打开的文件描述符表,进程消耗的内存信息,进程内部的动态链接库信息等等。
SylixOS内部所有的设备(包括文件系统)都必须挂载到根文件系统上,根文件系统的设备名称非常特殊,为:“/”。所有的设备或者文件绝对路径都是以根符号起始的,也就是说操作系统查询一个设备总是从根文件系统开始的。
SylixOS还提供了一些方便文件系统使用的组件,它们包括:磁盘分区检查工具,磁盘缓冲器,磁盘自动挂载工具等等。
其中磁盘分区检查工具可以自动的检查一个磁盘的分区情况,并且生成对应分区的逻辑设备,每个逻辑设备都可以进行文件系统挂载。
磁盘缓冲器是一个特殊的块设备,他可以介于文件系统和磁盘之间,由于磁盘是低速设备,磁盘的读写速度远远低于CPU,所以为了解决这种速度不匹配,SylixOS提供了对应块设备的缓冲器。它可以极大的减少磁盘I/O的访问率,同时提高系统性能。当然引入磁盘缓冲器的原理同CPU的CACHE一样,所以它会带来存储器与磁盘中的数据短时间内不一致的现象,这个问题可以通过sync、fsync或者fdatasync 函数调用来同步数据。其中sync将阻塞当前线程,然后将系统中需要从缓存中回写的数据全部写入到设备中再返回。fsync表示将指定文件的缓存数据同步到物理磁盘中,fdatasync表示将指定文件的数据部分同步写入物理磁盘。
磁盘自动挂载工具是将很多磁盘工具封装在一起的一个工具集。设备可以通过热插拔事件将物理磁盘块设备交给磁盘自动挂载工具,这个工具首先会为这个磁盘开辟磁盘缓冲,然后会自动进行磁盘分区检查,最后生成对应每个分区的虚拟块设备,最后这个工具会识别每一个分区的文件系统类型,并装载与之对应的文件系统,这样从用户角度来说,就可以在操作系统目录中看到对应挂载的文件系统目录了。
带有磁盘缓冲器和分区处理工具的SylixOS块设备结构如下图所示。
SylixOS支持BSD标准的socket通信接口,这些接口包括:socketpair、socket、accept、bind、shutdown、connect、getsockname、getpeername、setsockopt、getsockopt、listen、recv、recvfrom、recvmsg、send、sendto、sendmsg等等,同时由于socket也是I/O系统的一部分,所以它支持read、write、ioctl、select、fcntl等等标准I/O的操作API。
SylixOS的socket支持三类域它们分别是:
1. AF_INET IPv4协议
2. AF_INET6 IPv6协议
3. AF_UNIX UNIX域协议(socketpair仅支持AF_UNIX域)
SylixOS系统网络系统构架如下图所示。
AF_INET和AF_INET6可以用作互联网通信,例如浏览网页,发送电子邮件,传输文件,网络可视电话等等。
在AF_INET和AF_INET6下支持的socket类型有:SOCK_STREAM、SOCK_DGRAM和SOCK_RAW,他们分别称作:流式套接字,用户数据报套接字和原始套接字。其中流式套接字使用TCP协议进行通信,它提供面向连接的,可靠的全双工管道通信。用户数据报套接字使用UDP协议进行通信,它提供非连接的,不可靠的通信。原始套接字可以让用户自行操作一些更加底层的通信,例如ICMP数据包等。
AF_UNIX可以用作本机进程间双向管道通信,例如在POSIX系统中大多数支持多进程的图形系统,进程间都是使用AF_UNIX进行双向管道通信。最为著名的是X windows(X11或X)系统,这个系统使用非常广泛。在它之上运行着很多大型的图形界面,例如:GTK+。同样在嵌入式系统里面Qt的QWS也是借助AF_UNIX实现多进程间通信的。
(本篇结束)