【Vela学习】存储系统
一、VFS解析
VFS全称是Virual file system,Linux中的不同文件系统包含FAT、ROMFS、RAMFS等,不同的文件操作系统均包含Open、Close、Read、Write等接口,但不同文件系统的对文件的处理方式是不同的,因此需要单独抽象出一层级作为上层差异性的屏蔽,VFS提供统一的文件操作接口(如struct file_operations
),根据不同的文件系统,调用不同的底层接口。VFS实现了对上层应用在不同文件系统下的文件操作接口差异屏蔽,即对上层应用隐藏不同文件系统的实现细节,对驱动开发者来说影响不大,不同的文件系统对应不同的驱动,驱动开发者只需把该封的驱动封完毕即可。
图示VFS在系统中的层级关系:
+---------------------+
| 应用程序层 | 用户空间
| (如ls, cat, 自定义应用)|
+---------------------+
│
▼
+---------------------+
| 系统调用接口 | 如open、read、write等
+---------------------+
│
▼
+---------------------+
| VFS层 | 内核空间
| - 统一文件操作接口 |
| - 管理inode/dentry缓存|
| - 页缓存(Page Cache)|
+---------------------+
├───────────────────┬───────────────────┐
│ │ │
▼ ▼ ▼
+---------------------+ +---------------------+ +---------------------+
| Ext4文件系统 | | FAT/NTFS文件系统 | | procfs/sysfs/tmpfs |
+---------------------+ +---------------------+ +---------------------+
│ │ │
▼ ▼ │
+---------------------+ +---------------------+
| 块设备驱动层 | | 字符设备驱动等 |
| (SCSI, SATA, NVMe) | | (如终端、打印机驱动) |
+---------------------+ +---------------------+
│ │
▼ ▼
+---------------------+ +---------------------+
| 硬件存储设备 | | 其他物理设备 |
| (硬盘、SSD、U盘) | | (如USB设备、GPU) |
+---------------------+ +---------------------+
Ex4、FAT等文件系统对应块设备驱动;
procfs/sysfs这类伪文件系统,直接映射内存数据;
二、扇区、页、块的区别
nandflash没有扇区的概念,以块和页作为存储单元,页是最小的读取和写入单元,块是最小的擦除单元。页包括主存储区和备用区,备用区用于存储本页的纠错码等信息,通常占主数据区的3%~5%。嵌入式中的页大小一般是2KB~4KB。
norflash中没有页的概念,以字节进行读取和写入,以扇区作为最小擦除单元,写入前需进行擦除操作(负荷检测单元,存储90天数据,一天天擦除,按扇区进行)。
扇区的由来,是由于早期的数据是以磁盘指针以扇形的形式从存储单元中读取的,故扇区这个名称沿用下来的了。