程序员的自我修养——6、可执行文件的装载与进程

本文介绍了进程的概念及其虚拟地址空间的分布,详细解释了Linux和Windows系统下虚拟地址空间的特点,并探讨了两种装载方式:静态装入和动态装入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


6.1 进程虚拟地址空间

程序是一个静态的概念。(程序好比菜谱)

进程是一个动态的概念。(进程好比整个炒菜的过程)


虚拟地址空间(Virtual Address Space

硬件决定了地址空间的最大理论上限,即硬件的寻址空间大小。比如32位的硬件平台决定了虚拟地址空间的地址为 0 到  232 -1,即 0x00000000 ~ 0xFFFFFFFF。4GB虚拟空间大小。

C语言指针大小的位数与虚拟空间的位数相同。32位平台下的指针为32位,4字节;64位平台下的指针为64位,8字节。(特殊情况下的长指针,短指针,近指针则不成立)。


Linux系统虚拟空间分布


windows虚拟地址空间划分是操作系统占用2GB,那么进程只剩下2GB空间。修改方法:Windows系统盘根目录下的Boot.ini ,加上 “/3G” 参数。


PAE(Physical Address Extension):地址扩展

AWE(Address Windowing Extensions)/ mmap()


6.2 装载的方式

静态装入:将程序运行所需要的指令和数据全都装入内存。

动态装入:将程序最常用的部分驻留在内存中,而将一些不太常用的数据存放在磁盘里面。(局部性原理)


动态装载的方法:覆盖装入(Overlay)页映射(Paging)


6.2.1  覆盖装入

(几乎已经淘汰)

覆盖装入:手工将程序分割成若干块,然后编写一个小的辅助代码来管理这些模块何时应该驻留内存而何时应该被替换掉。这个小的辅助代码就是所谓的覆盖管理器(Overlay Manager)



多个模块情况下,程序员需手工将模块按照它们之间的调用依赖关系组织成树状结构


覆盖管理器需保证两点:

1、整个调用路径上的模块必须都在内存中。

2、禁止跨树间调用。


6.2.2  页映射

将内存和所有磁盘中的数据和指令按照 “页(page)” 为单位划分成若干页,以后所有的装载和操作的单位就是页。




6.3 从操作系统的角度看可执行文件的装载


6.3.1  进程的建立




6.3.2  页错误




6.4 进程虚拟空间分布







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值