lightingmdb(lmdb)是一个高性能mmapkv数据库,基本介绍和文档参见symas官网,本文将尝试分析其源代码结构以理解数据库设计的关键技术。本系列文章将尝试从以下几个方面进行分析。系统架构(本文)MMAP映射(系列2)B+Tree操作(系列3)事务管理(系列4)MVCC控制(系列5)等..
分类:
数据库 时间:
2015-09-11 10:49:07
阅读次数:
375
void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);
函数功能:把文件内容映射到一段内存上(虚拟内存),通过对这段内存的读取和修改,实现对文件的读取和修改。
参数说明
addr:指定映射的起始地址,通常设为NULL(表示由系统指定)。
length:代表将文件中多大的部分映射到内存...
分类:
系统相关 时间:
2015-08-13 01:16:51
阅读次数:
216
三.内存映射映射相对底层的内存管理方式。控制内存的权限。控制内存映射到文件1.函数说明:a.mmap映射内存voidmmap(void*start,//从指定位置开始映射,必须是页首//如果为0/NULL,系统指定开始映射地址size_tsize,//映射的大小,建议page倍数intprot,//...
分类:
其他好文 时间:
2015-07-26 06:00:03
阅读次数:
144
【摘要】这个工具的原理也比较简单,就是应用程序通过mmap函数实现对/dev/mem驱动中mmap方法的使用,映射了设备的内存到用户空间,实现对这些物理地址的读写操作。...
分类:
系统相关 时间:
2015-07-23 21:51:39
阅读次数:
613
一.mmap系统调用1.mmap系统调用mmap将一个文件或者其它对象映射进内存。文件被映射到多个页上,如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零。munmap执行相反的操作,删除特定地址区域的对象映射。当使用mmap映射文件到进程后,就可以直接操作这段虚拟地址进行文件的读...
分类:
系统相关 时间:
2015-07-07 16:47:36
阅读次数:
256
用户空间的页面有下面几种: 1、普通的用户空间页面,包括进程的代码段、数据段、堆栈段、以及动态分配的“存储堆”。 2、通过系统调用mmap()映射到用户空间的已打开文件的内容。 3、进程间的共享内存区。 这些页面的的周转有两方面的意思。 1、页面的分配,使用,回收。如进程压栈时新申请的页面,这类页面不进行盘区交换,不使用时释放得以回收。 这部分通过一个场景来解释...
分类:
系统相关 时间:
2015-03-01 10:35:01
阅读次数:
288
上一节讲了由open函数打开一个内存映射文件,再由mmap函数把得到的描述符映射到当前进程地址空间中来。这一节说说另外一种类似的共享内存方法,即 有shm_open函数打开一个Posix.1 IPC名字(也许是文件系统中的一个路径名),所返回的描述符由函数mmap映射到当前进程地址空间。 pos.....
分类:
系统相关 时间:
2014-11-22 21:33:46
阅读次数:
299
共享内存同意两个或多个进程共享一给定的存储区,由于数据不须要来回复制,所以是最快的一种进程间通信机制。共享内存能够通过mmap()映射普通文件(特殊情况下还能够採用匿名映射)机制实现,也能够通过系统V共享内存机制实现。应用接口和原理非常easy,内部机制复杂。为了实现更安全通信,往往还与信号量等同步...
分类:
系统相关 时间:
2014-11-07 18:32:40
阅读次数:
183
共享内存允许两个或多个进程共享一给定的存储区,因为数据不需要来回复制,所以是最快的一种进程间通信机制。共享内存可以通过mmap()映射普通文件(特殊情况下还可以采用匿名映射)机制实现,也可以通过系统V共享内存机制实现。应用接口和原理很简单,内部机制复杂。为了实现更安全通信,往往还与信号量等同步机制共同使用。下面主要介绍系统V共享内存机制,主要用到的系统API包括:
1.shmget函数:获得一个...
分类:
系统相关 时间:
2014-07-26 02:33:37
阅读次数:
317