1. 基本概念
TMPFS(Temporary File System)是一个完全基于内存的文件系统,具有以下特点:
-
数据存储在 RAM 中,不写入磁盘
-
系统重启后数据丢失
-
读写速度快,适合临时文件
-
动态调整大小,最大限制为系统可用内存
-
支持标准的文件系统操作
-
支持目录层次结构
2. 设计架构
2.1 对象模型
TMPFS 采用面向对象的设计,实现了三层对象结构:
基础对象 (tmpfs_object_s)
struct tmpfs_object_s {
rmutex_t to_lock; // 对象锁
size_t to_alloc; // 分配的内存大小
uint8_t to_type; // 对象类型
uint8_t to_refs; // 引用计数
struct tmpfs_directory_s *to_parent; // 父目录
};
目录对象 (tmpfs_directory_s)
struct tmpfs_directory_s {
// 继承基础对象字段
rmutex_t tdo_lock;
size_t tdo_alloc;
uint8_t tdo_type;
uint8_t tdo_refs;
struct tmpfs_directory_s *tdo_parent;
// 目录特有字段
uint16_t tdo_nentries; // 目录项数量
struct tmpfs_dirent_s *tdo_entry; // 目录项数组
};
文件对象 (tmpfs_file_s)
struct tmpfs_file_s {
// 继承基础对象字段
rmutex_t tfo_lock;
size_t tfo_alloc;
uint8_t tfo_type;
uint8_t tfo_refs;
struct tmpfs_directory_s *tfo_parent;
// 文件特有字段
uint8_t tfo_flags; // 文件标志
size_t tfo_size; // 文件实际大小
uint8_t *tfo_data; // 文件数据指针
};
这种面向对象的设计体现在以下功能实现中:
对象多态和类型转换
// 基于 to_type 字段实现对象类型的运行时判断
if (to->to_type == TMPFS_DIRECTORY) {
// 将基类指针转换为目录对象
FAR struct tmpfs_directory_s *tdo = (FAR struct tmpfs_directory_s *)to;
// 访问目录特有成员
nentries = tdo->tdo_nentries;
} else {
// 将基类指针转换为文件对象
FAR struct tmpfs_file_s *tfo = (FAR struct tmpfs_file_s *)to;
// 访问文件特有成员
filesize = tfo->tfo_size;
}
对象生命周期管理示例
// 增加对象引用计数
static void tmpfs_object_addref(FAR struct tmpfs_object_s *to) {
tmpfs_lock_object(to); // 加锁保护
to->to_refs++; // 增加引用计数
tmpfs_unlock_object(to); // 解锁
}
// 释放对象
static void tmpfs_release_lockedobject(FAR struct tmpfs_object_s *to) {
if (--to->to_refs == 0) { // 引用计数为0时释放对象
if (to->to_type == TMPFS_REG

2万+

被折叠的 条评论
为什么被折叠?



