专业编程基础技术教程

网站首页 > 基础教程 正文

Thttpd源程序解析11 mmc.c文件解析

ccvgpt 2024-10-19 03:25:14 基础教程 6 ℃

mmc.c文件的作用主要是对于GET方式获取静态的文件资源的时候对未进行内存映射的文件进行文件映射,当下次再次请求此文件的时候将会直接从内存中获取此文件加速了前端访问静态文件的速度 。

映射对象结构

typedef struct MapStruct {

Thttpd源程序解析11 mmc.c文件解析

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函数用于向日志文件输出文件内存映射的状态信息

Tags:

最近发表
标签列表