os操作系统04

os操作系统04

ID:41888892

大小:1.31 MB

页数:106页

时间:2019-09-04

os操作系统04_第1页
os操作系统04_第2页
os操作系统04_第3页
os操作系统04_第4页
os操作系统04_第5页
资源描述:

《os操作系统04》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第四章存储器管理4.1程序的装入和链接4.2连续分配方式4.3基本分页存储管理方式4.4基本分段存储管理方式4.5虚拟存储器的基本概念4.6请求分页存储管理方式4.7页面置换算法4.8请求分段存储管理方式1图4-1对用户程序的处理步骤4.1程序的装入和链接21.绝对装入方式(AbsoluteLoadingMode)程序中所使用的绝对地址,既可在编译或汇编时给出,也可由程序员直接赋予。但在由程序员直接给出绝对地址时,不仅要求程序员熟悉内存的使用情况,而且一旦程序或数据被修改后,可能要改变程序中的所有地址。因此,通常是宁可在

2、程序中采用符号地址,然后在编译或汇编时,再将这些符号地址转换为绝对地址。4.1.1程序的装入32.可重定位装入方式(RelocationLoadingMode)图4-2作业装入内存时的情况43.动态运行时装入方式(DynamicRun-timeLoading)动态运行时的装入程序,在把装入模块装入内存后,并不立即把装入模块中的相对地址转换为绝对地址,而是把这种地址转换推迟到程序真正要执行时才进行。因此,装入内存后的所有地址都仍是相对地址。54.1.2程序的链接1.静态链接方式(StaticLinking)图4-3程序链接

3、示意图6在将这几个目标模块装配成一个装入模块时,须解决以下两个问题:(1)对相对地址进行修改。(2)变换外部调用符号。72.装入时动态链接(LoadtimeDynamicLinking)装入时动态链接方式有以下优点:便于修改和更新。(2)便于实现对目标模块的共享。83.运行时动态链接(Run-timeDynamicLinking)近几年流行起来的运行时动态链接方式,是对上述在装入时链接方式的一种改进。这种链接方式是将对某些模块的链接推迟到执行时才执行,亦即,在执行过程中,当发现一个被调用模块尚未装入内存时,立即由OS

4、去找到该模块并将之装入内存,把它链接到调用者模块上。凡在执行过程中未被用到的目标模块,都不会被调入内存和被链接到装入模块上,这样不仅可加快程序的装入过程,而且可节省大量的内存空间。9通常被链接的共享代码称为动态链接库(DLL,Dynamic-LinkLibrary)或共享库(sharedlibrary)。优点共享:多个进程可以共用一个DLL,节省内存,减少文件交换。部分装入:一个进程可以将多种操作分散在不同的DLL中实现,而只将当前操作相应的DLL装入内存。便于局部代码修改:即便于代码升级和代码重用;只要函数的接口参数(

5、输入和输出)不变,则修改函数及其DLL,无需对可执行文件重新编译或链接。便于运行环境适应:调用不同的DLL,就可以适应多种使用环境和提供不同功能。如:不同的显示卡只需厂商为其提供特定的DLL,而OS和应用程序不必修改。缺点:链接开销:增加了程序执行时的链接开销;管理开销:程序由多个文件组成,增加管理复杂度。10WindowsNT动态链接库库程序文件.C:相当于给出一组函数定义的源代码;模块定义文件.DEF:相当于定义链接选项,也可在源代码中定义;如:DLL中函数的引入和引出(dllimport和dllexport)。编译

6、程序利用.C文件生成目标模块.OBJ库管理程序利用.DEF文件生成DLL输入库.LIB和输出文件.EXP链接程序利用.OBJ和.EXP文件生成动态链接库.DLL。1.构造动态链接库DLL是包含函数和数据的模块,它的调用模块可为EXE或DLL,它由调用模块在运行时加载;加载时,它被映射到调用进程的地址空间。在VC中有一类工程用于创建DLL。112.DLL的装入方法装入时动态链接(load-time):在编程时显式调用某个DLL函数,该DLL函数在可执行文件中称为引入(import)函数。链接时需利用.LIB文件。在可执行文

7、件中为引入的每个DLL建立一个IMAGE_IMPORT_DESCRIPTOR结构。在装入时由系统根据该DLL映射在进程中的地址改写ImportAddressTable中的各项函数指针。Hint是DLL函数在DLL文件中的序号,当DLL文件修改后,就未必指向原先的DLL函数。在装入时,系统会查找相应DLL,并把它映射到进程地址空间,获得DLL中各函数的入口地址,定位本进程中对这些函数的引用;12装入时动态链接过程注:ImportAddressTable是在装入时依据DLL模块的加载位置确定。13DLL函数的调用过程14运行

8、时动态链接(run-time):在编程时通过LoadLibrary(给出DLL名称,返回装入和链接之后该DLL的句柄),FreeLibrary,GetProcAddress(其参数包括函数的符号名称,返回该函数的入口指针)等API来使用DLL函数。这时不再需要引入库(importlibrary)。LoadLibrar

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。