直接看第八題問題我標注紅字了如果調試中出現其他問題再說但應該都是小問題了_第1頁
直接看第八題問題我標注紅字了如果調試中出現其他問題再說但應該都是小問題了_第2頁
直接看第八題問題我標注紅字了如果調試中出現其他問題再說但應該都是小問題了_第3頁
直接看第八題問題我標注紅字了如果調試中出現其他問題再說但應該都是小問題了_第4頁
直接看第八題問題我標注紅字了如果調試中出現其他問題再說但應該都是小問題了_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、操作系統(tǒng)課程設計報告姓名: 學號:班級:2010年6月25日目錄一、 試驗實現3試驗三、生成目標機33.1. 編譯unixlite內核33.2. 制作目標機的啟動軟盤33.3. 對目標機的硬盤分區(qū)33.4. 格式化目標機的硬盤43.5. 安裝目標機的文件系統(tǒng)43.6. 測試目標機5試驗四、Hello World!54.1. 目標54.2. 步驟5試驗五、系統(tǒng)調用的原理65.1. 目標65.2. 步驟7試驗七、 實現信號燈操作的系統(tǒng)調用97.1. 增加四個系統(tǒng)調用:97.2. 編寫四個測試程序:137.3. 運行測試程序15試驗八、 實現進程間通信的系統(tǒng)調用168.1. 增加四個系統(tǒng)調

2、用:168.2. 編寫四個測試程序:208.3. 運行測試程序22二、 心得體會23第一部分 試驗實現試驗三、生成目標機試驗步驟:3.1. 編譯unixlite內核生成系統(tǒng)內核可執(zhí)行文件kernel.target和系統(tǒng)內核鏡像文件Image# cd /kernel# make dep# make3.2. 制作目標機的啟動軟盤把系統(tǒng)內核鏡像文件Image寫入到軟盤。# cd /kernel# dd if=Image of=/dev/fd03.3. 對目標機的硬盤分區(qū)root(none) kernel# fdisk /dev/hdbCommand (m for help): m / 幫助Comma

3、nd (m for help): p /打印當前分區(qū)表Command (m for help): n /創(chuàng)建新的分區(qū)Command action e extended p primary partition (1-4)p /分區(qū)類型是主分區(qū)Partition number (1-4): 1 /第一主分區(qū)First cylinder (1-4, default 1): /輸入回車,使用缺省值Using default value 1Last cylinder or +size or +sizeM or +sizeK (1-4, default 4): / 輸入回車,使用缺省值Using defa

4、ult value 4Command (m for help): p /打印當前分區(qū)表Command (m for help): t /改變分區(qū)類型Selected partition 1Hex code(Type L to list codes): 81 /輸入minix分區(qū)代碼:81Command (m for help): p /打印當前分區(qū)表Command (m for help): w /存盤退出3.4. 格式化目標機的硬盤# mkfs.minix -v -n30 /dev/hdb13.5. 安裝目標機的文件系統(tǒng)1 掛載目標機的硬盤 # mount /dev/hdb1 /m

5、nt/hdb12 安裝基本的文件系統(tǒng) # tar zxvf rootfs.tar.gz -C /mnt/hdb13 卸載目標機的硬盤 # umount /mnt/hdb13.6. 測試目標機試驗四、Hello World!4.1. 目標在目標機啟動時打印出你的學號。4.2. 步驟1 編輯內核源文件/kernel/init/main.cc,main.cc定義了系統(tǒng)的入口:main函數,在main函數中找到如下兩行代碼: int main(). printf("Total Memory Size is %d Megn", nphysmeg); i386init(); /* se

6、tup gdt,idt,cr0 */.2 在這兩行之間插入打印學號的代碼,變?yōu)椋?printf("Total Memory Size is %d Megn", nphysmeg); printf("This is student:040730424n"); i386init(); /* setup gdt,idt,cr0 */3 在/kernel目錄下使用make命令重新編譯內核,生成內核鏡像文件Image: # cd /kernel# make4 把系統(tǒng)內核鏡像文件Image寫入到軟盤: # cd /kernel# dd if=Image of=/de

7、v/fd05 在windows下啟動目標機,查看目標機啟動時是否打印出你的學號。結果:試驗五、系統(tǒng)調用的原理5.1. 目標通過為unixlite開發(fā)一個簡單的系統(tǒng)調用了解系統(tǒng)調用的原理,要增加的系統(tǒng)調用原型是:int add(int a, int b);add的功能是返回參數a、參數b兩者相加的和。5.2. 步驟5.2.1. 分配空閑的系統(tǒng)調用號為add系統(tǒng)調用分配空閑的系統(tǒng)調用號,查看/kernel/asm/trapS.S獲得系統(tǒng)調用列表:#define SYS(name) .long sys#name#define XXX(name) .long sysnosysentry(syscall

8、tab) sys(setup) /* 0 */ sys(exit) sys(fork) sys(read) sys(write) sys(open) /* 5 */ sys(close) sys(waitpid) sys(creat) sys(link) sys(unlink) /* 10 */ sys(execve) sys(chdir) sys(time) sys(mknod) sys(chmod) /* 15 */ xxx(lchown) /* 16 */ xxx(break) /* 17 */ xxx(oldstat) /* 18 */ sys(lseek) sys(getpid) /

9、* 20 */ . .syscalltab這一張表格定義了"系統(tǒng)調用號"和"系統(tǒng)調用的實現函數"之間的映射關系:我們可以把沒被實現的系統(tǒng)調用號(如16,17,18)分配給add系統(tǒng)調用. 我們選擇16作為add的系統(tǒng)調用號, 修改syscalltab如下:#define SYS(name) .long sys#name#define XXX(name) .long sysnosysENTRY(syscalltab) SYS(setup) /* 0 */ SYS(exit) SYS(fork) SYS(read) SYS(write) SYS(open)

10、/* 5 */ SYS(close) SYS(waitpid) SYS(creat) SYS(link) SYS(unlink) /* 10 */ SYS(execve) SYS(chdir) SYS(time) SYS(mknod) SYS(chmod) /* 15 */ .long sysadd /* 16 */ XXX(break) /* 17 */ XXX(oldstat) /* 18 */ SYS(lseek) SYS(getpid) /* 20 */ .5.3.2. 在UnixLite基礎上增加源文件1 增加一個目錄plugin # cd /kernel# mkdir plugin

11、2 在/kernel/plugin目錄下創(chuàng)建文件Makefile,內容如下: include $(TOPDIR)/Rules.make3 修改/kernel/Makefile,原文如下: SUBDIRS := init lib asm mm fs dev kern net4 現改為: SUBDIRS := init lib asm mm fs dev kern net plugin5.3.3. 實現add系統(tǒng)調用創(chuàng)建/kernel/plugin/add.cc文件, 其內容如下所示: #include <lib/root.h>#include <lib/gcc.h>asm

12、linkage int sysadd(int a, int b) return a + b;5.3.4. 編譯內核在/kernel目錄下使用make命令重新編譯內核,生成內核鏡像文件Image:# cd /kernel# make5.3.5. 把系統(tǒng)內核鏡像文件Image寫入到軟盤:# cd /kernel# dd if=Image of=/dev/fd05.3.6. 編寫測試程序#include <stdio.h>int add(int a, int b) /add系統(tǒng)調用對應的系統(tǒng)調用號是16,把立即數16送往eax寄存器 asm ("movl $16,%eaxnt&

13、quot; "int $0x80" /調用第0x80號中斷服務 :"ebx"(a), "ecx"(b); /把參數a送往ebx寄存器,把參數b送往ecx寄存器int main() printf("1+1=%dn", add(1, 1); return 0;5.4. 注意事項1 必須在unixlite中編譯測試程序2 測試程序以.c為后綴命名,不要以.cc命名5.5. 測試結果試驗七、 實現信號燈操作的系統(tǒng)調用7.1. 增加四個系統(tǒng)調用并實現:l 文件包Sema.cc含四個系統(tǒng)調用函數和一個初始化鏈表函數:初始化鏈表

14、:create_sema函數:destroy_sema函數:wait_sema函數:signal_sema函數:7.2. 編寫四個測試程序:Create.c文件源代碼:7.2.2. destroyDestroy.c文件源代碼:7.2.3. wait_sema 和 signal_semaWait 、singnal 、main函數源代碼:7.3. 運行測試程序創(chuàng)建mutex、empty、full信號燈:# create mutex 1# create empty 8 假設公用緩沖區(qū)大小為8# crate full 0先運行生產者,后運行消費者 :# product & # consume先

15、運行消費者,后運行生產者 # consume & # product試驗八、 實現進程間通信的系統(tǒng)調用8.1. 增加四個系統(tǒng)調用:l 初始化鏈表函數:(上圖中不用再定義 mail_box_list ,直接用mail_box_t 定義Q)1164123125create_mail_box原型 int create_mail_box(char *name);功能 創(chuàng)建一個名稱為name的郵箱。返回值 成功返回0,失敗返回-1。create_mail_box函數源代碼:destroy_mail_box原型 int destroy_mail_box(char *name);功能 刪除名稱為na

16、me的郵箱。返回值 成功返回0,失敗返回-1。destroy_mail_box函數源代碼:send_msg原型 int send_msg(char *name, int msg);功能 向名稱為name的郵箱發(fā)送消息msg。返回值 成功返回0,失敗返回-1。send_msg函數源代碼: recv_msg原型 int recv_msg(char *name, int *msg_pointer);功能 從名稱為name的郵箱中接受消息。返回值 成功返回0,失敗返回-1。recv_msg函數源代碼:8.2. 編寫四個測試程序: 1. 描述郵箱的數據結構 2. #define CAPACIT

17、Y 83. struct mail_box_t 4. char name16; /* 郵箱名稱 */5. int msgqCAPCITY; /* 容量為8的用于存儲消息的FIFO隊列 */6. int in; /* fifo的in指針,參考教科書P46 */7. int out; /* fifo的out指針,參考教科書P46 */8. waitq_t waitq;9. mail_box_t * next; /* 郵箱隊列中的下一個郵箱 */10. ;11. mail_box_t *mail_box_list; /* 郵箱隊列 */12. send_msg的實現 13. int send_msg

18、(char *name, int msg)14. 15. 在mail_box_list中找到名為name的郵箱m16. while (根據in、out判斷郵箱已經滿)17. m->waitq.wait();18. 把msg送往m->msgq;19. m->waitq.broadcast();20. 21. recv_msg的實現 22. int recv_msg(char *name, int *msg_pointer)23. 24. 在mail_box_list中找到名為name的郵箱m25. while (根據in、out判斷郵箱已經空)26. m->waitq.wait();27. 從m->msgq中取出一個消息msg28. *msg_pointer = msg;29. m->waitq.broadcast();30. create語法 crea

溫馨提示

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

評論

0/150

提交評論