可执行文件的装载与进程

  • A+
所属分类:IT技术

程序:是一个静态的概念,是一些预先编译好的指令和数据集合的文件

进程:是一个动态的概念,是程序运行时的一个过程,很多时候把动态库叫做运行时(runtime)。

虚拟地址空间

如果程序直接访问物理地址,程序所使用的内存空间不是完全隔离的,恶意程序可以操控内存使得其他程序运行异常;各个程序在运行期间使用的内存可能超出物理内存大小,需要在磁盘和内存间交换数据,如果缺乏一个合理的内存管理机制,交换效率很低;程序在运行期间需要根据分配的内存地址进行重定位,如果缺少虚拟地址空间,重定位的工作量将大大增加。基于以上三点,设计了虚拟地址空间作为程序和物理内存之间的中间层,来管理内存。虚拟地址空间和实际的物理内存是映射关系,一一对应的。

32位机器的虚拟内存大小计算:共可以存储2^32个数值,每个数值所占的内存空间为32/8=4字节,总共所有数值的存储空间为4G,也就是说,32位机每个进程可使用的内存最大为4G;从现在的软件开发量级来讲,64位机器每个进程的内存上限可理解为无限大。

Linux系统,32位机器,每个进程中分1G给系统,3G给用户

Windows系统,默认情况下,32位机器,每个进程中分2G给系统,2G给用户;可更改Boot.ini文件,将内存按1:3分配.

装载方式

静态装载:将所有的指令和数据全部装载到内存中;

在有限内存的情况下,静态装载方式可能导致内存不够用的情况,于是出现了动态装载。

动态装载:根据程序运行的局部性原理,将程序最常用的部分驻留在内存,不常用的部分先放在磁盘里,需要时再载入。

页映射

典型的动态装载方法,不同于覆盖装入的是,页映射首先将内存和磁盘中的数据和指令按照“页”为单位划分成若干个页,以后所有的装载和卸载的单位都是页。

进程初始化

双击可执行程序->获取文件名、执行参数、环境变量->读取文件前128个字节,判断可执行文件的类型->搜索对应可执行文件的装载方法进行装载。在整个过程中,系统会给进程创建一个独立的虚拟地址空间,建立虚拟地址空间和物理内存的映射关系;并建立虚拟地址空间与可执行文件的映射关系。(可执行文件、虚拟地址空间、物理内存的划分单位都是页,创建好对应关系后,便可按需将程序加载到物理内存中,同时管理好内存)

Qt大课堂-QtShare

发表评论

您必须登录才能发表评论!