《liunx操作系統(tǒng)》課件21系統(tǒng)調(diào)用與庫(kù)函數(shù)_第1頁(yè)
《liunx操作系統(tǒng)》課件21系統(tǒng)調(diào)用與庫(kù)函數(shù)_第2頁(yè)
《liunx操作系統(tǒng)》課件21系統(tǒng)調(diào)用與庫(kù)函數(shù)_第3頁(yè)
《liunx操作系統(tǒng)》課件21系統(tǒng)調(diào)用與庫(kù)函數(shù)_第4頁(yè)
《liunx操作系統(tǒng)》課件21系統(tǒng)調(diào)用與庫(kù)函數(shù)_第5頁(yè)
已閱讀5頁(yè),還剩25頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、系統(tǒng)調(diào)用與庫(kù)函數(shù)操作系統(tǒng)結(jié)構(gòu)用戶進(jìn)程及系統(tǒng)進(jìn)程都在內(nèi)核上運(yùn)行用戶態(tài)與內(nèi)核態(tài)為了更好地保護(hù)內(nèi)核空間,將程序的運(yùn)行空間分為用戶空間和內(nèi)核空間,邏輯上是相互分離的用戶進(jìn)程通常情況下不允許訪問(wèn)內(nèi)核數(shù)據(jù),也無(wú)法使用內(nèi)核函數(shù),它們只能在用戶空間操作用戶數(shù)據(jù),調(diào)用用戶空間的函數(shù)用戶空間的進(jìn)程需要獲得系統(tǒng)服務(wù),就必須利用操作系統(tǒng)提供給用戶的特殊接口,即系統(tǒng)調(diào)用函數(shù)系統(tǒng)調(diào)用系統(tǒng)調(diào)用與庫(kù)函數(shù)Linux操作系統(tǒng)提供良好定義的有限數(shù)目的接口程序,使用戶程序通過(guò)接口得到內(nèi)核提供的服務(wù),這些接口程序即即系統(tǒng)調(diào)用為了方便用戶編程使用,減低因執(zhí)行系統(tǒng)調(diào)用帶來(lái)的運(yùn)行模式切換所造成的開(kāi)銷,Linux提供運(yùn)行在用戶空間的應(yīng)用程序接

2、口(API)庫(kù)函數(shù)系統(tǒng)調(diào)用與庫(kù)函數(shù)API庫(kù)函數(shù)和系統(tǒng)調(diào)用并不只是一對(duì)一的關(guān)系,可以是多對(duì)一,也可以是一對(duì)多只能是API向下調(diào)用,而系統(tǒng)調(diào)用不能調(diào)用API系統(tǒng)調(diào)用與庫(kù)函數(shù)庫(kù)函數(shù)為程序開(kāi)發(fā)和執(zhí)行提供方便環(huán)境,本身并不屬于操作系統(tǒng)內(nèi)核部分系統(tǒng)調(diào)用一般位于操作系統(tǒng)核心的最高層,通過(guò)調(diào)用內(nèi)核函數(shù)實(shí)現(xiàn)包括進(jìn)程控制、文件系統(tǒng)控制、內(nèi)存管理、socket管理、進(jìn)程通信、系統(tǒng)控制等功能虛擬文件系統(tǒng)系統(tǒng)調(diào)用函數(shù)系統(tǒng)調(diào)用函數(shù)以C函數(shù)形式提供給用戶有類型、名稱、參數(shù),并且標(biāo)明相應(yīng)的文件包含read系統(tǒng)調(diào)用可以打開(kāi)一個(gè)指定文件 #include #include #include #include size_t rea

3、d(int fd, const void * buf, size_t count);系統(tǒng)調(diào)用與庫(kù)函數(shù)函數(shù)庫(kù)調(diào)用系統(tǒng)調(diào)用在所有的ANSI C編譯器版本中,C庫(kù)函數(shù)是相同的各個(gè)操作系統(tǒng)的系統(tǒng)調(diào)用是不同的調(diào)用函數(shù)庫(kù)中的一段程序(或函數(shù))調(diào)用系統(tǒng)內(nèi)核的服務(wù)與用戶程序相聯(lián)系是操作系統(tǒng)的一個(gè)入口點(diǎn)在用戶地址空間執(zhí)行在內(nèi)核地址空間執(zhí)行它的運(yùn)行時(shí)間屬于“用戶時(shí)間”它的運(yùn)行時(shí)間屬于“系統(tǒng)”時(shí)間屬于過(guò)程調(diào)用,調(diào)用開(kāi)銷較小需要在用戶空間和內(nèi)核上下文環(huán)境間切換,開(kāi)銷較大庫(kù)文件程序要實(shí)現(xiàn)他們的功能,需要很多函數(shù),包括自己編寫(xiě)和調(diào)用別人已經(jīng)寫(xiě)好的函數(shù)linux把人們預(yù)先編譯好的按照可重用的原則編寫(xiě)的函數(shù)集合起來(lái),就是函數(shù)

4、庫(kù)在任何編程環(huán)境中,庫(kù)文件都是一些預(yù)先編譯好的函數(shù)集合,函數(shù)以二進(jìn)制代碼形式存儲(chǔ)在庫(kù)文件中庫(kù)文件為了便于編程,對(duì)于部分經(jīng)常使用的函數(shù),相應(yīng)的開(kāi)發(fā)語(yǔ)言都提供了對(duì)應(yīng)的庫(kù)文件支持,用戶要使用這些函數(shù),只需要包含這些庫(kù)文件即可程序員在使用庫(kù)文件時(shí),只需要包含所需要函數(shù)所在的頭文件,而不必關(guān)心該函數(shù)的具體實(shí)現(xiàn)函數(shù)庫(kù)文件包含.a的靜態(tài)庫(kù)和.so的共享庫(kù)頭文件不同的系統(tǒng)調(diào)用函數(shù)需要不同頭文件頭文件保存在/usr/include內(nèi)系統(tǒng)調(diào)用函數(shù)依賴于所運(yùn)行的linux版本,一般放在/usr/include/sys或/usr/include/linux中庫(kù)文件在編譯時(shí)將庫(kù)中相應(yīng)函數(shù)的二進(jìn)制映像代碼直接拷貝到當(dāng)前編

5、譯的程序中,當(dāng)前程序在運(yùn)行時(shí)獨(dú)立運(yùn)行,即靜態(tài)庫(kù),如 lib*.a在編譯時(shí)只引用庫(kù)中相應(yīng)函數(shù)的二進(jìn)制映像代碼的入口位置(不直接拷貝),該程序在運(yùn)行時(shí)從共享庫(kù)文件中讀出該函數(shù)代碼(首先將共享庫(kù)加載到內(nèi)存中),從而間接引用,這種庫(kù)即共享庫(kù),以 lib*.so.x.x 為格式命名靜態(tài)庫(kù)與共享庫(kù)靜態(tài)庫(kù)(*.a)指令全都包含在最終生成的可執(zhí)行文件中當(dāng)同時(shí)運(yùn)行的許多程序都使用同一個(gè)靜態(tài)庫(kù)時(shí),就會(huì)在內(nèi)存中有同一個(gè)函數(shù)的多份拷貝共享庫(kù)(*.so)不必被包含在最終可執(zhí)行文件中,文件執(zhí)行時(shí)可以動(dòng)態(tài)的引用和卸載共享庫(kù)文件程序使用共享庫(kù)的時(shí)候,有必要共享庫(kù)才被加載到內(nèi)存中函數(shù)庫(kù)與頭文件/lib:系統(tǒng)必備共享庫(kù)/usr/

6、lib:標(biāo)準(zhǔn)共享庫(kù)和靜態(tài)庫(kù)/usr/local/lib: 本地函數(shù)庫(kù)/usr/include: 系統(tǒng)頭文件/usr/local/include: 本地頭文件共享庫(kù)ldd: 可查看某個(gè)可執(zhí)行文件所使用的共享庫(kù)/etc/ld.so.conf: 包含共享庫(kù)搜索位置的配置文件,記錄了編譯時(shí)使用的動(dòng)態(tài)庫(kù)的路徑ldconfig: 共享庫(kù)管理工具, /etc/ld.so.conf列出的路徑下的庫(kù)文件 緩存到/etc/ld.so.cache 以供使用,一般在更新了共享庫(kù)之后要運(yùn)行該命令ldd命令確定某一特定可執(zhí)行程序是否引用共享庫(kù)庫(kù)文件編譯器只會(huì)使用/lib和/usr/lib下的庫(kù)文件通過(guò)源碼包進(jìn)行安裝時(shí),如

7、果不指定-prefix會(huì)將庫(kù)安裝在/usr/local目錄下(可執(zhí)行文件在bin下,頭文件在include下,庫(kù)文件在lib下)若未在文件/etc/ld.so.conf中添加/usr/local/lib這個(gè)目錄,即使安裝了源碼包,但是使用時(shí)仍然找不到相關(guān)的.so庫(kù)也會(huì)報(bào)錯(cuò),系統(tǒng)找不到此文件glibcgnu發(fā)布的libc庫(kù),即c運(yùn)行庫(kù)linux系統(tǒng)中最底層的api,幾乎其它任何運(yùn)行庫(kù)都會(huì)依賴于glibc除了封裝linux操作系統(tǒng)所提供的系統(tǒng)服務(wù)外,它本身也提供了許多其它一些必要功能服務(wù)的實(shí)現(xiàn)glibc版本查看libc版本安裝clustal omega解壓縮及安裝tar -zxvf clustal-omega-1.2.1.tar.gz./configureargtable2wget /argtable/argtable2-13.tar.gz 鏈接庫(kù)錯(cuò)誤鏈接庫(kù)默認(rèn)位置為/lib和/usr/lib在/lib里建立庫(kù)鏈接文件,或修改/etc

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論