首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

CSAPP复习之虚拟内存

CSAPP复习之虚拟内存

虚拟内存:概念
物理和虚拟寻址

    物理寻址
        物理地址 PA
        主存被组织成一个由M个连续的字节大小的单元组成的数组
        简单的寻址模式
            ( R )
                mem[reg[R]]
            D( R )
                mem[reg[R]+D]
    虚拟寻址
        虚拟地址 VA
        地址翻译

地址空间

    线性地址空间
        地址空间中的整数是连续的
            均假设是线性的

    虚拟地址空间
        N=2n

    物理地址空间
        M=2m

虚拟内存作为缓存的工具

    虚拟内存是存储在磁盘上的N个连续字节的数组
        部分内容被缓存在DRAM中

    页
        虚拟页 VP
            将虚拟内存分割为VP大小的块
            P=2p
            虚拟页面有三种情况
                未分配的
                    VM系统还未分配的页,不占任何磁盘空间
                缓存的
                未缓存的
        物理页 PP
            将物理内存分割为PP大小的块
            大小也为P字节

    DRAM缓存是被大量的不命中开销驱动的
        DRAM缓存表示虚拟内存系统的缓存,它在主存中缓存虚拟页
        虚拟页往往很大
            一般是4KB
                linux 大页 2MB-1GB
        全相连
            任何VP都可以放在任何PP中
        极为复杂的替换算法
            不在考虑范围
        总是使用写回而不是直写

    页表
        页表条目(PTE)的数组
        将虚拟页映射到物理页
        虚拟地址空间的每个页在页表中一个固定偏移量的地方都有一个PTE
        PTE
            有效位
                表明该虚拟页是否被缓存在DRAM中
            n位地址字段
                如果设置了有效位,地址字段表示DRAM中相应的物理页的起始位置
                没有设置有效位
                    空地址表示未分配
                    未缓存则指向该虚拟页在磁盘上的起始位置

    页命中
        VP2被缓存在DRAM中
        访问VP2
            地址翻译定位PTE2
            检查设置了有效位
            使用PTE中的物理内存地址

    缺页
        DRAM缓存不命中
        触发缺页异常
            选择一个牺牲页
            将未被缓存的VP缓存到牺牲页的位置并更新PTE
            重启触发缺页异常的访问
            命中

    分配页面
        在磁盘上创建空间并更新PTE

    局部性原理
        工作集
            程序趋向于在一个较小的活动页面集合上工作
        若工作集的大小超出了物理内存的大小,将产生抖动
            性能急剧下降
返回列表