版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、操作系統(tǒng)課程設(shè)計報告姓名: 學號:班級:2010年6月25日目錄一、 試驗實現(xiàn)3試驗三、生成目標機33.1. 編譯unixlite內(nèi)核33.2. 制作目標機的啟動軟盤33.3. 對目標機的硬盤分區(qū)33.4. 格式化目標機的硬盤43.5. 安裝目標機的文件系統(tǒng)43.6. 測試目標機5試驗四、Hello World!54.1. 目標54.2. 步驟5試驗五、系統(tǒng)調(diào)用的原理65.1. 目標65.2. 步驟7試驗七、 實現(xiàn)信號燈操作的系統(tǒng)調(diào)用97.1. 增加四個系統(tǒng)調(diào)用:97.2. 編寫四個測試程序:137.3. 運行測試程序15試驗八、 實現(xiàn)進程間通信的系統(tǒng)調(diào)用168.1. 增加四個系統(tǒng)調(diào)
2、用:168.2. 編寫四個測試程序:208.3. 運行測試程序22二、 心得體會23第一部分 試驗實現(xiàn)試驗三、生成目標機試驗步驟:3.1. 編譯unixlite內(nèi)核生成系統(tǒng)內(nèi)核可執(zhí)行文件kernel.target和系統(tǒng)內(nèi)核鏡像文件Image# cd /kernel# make dep# make3.2. 制作目標機的啟動軟盤把系統(tǒng)內(nèi)核鏡像文件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 編輯內(nèi)核源文件/kernel/init/main.cc,main.cc定義了系統(tǒng)的入口:main函數(shù),在main函數(shù)中找到如下兩行代碼: 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命令重新編譯內(nèi)核,生成內(nèi)核鏡像文件Image: # cd /kernel# make4 把系統(tǒng)內(nèi)核鏡像文件Image寫入到軟盤: # cd /kernel# dd if=Image of=/de
7、v/fd05 在windows下啟動目標機,查看目標機啟動時是否打印出你的學號。結(jié)果:試驗五、系統(tǒng)調(diào)用的原理5.1. 目標通過為unixlite開發(fā)一個簡單的系統(tǒng)調(diào)用了解系統(tǒng)調(diào)用的原理,要增加的系統(tǒng)調(diào)用原型是:int add(int a, int b);add的功能是返回參數(shù)a、參數(shù)b兩者相加的和。5.2. 步驟5.2.1. 分配空閑的系統(tǒng)調(diào)用號為add系統(tǒng)調(diào)用分配空閑的系統(tǒng)調(diào)用號,查看/kernel/asm/trapS.S獲得系統(tǒng)調(diào)用列表:#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)調(diào)用號"和"系統(tǒng)調(diào)用的實現(xiàn)函數(shù)"之間的映射關(guān)系:我們可以把沒被實現(xiàn)的系統(tǒng)調(diào)用號(如16,17,18)分配給add系統(tǒng)調(diào)用. 我們選擇16作為add的系統(tǒng)調(diào)用號, 修改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基礎(chǔ)上增加源文件1 增加一個目錄plugin # cd /kernel# mkdir plugin
11、2 在/kernel/plugin目錄下創(chuàng)建文件Makefile,內(nèi)容如下: include $(TOPDIR)/Rules.make3 修改/kernel/Makefile,原文如下: SUBDIRS := init lib asm mm fs dev kern net4 現(xiàn)改為: SUBDIRS := init lib asm mm fs dev kern net plugin5.3.3. 實現(xiàn)add系統(tǒng)調(diào)用創(chuàng)建/kernel/plugin/add.cc文件, 其內(nèi)容如下所示: #include <lib/root.h>#include <lib/gcc.h>asm
12、linkage int sysadd(int a, int b) return a + b;5.3.4. 編譯內(nèi)核在/kernel目錄下使用make命令重新編譯內(nèi)核,生成內(nèi)核鏡像文件Image:# cd /kernel# make5.3.5. 把系統(tǒng)內(nèi)核鏡像文件Image寫入到軟盤:# cd /kernel# dd if=Image of=/dev/fd05.3.6. 編寫測試程序#include <stdio.h>int add(int a, int b) /add系統(tǒng)調(diào)用對應(yīng)的系統(tǒng)調(diào)用號是16,把立即數(shù)16送往eax寄存器 asm ("movl $16,%eaxnt&
13、quot; "int $0x80" /調(diào)用第0x80號中斷服務(wù) :"ebx"(a), "ecx"(b); /把參數(shù)a送往ebx寄存器,把參數(shù)b送往ecx寄存器int main() printf("1+1=%dn", add(1, 1); return 0;5.4. 注意事項1 必須在unixlite中編譯測試程序2 測試程序以.c為后綴命名,不要以.cc命名5.5. 測試結(jié)果試驗七、 實現(xiàn)信號燈操作的系統(tǒng)調(diào)用7.1. 增加四個系統(tǒng)調(diào)用并實現(xiàn):l 文件包Sema.cc含四個系統(tǒng)調(diào)用函數(shù)和一個初始化鏈表函數(shù):初始化鏈表
14、:create_sema函數(shù):destroy_sema函數(shù):wait_sema函數(shù):signal_sema函數(shù):7.2. 編寫四個測試程序:Create.c文件源代碼:7.2.2. destroyDestroy.c文件源代碼:7.2.3. wait_sema 和 signal_semaWait 、singnal 、main函數(shù)源代碼:7.3. 運行測試程序創(chuàng)建mutex、empty、full信號燈:# create mutex 1# create empty 8 假設(shè)公用緩沖區(qū)大小為8# crate full 0先運行生產(chǎn)者,后運行消費者 :# product & # consume先
15、運行消費者,后運行生產(chǎn)者 # consume & # product試驗八、 實現(xiàn)進程間通信的系統(tǒng)調(diào)用8.1. 增加四個系統(tǒng)調(diào)用:l 初始化鏈表函數(shù):(上圖中不用再定義 mail_box_list ,直接用mail_box_t 定義Q)1164123125create_mail_box原型 int create_mail_box(char *name);功能 創(chuàng)建一個名稱為name的郵箱。返回值 成功返回0,失敗返回-1。create_mail_box函數(shù)源代碼:destroy_mail_box原型 int destroy_mail_box(char *name);功能 刪除名稱為na
16、me的郵箱。返回值 成功返回0,失敗返回-1。destroy_mail_box函數(shù)源代碼:send_msg原型 int send_msg(char *name, int msg);功能 向名稱為name的郵箱發(fā)送消息msg。返回值 成功返回0,失敗返回-1。send_msg函數(shù)源代碼: recv_msg原型 int recv_msg(char *name, int *msg_pointer);功能 從名稱為name的郵箱中接受消息。返回值 成功返回0,失敗返回-1。recv_msg函數(shù)源代碼:8.2. 編寫四個測試程序: 1. 描述郵箱的數(shù)據(jù)結(jié)構(gòu) 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的實現(xiàn) 13. int send_msg
18、(char *name, int msg)14. 15. 在mail_box_list中找到名為name的郵箱m16. while (根據(jù)in、out判斷郵箱已經(jīng)滿)17. m->waitq.wait();18. 把msg送往m->msgq;19. m->waitq.broadcast();20. 21. recv_msg的實現(xiàn) 22. int recv_msg(char *name, int *msg_pointer)23. 24. 在mail_box_list中找到名為name的郵箱m25. while (根據(jù)in、out判斷郵箱已經(jīng)空)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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 智能硬件CTO實習合同
- 房地產(chǎn)貴陽售樓處租賃合同
- 2024版商業(yè)采光井建造協(xié)議模板一
- 風景區(qū)道路擴建工程打路施工合同
- 媒體租賃田地合同
- 交通安全設(shè)施招投標廉政合同
- 智能旅游系統(tǒng)工程委托施工合同
- 水上樂園租賃合同協(xié)議書
- 2024甲乙雙方食堂商鋪租賃合同
- 正規(guī)聘用合同范本
- 工業(yè)機器人控制器:FANUC R-30iB:機器人實時監(jiān)控與數(shù)據(jù)采集技術(shù)教程
- 2024年9月2390國開電大專科《古代漢語(1)》期末考試試題及答案
- 湖北省2024年村干部定向考試真題
- 二年級上冊數(shù)學解決問題100道(滿分必刷)
- CH-Z9031-2021室內(nèi)三維測圖數(shù)據(jù)獲取與處理技術(shù)規(guī)程
- 2022鋼橋面環(huán)氧瀝青混凝土鋪裝施工技術(shù)規(guī)程
- 勞務(wù)服務(wù)合作協(xié)議書范本
- 駕駛員勞務(wù)派遣應(yīng)急預(yù)案
- 中醫(yī)五臟心完整版本
- 聚合工藝作業(yè)安全培訓課件
- 2022年7月25日多?。ㄊ小^(qū))公務(wù)員聯(lián)考《公安基礎(chǔ)知識》(專業(yè)科目)試卷(網(wǎng)友回憶版)
評論
0/150
提交評論