版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
操作系統(tǒng)
課程設計1操作系統(tǒng)課程設計全文共50頁,當前為第1頁。內(nèi)容簡介設計目的設計內(nèi)容實施方法及要求時間安排輔導2操作系統(tǒng)課程設計全文共50頁,當前為第2頁。設計目的掌握Linux操作系統(tǒng)的使用方法了解Linux系統(tǒng)內(nèi)核代碼結構掌握實例操作系統(tǒng)的實現(xiàn)方法3操作系統(tǒng)課程設計全文共50頁,當前為第3頁。內(nèi)容簡介設計目的設計內(nèi)容實施方法及要求時間安排輔導4操作系統(tǒng)課程設計全文共50頁,當前為第4頁。設計內(nèi)容(1)要求:
熟悉和理解Linux編程環(huán)境內(nèi)容1)編寫一個C程序,用fread、fwrite等庫函數(shù)實現(xiàn)文件拷貝功能。2)編寫一個C程序,使用基于文本的終端圖形編程庫(curses)或圖形界面(QT/GTK),分窗口顯示三個并發(fā)進程的運行(一個窗口實時顯示當前時間,一個窗口實時監(jiān)測CPU的利用率,一個窗口做1到100的累加求和,刷新周期分別為1秒,2秒和3秒)。5操作系統(tǒng)課程設計全文共50頁,當前為第5頁。設計內(nèi)容(2)要求:掌握添加系統(tǒng)調(diào)用的方法內(nèi)容采用編譯內(nèi)核的方法,添加一個新的系統(tǒng)調(diào)用實現(xiàn)文件拷貝功能編寫一個應用程序,測試新加的系統(tǒng)調(diào)用6操作系統(tǒng)課程設計全文共50頁,當前為第6頁。設計內(nèi)容(3)要求:掌握添加設備驅動程序的方法內(nèi)容采用模塊方法,添加一個新的字符設備的驅動程序,實現(xiàn)打開/關閉、讀/寫等基本操作編寫一個應用程序,測試添加的驅動程序7操作系統(tǒng)課程設計全文共50頁,當前為第7頁。設計內(nèi)容(4)要求:理解和分析/proc文件內(nèi)容了解/proc文件的特點和使用方法監(jiān)控系統(tǒng)狀態(tài),顯示系統(tǒng)部件的使用情況用圖形界面監(jiān)控系統(tǒng)狀態(tài),包括CPU和內(nèi)存利用率、所有進程信息等(可自己補充、添加其他功能)8操作系統(tǒng)課程設計全文共50頁,當前為第8頁。設計內(nèi)容(5)要求:理解和掌握文件系統(tǒng)的設計方法
(選做)內(nèi)容設計、實現(xiàn)一個模擬的文件系統(tǒng)包含文件/目錄創(chuàng)建/刪除,目錄顯示等基本功能(可自行擴充文件讀/寫、用戶登錄、權限控制、讀寫保護等其他功能)9操作系統(tǒng)課程設計全文共50頁,當前為第9頁。10內(nèi)容簡介設計目的設計內(nèi)容實施方法及要求時間安排輔導操作系統(tǒng)課程設計全文共50頁,當前為第10頁。實施方法及要求每位同學必須獨立完成課程設計內(nèi)容支持借鑒和學習已有的優(yōu)秀知識!反對全盤拷貝,不求甚解!吸收和消化他人經(jīng)驗,做自己的課程設計!11操作系統(tǒng)課程設計全文共50頁,當前為第11頁。實施方法及要求上機檢查:根據(jù)要求演示完成的系統(tǒng),并回答老師的問題或按要求修改程序報告提交:紙質(zhì)課程設計報告(雙面打印):內(nèi)容包括實驗目的、實驗內(nèi)容、實驗設計、實驗環(huán)境及步驟、調(diào)試記錄和課程設計心得等光盤:課程設計報告電子版和程序清單(附注釋),每個班一張光盤12操作系統(tǒng)課程設計全文共50頁,當前為第12頁。實施方法及要求班級安排:
成績依據(jù):檢查情況+報告撰寫情況完成前兩題:60-65完成前三題:65-75完成四題或選做題:75-90完成四題和選做題:90以上13操作系統(tǒng)課程設計全文共50頁,當前為第13頁。14內(nèi)容簡介設計目的設計內(nèi)容實施方法及要求時間安排輔導操作系統(tǒng)課程設計全文共50頁,當前為第14頁。15課程設計時間:第一周、第二周課程設計地點:中期檢查:
最后檢查:
實驗報告提交:
時間安排操作系統(tǒng)課程設計全文共50頁,當前為第15頁。16內(nèi)容簡介設計目的設計內(nèi)容實施方法及要求時間安排輔導操作系統(tǒng)課程設計全文共50頁,當前為第16頁。17課程設計輔導Linux系統(tǒng)的相關知識進程并發(fā)
添加系統(tǒng)調(diào)用添加設備驅動程序/proc文件分析操作系統(tǒng)課程設計全文共50頁,當前為第17頁。Linux系統(tǒng)的相關知識內(nèi)核版本:major.minor.patch-buildmajor:主版本號,有結構性變化時變更minor:次版本號,新增功能時發(fā)生變化奇數(shù)表示開發(fā)版,偶數(shù)表示穩(wěn)定版patch-build:修訂版本號18發(fā)行版:內(nèi)核最新版4.4操作系統(tǒng)課程設計全文共50頁,當前為第18頁。Linux系統(tǒng)的常用目錄19系統(tǒng)管理員和普通用戶使用的命令Linux內(nèi)核和系統(tǒng)啟動文件Linux的所有設備文件,如/dev/hda代表第一個物理IDE硬盤系統(tǒng)管理所需的配置文件和子目錄用戶的主戶目錄命令、程序庫、文檔和其他文件操作系統(tǒng)課程設計全文共50頁,當前為第19頁。Linux系統(tǒng)的核心源碼20操作系統(tǒng)課程設計全文共50頁,當前為第20頁。21課程設計輔導Linux系統(tǒng)的相關知識進程并發(fā)
添加系統(tǒng)調(diào)用添加設備驅動程序/proc文件分析操作系統(tǒng)課程設計全文共50頁,當前為第21頁。進程并發(fā)pid=fork():創(chuàng)建子進程。返回值:0從子進程返回
>0從父進程返回exit進程自我終止,進入僵死狀態(tài)wait()等待進程終止(由父進程調(diào)用)exec()執(zhí)行一個可執(zhí)行程序(文件)22操作系統(tǒng)課程設計全文共50頁,當前為第22頁。fork()系統(tǒng)調(diào)用23操作系統(tǒng)課程設計全文共50頁,當前為第23頁。課程設計輔導Linux系統(tǒng)的相關知識進程并發(fā)
添加系統(tǒng)調(diào)用添加設備驅動程序/proc文件分析24操作系統(tǒng)課程設計全文共50頁,當前為第24頁。添加系統(tǒng)調(diào)用Linux系統(tǒng)調(diào)用機制Linux內(nèi)核中設置了一組用于實現(xiàn)各種系統(tǒng)功能的子程序,稱為系統(tǒng)調(diào)用用戶可以通過系統(tǒng)調(diào)用命令在自己的應用程序中調(diào)用它們系統(tǒng)調(diào)用與普通函數(shù)調(diào)用的區(qū)別系統(tǒng)調(diào)用核心態(tài)操作系統(tǒng)核心提供普通的函數(shù)調(diào)用用戶態(tài)函數(shù)庫或用戶自己提供25操作系統(tǒng)課程設計全文共50頁,當前為第25頁。添加系統(tǒng)調(diào)用(續(xù))Linux系統(tǒng)調(diào)用機制
int0x80
使用寄存器中適當?shù)闹堤D到內(nèi)核中事先定義好的代碼中執(zhí)行:跳轉到系統(tǒng)調(diào)用的總入口system_call,檢查系統(tǒng)調(diào)用號,再查找系統(tǒng)調(diào)用表sys_call_table,調(diào)用內(nèi)核函數(shù),最后返回系統(tǒng)調(diào)用是靠一些宏,一張系統(tǒng)調(diào)用表,一個系統(tǒng)調(diào)用入口來完成的26操作系統(tǒng)課程設計全文共50頁,當前為第26頁。添加系統(tǒng)調(diào)用(續(xù))與系統(tǒng)調(diào)用相關的內(nèi)核代碼文件:系統(tǒng)調(diào)用服務例程
如arch/x86/kernel/sys.c系統(tǒng)調(diào)用清單(為每個系統(tǒng)調(diào)用分配唯一號碼)
如arch/x86/include/asm/unistd.h系統(tǒng)調(diào)用表
如arch/x86/kernel/syscall_table.s不同版本Linux,文件名和存放位置會有所不同!27操作系統(tǒng)課程設計全文共50頁,當前為第27頁。添加系統(tǒng)調(diào)用(續(xù))步驟_1添加源代碼編寫添加到內(nèi)核中的源程序,函數(shù)名以sys_開頭。如:mycall(intnum),在arch/x86/kernel/sys.c文件中添加如下代碼:
asmlinkageintsys_mysyscall(intnumber){returnnumber;//該系統(tǒng)調(diào)用僅返回一個整型值
}28操作系統(tǒng)課程設計全文共50頁,當前為第28頁。添加系統(tǒng)調(diào)用(續(xù))步驟_2連接新的系統(tǒng)調(diào)用
使內(nèi)核的其余部分知道該系統(tǒng)調(diào)用的存在。為此,需編輯兩個文件:arch/x86/include/asm/unistd.h ——系統(tǒng)調(diào)用清單(為每個系統(tǒng)調(diào)用分配唯一號碼)
#define_NR_mysyscall
nnn
其中,mysyscall:系統(tǒng)調(diào)用名
nnn:系統(tǒng)調(diào)用號,不能與其他系統(tǒng)調(diào)用號相同
并修改系統(tǒng)調(diào)用總數(shù):#defineNR_syscallsXXXarch/x86/kernel/syscall_table.s
——增加新的內(nèi)核函數(shù)指針
.longsys_mysyscall29操作系統(tǒng)課程設計全文共50頁,當前為第29頁。添加系統(tǒng)調(diào)用(續(xù))步驟_3重建Linux內(nèi)核以root身份進入/usr/src/linux目錄,重建內(nèi)核
#makemrproper//清除之前編譯信息,避免生成的文件不一致
#makeoldconfig//配置內(nèi)核與當前配置相同
makeconfig基于文本的傳統(tǒng)配置界面
makemenuconfig基于文本的菜單形式,字符終端下使用
makexconfig基于圖形窗口模式,Xwindow下使用
#make//編譯內(nèi)核
#makemodules_install//生成并安裝模塊
#makeinstall//安裝新的系統(tǒng)30操作系統(tǒng)課程設計全文共50頁,當前為第30頁。添加系統(tǒng)調(diào)用(續(xù))步驟_4重啟選用新內(nèi)核
步驟_5
使用新的系統(tǒng)調(diào)用應用程序app.c中調(diào)用新添加的系統(tǒng)調(diào)用mysyscall:
intsyscall(intnumber,…);31操作系統(tǒng)課程設計全文共50頁,當前為第31頁。課程設計輔導Linux系統(tǒng)的相關知識進程并發(fā)
添加系統(tǒng)調(diào)用添加設備驅動程序/proc文件分析32操作系統(tǒng)課程設計全文共50頁,當前為第32頁。添加設備驅動程序設備驅動程序一組常駐內(nèi)存的具有特權的共享庫,是低級硬件處理例程每個設備文件有兩個設備號主設備號標識驅動程序從設備號表示使用同一個設備驅動程序的不同硬件設備設備驅動程序的功能對設備初始化和釋放把數(shù)據(jù)從內(nèi)核傳送到硬件和從硬件讀取數(shù)據(jù)
讀取應用程序傳給設備文件的數(shù)據(jù)和回送應用程序請求的數(shù)據(jù)檢測和處理設備出現(xiàn)的錯誤
33操作系統(tǒng)課程設計全文共50頁,當前為第33頁。添加設備驅動程序(續(xù))Linux支持的設備類型字符設備——c
存取時沒有緩存;對字符設備發(fā)出讀寫請求時,實際的I/O就發(fā)生了。如:鼠標、鍵盤等。
塊設備——b
利用一塊系統(tǒng)內(nèi)存區(qū)域作緩沖區(qū),當用戶進程對設備請求能滿足用戶要求時,返回請求數(shù)據(jù),否則,調(diào)用請求函數(shù)進行實際的I/O操作。如:硬盤、軟盤、CD-ROM等。網(wǎng)絡設備
34操作系統(tǒng)課程設計全文共50頁,當前為第34頁。添加設備驅動程序(續(xù))注冊設備:向系統(tǒng)登記設備及驅動程序的入口點intregister_chrdev(unsignedintmajor,constchar*name,structfile_operations*fops);
//向系統(tǒng)的字符設備表登記一個字符設備
//major:希望獲得的設備號,為0時系統(tǒng)選擇一個沒有被占用的設備號返回。
//name:設備名
//fops:登記驅動程序實際執(zhí)行操作的函數(shù)的指針
//登記成功,返回設備的主設備號,否則,返回一個負值intregister_blkdev(unsignedintmajor,constchar*name,structfile_operations*fops);
//向系統(tǒng)的塊設備表登記一個塊設備35操作系統(tǒng)課程設計全文共50頁,當前為第35頁。添加設備驅動程序(續(xù))設備卸載intunregister_chrdev(unsignedintmajor,constchar*name);
//卸載字符設備
//major:要卸載設備的主設備號
//name:設備名
intunregister_blkdev(unsignedintmajor,constchar*name);
//卸載塊設備
36操作系統(tǒng)課程設計全文共50頁,當前為第36頁。添加設備驅動程序(續(xù))Linux系統(tǒng)采用一組固定的入口點來實現(xiàn)驅動設備的功能。open入口點:打開設備。對將要進行的I/O操作做好必要的準備工作,如清除緩沖區(qū)等close入口點:關閉一個設備read入口點:從設備上讀數(shù)據(jù)write入口點:往設備上寫數(shù)據(jù)ioctl入口點:執(zhí)行讀、寫之外的操作select入口點:檢查設備,看數(shù)據(jù)是否可讀或設備是否可用于寫數(shù)據(jù)37操作系統(tǒng)課程設計全文共50頁,當前為第37頁。添加設備驅動程序內(nèi)核模塊(LKM,LoadableKernelModules)Linux核心是一種monolithic類型的內(nèi)核,即單一的大核心linux內(nèi)核是一個整體結構,因此向內(nèi)核添加或者刪除某些功能,都十分困難。為了解決這個問題,引入了模塊機制,從而可以動態(tài)的在內(nèi)核中添加或刪除模塊38操作系統(tǒng)課程設計全文共50頁,當前為第38頁。添加設備驅動程序(續(xù))模塊的實現(xiàn)機制模塊初始化(注冊)intinit_module(){};模塊卸載(注銷)intcleanup_module(){};操作unsignedlongsys_create_module(char*name,unsignedlongsize);//重新分配內(nèi)存intsys_delete_module(char*name);//卸載intsys_query_module(constchar*name,intwhich,void*buf,size_tbufsize,size_t*ret);//查詢39操作系統(tǒng)課程設計全文共50頁,當前為第39頁。添加設備驅動程序(續(xù))模塊編程實例hello.c源碼40printk("helloworld!\n');printk("Ihaveruninginakernelmod!\n");return0;}voidcleanup_module()/*模塊卸載*/{
printk("Iwillshutdownmyselfinkernelmode!\n)";}
#include"linux/kernerl.h"#include"linux/module.h"/*處理版本問題CONFIG_MODVERSIONS*/#ifCONFIG_MODVERSIONS==1#defineMODVERSIONS#include"linux/version.h"#endifintinit_module()/*模塊初始化*/{操作系統(tǒng)課程設計全文共50頁,當前為第40頁。添加設備驅動程序(續(xù))模塊的實現(xiàn)機制模塊加入:insmodmodulename.ko查看模塊:lsmod刪除模塊:rmmodmodulename41操作系統(tǒng)課程設計全文共50頁,當前為第41頁。添加設備驅動程序(續(xù))添加設備驅動程序的方法編寫設備驅動程序mydev.c設備驅動模塊的編譯
Makefile文件的使用加載設備驅動模塊:insmodmydev.ko
若加載成功,在文件/proc/devices中能看到新增加的設備,包括設備名mydev和主設備號。生成設備文件:mknod/dev/testc2540
其中,test為設備文件名,254為主設備號,0為從設備號,c表示字符設備42操作系統(tǒng)課程設計全文共50頁,當前為第42頁。添加設備驅動程序(續(xù))編寫應用程序,測試驅動程序43if(testdev==-1){printf("Cann'topenfile\n");exit(0);}read(testdev,buf,10);for(i=0;i<10;i++)printf("%d\n",buf[i]);close(testdev);}
#include<stdio.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>intmain(){inttestdev;inti;charbuf[10];testdev=open("/dev/test",O_RDWR);操作系統(tǒng)課程設計全文共50頁,當前為第43頁。課程設計輔導Linux系統(tǒng)的相關知識進程并發(fā)
添加系統(tǒng)調(diào)用添加設備驅動程序/proc文件分析44操作系統(tǒng)課程設計全文共50頁,當前為第44頁。/proc文件分析proc文件系統(tǒng)進程文件系統(tǒng)和內(nèi)核文件系統(tǒng)組成的復合體將內(nèi)核數(shù)據(jù)對象化為文件形式進行存取的一種內(nèi)存文件系統(tǒng)監(jiān)控內(nèi)核的一種用戶接口,擁有一些特殊的純文本文件,從中可以獲取系統(tǒng)狀態(tài)信息系統(tǒng)信息:與進程無關,隨系統(tǒng)配置的不同而不同進程信息:系統(tǒng)中正在運行的每一個用戶級進程的信息45操作系統(tǒng)課程
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年自動化設備快速運輸合同3篇
- 二零二五版家電回收與翻新銷售合同范本3篇
- 二零二五版茶葉種植基地農(nóng)業(yè)科技示范推廣合同3篇
- 二零二五版礦山洞采礦施工環(huán)保責任合同3篇
- 二零二五年度建筑工程款抵頂工業(yè)地產(chǎn)使用權合同3篇
- 二零二五版LNG運輸及船舶維修合同3篇
- 二零二五版企業(yè)股份回購合同協(xié)議書6篇
- 二零二五年高鐵站廣告牌施工與商業(yè)合作合同范本3篇
- 二零二五年度深圳物業(yè)管理合同規(guī)定2篇
- 二零二五年度防雷安全風險評估與整改合同3篇
- 農(nóng)民工工資表格
- 【寒假預習】專題04 閱讀理解 20篇 集訓-2025年人教版(PEP)六年級英語下冊寒假提前學(含答案)
- 2024年突發(fā)事件新聞發(fā)布與輿論引導合同
- 地方政府信訪人員穩(wěn)控實施方案
- 小紅書推廣合同范例
- 商業(yè)咨詢報告范文模板
- 2024年智能監(jiān)獄安防監(jiān)控工程合同3篇
- 幼兒園籃球課培訓
- AQ 6111-2023個體防護裝備安全管理規(guī)范知識培訓
- 老干工作業(yè)務培訓
- 基底節(jié)腦出血護理查房
評論
0/150
提交評論