社区
进程/线程/DLL
帖子详情
系统加载进程,为什么不直接加载到物理内存,而非要先弄到虚拟地址空间
谁学逆向工程
2012-02-15 11:46:06
下面这段话来自《windows核心编程》第五版,85页,4.2节第一段
一个线程调用 CreateProcess 时,系统将创建一个进程内核对象,其初始使用计数为1.进程内核对象不是进程本身,而是操作系统用来管理这个进程的一个小型数据结构 ---- 可以把进程内核对象想象成由进程统计信息构成的小型数据结构。然后,系统为新进程创建一个虚拟地址空间,并将可执行文件(和所有必要的DLL)的代码及数据加载到进程的地址空间。
...全文
259
7
打赏
收藏
系统加载进程,为什么不直接加载到物理内存,而非要先弄到虚拟地址空间
下面这段话来自《windows核心编程》第五版,85页,4.2节第一段 一个线程调用 CreateProcess 时,系统将创建一个进程内核对象,其初始使用计数为1.进程内核对象不是进程本身,而是操作系统用来管理这个进程的一个小型数据结构 ---- 可以把进程内核对象想象成由进程统计信息构成的小型数据结构。然后,系统为新进程创建一个虚拟地址空间,并将可执行文件(和所有必要的DLL)的代码及数据加载到进程的地址空间。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Saleayas
2012-02-15
打赏
举报
回复
加入你的程序需要一个很大的连续空间,诸如开辟一个很大的数组。
而此时物理内存已经没有这么大的连续空间,那怎么办呢。
onlycs
2012-02-15
打赏
举报
回复
为了更好的利用资源吧。减少对物理内存的使用,再者大程序几个G的,直接加载,恐怕物理内存都不够。
百事烟
2012-02-15
打赏
举报
回复
节省内存,减少加载时间
如果执行文件A.exe,一开始,并不是把A.exe读入内存,而是把A.exe所在磁盘的头地址映射为内存地址,
这样做的好处是加载的过程没有任何读数据的操作,只是做了一个内存映射
gameslq
2012-02-15
打赏
举报
回复
物理内存“太小了”
看看操作系统内存管理部分就明白了
x86架构的机器内存管理分为实模式和保护模式
在实模式下程序直接加载到物理内存,但保护模式则需要地址转换
虚拟地址(线性地址)到物理地址的转换,所以每个进程的地址空间都是
线性的,虚拟的。
Lactoferrin
2012-02-15
打赏
举报
回复
[Quote=引用 4 楼 fly4free 的回复:]
我的理解:
这个 “虚拟地址空间”,应该是对程序员说的。
此时,它有可能在物理内存中,有可能在换页文件中,这些是用到的地址空间的数据。
至于没用到的地址空间,哪里也不在,还没分配呢。
只是在内存管理相关数据结构中(或者就在进程对象里?)记录了该进程的 虚拟地址空间范围。
然后用另一些结构体记录 虚拟地址空间使用情况,对于程序员,就是 内存使用情况。
而和物理内存之间的关系,……
[/Quote]
好
fly4free
2012-02-15
打赏
举报
回复
我的理解:
这个 “虚拟地址空间”,应该是对程序员说的。
此时,它有可能在物理内存中,有可能在换页文件中,这些是用到的地址空间的数据。
至于没用到的地址空间,哪里也不在,还没分配呢。
只是在内存管理相关数据结构中(或者就在进程对象里?)记录了该进程的 虚拟地址空间范围。
然后用另一些结构体记录 虚拟地址空间使用情况,对于程序员,就是 内存使用情况。
而和物理内存之间的关系,可能就是内存管理核心的事情了。
我没法验证,不知道正确与否。
quwei197874
2012-02-15
打赏
举报
回复
物理内存小啊
虚拟
地址空间
和物理
地址空间
平时以
虚拟
形式存储,当应用程序使用
虚拟
地址访问内存时/a.out执行,mmu将
虚拟
地址转换为物理地址执行(正常文件存储在磁盘中) 段错误:内存访问非法,内核空间受保护 堆空间存储后一定要释放 在
进程
里平时所说的...
进程
地址空间
(
虚拟
地址 |
物理内存
)
2. 为什么要有
地址空间
?3.
地址空间
是如何工作的?四、一些补充 前言 在之前的学习中,我们只学习了图中的下半部分(用户空间),当时还并未涉及到操作
系统
。 我们写一段代码来验证一下这张图。 #include<...
详解
进程
的
虚拟
内存,
物理内存
,共享内存
想必在Linux上写过程序的同学都有分析
进程
占用多少内存的经历,或者被问到这样的问题,你的程序在运行时占用了多少内存(
物理内存
)? 通常我们可以通过top命令查看
进程
占用了多少内存。这里我们可以看到VIRT、RES...
Linux
进程
地址空间
(
虚拟
地址和物理地址的映射、页表)
两点结论:
进程
地址空间
不是
物理内存
!
进程
地址空间
,会在
进程
的整个 [生命周期] 内一直存在,直到
进程
退出!这也就解释了为什么全局/静态变量的生命周期是整个程序,因为全局/静态变量是随着
进程
一直存在的。验证...
虚拟
内存与
虚拟
地址空间
每个
进程
都有自己的独立
虚拟
地址空间
,同时操作
系统
负责将每个
进程
的
虚拟
地址映射到主存中的
物理内存
地址。
虚拟
地址空间
使每个
进程
都有最大4GB(32位
系统
)或16EB(64位
系统
)可用的
虚拟
内存空间,尽管实际
物理内存
...
进程/线程/DLL
15,472
社区成员
49,183
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章