ubuntu linux

ubuntu linux

ID:22821075

大小:55.50 KB

页数:6页

时间:2018-10-31

ubuntu linux_第1页
ubuntu linux_第2页
ubuntu linux_第3页
ubuntu linux_第4页
ubuntu linux_第5页
资源描述:

《ubuntu linux》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、UbuntuLinux  除了libc和libm库,UNIX系统库没有其他标准的命名规范。Linux上的一些系统库可能和UNIX平台上库的名称不同,这就需要知道Linux上各库所包含和支持的功能。表3-2根据所支持的功能列举了一些Linux系统库。  下面列出了GNUlibc库所包含的库文件以及对应的描述(程序不需要任何改动就可以在后续版本上运行。库版本化就是Linux以及同期的其他操作系统实现二进制兼容性的方法。  我们以前移植过的一些应用程序需要库版本化的支持。各UNIX平台也都实现了库版本化

2、,但实现的方法不尽相同。Linux提供了两种不同的技术来实现库版本化:外部库版本化和符号版本化。  3.4.1外部库版本化  链接过程中,链接器(ld)会查找以.so结尾的共享库文件。以.so结尾的库文件叫链接器名称,这是由他们在Linux上的使用方式决定的。当编译一个依赖某一共享库的应用程序时,仅仅是该共享库的soname(不是共享库的文件名)作为依赖关系被记录在应用程序的二进制代码中。运行时链接器就是使用共享库的soname来查找和装载该库的。共享库的soname只包含有大版本号(例如,lib

3、foo.so.1)  当修改后的共享库与以前版本不兼容时,新的共享库必须有一个新的外部版本名称。也就是说,该库的soname必须改变。这些不兼容的修改包括:删除一个符号,去掉某函数的一个参数,改变了某函数的语义属性以致与以前的定义不再一致并且与老版本二进制不兼容等等。我们来看下面的例子。(见pdf附件341.pdf)  3.4.2符号版本化  就像前面所提到的,当对共享库所作的修改能够向前兼容时,我们只增大小版本号。这种修改包括增加一些新的接口同时又不改变已有的接口。但是,即使只做这种小版本的修改

4、,也会出现一个很重要的问题:一个在某一小版本的共享库上编译的应用程序并不一定能够在以前小版本的库上运行。这是因为该应用程序可能使用了新增加的、以前小版本的库中没有的接口。为了解决这个问题,引入了符号版本化。符号版本化允许共享库记录下每个小版本都新增了什么内容。  在Linux上,GNUld可以使用-version-script连接器选项来创建符号版本化的共享库。编译器选项-apfile告诉链接器哪些符号要从生成的共享库中输出出来。每个符号分属global(被输出)和local(不被输出)两类中的一

5、种。来看下面的例子。foo.c包含一个函数foo1,该文件用来创建1.1版本的共享库。(见附件示例代码.pdf)  可以看到,这次main只引用了版本化库的LX_1.1。  GNUld还允许在定义符号的源文件中把符号绑定到某一版本中,而不仅仅是在脚本文件中指定。另外,GNUld还允许同一函数的多个版本出现在同一个共享库中。更多详细信息,请参考GNUld手册(应用程序调用时,共享库才会被装载,否则不会装载,因此会节约一些系统资源。但是如果把环境变量LD_BIND_NOB(PAE模式时为2MB)的页面

6、;Itanium支持多种页面大小:4K,8K,64K,256K,1M,4M,16M和256M;SUNUltraSPARC支持8K,64K,512K和4M的页面;64位Poeminfo的输出会显示出关于hugetlbpage的信息,如下例:  (代码)(P75倒数第8行)  HugePages_Total:20  HugePages_Free:20  Hugepagesize:16384KB  一种类型为hugetlbfs的文件系统也应该会出现在/proc/filesystems中。在用户空间的应用

7、程序能够使用hugetlbpage支持前,管理员应该先在内核中分配这些大页面。/proc/sys/vm/nr_hugepages的内容显示的是内核中当前配置的大页面的个数。如果要在系统上配置10个大页面,可以用下面的命令:  (代码)(P76第1行)  echo10>/proc/sys/vm/nr_hugepages  只有当系统中存在足够的连续物理内存时,分配请求才会成功;只有存在足够多的能够转回到正常内存池的空闲大页面时,释放请求才会成功。用作hugetlbpage的页面在内核中作为保留

8、页面而不能用作其他用途。  应用程序开发人员有两种方法可以使用hugetlbpage支持:  1.系统V共享内存系统调用(shmget,shmat)  2.mmap系统调用  同一个应用程序也可以两者都使用。  下面的示例程序中,我们给出了如何使用上述系统调用来获得hugetlbpage支持。这些程序于/usr/src/linux/Documentation/vm/hugetlbpage.txt。  示例3-2中,应用程序使用系统V共享内存系统调用来申请由大页面保留的256M内存。

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

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

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