博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
虚拟内存
阅读量:4125 次
发布时间:2019-05-25

本文共 834 字,大约阅读时间需要 2 分钟。

更加有效的管理内存,系统提供了一种对主存的抽象概念,叫做虚拟内存

物理寻址:

在这里插入图片描述
虚拟寻址:
在这里插入图片描述
虚拟内存被组织为一个由存放在磁盘上的N个连续的字节大小的单元组成的数组,每个字节有一个唯一的虚拟地址,作为数组的索引。VM系统将虚拟内存分割为虚拟页,物理内存被分割为物理页(页帧)

如图有一个8个虚拟页的虚拟内存,虚拟页0、3未被分配,因此磁盘上还不存在,虚拟页1、4、6被缓存到物理内存中,页2、5、7已经被分配,但并未缓存到主存中

在这里插入图片描述

页表将虚拟页映射到物理页

在这里插入图片描述
页命中:CPU读VP2中的虚拟内存,VP2被缓存在DRAM中,地址翻译硬件将虚拟地址作为一个索引定位PTE2,并从内存读取,因为设置了有效位,那么地址翻译硬件就知道VP2是缓存在内存中

缺页:DRAM缓存不命中。CPU引用VP3中的一个字,VP3并未缓存在DRAM中,地址翻译硬件从内存读取PTE3,从有效位推断VP3未被缓存,触发缺页异常,选择一个牺牲页,内核从磁盘复制VP3到内存的PP3,更新PTE3

VM缺页之前,对VP3的字的引用不命中,触发缺页

在这里插入图片描述
VM缺页之后,缺页处理程序选择VP4作为牺牲页,用VP3的副本取代
在这里插入图片描述

操作系统为每个进程提供独立的页表,因而也就是独立的虚拟地址空间,多个虚拟页面可以映射到同一个共享物理页面上

地址翻译

如图展示了MMU如何利用页表实现映射,CPU中的一个控制寄存器,页表基址寄存器指向当前页表,n位虚拟地址包含:一个p位的虚拟页面偏移、一个n-p位的虚拟页号

在这里插入图片描述

CPU硬件执行步骤:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

多级页表

在这里插入图片描述

使用k级页表地址翻译
在这里插入图片描述

Core i7的内存系统:

在这里插入图片描述
Core i7地址翻译:
在这里插入图片描述

Linux虚拟内存系统

内核为系统中每个进程维护一个单独的任务结构(task_struct),一个Linux进程的虚拟内存:

在这里插入图片描述
Linux组织虚拟内存的方式:
在这里插入图片描述
任务结构的一个条目指向mm_struct,描述了虚拟内存的当前状态,pgd指向第一级页表的基址,mmap指向一个vm_area_structs的链表

转载地址:http://ayhpi.baihongyu.com/

你可能感兴趣的文章
解决“ImportError: cannot import name ‘_validate_lengths‘”问题
查看>>
解决“TypeError: can‘t convert cuda:0 device type tensor to numpy. ......”问题
查看>>
解决“Missing dependencies for SOCKS support...”问题
查看>>
解决“Could not find a version that satisfies the requirement torch...”问题
查看>>
解决“CUDA out of memory.”问题
查看>>
解决YOLOv5“test.py”最后输出值为0的问题
查看>>
解决“Pytorch中指定GPU跑程序”问题
查看>>
解决“ImportError: cannot import name imsave“问题
查看>>
解决“测试TensorRT安装过程中download_pgms.py报错”问题
查看>>
使用Faster RCNN训练自己的数据集
查看>>
第一次写博客
查看>>
CCF-CSP认证知识要求
查看>>
JAVA 第一个程序“HelloWorld”
查看>>
如何把字幕文件(.ass)转换为word文件
查看>>
操作系统一二章作业答案
查看>>
认识JAVA
查看>>
操作系统中长期调度、中期调度和短期调度之间的区别
查看>>
以生活例子说明单线程与多线程
查看>>
多线程和单线程的执行效率问题
查看>>
Context Switch Definition
查看>>