| |
|
|
|
Calendar |
|
|
|
|
|
News |
|
|
|
|
|
|
Archives |
|
|
|
|
|
|
Comments |
|
|
|
|
|
|
Chat |
|
|
|
|
|
|
Links |
|
|
|
| | |
| 实现对virtual file system的快速控制相关 |
|
一、virtual file system的基本结构
此虚拟文件系统(virtual file system)在外部存储器中的文件为一个分块二进制文件,分块大小为8KB,块编号以Block num计数。考虑100M的文件总共分成12800块。
HEADBlock num 1Block num 2……Block num nTRAIL
图1 – 分块二进制文件内部结构
块内结构分为三部分:head部分存放该块在其实际文件内部的块编号,该编号以FB num(File Block num)计数,DATA部分存放实际数据,trail部分存放与该块逻辑相连块的二进制文件块编号。
FB numDATABlock num
图2 – 文件块内部结构
二进制文件内部实际文件名使用Hash Table(Disk)映射索引。
Hash(filename 1)< ~ >,< ~ >,……
Hash(filename 2)< ~ >,< ~ >,……
•
•
••
•
•
Hash(filename n)< ~ >,< ~ >,……
图3 – Hash Table (Disk) 结构
此virtual file system使用内存映射方式操作存储在磁盘中的分块二进制文件。该系统启动后,首先在内存中开辟一块20M缓冲区,并在该缓冲区头部中加载Hash Table(Disk)。然后根据经验将外部存储设备中二进制文件的部分文件块加载到缓冲区的数据区,并在缓冲区头部创建Hash Runtime Table,此表用来记录那些实际文件的那些文件块被加载到了缓冲区。
Hash(filename 1)< ~ >,< ~ >,……
Hash(filename 2)< ~ >,< ~ >,……
•
•
••
•
•
Hash(filename n)< ~ >,< ~ >,……
图5 – Hash Runtime Table 结构
应用中,对实际文件的操作通过内存映射缓冲区转换为对分块二进制文件部分文件块的操作。并且操作前,首先检查该文件块是否已被加载到缓冲区中,若在,则直接操作缓冲区中的数据;若不在,则再从二进制文件中加载相应的文件块到缓冲区的溢出区。缓冲区清空前,将所有改动的文件块写回外部存储器中的分块二进制文件。
二、控制域
首先,是对文件块尾部逻辑相连块编号的控制。该编号的存在基于这样的假设,即应用存在短期习惯。但此习惯维持的时间是离散的、阶跃的,以至于更新该编号是必要的。但是更新该编号的动作有可能导致该系统不稳定,甚至使系统发散,所以必须使用控制策略使系统始终稳定并趋于收敛,且不过多地损失快速性。
其次,提前加载逻辑相关块是基于经验的,然而该经验的有效性是不可预期的。提前加载无用的文件块反而降低了效率,所以需要使用控制策略使提前加载所取得效率提升量大于加载无用文件块造成效率降低量。
P.S. 一开始的原则是,本博是纯娱乐的,绝不添加任何技术内容,不过随着[创意]和[新媒体艺术]栏目的增加,似乎这个原则也无所谓了。其实本来嘛,生活不应该有太多约束。所以,打今儿起,再增加一个栏目[技术],将放置我关于软件工程方面的一些心得体会,此为第一篇。
另,blogcn的文本格式……算了,这样也挺好~ |
| Tags: |
作者 sailaspen 评论() | 人气()
| 引用(0) | 推荐 | 保存日志 | 问题日志 | 收藏到网摘 | 返回首页
|
| |
|