程序加载过程思考

我用自己的语言描述的,我自己也有点模糊,做个记忆

一个可执行文件原来存储在硬盘的一个分区中,运用的是内存管理分段模型,其各个段的数据有其相对地址(相对于其段基址的便宜地址,Linux下可以通过nm命令获得),这是逻辑地址。

当程序被加载到内存中时称为进程,因为高速缓冲器cache和其他一些因素的影响,每一个进程自认为占用了内存的几乎所有空间,进程的总地址4GB甚至更多,这个叫做虚拟空间地址。(有时也叫线性地址)

其实此时只是加载了系统所需要的进程的一些页(段进一步映射运用分页模型),当一个段(此时其中内存中是页)引用另一个段的时候,把段选择子放到寄存器中,根据GDT来寻找硬盘中的段数据,该段通过内存分页模型得到相应的页,后经过MMU得到真实内存地址(物理地址)放到内存中供另一个页引用

おすすめ

転載: blog.csdn.net/qq_48322523/article/details/120629203