网站首页 > 基础教程 正文
mmc.c文件的作用主要是对于GET方式获取静态的文件资源的时候对未进行内存映射的文件进行文件映射,当下次再次请求此文件的时候将会直接从内存中获取此文件加速了前端访问静态文件的速度 。
映射对象结构
typedef struct MapStruct {
ino_t ino; /**文件索引节点号*/
dev_t dev; /**文件使用的设备号*/
off_t size; /**文件大小*/
time_t ct; /**文件最后一次修改时间*/
int refcount; /**引用次数*/
time_t reftime; /**引用时间*/
void* addr; /**地址*/
unsigned int hash; /**hash值*/
int hash_idx; /**hash索引值*/
struct MapStruct* next; /**下一个指针*/
} Map;
mmc.c文件主要是由以下几个函数组成:
void* mmc_map( char* filename, struct stat* sbP, struct timeval* nowP )
mmc_map函数用于根据传入的文件的完整路径filename此文件的文件状态信息sbP和当前的时间nowP;首先检查申请的映射文件的内存空间是否够用,并判断此文件是否被映射过对于映射过的直接返回映射文件的内容的地址对于没有映射过的文件件进行映射。这个文件最终返回映射的文件的地址对于错误返回的地址为0.
void mmc_unmap( void* addr, struct stat* sbP, struct timeval* nowP )
mmc_unmap文件根据传入映射文件的地址addr和文件的状态信息sbP和当前的时间值nowP,在内存映射表中寻找是否存在此地址的映射对于没有在映射表中查找到此地址的映射将会在日志文件中输出错误信息,对于查找到的将会更新映射文件的引用值和引用时间。
void mmc_cleanup( struct timeval* nowP )
mmc_cleanup函数用于定时清除文件的引用数为0且超出雇佣时间的文件内存,同时根据映射的文件数量,映射的字节数量调整引用文件的雇佣时间,限制空闲的映射文件的数量小于100对于超过100但是出于未使用的Map对象释放其内存空间。
static void panic( void )
panic函数用于释放引用值为0的映射文件。
static void really_unmap( Map** mm )
really_unmap函数是真正执行释放映射文件申请的内存空间的函数,并更新映射的字节数量和文件数量。设置映射文件hash表对应的值为0.
void mmc_term( void )
mmc_term函数用于程序退出时释放掉所有映射文件申请的内存空间和映射对象申请的内存空间。
static int check_hash_size( void )
check_hash_size函数用于计算hash表的空间是否够用,对于映射表为空的按照默认的hash表的设置值申请hash表的空间,对于已经分配hash表的空间的对于hash表的空间时映射文件的3被以上表示正常,对于小于3倍的重新设置hash表的空间为映射文件的6倍并复制之前hash表的映射的对象的参数,返回0表示正常,返回负值表示异常
static int add_hash( Map* m )
add_hash函数用于向hash表中添加映射对象,添加成功返回0,添加失败返回负值。
static Map* find_hash( ino_t ino, dev_t dev, off_t size, time_t ct )
find_hash函数用于根据文件的信息:文件索引号,文件的设备号,文件的大小,文件的最后一次修改时间在Hash表中寻找此信息的文件的映射地址对于找到的返回映射文件的地址,对于没有找到的返回0.
static unsigned int hash( ino_t ino, dev_t dev, off_t size, time_t ct )
hash函数用于根据文件索引号,文件的设备号,文件的大小,文件的最后一次修改时间设置算法计算hash值,返回计算得到的hash值。
void mmc_logstats( long secs )
mmc_logstats函数用于向日志文件输出文件内存映射的状态信息
猜你喜欢
- 2024-10-19 Python3 datetime模块指南:日期时间操作、时区管理与实战案例
- 2024-10-19 C++及数据结构复习笔记,类和对象很简单?为啥好多程序员还不会
- 2024-10-19 Linux时间和日期 linux 时间 表示方法
- 2024-10-19 C/C++的8种时间度量方式以及代码片段
- 2024-10-19 Python实战:使用 datetime模块处理时间日期的全方位指南
- 2024-10-19 C++编程的 42 条建议(四) c++编程100例
- 2024-10-19 mount with noatime - 合理关闭atime提高服务器性能
- 2024-10-19 linux下连续三次fork()——深度理解进程创建函数
- 2024-10-19 C函数time和clock的计时区别 c计时器函数
- 2024-10-19 win进程弹出Microsoft Visual C++ Runtime Library的解决办法
- 最近发表
- 标签列表
-
- 菜鸟教程 (58)
- jsp (69)
- c++教程 (58)
- pythonlist (60)
- gitpush (78)
- gitreset (66)
- pythonif (68)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)