虚拟内存和虚拟地址空间

虚拟地址空间:

1 每个进程拥有独立的进程地址空间,这个每个进程相互独立,不同进程不能访问其他进程的地址空间,否则会长生错误。一个进程的错误操作,也只会影响这个进程,
不会导致其他进程的奔溃

2 实模式下的寻址方式,可以直接操作物理内存地址,但是不安全。任何进程都可以修改物理内存

3 每个进程的独立的地址空间,能够使得每个进程拥有独立的4g虚拟内存地址。共享一个物理内存。

4 虚拟内存,在磁盘中存在交换区,以解决虚拟内存地址大于物理内存的情况,通过换页机制,达到进程层面的内存扩容。

5/每个进程的虚拟地址空间是一样大的,这样方便我们在载入可执行文件的时候,分配的是虚拟内存,而不用管物理内存的分配

6/方便共享内存代码的实现,通过虚拟内存到物理内存的映射

7.虚拟内存的连续,可以导致物理内存的不连续,通过映射完成

虚拟地址空间的映射关系:

虚拟内存地址:通过页表,分页目录,

最简单的地址转换:一级目录:cr是页表的起始地址

cr+虚拟地址空间地址的前一部分 =页表的页表项,该页表项指向的是物理内存块的起始地址,物理内存的起始地址+偏移量=物理内存地址。

时间: 2024-10-08 13:57:25

虚拟内存和虚拟地址空间的相关文章

Linux进程虚拟地址空间

在linux中,各个进程的虚拟地址空间是独立的.各个进程的虚拟地址空间起始于0,延伸至TASK_SIZE -1. 在32 bit系统中,内核分配1GB,而各个用户空间进程可用的部分为3GB. 进程虚拟地址空间由若干个区域组成, 1.当前运行代码的二进制代码.text段. 2.程序使用的动态库代码. 3.存储区局变量和静态变量的数据段,bss,data段 4.保存动态分配数据的堆 5.保存局部变量和实现函数 调用的栈 6.环境变量和命令行参数. 7.文件内容映射到虚拟地址空间的内存映射. 具体布局

虚拟地址空间

https://msdn.microsoft.com/zh-cn/library/hh439648(v=vs.85).aspx' 当处理器读或写入内存位置时,它会使用虚拟地址.作为读或写操作的一部分,处理器将虚拟地址转换为物理地址.通过虚拟地址访问内存有以下优势: 程序可以使用一系列相邻的虚拟地址来访问物理内存中不相邻的大内存缓冲区. 程序可以使用一系列虚拟地址来访问大于可用物理内存的内存缓冲区.当物理内存的供应量变小时,内存管理器会将物理内存页(通常大小为 4 KB)保存到磁盘文件.数据或代码

[memory]虚拟地址空间分布

一.开篇 踏入嵌入式软件行业也接近2年了,从研一开学起懵懵懂懂的开始学习C语言,由于本科时对这方面了解的少之又少,所以学起来比较困难,但是有一群无私奉献的小伙伴,慢慢的,慢慢的,慢慢的,一只脚踏进了嵌入式的大门. 看了很多本关于C语言学习的,我也是俗人一个,最初也是使用广为人知的那本"神书"--谭老的那本. 这些书中都无非是在讲一些C原因所谓的语法.规范等等,再加上PC端的封装的不能再封装的编译环境,抄一抄书本上的C代码,傻瓜式的点一点编译按钮,哇,竟然出现了"Hello W

LInux进程虚拟地址空间的管理

2017-04-07 脱离物理内存的管理,今天咱们来聊聊进程虚拟内存的管理.因为进程直接分配和使用的都是虚拟内存,而物理内存则是有系统"按需"分配给进程,在进程看来,只知道虚拟内存的存在! 前言: 关于虚拟内存和物理内存这些东东,本篇不作介绍,此等基础知识参考最普通的操作系统参考书籍即可.当然有问题也可留言,我们共同学习,共同进步! 进程虚拟地址空间: 每个进程拥有一个独立的虚拟地址空间,独立怎么体现?进程A有个地址1000,进程B也有个地址1000,为何两个地址不发生矛盾,还能正常工

进程的虚拟地址空间分布

一个linux进程的虚拟地址空间分布如上图所示,分为内核空间和进程空间,对于一个32位操作系统来说,4GB的空间分成两部分,低地址的0~3G给用户空间,高地址的3G~4G给内核空间. 内核空间 与进程有关的数据结构段 每个进程都自己独特的PCB和页表,映射到不同的物理内存. 内核代码段 所有进程的内核代码段都映射到同样的物理内存,并在内存中持续存在. 进程空间 1.正文段 存放代码和常量值(字面值常量) 2.未初始化数据段(BSS段) 存放未初始化的全局变量 3.初始化数据段 存放已经初始化的全

内存管理:虚拟地址空间以及编译模式

虚拟地址空间:就是程序可以使用的虚拟地址的有效范围.虚拟地址空间的大小由操作系统决定,但还会受到编译模式的影响. CPU的数据处理能力 地址总线:用于在内存上定位数据,例如:地址总线有20根,寻址能力为2^20 = 1MB 数据总线:位于主板之上,不在CPU中,用于在CPU和内存之间传输数据.决定了CPU单次的数据处理能力.(64位 = 寄存器的位数 = 数据总线的宽度) 主频:决定了CPU单位时间内的数据处理次数.(4GHz) 数据总线 × 主频 = CPU单位时间内的数据处理量. 实际支持的

进程之进程控制块与虚拟地址空间

1.进程概念 在用户层面,进程是一次程序的动态运行实例, 在操作系统层面,进程是操作系统进行资源调度和分配的基本单位,每一个进程都有自己独立的地址空间和运行状态. 操作系统为进程创建了一系列的数据结构来管理进程.操作系统会为每个进程创建一个虚拟地址空间和进程控制块. 2.虚拟地址空间 在32位操作系统下,一个进程最多可以拥有4G的内存空间,在早期的计算机系统中,将程序直接加载到内存,也就是说, 程序所访问到的地址空间就是真实的内存空间,当有多个进程同时执行时,先将一个进程全部加载内存,然后,在剩

进程的虚拟地址空间,堆栈、堆、数据段、代码段

上图是进程的虚拟地址空间示意图. 堆栈段: 1. 为函数内部的局部变量提供存储空间. 2. 进行函数调用时,存储“过程活动记录”. 3. 用作暂时存储区.如计算一个很长的算术表达式时,可以将部分计算结果压入堆栈. 数据段(静态存储区): 包括BSS段的数据段,BSS段存储未初始化的全局变量.静态变量.数据段存储经过初始化的全局和静态变量. 代码段: 又称为文本段.存储可执行文件的指令. 堆: 就像堆栈段能够根据需要自动增长一样,数据段也有一个对象,用于完成这项工作,这就是堆(heap).堆区域用

Microsoft Visual Studio2010--此时无足够的可用内存,无法满足操作的预期要求,可能是由于虚拟地址空间碎片造成的。请稍后重试。

网上找到了VisualStudio2010的补丁,赶紧打上补丁即可 补丁地址:https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=29729脚本之家下载地址http://xiazai.jb51.net/201007/tools/VS10-KB2251084-x86.rar