虚拟存储器摘总

虚拟内存

http://www.cnblogs.com/feng9exe/p/6379686.html

来理解一下虚拟地址映射的过程:拿到一个虚拟地址,根据已有的vm_area_struct看这个虚拟地址是否属于某个vm_area_struct

  • 如果没有匹配到,就报段错误,访问了一个没有分配的虚拟地址。
  • 如果匹配到了vm_area_struct,根据虚拟地址和页表的映射关系,找到对应的页表项PTE,如果PTE没有分配,就报一个缺页异常,去加载相应的文件数据到物理内存,如果PTE分配,就去相应的物理页的偏移位置读取数据

所以虚拟页的三种状态的实际含义如下:

  • 未分配虚拟页,指的是没有使用mmap建立vm_area_struct,所以也就没有对应到具体的页表项
  • 已分配虚拟页,未映射到物理页,指的是已经使用了mmap建立的vm_area_struct,可以映射到对应的页表项,但是页表项没有指向具体的物理页
  • 已分配虚拟页,已映射到物理页,指的是已经使用了mmap建立的vm_area_struct,可以映射到对应的页表项,并且页表项指向具体的物理页

mmap要么映射到一个后备文件,要么映射到一个匿名文件。操作系统分配物理内存时实际用到了匿名文件的mmap。

2. vm_page_prot 表示这个区域的页的访问权限

http://blog.csdn.net/xu3737284/article/details/12710217

linux操作系统是通过sys_exec对可执行文件进行映射以及读取的,有如下几步:

  1.创建一组vm_area_struct

  2.圈定一个虚拟用户空间,将其起始结束地址(elf段中已设置好)保存到vm_start和vm_end中。

  3.将磁盘file句柄保存在vm_file中

  4.将对应段在磁盘file中的偏移值(elf段中已设置好)保存在vm_pgoff中;

  5.将操作该磁盘file的磁盘操作函数保存在vm_ops中

http://blog.csdn.net/al_xin/article/details/38590931

一个具体区域结构包含下面的字段:

  • vm_start:指向这个区域的起始处。
  • vm_end:指向这个区域的结束处。
  • vm_prot:描述这个区域的内包含的所有页的读写许可权限。
  • vm_flags:描述这个区域内页面是与其他进程共享的,还是这个进程私有的(还描述了其他一些信息)。
  • vm_next:指向链表中下一个区域结构。

http://blog.csdn.net/chen98765432101/article/details/54881652

缩写解释:

VA:虚拟地址

VPN:虚拟页号

PTE:页表项

PTEA:页表项地址

PA:物理地址

DATA:数据

MMU:内存管理单元

TLB:地址翻译缓冲器

设置存储器层次结构主要是为了缓存低速的存储器。主存是对磁盘等设备的缓存,cache是对主存的缓存,tlb是对主存页表的缓存。

http://www.cnblogs.com/feng9exe/p/6379650.html

struct mm_struct
{
    struct vm_area_struct *mmap;            /* list of VMAs */
    struct rb_root mm_rb;
    struct vm_area_struct *mmap_cache;      /* last find_vma result */
    ...
    unsigned long start_code, end_code, start_data, end_data;
    unsigned long start_brk, brk, start_stack;
    ...
};

struct vm_area_struct
{
    struct mm_struct *vm_mm;        /* The address space we belong to. */
    unsigned long vm_start;         /* Our start address within vm_mm. */
    unsigned long vm_end;           /* The first byte after our end address
                                           within vm_mm. */
    ....
    /* linked list of VM areas per task, sorted by address */
    struct vm_area_struct *vm_next;
    ....
    /* describe the permissable operation */
    unsigned long vm_flags;
    /* operations on this area */
    struct vm_operations_struct * vm_ops;
    
    struct file * vm_file; /* File we map to (can be NULL). */
} ;

时间: 2024-10-27 02:08:34

虚拟存储器摘总的相关文章

OSOS存储器管理(三) 虚拟存储器

基本概念与实现 1)局部性原理 在一段时间内,运行的作业程序仅访问(涉及到)一部分作业代码,即不会涉及整个地址空间.即在一段时间间隔内,仅装入一部分代码,作业照样能正常运行 2)虚拟存储器的引入 作业(进程)运行时,仅装入其代码的一部分到物理内存,待需要时再装入其余部分,同时还可将不再运行的部分调出物理内存.变相地扩充了内存容量,即实现了虚拟存储器. 虚拟内存 ①虚拟内存将内存抽象成一个巨大的.统一的存储数组,进而将用户看到的逻辑内存与物理内存分开 ②只要部分程序需要放在内存中就能使程序执行 ③

【操作系统】虚拟存储器

相关文章: [操作系统]存储器管理 [操作系统]处理机调度简述 [操作系统]之进程管理 [操作系统]经典的同步问题(生产者消费者问题, 哲学家进餐问题, 读写问题) 内存的容量有限, 如果有大作业或大量作业运行, 内存就会不够用. 为解决这一问题边催生了虚拟存储器的概念. 常规存储器管理方式的特征 一次性 作业必须一次性地全部装入内存后才能开始运行. 驻留性 作业被装入内存后, 整个作业都一直驻留在内存中, 其中任何部分都不会被换出, 直至作业运行结束. 局部性原理 由1968年P.Dennin

操作系统-页式虚拟存储器管理系统设计

(大三下学期开学)操作系统课程设计 题外话: 介个系统的算法啊其实很简单很好理解,就是当时自己实践的时候整了好久,各种调bug各种惆怅啊! 但是此乃100%原创哇!真是老老实实光啃操作系统书自己设计出来的,啥参考都没有 写完的时候真是太有成就感了(流泪) 还为此特别手写了算法研究了好久,刚刚翻出笔记本发现自己为了研究地址变换画了个小漫画!(见最下页) 当时的计划:2/27实现的目标:能够根据作业大小为作业分配空间,建立页表.2/28实现的目标:完成两种算法的设计与调试3/1实现的目标:完善展示界

2728:摘花生(数字金子塔变形)

2728:摘花生 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 Hello Kitty 想摘点花生送给她喜欢的米老鼠.她来到一片有网格状道路的矩形花生地(如下图),从西北角进去,东南角出来.地里每个道路的交叉点上都有种着一株花生苗,上面有若干颗花生,经过一株花生苗就能摘走该它上面所有的花生.Hello Kitty只能向东或向南走,不能向西或向北走.问Hello Kitty 最多能够摘到多少颗花生. 输入 第一行是一个整数T,代表一共有多少组数据.1<=T

2728:摘花生

2728:摘花生 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 Hello Kitty 想摘点花生送给她喜欢的米老鼠.她来到一片有网格状道路的矩形花生地(如下图),从西北角进去,东南角出来.地里每个道路的交叉点上都有种着一株花生苗,上面有若干颗花生,经过一株花生苗就能摘走该它上面所有的花生.Hello Kitty只能向东或向南走,不能向西或向北走.问Hello Kitty 最多能够摘到多少颗花生. 输入 第一行是一个整数T,代表一共有多少组数据.1<=

02:陶陶摘苹果

总时间限制:  1000ms 内存限制:  65536kB 描述 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试. 现在已知10个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目.假设她碰到苹果,苹果就会掉下来. 输入 包括两行数据.第一行包含10个100到200之间(包括100和200)的整数(以厘米为单位)分别表示10

[CSAPP笔记][第九章虚拟存储器][十分核心]

9.虚拟存储器 为了更加有效地管理存储器且少出错,现代系统提供了对主存的抽象概念,叫做虚拟存储器(VM). 虚拟存储器是硬件异常,硬件地址翻译,主存,磁盘文件和内核软件的完美交互. 为每个进程提供一个大的,一致的和 私有的地址空间. 提供了3个重要能力. 将主存看成磁盘地址空间的高速缓存. 只保留了活动区域,并根据需要在磁盘和主存间来回传送数据,高效使用主存. 为每个进程提供一致的地址空间 简化存储器管理 保护了每个进程的地址空间不被其他进程破坏. 程序员为什么要理解它? 虚拟存储器是中心的.

陶陶摘苹果

总时间限制:  1000ms 内存限制:  65536kB 描述 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试. 现在已知10个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目.假设她碰到苹果,苹果就会掉下来. 输入 包括两行数据.第一行包含10个100到200之间(包括100和200)的整数(以厘米为单位)分别表示10

虚拟存储器(2)——端到端地址翻译与多级页表

一.端到端地址翻译示例 上节我们刚把TLB开了个头,多说无益,还是具体来玩个实际例子吧,具体来做一个端到端(虚拟地址到物理地址)的地址翻译示例,来统筹下之前讲的知识点.先来做如下约定: 1.老规矩,存储器按字节寻址,访问也按一字节访问: 2.虚拟地址14位长(n=14),物理地址12位长(m=12),位数上点玩起来方便: 3.页面大小是64字节(P=64),也就是说(p=6) 4.TLB是四路组相联,总共16个条目: 5.L1 d-cache是物理寻址.直接映射的,行大小为4字节,总共有16个组