虚拟内存以及进程的虚拟内存分布(第六章)

在早期的计算机中,程序都是直接运行在物理内存上的,意思是运行时访问的地址都是物理地址,而这要求程序使用的内存空间不超过物理内存的大小

在现代计算机操作系统中,为了提高CPU的利用率计算机同时运行多个程序,为了将计算机上有限的物理内存分配给多个程序使用,并做到隔离各个程序的地址空间和提高内存利用率,操作系统应用虚拟内存机制来管理内存

本文介绍的是一些与虚拟内存相关的概念,包括虚拟内存和物理内存之间的映射,一个进程的虚拟内存空间的划分等。

从各个角度看内存

cpu:根据指令给出的内存地址(虚拟内存地址),进行读写(物理内存地址)

操作系统角度:1.内存管理:每个进程的虚拟内存4GB,用户空间+系统内核空间。2.装载:进程装载,dll装载
可执行文件角度(dll,exe):加载到内存以后各部分的分配

进行运行过程中可能的问题:栈溢出,堆写坏

目录

1.物理内存 vs 虚拟内存

2.物理内存空间 和 虚拟内存空间

3.4GB虚拟内存

cpu位宽 vs cpu的地址总线位宽

4.虚拟内存的地址空间划分

1)Windows 系统下— NULL 指针区+用户区+ 64KB 禁入区+内核区

1)NULL指针区和64KB禁入区:略

2)用户区每个进程私有使用的,称为用户地址空间。

3)内核区是所有进程共享的,称为系统地址空间。

2)Linux下和Windows下的差不多——内核空间,用户空间和保留区

1.保留区:

2.可执行文件映像,堆,栈,动态库

3) 详细介绍下栈空间(Stack)——函数调用:

通过例子1看汇编:

例子2:(VC9,i386,Debug模式)

PS1:编译器 生成的函数 的 标准进入和退出指令序列 

PS2:编译器 实现的hook技术

PS3:函数调用之调用惯例

PS4:函数调用之返回值的传递

PS5:函数调用之C++对象

4)堆空间(heap)——动态申请内存:

5.虚拟地址和物理地址的映射

6.物理内存和硬盘之间的置换

7.虚拟内存的重要性

8.进程的虚存空间分布——装载(《程序员的自我修养-链接装载库》第6.4节)

readelf -S链接视图——25个section头

执行视图:7个program头——程序头表记录着程序头

VMA

Stack VMA[stack]

动态链接时的进程堆栈初始化信息

9.windows打开任务管理器

内存项含义

1.工作集(内存)Working Set = 内存(专用工作集)+ 内存(共享工作集)【第2列=第3列+第4列】

2.提交大小 Comitted Memory——进程独占的内存

3.PROCESS_MEMORY_COUNTERS  类 和 GetProcessMemoryInfo 函数

2 其他项目含义

cpu时间是cpu在这个进程用的总时间。

磁盘有关的问题:

分析内存问题:

其他观察进程的exe

10.硬件概念--存储器芯片。


文章比较长,也比较杂。可以分次阅读。【修改记录:2023.5.6修改看了1)】

1

  • 31
    点赞
  • 114
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ivy_0709

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值