西電軟院操作系統課程設計報告_第1頁
西電軟院操作系統課程設計報告_第2頁
西電軟院操作系統課程設計報告_第3頁
西電軟院操作系統課程設計報告_第4頁
西電軟院操作系統課程設計報告_第5頁
已閱讀5頁,還剩11頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

..操作系統課程設計實驗報告冊______教師:褚華..目錄實驗說明 重要提示 實驗1 系統調用實驗2內核模塊實驗3 文件系統實驗4設備管理實驗說明實驗做為學習的重要促進手段,是為了深化對理論的理解,鍛煉實踐動手能力。實驗同時也作為考核的手段。實驗內容會在課程進行中下達,并且會分次地、部分地被抽查。課程結束時,要求把所有的實驗整理成一個完整的電子文檔并上交,做為最后成績的評定依據。如果有興趣的合適的題目,也可自己選題目。格式說明本文檔文件名命名為"學號-姓名",如"13071000_小王"。留白部分不足的自己調整長度,也可加頁〔增加內容應在表格內。每次的實驗報告都要在這個文件中〔按照實驗次序依次增加,而不是每次一個新的word文件。本文檔保存為doc格式〔請勿用Word2007的docx格式。重要提示:實驗正文建議使用小四號或五號宋體。若附加圖形,則請直接嵌入到實驗手冊相應位置。各實驗的源程序,請按實驗分目錄存放,如第一個實驗的源程序存放在目錄lab1下,第二個實驗的源程序存放在目錄lab2下等等,依次類推。可互相討論,但嚴禁抄襲網絡或同學的實驗結果。實驗編號1題目系統調用實驗目的為Linux內核增加一個系統調用,并編寫用戶進程的程序來測試要求該系統調用能夠完成以下功能:1.該系統調用有1個int型參數,返回值為int。2.若參數為偶數,則輸出自己學號后四位3.若參數為奇數,則輸出自己學號的后五位實驗內容1.系統調用的實現2.增加系統調用3.Linux內核的構建報告內容要求<1>實現方法和思路<2>測試及結果報告正文要給linux增加系統調用,可以用修改內核源碼并重新編譯的方法實現一:基本過程是在系統調用表文件中給要增加的一個系統調用的名字在系統調用號文件中給要新增的系統調用分配一個系統調用號增加系統調用聲明添加系統調用的實現重新編譯內核編寫測試驅動函數,測試系統調用是否添加成功一:在系統調用表文件中增加系統調用的名字二:在系統調用號文件中給要新增的系統調用分配一個系統調用號三:增加系統調用聲明四:添加系統調用的實現要為linux內核增加系統調用,首先必須要實現系統的內核調用也就是提供功能的一個函數根據題目要求,當給改系統調用傳遞int參數為奇數時輸出自己學號的后五位,當系統調用接受的參數為偶數時,輸出自己學號的后四位所以,系統調用的實現如下可以看到系統調用的實現同基本的C語言沒多大差別,只是能使用的庫不一樣在linux內核中的代碼不能使用標準C庫,只能使用內核提供的庫所以能調用的函數會有不同最后實現代碼如下當參數num為偶數時輸出2257也就是學號的后四位當參數為奇數時輸出12257也就是學號的后四位可以看到輸出函數式printk而不是printf,因為在內核中不能使用標準C函數五:編譯內核六:測試系統調用測試驅動函數如下測試輸出如下由于在系統調用實現時忘記在末尾加換行符了。。所以輸出的兩個是在一行的也就是2257和12257,但是可以看到系統調用時實現了的。實驗編號2題目內核模塊實驗目的學習linux內核模塊的編寫及加載的方法理解linux內核模塊的機制實驗內容編寫linux內核模塊并測試編寫可以帶參數的linux內核模塊并測試使用內核模塊的方法為linux增加系統調用用內核模塊的方法完成實驗1的內報告內容要求<1>實現方法和思路<2>測試及結果報告正文實驗內容:編寫一個內核模塊;編譯該模塊;加載、卸載該模塊;實驗步驟:新建模塊目錄用編輯器〔vi編輯源文件分析:模塊入口函數為hello_init<>,由module_init<>宏指定,在模塊被加載的時候被調用向系統注冊。入口函數的返回值:0表示成功,非0表示失敗。模塊的退出函數為hello_exit<>,由module_exit<>宏指定,在模塊被卸載時被調用向系統注銷,主要來完成資源的清理工作。它被調用完畢后,就模塊就被內核清除了。一個模塊最少需要有入口和退出函數。2.4內核后,引入識別代碼是否在GPL許可下發布的機制。在使用非公開的源代碼產品時會得到警告。通過宏MODULE_LICENSE<"GPL">,設置模塊遵守GPL證書,取消警告信息。宏MODULE_DESCRIPTION<>用來描述模塊的用途。宏MODULE_AUTHOR<>用來聲明模塊的作者。宏MODULE_SUPPORTED_DEVICE<>聲明模塊支持的設備。這些宏都在頭文件linux/module.h定義,使用這些宏只是用來提供識別信息。用編輯器編輯Makefile編譯模塊加載刪除模塊dmesg輸出信息帶參數的模塊傳入參數輸出結果內容二:用內核模塊的方式為系統添加一個系統調用為Linux內核增加一個系統調用,并編寫用戶進程的程序來測試。要求該系統調用夠完成以下功能:1.該系統調用有1個int型參數,返回值為int。2.若參數為偶數,則輸出自己學號后四位3.若參數為奇數,則輸出自己學號的后五位基本思路就是通過修改系統調用參數表所在的內存地址并加入系統調用即可實驗編號3題目文件系統實驗目的了解/proc文件系統掌握修改/proc文件系統的方法利用/proc與內核交互創建以及使用/proc文件實驗內容利用/proc與內核交互利用內核模塊方法創建/proc文件報告內容要求<1>實現方法和思路<2>測試及結果報告正文實驗一:本實驗只使用標準C函數進行修改/proc文件也就是說直接readwrite/proc里的文件從而達到與內核交互的目的代碼如下輸出結果可以看到實現了功能完成了hostname文件的修改內容二:通過內核的/proc編程接口進行/proc文件的操作本試驗通過構造可加載內核模塊,通過內核的/proc編程接口進行/proc文件的操作需要用到的基本函數有structproc_dir_entry*create_proc_entry<constchar*name,mode_tmode,structproc_dir_entry*parent>這個函數創建一個/proc文件structproc_dir_entry*create_proc_read_entry<constchar*name,mode_tmode,structproc_dir_entry*base,read_proc_t*read_proc,void*data>這個函數創建一個/proc的只讀文件structproc_dir_entry*proc_mkdir<constchar*name,structproc_dir_entry*parent>這個函數創建一個/proc目錄刪除節點〔文件或者目錄remove_proc_entry<>voidremove_proc_entry<constchar*name,structproc_dir_entry*parent>該函數將刪除一個proc節點〔按文件名刪除以上函數只能創建一個文件,要想使創建的文件發揮作用,還有兩個域的值需要填寫,它們是read_proc和write_proc。該兩個函數都是回調函數,當對文件進行讀寫時,系統會自動調用相應的回調函數。可以使用write_proc函數向/proc中寫入一項。這個函數的原型如下int<*write_proc><structfile*file,constchar*buffer,unsignedlongcount,void*data>file參數實際上是一個打開文件結構〔我們可以忽略這個參數。buffer參數是傳遞給您的字符串數據。緩沖區地址實際上是一個用戶空間的緩沖區,因此我們不能直接讀取它。count參數定義了在buff中有多少數據要被寫入。data參數是一個指向私有數據的指針可以使用read_proc函數從一個/proc項中讀取數據〔從內核空間到用戶空間。這個函數的原型如下:int<*read_proc><char*page,char**start,off_toff,intcount,int*eof,void*data>page參數是這些數據寫入到的位置,其中count定義了可以寫入的最大字符數。在返回多頁數據〔通常一頁是4KB時,我們需要使用start和off參數。當所有數據全部寫入之后,就需要設置eof〔文件結束參數。與write類似,data表示的也是私有數據。此處提供的page緩沖區在內核空間中。實驗代碼如下可以看到代碼創建一個/proc13121257的目錄并且創建兩個文件以及一個link文件結果如下若對文件進行讀寫操作則如下顯示實驗編號4題目設備管理實驗目的了解linux設備文件了解linux設備驅動程序的編寫實驗內容1.實現一個linux字符設備驅動文件報告內容要求<1>實現方法和思路<2>測試及結果報告正文1.首先了解linux設備驅動文件的基本數據結構內核設備驅動程序表結構<infs/devices.c>structdevice_struct{

constchar*name;//devicename

structfile_operations*fops;

};字符設備驅動程序的基本操作和數據結構2.字符設備驅動程序:設備表:全局數組chrdevs[255],主設備號是它的下標登記:register_chrdev<>/unregister_chrdev<>缺省操作集合:file_ops:def_chr_fops,僅定義了open方法;inode_ops:chrdev_inode_operations,僅定義了其中的file_operation=&def_chr_fops.三:關鍵代碼實現了驅動程序的初始化以及退出清理函數在初始化中用regist

溫馨提示

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

評論

0/150

提交評論