大二下期末复习包操作系统.pptxVIP

  1. 1、本文档共36页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

OperatingSystem

Lecture15:AddressBindingDLL

HuYan

SchoolofSoftware,DLUT

Outline

本讲纲要AddressBindingandRelocation地址绑定与重定位DynamicallyLinkedLibrary(DLL)动态链接库MemorymanagementReview内存管理部分复习

程序的活动流程CompiletimeLoadtimeExecutiontime

地址绑定地址绑定将程序中的指令或者数据分配到实际的物理内存单元在程序实际执行的时候,必须处理地址的绑定,因为只有程序知道了执行所需的代码或数据在实际物理内存的位置,CPU才能够完成取指-执行的基本步骤

BindingofInstructionsandDatatoMemory

地址绑定时机Compiletime:编译时就完成指令和数据地址到绝对内存地址的绑定缺点:如果代码起始地址发生变化,代码需要重新编译Loadtime:MustgeneraterelocatablecodeifmemorylocationisnotknownatcompiletimeExecutiontime:Bindingdelayeduntilruntimeiftheprocesscanbemovedduringitsexecutionfromonememorysegmenttoanother.Needhardwaresupportforaddressmaps(e.g.,baseandlimitregisters).Addressbindingofinstructionsanddatatomemoryaddressescan

happenatthreedifferentstages

Relocation

地址重定位地址重定位将用户程序中出现的逻辑地址转化到程序运行时计算机可以识别的物理地址的过程实现方法StaticRelocation静态重定位DynamicRelocation动态重定位

Relocation

地址重定位静态地址重定位在程序加载的时候完成地址的重定位,也就是说在程序加载的同时进行程序的内容

Relocation

地址重定位静态重定位实例

Relocation

地址重定位动态重定位在程序执行期间完成逻辑地址到实际地址的转换需要内存管理硬件MMU的支持页式/段式虚存管理之下的地址变换,是动态重定位的典型实例

Relocation

地址重定位动态重定位实例

函数库函数库是为了实现代码共享而形成的一种概念每个函数库提供一组可供程序使用的函数接口应用程序在调用库函数的时候,涉及到对库函数到内存的加载以及重定位问题函数库分类静态库程序执行前,由加载器(loader)加载动态库程序执行期间,由loader加载

DynamicallyLinkedLibrary

动态链接库动态链接库在运行期间调用库中某个函数的时候,才加载相应的库代码到内存设计目标方便代码共享节省内存空间

DLL要实现程序库的动态加载,必须首先,能够支持库代码的动态重定位通过表格来记录重定位信息

DLLLinux动态链接机制示意图

PLT(ProcedureLinkageTable)每个库函数在PLT表中都对应有一个表项PLT[0]放了一段访问动态连接器ld.so的一段特殊代码PLT[1]…PLT[n]:对应特定库例程的站桩代码

装载一个动态链接的ELF程序的过程1.启动动态链接器动态连接器本身以共享库的形式存在(ld.so)操作系统启动程序的时候,首先将ld.so映射到一个合适的地址,然后传送所需的参数到堆栈中,并启动ld.sold.so完成自己的初始化也就是说,在采用了动态链接机制的程序启动时,并不是直接跳到入口main的地址就开始执行,而是要首先初始化动态链接器

装载一个动态链接的ELF程序的过程2.库的查找连接器开始查找程序所需的库的名字如果成功找到程序所依赖的动态库,则把库中的符号添加到链接器的全局符号表中,并把库的代码映射到进程的虚存空间

装载一个动态链接的ELF程序的过程3.共享库的初始化处理库的重定向入口(填充PLT)填充库的GOT将库中的数据段进行重定位当PLT和GOT都建立起来,并且库中的数据段也经过重定位之后,连接器就调用程序的开始地址(如C程序中的main函数入口),开始执行真正的程序部分代码

当程序执行过程中,遇到对动态库中函数的调用时采用延迟加载技术:每次只加载所需的部分到内存中

参考书目Linkersandl

文档评论(0)

+ 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档