Vela TMPFS 文件系统详解

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hhhhhello啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值