RAMBlock之file_ram_alloc

原创 2012年03月25日 17:15:41

在linux下,分配RAMBlock时可以将内存块映射到文件中,详细内容可见file_ram_alloc函数,下面是该函数的主要部分:


static void *file_ram_alloc(RAMBlock *block,
                            ram_addr_t memory,
                            const char *path)
{
    char *filename;
    void *area;
    int fd;
    unsigned long hpagesize;

    hpagesize = gethugepagesize(path);

    if (asprintf(&filename, "%s/qemu_back_mem.XXXXXX", path) == -1) {
        return NULL;
    }
/*由于mkstemp函数创建的临时文件不能自动删除,所以执行完mkstemp函数后要调用unlink函数,unlink函数删除文件的目录入口,但临时文件还可以通过文件描述符进行访问,直到最后一个打开的进程关闭文件操作符,或者程序退出后临时文件被自动彻底地删除。*/
    fd = mkstemp(filename);
    unlink(filename);
    free(filename);

    memory = (memory+hpagesize-1) & ~(hpagesize-1);

    if (ftruncate(fd, memory))
        perror("ftruncate");
//mmap将一个文件或者其它对象映射进内存,MAP_PRIVATE表示建立一个写入时拷贝的私有映射。内存区域的写入不会影响到原文件。
    area = mmap(0, memory, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);
    block->fd = fd;
    return area;

}

//查询文件系统相关的信息 返回系统经过优化的传输块大小

static long gethugepagesize(const char *path)
{
    struct statfs fs;
    int ret;

    do {
        ret = statfs(path, &fs);
    } while (ret != 0 && errno == EINTR);

    if (ret != 0) {
        perror(path);
        return 0;
    }

    if (fs.f_type != HUGETLBFS_MAGIC)
        fprintf(stderr, "Warning: path not on HugeTLBFS: %s\n", path);

    return fs.f_bsize;
}


QEMU中的内存管理介绍

@(qemu源码阅读与分析)QEMU中的内存管理(介绍)QEMU在虚拟机启动的初始化阶段,为客户机分配了物理内存,那么客户机的物理内存如何工作呢?本篇文档,为大家介绍客户机物理内存的工作原理、相关数据...
  • u011364612
  • u011364612
  • 2016年05月08日 12:36
  • 2029

虚拟块设备/dev/ram0

在配置内核使内核支持FAT文件系统的s
  • luckywang1103
  • luckywang1103
  • 2014年07月14日 21:17
  • 5424

一.求生之路2服务器的搭建(Windows)

下载游戏1.先去下载个在服务器上下载游戏的工具.(服务器不用安装Steam客户端)所以要借助这个工具SteamCMD 下载steamCMD的网站 直接下载steamCMD的压缩包 2.解压出来 3....
  • u013792369
  • u013792369
  • 2016年11月05日 10:25
  • 7207

alloc.h头文件

  • 2012年10月08日 16:49
  • 2KB
  • 下载

oracle retail alloc install 13.2

  • 2012年11月20日 17:41
  • 1.84MB
  • 下载

alloc-release-0.7.1.tar.gz~

  • 2017年08月25日 11:39
  • 12.08MB
  • 下载

内存分配与释放 alloc,free

  • 2010年10月13日 13:09
  • 193KB
  • 下载

stl_alloc.h(加注释)

  • 2016年09月02日 13:04
  • 32KB
  • 下载

C语言内存分配方式及malloc,realloc,calloc,alloc.free函数

C语言跟内存分配方式     (1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。   (2) 在栈上创建。在执行函数时,...
  • u012254369
  • u012254369
  • 2013年10月25日 11:59
  • 757

alloc、init你弄懂50%了吗

本文转自:伯乐在线 原文链接:http://ios.jobbole.com/86324/ 这是一篇我记录对alloc、init分析思考的笔记。如果读者想看懂我的第二个思考,可能需要您至少了解内存的...
  • MinggeQingchun
  • MinggeQingchun
  • 2016年06月28日 16:36
  • 158
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:RAMBlock之file_ram_alloc
举报原因:
原因补充:

(最多只允许输入30个字)