程序运行流程--链接、装载和运行
什么是虚拟存储器?它跟进程的虚拟地址空间有什么关系?
虚拟存储器是建立在主存–辅存物理结构基础上,有附加的硬件装置及操作系统存储管理软件组成的一种存储体系。
什么是辅存?
虚拟存储器是虚拟的存储器,其实是不存在的,仅仅是由一些硬件和软件管理的一种“系统”。
它提供三个重要能力:
1. 它将主存看成一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据(这里存在“交换空间”以及“页面调度”等概念),通过这种方式,高效地利用主存;
2. 它为每个进程提供了统一的地址空间(以虚拟地址编址),从而简化了存储器管理;
3. 操作系统会为每个进程提供独立的地址空间,从而保护了每个进程的地址空间不被其他进程破坏。
虚拟存储器与虚拟地址空间是两个不同的概念:虚拟存储器是假想的存储器,而虚拟存储空间是假想的内存。它们之间的关系应该与主存储器与内存空间之间的关系类似。
https://www.cnblogs.com/dongxb/p/14345942.html#%E9%9D%99%E6%80%81%E9%93%BE%E6%8E%A5
https://blog.csdn.net/kang___xi/article/details/80210717
https://blog.csdn.net/happyppdog/article/details/51144900
链接部分:
链接就是将不同部分的代码和数据收集和组合成一个单一文件的过程,也就是把不同目标文件合并成最终可执行文件的过程。
务必知道:这个过程不涉及内存。
链接可以分为三种情形:
1. 编译时链接,也就是我们常说的静态链接;
?就是生成可执行文件时最后阶段的“链接其他.o文件”吗?
就是编译时链接printf函数那个过程
2. 装载时链接;
?什么是装载?
3. 运行时链接
在可执行文件运行时,链接其他动态文件?
不是在编译时已经链接过了吗?
装载时链接和运行时链接合称为动态链接。
静态链接过程有两步:
静态链接直接将要链接的目标文件打包到可执行文件中,因此生成的文件大,且如果模块发生变化,
需要重新生成程序。
优点:可执行程序中已经具备所有内容,执行速度快。
静态链接时用到的静态库,就是一堆可重定位目标文件的打包集合,以.a结尾。
动态链接是指在加载或运行时链接,多个程序引用同一个模块时,同时运行时只在内存中保留一份。
linux下动态库以.so结尾。
目标文件分为三种:
- 可重定位目标文件
包含二进制代码和数据,其形式可以在编译时与其他可重定位目标文件合并起来,创建一个可执行目标文件。 - 可执行目标文件
包含二进制代码和数据,其形式可以被直接复制到内存并执行。 - 共享目标文件
一种特殊类型的可重定位目标文件,可以在加载或者运行时被动态的加载进内存并链接。
浙公网安备 33010602011771号