动态加载是指将应用程序从文件系统中加载到操作系统中运行,其中会遇到的一个问题是是应用程序如何调用操作系统提供的接口。
一般来说有三种方式:
第一,中断陷入方式
应用程序执行中断陷入或者软中断指令,同时提供中断陷入ID号,进入软件中断模式,由内核接管,内核获得ID号,调用ID号对应的内核函数,执行完后返回,退出软件中断模式。
第二,符号链接方式
操作系统维护一组内核符号表,该符号表中有内核接口的地址信息。应用程序在编译时生成部分链接的可执行文件,在将应用程序加载到操作系统中时将未链接的应用程序符号和操作系统内核符号表进行运行时链接,得到完整的执行环境。
第三,指针传递方式
所有内核接口地址存放在一个表中,该数组中的每个内核函数偏移位置固定,在加载应用程序时将该接口地址表的指针传递给应用程序的入口函数,然后应用程序即可以通过该指针以及内核函数偏移位置就可以调用操作系统接口功能了。