




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、操作系統(tǒng)課設(shè)操作系統(tǒng)課程設(shè)計(jì)報(bào)告 姓名: 學(xué)號(hào):班級(jí):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)軟盤(pán)33.3. 對(duì)目標(biāo)機(jī)的硬盤(pán)分區(qū)33.4. 格式化目標(biāo)機(jī)的硬盤(pán)43.5.安裝目標(biāo)機(jī)的文件系統(tǒng)43.6. 測(cè)試目標(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)信號(hào)燈操作的系統(tǒng)調(diào)用97.1. 增加四個(gè)系統(tǒng)調(diào)用:97.2. 編寫(xiě)四個(gè)測(cè)試程序:137.3. 運(yùn)行測(cè)試程序15試驗(yàn)八、 實(shí)現(xiàn)進(jìn)程間通信的系統(tǒng)調(diào)用168.1. 增加四個(gè)系統(tǒng)
2、調(diào)用:168.2. 編寫(xiě)四個(gè)測(cè)試程序:208.3. 運(yùn)行測(cè)試程序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)軟盤(pán)把系統(tǒng)內(nèi)核鏡像文件image寫(xiě)入到軟盤(pán)。# cd /kernel# dd if=image of=/dev/fd03.3. 對(duì)目標(biāo)機(jī)的硬盤(pán)分區(qū)root(none) kernel# fdisk /dev/hdbcommand (m for help): m / 幫助comm
3、and (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ū)類(lèi)型是主分區(qū)partition number (1-4): 1 /第一主分區(qū)first cylinder (1-4, default 1): /輸入回車(chē),使用缺省值using default value 1last cylinder or +size or +sizem or +sizek (1-4, default 4): / 輸入回車(chē),使用缺省值using def
4、ault value 4command (m for help): p /打印當(dāng)前分區(qū)表command (m for help): t /改變分區(qū)類(lèi)型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 /存盤(pán)退出3.4. 格式化目標(biāo)機(jī)的硬盤(pán)# mkfs.minix -v -n30 /dev/hdb13.5.安裝目標(biāo)機(jī)的文件系統(tǒng)1 掛載目標(biāo)機(jī)的硬盤(pán) # mount /dev/hdb1 /mnt/hd
5、b12 安裝基本的文件系統(tǒng) # tar zxvf rootfs.tar.gz -c /mnt/hdb13 卸載目標(biāo)機(jī)的硬盤(pán) # umount /mnt/hdb13.6. 測(cè)試目標(biāo)機(jī)試驗(yàn)四、hello world!4.1. 目標(biāo)在目標(biāo)機(jī)啟動(dòng)時(shí)打印出你的學(xué)號(hào)。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(); /* setup gdt,idt,cr0 *
6、/.2 在這兩行之間插入打印學(xué)號(hào)的代碼,變?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寫(xiě)入到軟盤(pán): # cd /kernel# dd if=image of=/dev/fd05 在windows下啟動(dòng)目標(biāo)機(jī),查看目標(biāo)機(jī)啟動(dòng)時(shí)是否打印出你的學(xué)號(hào)。結(jié)
7、果:試驗(yàn)五、系統(tǒng)調(diào)用的原理5.1. 目標(biāo)通過(guò)為unixlite開(kāi)發(fā)一個(gè)簡(jiǎn)單的系統(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)用號(hào)為add系統(tǒng)調(diào)用分配空閑的系統(tǒng)調(diào)用號(hào),查看/kernel/asm/traps.s獲得系統(tǒng)調(diào)用列表:#define sys(name) .long sys#name#define xxx(name) .long sysnosysentry(syscalltab) sys(setup) /* 0 */ sys(exit) sys(for
8、k) 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) /* 20 */ . .syscalltab這一張表格定義了系統(tǒng)調(diào)用號(hào)和系統(tǒng)調(diào)用的實(shí)
9、現(xiàn)函數(shù)之間的映射關(guān)系:我們可以把沒(méi)被實(shí)現(xiàn)的系統(tǒng)調(diào)用號(hào)(如16,17,18)分配給add系統(tǒng)調(diào)用. 我們選擇16作為add的系統(tǒng)調(diào)用號(hà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) /* 5 */ sys(close) sys(waitpid) sys(creat) sys(link) sys(unlink)
10、/* 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 plugin2 在/kernel/plugin目錄下創(chuàng)建文件makefile,內(nèi)容如下: include $(topdir)/rules.ma
11、ke3 修改/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 #include asmlinkage int sysadd(int a, int b) return a + b;5.3.4. 編譯內(nèi)核在/kernel目錄下使用make命令重新編譯內(nèi)核,生成內(nèi)核鏡像文件image:# c
12、d /kernel# make5.3.5. 把系統(tǒng)內(nèi)核鏡像文件image寫(xiě)入到軟盤(pán):# cd /kernel# dd if=image of=/dev/fd05.3.6. 編寫(xiě)測(cè)試程序#include int add(int a, int b) /add系統(tǒng)調(diào)用對(duì)應(yīng)的系統(tǒng)調(diào)用號(hào)是16,把立即數(shù)16送往eax寄存器 asm (movl $16,%eaxnt int $0x80 /調(diào)用第0x80號(hào)中斷服務(wù) :ebx(a), ecx(b); /把參數(shù)a送往ebx寄存器,把參數(shù)b送往ecx寄存器int main() printf(1+1=%dn, add(1, 1); return 0;5.4. 注意
13、事項(xiàng)1 必須在unixlite中編譯測(cè)試程序2 測(cè)試程序以.c為后綴命名,不要以.cc命名5.5. 測(cè)試結(jié)果試驗(yàn)七、 實(shí)現(xiàn)信號(hào)燈操作的系統(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ù):初始化鏈表:create_sema函數(shù):destroy_sema函數(shù):wait_sema函數(shù):signal_sema函數(shù):7.2. 編寫(xiě)四個(gè)測(cè)試程序:7.2.1createcreate.c文件源代碼:7.2.2. destroydestroy.c文件源代碼:7.2.3. wait_sema 和 signal_semawait 、singnal 、main函數(shù)
14、源代碼:7.3. 運(yùn)行測(cè)試程序創(chuàng)建mutex、empty、full信號(hào)燈:# create mutex 1# create empty 8 假設(shè)公用緩沖區(qū)大小為8# crate full 0先運(yùn)行生產(chǎn)者,后運(yùn)行消費(fèi)者 :# product & # consume先運(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ù):create_mail_box原型 int create_mail_box(char *name);功能 創(chuàng)建一個(gè)名稱(chēng)為name的郵箱。返回值 成功返回0,失敗返回-1。create_m
15、ail_box函數(shù)源代碼:destroy_mail_box原型 int destroy_mail_box(char *name);功能 刪除名稱(chēng)為name的郵箱。返回值 成功返回0,失敗返回-1。destroy_mail_box函數(shù)源代碼:send_msg原型 int send_msg(char *name, int msg);功能 向名稱(chēng)為name的郵箱發(fā)送消息msg。返回值 成功返回0,失敗返回-1。send_msg函數(shù)源代碼:recv_msg原型 int recv_msg(char *name, int *msg_pointer);功能 從名稱(chēng)為name的郵箱中接受消息。返回值 成功返回
16、0,失敗返回-1。recv_msg函數(shù)源代碼:8.2. 編寫(xiě)四個(gè)測(cè)試程序: 1. 描述郵箱的數(shù)據(jù)結(jié)構(gòu) 2. #define capacity 83. struct mail_box_t 4. char name16; /* 郵箱名稱(chēng) */5. int msgqcapcity; /* 容量為8的用于存儲(chǔ)消息的fifo隊(duì)列 */6. int in; /* fifo的in指針,參考教科書(shū)p46 */7. int out; /* fifo的out指針,參考教科書(shū)p46 */8. waitq_t waitq;9. mail_box_t * next; /* 郵箱隊(duì)列中的下一個(gè)郵箱 */10. ;11.
17、mail_box_t *mail_box_list; /* 郵箱隊(duì)列 */12. send_msg的實(shí)現(xiàn) 13. int send_msg(char *name, int msg)14. 15. 在mail_box_list中找到名為name的郵箱m16. while (根據(jù)in、out判斷郵箱已經(jīng)滿(mǎn))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
18、中找到名為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語(yǔ)法 create name功能 創(chuàng)建名稱(chēng)為name的郵箱。create。c文件源代碼:destroy語(yǔ)法 destroy name功能 刪除名稱(chēng)為name的郵箱。destroy.c文件源代碼:send語(yǔ)法 send name count功能 發(fā)送者向名為name的郵箱發(fā)送count個(gè)數(shù)據(jù)。send.c文件源代碼:recv語(yǔ)法 recv name count功能 接收者從名為name的郵箱接收count個(gè)數(shù)據(jù)。recv.c文件源代碼:8.3. 運(yùn)行測(cè)試程序創(chuàng)建郵箱 # create mybox先運(yùn)行發(fā)送者,后運(yùn)行接收者# send mybox 16 & # recv 16讓發(fā)送者在后臺(tái)運(yùn)行先運(yùn)行接收者,后運(yùn)行發(fā)送者# re
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- T/CAPA 6-2022果酸換膚術(shù)操作規(guī)范
- 防詐騙考試題及答案
- 杭州遴選面試題及答案
- 創(chuàng)意運(yùn)營(yíng)面試題及答案
- 有關(guān)于禮儀的含義演講稿
- 人生道路班會(huì)課件
- 人生規(guī)劃教學(xué)課件
- 尾礦處理合作合同范本
- 住宅小區(qū)建筑合同范本
- 夫妻家庭經(jīng)濟(jì)分配協(xié)議書(shū)
- 第8課人工智能中的算法 說(shuō)課稿 2023-2024學(xué)年浙教版(2023)初中信息技術(shù)八年級(jí)下冊(cè)
- DB11T 745-2010 住宅采暖室內(nèi)空氣溫度測(cè)量方法
- 國(guó)開(kāi)(浙江)2024年《個(gè)人理財(cái)》形考作業(yè)1-4答案
- 小班班本課程《吃飯這件小事》
- 文學(xué)大數(shù)據(jù)中心建設(shè)項(xiàng)目需求
- 寵物樂(lè)園規(guī)劃方案
- 2024年四川省成都市中考道德與法治試卷真題(含答案解析)
- 個(gè)體戶(hù)食品安全管理制度打印
- 字母左鄰右舍一百題
- 專(zhuān)題03 平面向量(含解析)- 十年(2015-2024)高考真題數(shù)學(xué)分項(xiàng)匯編(全國(guó)用)
- 交通事故全權(quán)代辦委托書(shū)
評(píng)論
0/150
提交評(píng)論