日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

Ubuntu Linux---GNU libc庫( 五 )


示例3-2中,應(yīng)用程序使用系統(tǒng)V共享內(nèi)存系統(tǒng)調(diào)用來申請由大頁面保留的256M內(nèi)存 。shmget系統(tǒng)調(diào)用使用SHM_HUGETLB標(biāo)志告訴內(nèi)核申請的是大頁面 。
(代碼)(P76-78)
對ia86架構(gòu),內(nèi)核為大頁面保留了一個特定的內(nèi)存區(qū)域 。也就是說,調(diào)用進程必須指定某一個固定的地址 。但對i386,x86_64,和ppc64不需要一個固定的地址 。
你也可能需要把每個共享內(nèi)存段的最大大小增大到256MB 。這可以用下面的命令實現(xiàn):
(代碼)(P78第26行)
echo 268435456 > /proc/sys/kernel/shmmax
還需要關(guān)注的另一個限制是/proc/sys/kernel/shmall,它顯示的是系統(tǒng)中可以創(chuàng)建的共享內(nèi)存的總頁數(shù) 。
mmap system call
這種情況下,需要管理員首先掛載一個hugetlbfs類型的文件系統(tǒng),然后在該掛載點上創(chuàng)建的所有文件都保存在大頁面上 。
(代碼)(P78第33行)
mount none /mnt/huge t hugetlbfs o uid=1000,gid=100
上述命令在目錄/mnt/huge上掛載一個hugetlbfs類型的文件系統(tǒng),并把該文件系統(tǒng)的根目錄的所有者和組分別設(shè)置成1000和100 。程序3-3給出了一個使用mmap系統(tǒng)調(diào)用申請由大頁面保留的256MB內(nèi)存的示例 。
(代碼)(P79-80)
注意,對hugetlbfs文件系統(tǒng)上的文件,read和write系統(tǒng)調(diào)用是不支持的 。通常的chown,chgrp和chmod(如果有權(quán)限的話)可以用來改變hugetlbfs文件系統(tǒng)上文件的屬性 。
上一頁;;[1];[2];[3];[4];[5]
;3.1.1 glibc遵循的標(biāo)準(zhǔn)
GNU glibc發(fā)布了一個描述其所遵循的標(biāo)準(zhǔn)的報告(注釋6) 。該報告同時也列出了GNU libc需要改進的地方 。寫作本書時,該報告顯示GNU libc通過了FIPS POSIX90、POSIX96、UNIX98、ANSI、C89/99,和ISO9899標(biāo)準(zhǔn)的頭文件一致性檢查 。所有主要Linux發(fā)行版的glibc也都遵循LSB規(guī)范 。
3.2 GNU科學(xué)庫
把進行高性能計算的應(yīng)用程序移植到Linux上需要一個支持庫,該庫要與UNIX平臺上的科學(xué)庫非常匹配 。Linux上類似的庫叫GNU科學(xué)庫(GNU Scientific Library,簡寫作GSL) 。GSL是一系列數(shù)學(xué)運算例程的集合 。這些例程是用C語言重新編寫的,并且給編程人員提供了一個新式的API模式---允許編程人員為各高級語言編寫包裹函數(shù)(wrapper) 。這些源代碼使用的是GPL發(fā)布許可 。
GNU科學(xué)庫包含了數(shù)學(xué)運算領(lǐng)域的很多內(nèi)容 。表3-3列出了GNU科學(xué)庫提供的例程 。
;這些例程的用法在GSL手冊(注釋7)中有詳盡的描述,包括函數(shù)的定義、示例程序,以及函數(shù)實現(xiàn)的算法所引用的論文 。
3.3 共享庫
我們所移植過的大多數(shù)應(yīng)用程序都使用了共享庫 。然而,不同的操作系統(tǒng)在創(chuàng)建和命名共享庫時卻不盡相同 。Linux上,共享庫可以有不同的文件擴展名,例如,共享庫可以以.so或.so.1.0結(jié)束 。以.so.x.x(x為數(shù)字)結(jié)尾的共享庫叫版本化庫 。第一個數(shù)字代表大版本號,第二個數(shù)字代表小版本號 。有些情況下,共享庫的擴展名還可以是.so.x.x.x(x為數(shù)字)的形式,這里最后一個數(shù)字代表發(fā)布號,并且是可選的 。下面給出了共享庫文件名的格式:
(代碼)p58 第11行,lib.so...
大版本號、小版本號,以及發(fā)布號的變化反映了對共享庫所作的不同類型的修改 。下面是對增大大版本號、小版本號和發(fā)布號的一些指導(dǎo):
- 當(dāng)對共享庫提供的接口做了與以前版本不兼容的改變時,需要增大大版本號 。這個大的改變意味著依賴該庫先前大版本的應(yīng)用程序需要作相應(yīng)修改才能使用大版本更新后的庫 。
- 當(dāng)共享庫增加了新的接口同時也保留了原來的接口時,增大小版本號 。
- 當(dāng)作了與以前兼容的修改又沒有增加新接口時,增大發(fā)布號 。這通常是對一些實現(xiàn)做了改動以提高性能和擴展性 。
要在Linux上創(chuàng)建共享庫,使用-shared編譯參數(shù);該參數(shù)告訴GNU ld創(chuàng)建一個共享庫而不是應(yīng)用程序 。下面是這樣一個例子:

推薦閱讀