您好,欢迎来到刀刀网。
搜索
您的当前位置:首页【Linux基础IO】动态库加载原理

【Linux基础IO】动态库加载原理

来源:刀刀网


介绍了动态库的加载及使用,再来聊一聊动态库加载的原理;

 可执行程序的ELF格式

在Linux中生成可执行程序,格式为ELF格式;

        ELF格式可执行程序会存在很多东西,它会把可执行程序划分为:代码区、只读数据区、全局数据区等属性和字段,除此之外它还会包含一个叫符号表的东西;

那变量名、函数名等是否还存在呢? 不存在;

绝对编址 && 相对编址

 绝对编址

 相对编址

动态库的加载

比如:

后续进程使用时,这些库可能已经被加载到内存中了;这时如果有10个进程同时使用lilbc.so怎么办?

 程序的调度执行

 先来看一下结构关系图:

        CPU调度执行可执行程序,先把可执行程序加载到内存中,这里需要建立这样的认识:

  • 物理地址,物理地址是程序在内存中的实际位置;
  • 虚拟地址,虚拟地址是程序内部使用的地址,便于开发和维护;

总结梳理一下: 

  • 虚拟地址:负责程序内部的逻辑调用,提供灵活和隔离的内存管理。
  • 物理地址:控制指令和数据在实际内存中的查找,确保CPU可以访问和执行指令;

动态库的管理

         当一个动态库被加载到内存中时,操作系统会维护一个共享库的引用计数。当第一个进程加载该动态库时,系统会将该库加载到内存中,并将引用计数设置为1。当其他进程想要使用已经加载到内存的动态库时,系统会增加该库的引用计数,而不会重新加载该库;当所有进程都不再需要该库时,系统会减少引用计数,直到引用计数为0时,系统会释放内存空间;

对多个动态库的管理:

        对于加载进来的多个动态库,操作系统会创建动态库对象来表示每个加载的动态库,这些对象通常包含了动态库的基本信息;使用链表进行链接;这样就可以通过基本的链表实现对这些动态库的管理;这个数据结构也叫动态库控制块,属于内核空间(OS);


        好了以上便是本文的全部内容,希望对你有所帮助,最后感谢阅读!

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- gamedaodao.com 版权所有 湘ICP备2022005869号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务