版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、操作系統(tǒng)課程設(shè)計(jì)報(bào)告姓名: 學(xué)號:班級:2010年6月25日目錄一、 試驗(yàn)實(shí)現(xiàn)3試驗(yàn)三、生成目標(biāo)機(jī)33.1. 編譯unixlite內(nèi)核33.2. 制作目標(biāo)機(jī)的啟動(dòng)軟盤33.3. 對目標(biāo)機(jī)的硬盤分區(qū)33.4. 格式化目標(biāo)機(jī)的硬盤43.5. 安裝目標(biāo)機(jī)的文件系統(tǒng)43.6. 測試目標(biāo)機(jī)5試驗(yàn)四、Hello World!54.1. 目標(biāo)54.2. 步驟5試驗(yàn)五、系統(tǒng)調(diào)用的原理65.1. 目標(biāo)65.2. 步驟7試驗(yàn)七、 實(shí)現(xiàn)信號燈操作的系統(tǒng)調(diào)用97.1. 增加四個(gè)系統(tǒng)調(diào)用:97.2. 編寫四個(gè)測試程序:137.3. 運(yùn)行測試程序15試驗(yàn)八、 實(shí)現(xiàn)進(jìn)程間通信的系統(tǒng)調(diào)用168.1. 增加四個(gè)系統(tǒng)調(diào)
2、用:168.2. 編寫四個(gè)測試程序:208.3. 運(yùn)行測試程序22二、 心得體會(huì)23第一部分 試驗(yàn)實(shí)現(xiàn)試驗(yàn)三、生成目標(biāo)機(jī)試驗(yàn)步驟:3.1. 編譯unixlite內(nèi)核生成系統(tǒng)內(nèi)核可執(zhí)行文件kernel.target和系統(tǒng)內(nèi)核鏡像文件Image# cd /kernel# make dep# make3.2. 制作目標(biāo)機(jī)的啟動(dòng)軟盤把系統(tǒng)內(nèi)核鏡像文件Image寫入到軟盤。# cd /kernel# dd if=Image of=/dev/fd03.3. 對目標(biāo)機(jī)的硬盤分區(qū)root(none) kernel# fdisk /dev/hdbCommand (m for help): m / 幫助Comma
3、nd (m for help): p /打印當(dāng)前分區(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 /打印當(dāng)前分區(qū)表Command (m for help): t /改變分區(qū)類型Selected partition 1Hex code(Type L to list codes): 81 /輸入minix分區(qū)代碼:81Command (m for help): p /打印當(dāng)前分區(qū)表Command (m for help): w /存盤退出3.4. 格式化目標(biāo)機(jī)的硬盤# mkfs.minix -v -n30 /dev/hdb13.5. 安裝目標(biāo)機(jī)的文件系統(tǒng)1 掛載目標(biāo)機(jī)的硬盤 # mount /dev/hdb1 /m
5、nt/hdb12 安裝基本的文件系統(tǒng) # tar zxvf rootfs.tar.gz -C /mnt/hdb13 卸載目標(biāo)機(jī)的硬盤 # umount /mnt/hdb13.6. 測試目標(biāo)機(jī)試驗(yàn)四、Hello World!4.1. 目標(biāo)在目標(biāo)機(jī)啟動(dòng)時(shí)打印出你的學(xué)號。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 在這兩行之間插入打印學(xué)號的代碼,變?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下啟動(dòng)目標(biāo)機(jī),查看目標(biāo)機(jī)啟動(dòng)時(shí)是否打印出你的學(xué)號。結(jié)果:試驗(yàn)五、系統(tǒng)調(diào)用的原理5.1. 目標(biāo)通過為unixlite開發(fā)一個(gè)簡單的系統(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)用的實(shí)現(xiàn)函數(shù)"之間的映射關(guān)系:我們可以把沒被實(shí)現(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 增加一個(gè)目錄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. 實(shí)現(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. 注意事項(xiàng)1 必須在unixlite中編譯測試程序2 測試程序以.c為后綴命名,不要以.cc命名5.5. 測試結(jié)果試驗(yàn)七、 實(shí)現(xiàn)信號燈操作的系統(tǒng)調(diào)用7.1. 增加四個(gè)系統(tǒng)調(diào)用并實(shí)現(xiàn):l 文件包Sema.cc含四個(gè)系統(tǒng)調(diào)用函數(shù)和一個(gè)初始化鏈表函數(shù):初始化鏈表
14、:create_sema函數(shù):destroy_sema函數(shù):wait_sema函數(shù):signal_sema函數(shù):7.2. 編寫四個(gè)測試程序:Create.c文件源代碼:7.2.2. destroyDestroy.c文件源代碼:7.2.3. wait_sema 和 signal_semaWait 、singnal 、main函數(shù)源代碼:7.3. 運(yùn)行測試程序創(chuàng)建mutex、empty、full信號燈:# create mutex 1# create empty 8 假設(shè)公用緩沖區(qū)大小為8# crate full 0先運(yùn)行生產(chǎn)者,后運(yùn)行消費(fèi)者 :# product & # consume先
15、運(yùn)行消費(fèi)者,后運(yùn)行生產(chǎn)者 # consume & # product試驗(yàn)八、 實(shí)現(xiàn)進(jìn)程間通信的系統(tǒng)調(diào)用8.1. 增加四個(gè)系統(tǒng)調(diào)用:l 初始化鏈表函數(shù):(上圖中不用再定義 mail_box_list ,直接用mail_box_t 定義Q)1164123125create_mail_box原型 int create_mail_box(char *name);功能 創(chuàng)建一個(gè)名稱為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. 編寫四個(gè)測試程序: 1. 描述郵箱的數(shù)據(jù)結(jié)構(gòu) 2. #define CAPACIT
17、Y 83. struct mail_box_t 4. char name16; /* 郵箱名稱 */5. int msgqCAPCITY; /* 容量為8的用于存儲消息的FIFO隊(duì)列 */6. int in; /* fifo的in指針,參考教科書P46 */7. int out; /* fifo的out指針,參考教科書P46 */8. waitq_t waitq;9. mail_box_t * next; /* 郵箱隊(duì)列中的下一個(gè)郵箱 */10. ;11. mail_box_t *mail_box_list; /* 郵箱隊(duì)列 */12. send_msg的實(shí)現(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的實(shí)現(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中取出一個(gè)消息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)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年企業(yè)知識產(chǎn)權(quán)保護(hù)與員工保密責(zé)任協(xié)議細(xì)則3篇
- 2024年度車輛租賃與賽事贊助合同樣本3篇
- 招新宣傳語幽默
- 高三語文摸底試題
- 春節(jié)安全通知范文集錦6篇
- 2024年智慧城市交通規(guī)劃設(shè)計(jì)與施工勞務(wù)分包合同示范3篇
- 爆破銷售課程設(shè)計(jì)
- 婚禮慶典父母講話稿
- 幼兒園雞蛋孵化課程設(shè)計(jì)
- 治愈早安感言(215句)
- 乒乓球校隊(duì)選拔方案
- 熱水供水系統(tǒng)運(yùn)營維護(hù)服務(wù)投標(biāo)方案(技術(shù)方案)
- 現(xiàn)實(shí)與理想-西方古典繪畫 課件-2023-2024學(xué)年高中美術(shù)人美版(2019)美術(shù)鑒賞
- 快遞安全教育培訓(xùn)課件
- 迎新年卡拉OK比賽主持詞
- 造口傷口工作總結(jié)
- 玻璃廠質(zhì)檢工作總結(jié)
- v型開槽機(jī)安全操作規(guī)程
- 3-6歲兒童學(xué)習(xí)與發(fā)展指南語言領(lǐng)域解讀
- 醫(yī)用注射器原理與使用方法
- 2023-2024學(xué)年浙教版科學(xué)九年級上冊期末測試+
評論
0/150
提交評論