一、链接
系统中会提供一些共同的库,如printf()、malloc()、write()等。
静态链接(Statically link)是说程序与特定的库文件在链接时链在一起,这时我们不能改变这种链接状态,除非我们重新链接。静态链接的程序通常以.a结尾,如libc.a。
动态链接(Dynamically link)是说程序中包含了所需要链接库的加载信息,并在运行时加载并链接这些库文件。动态链接的程序通常以.so结尾,如libc.so。
二、资源管理器
资源管理器(Resource managers)通常提供了各种设备的接口。它与其他系统中的设备驱动(Device Driver)很像,但是与驱动不同的是它与核心之间没有任何隐藏的接口,实际上和普通的用户端程序没什么区别。
以下是实现资源管理器的好处:
・能够支持基于POSIX API的客户端
・能够减少接口的种类
・能够支持命令行的访问
通常有以下两种资源管理器:
・设备资源管理器(Device resource managers):会在文件系统中注册为一个单独的文件,通常代表一个单独的设备,通常有资源管理库来处理多数面向POSIX设备的接口。如一个串口设备注册为/dev/ser1,当执行ls -l /dev时,设备资源管理器不需要相应此类事件,这使得用户可以更专心于如果处理设备的各种细节。
・文件资源管理起(Filesystem reource managers):通常注册为一个加载点(mount point),其目录下的所有都由此管理器管理。如tar能够提供tar文件的资源管理,其中可以执行cd和ls命令。
一旦一个资源管理器注册一个路径前缀后,当程序试图对这个路径调用open()、read()、write()等时就会接收到从IPC发送来的消息。
1、程序构造
初始化接口
向进程管理器注册路径
循环
接收消息
switch on 消息类型
CASE io_open:
处理
END CASE
CASE io_read:
处理
END CASE
CASE io_write:
处理
END CASE
end switch
end循环
2、资源管理器的共同库
有些时候资源管理器不希望处理一些时间,这时共同库可以提供一个默认处理如①返回ENOSYS,表示不支持这个功能②提供一些默认的处理。如
・open()、dup()、close()
・Multiple thread handling
・Dispatch functions
・Combine messages
・Second-level default message handling