實驗二系統(tǒng)調(diào)用_第1頁
已閱讀1頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、實驗目的實驗目的?建立對系統(tǒng)調(diào)用接口的深入認識?掌握系統(tǒng)調(diào)用的基本過程?能完成系統(tǒng)調(diào)用的全面控制?為后續(xù)實驗做準備實驗內(nèi)容實驗內(nèi)容此次實驗的基本內(nèi)容是:在Linux0.11上添加兩個系統(tǒng)調(diào)用,并編寫兩個簡單的應用程序測試它們。iam()第一個系統(tǒng)調(diào)用是iam(),其原型為:intiam(constname)完成的功能是將字符串參數(shù)name的內(nèi)容拷貝到內(nèi)核中保存下來。要求name的長度不能超過23個字符。返回值是拷貝的字符數(shù)。如果name

2、的字符個數(shù)超過了23,則返回“1”,并置errno為EINVAL。在kernalwho.c中實現(xiàn)此系統(tǒng)調(diào)用。whoami()第二個系統(tǒng)調(diào)用是whoami(),其原型為:intwhoami(nameunsignedintsize)它將內(nèi)核中由iam()保存的名字拷貝到name指向的用戶地址空間中,同時確保不會對name越界訪存(name的大小由size說明)。返回值是拷貝的字符數(shù)。如果size小于需要的空間,則返回“1”,并置errno為

3、EINVAL。也是在kernalwho.c中實現(xiàn)。測試程序測試程序運行添加過新系統(tǒng)調(diào)用的Linux0.11,在其環(huán)境下編寫兩個測試程序iam.c和whoami.c。最終的運行結(jié)果是:在通常情況下,調(diào)用系統(tǒng)調(diào)用和調(diào)用一個普通的自定義函數(shù)在代碼上并沒有什么區(qū)別,但調(diào)用后發(fā)生的事情有很大不同。調(diào)用自定義函數(shù)是通過call指令直接跳轉(zhuǎn)到該函數(shù)的地址,繼續(xù)運行。而調(diào)用系統(tǒng)調(diào)用,是調(diào)用系統(tǒng)庫中為該系統(tǒng)調(diào)用編寫的一個接口函數(shù),叫API(Applica

4、tionProgrammingInterface)。API并不能完成系統(tǒng)調(diào)用的真正功能,它要做的是去調(diào)用真正的系統(tǒng)調(diào)用,過程是:?把系統(tǒng)調(diào)用的編號存入EAX?把函數(shù)參數(shù)存入其它通用寄存器?觸發(fā)0x80號中斷(int0x80)0.11的lib目錄下有一些已經(jīng)實現(xiàn)的API。Linus編寫它們的原因是在內(nèi)核加載完畢后,會切換到用戶模式下,做一些初始化工作,然后啟動shell。而用戶模式下的很多工作需要依賴一些系統(tǒng)調(diào)用才能完成,因此在內(nèi)核中實現(xiàn)

5、了這些系統(tǒng)調(diào)用的API。我們不妨看看libclose.c,研究一下close()的API:#define__LIBRARY__#include_syscall1(intcloseintfd)其中_syscall1是一個宏,在includeunistd.h中定義。將_syscall1(intcloseintfd)進行宏展開,可以得到:intclose(intfd)long__res__asm__volatile(“int$0x80“:“=

6、a“(__res):“0“(__NR_close)“b“((long)(fd)))if(__res=0)return(int)__reserrno=__resreturn1這就是API的定義。它先將宏__NR_close存入EAX,將參數(shù)fd存入EBX,然后進行0x80中斷調(diào)用。調(diào)用返回后,從EAX取出返回值,存入__res,再通過對__res的判斷決定傳給API的調(diào)用者什么樣的返回值。其中__NR_close就是系統(tǒng)調(diào)用的編號,在in

溫馨提示

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

評論

0/150

提交評論