華科操作系統(tǒng)實驗_第1頁
華科操作系統(tǒng)實驗_第2頁
華科操作系統(tǒng)實驗_第3頁
華科操作系統(tǒng)實驗_第4頁
華科操作系統(tǒng)實驗_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

課 程 實 驗 報 告課程名稱: 操作系統(tǒng)課程設(shè)計 專業(yè)班級: 學(xué) 號: 姓 名: 指導(dǎo)教師: 報告日期: 計算機科學(xué)與技術(shù)學(xué)院目錄實驗1:進程并發(fā)實驗11.1 實驗概述11.2 實驗內(nèi)容11.3 實驗設(shè)計11.4 實驗過程21.5實驗結(jié)果61.6實驗小結(jié)7實驗2:添加系統(tǒng)功能調(diào)用82.1 實驗概述82.2 實驗內(nèi)容82.2.1 階段1 添加源代碼82.2.2 階段2 連接新的系統(tǒng)功能調(diào)用92.2.3 階段3 重建內(nèi)核102.2.4 階段4 修改grub文件132.3 實驗小結(jié)14實驗3:添加設(shè)備驅(qū)動程序153.1 實驗概述153.2 實驗內(nèi)容153.2.1 階段1 編寫設(shè)備驅(qū)動程序153.2.2 階段2 編譯設(shè)備驅(qū)動模塊163.2.3 階段3 加載設(shè)備驅(qū)動模塊173.2.4 階段4 生成設(shè)備文件183.2.4 階段5 編寫應(yīng)用程序測試183.3實驗小結(jié)19實驗總結(jié)2020實驗1: 進程并發(fā)實驗 1.1 實驗概述 通過本次進程并發(fā)實驗,讓同學(xué)更加熟悉和理解Linux編程環(huán)境。1.2 實驗內(nèi)容本次實驗的內(nèi)容主要分為兩個任務(wù):1.編寫一個C程序,用read、write等系統(tǒng)調(diào)用實現(xiàn)文件拷貝功能。命令形式:copy 2. 編寫一個C程序,使用圖形編程庫 (QT/GTK)分窗口顯示三個并發(fā)進程的運行(一個窗口實時顯示當(dāng)前系統(tǒng)時間,一個窗口循環(huán)顯示0到9,一個窗口做1到1000的累加求和,刷新周期均為1秒)。1.3 實驗設(shè)計任務(wù)1:實驗1的第一個階段需要實現(xiàn)一個簡單的C語言程序,首先需要有一個復(fù)制的源文件,同時需要創(chuàng)建一個存放復(fù)制內(nèi)容的復(fù)制文件,文件復(fù)制傳輸?shù)闹虚g站可以設(shè)置一個緩沖數(shù)組,此次試驗設(shè)計了一個大小為10個字節(jié)的數(shù)組。打開復(fù)制源文件,返回一個INT標(biāo)識,使用readbuf()函數(shù),每次讀取10個字節(jié)的內(nèi)容,將內(nèi)容存放到緩沖區(qū)數(shù)組,使用writebuf()函數(shù)將緩沖區(qū)的10個字節(jié)寫到復(fù)制文件中,重復(fù)上述過程直到將整個復(fù)制過程完成。任務(wù)2:實驗的第二個階段是實現(xiàn)進程的同步,實現(xiàn)的工具是QT。主要實現(xiàn)3個進程的同步,3個進程分別為:實時顯示系統(tǒng)時間、循環(huán)顯示0-9、顯示1-1000的累加和。以上程序的刷新時間設(shè)置為1秒鐘。使用的是c+編程語言。為了實現(xiàn)3個進程。需要為這3個進程分別創(chuàng)建3個不同的類,這3個不用的類具有不同的成員函數(shù),使用成員函數(shù)來實現(xiàn)進程的所代表的具體細(xì)節(jié)。為了實現(xiàn)進程的結(jié)果能實時更新,需要調(diào)用connect()函數(shù),該函數(shù)的功能是每當(dāng)其中的timer每次發(fā)生變化時,就回調(diào)用該類的成員函數(shù),也就是進程的具體實現(xiàn),從而實時顯示進程的細(xì)節(jié)內(nèi)容。而3個進程的實現(xiàn)是在Main中創(chuàng)建3個類,對應(yīng)3個進程,調(diào)用類的一些函數(shù)實現(xiàn)進程并發(fā)。1.4 實驗過程給出實驗過程的詳細(xì)描述,分步驟說明實驗的具體操作過程任務(wù)1。1.首先需要有復(fù)制源文件和復(fù)制目的文件,具體實現(xiàn)方式如圖1-1所示。圖 1-1 打開文件分別以只讀和只寫的方式將文件打開。2.創(chuàng)建緩沖區(qū),大小為10個字節(jié)的數(shù)組。如圖1-2所示。圖 1-2 創(chuàng)建緩存區(qū)3.通過循環(huán)讀寫的方式實現(xiàn)文件的復(fù)制,如圖1-3所示。圖 1-3 文件復(fù)制4.關(guān)閉文件。5.其中的writebuf和readbuf是自己編寫的一個讀和寫的函數(shù),調(diào)用的是read和write函數(shù)。如圖1-4所示。圖 1-4 讀寫函數(shù)任務(wù)2。1.首先根據(jù)3個不同的進程創(chuàng)建3個不同的類。如圖1-5,圖1-6,圖1-7所示。圖 1-5 進程1圖 1-6 進程2圖 1-7 進程32.分別為這3個類編寫其對應(yīng)的成員函數(shù),實現(xiàn)進行的具體功能。具體實現(xiàn)如圖1-8,圖1-9,圖1-10所示。圖 1-8 進程顯示時間圖 1-9 進程循環(huán)顯示0-9圖 1-10 進程顯示1-1000求和3.在一個入口函數(shù)中創(chuàng)建3個不同的子進程,在進程中分別創(chuàng)建對應(yīng)的類,使用類的方法來實現(xiàn)進程的功能。具體實現(xiàn)如圖1-11.圖 1.11 入口函數(shù)4.分別為這3個進程設(shè)計器對應(yīng)的顯示菜單,其中部分變量可以通過設(shè)置參數(shù)的方式進行調(diào)控。并將進程輸出結(jié)果與Forms中的UI綁定,在進程結(jié)果顯示在界面中。1.5實驗結(jié)果任務(wù)1.任務(wù)1的內(nèi)容比較簡單,主要使用C語言完成程序的編寫,其對應(yīng)的結(jié)果有兩種情況,復(fù)制成功或者復(fù)制失敗,從實驗1的第一階段的代碼可以看出,失敗階段主要是是因為復(fù)制源文件打開失敗造成的。下面主要演示完成正確賦值的情況。如圖1-12所示。圖 1-12 運行結(jié)果圖將infile與outfile進行對比如圖1-13,圖1-14所示。圖 1-13 復(fù)制原文件infile圖 1-14 任務(wù)1復(fù)制輸出文件進過對比可以看出,程序運行的結(jié)果正確。任務(wù)2.任務(wù)2需要并發(fā)執(zhí)行3個進程,3個進程分別顯示系統(tǒng)當(dāng)前的時間, 1-1000的求和以及循環(huán)顯示0-9,刷新時間為1秒(1000ms),程序的運行結(jié)果如下圖 1-15所示。圖 1-15 任務(wù)2進程運行結(jié)果圖1.6實驗小結(jié)本次實驗分為2個任務(wù),第一個任務(wù)完成文件的賦值拷貝。只要是運用write函數(shù)和read函數(shù)對文件進行讀寫操作。操作簡單沒有什么難度,通過寫readbuf函數(shù)和writebuf函數(shù)使得讀寫函數(shù)使用起來更加的方便。運行結(jié)果達到了預(yù)期要求。第2個任務(wù)需要實現(xiàn)進程的并行以及運行結(jié)果的刷新顯示,編寫的語言是采用c+語言,需要為3個進程創(chuàng)建3個不同的類,在同一個函數(shù)入口中對3個并發(fā)進行進行操作,并顯示其對應(yīng)的結(jié)果。其中遇到的問題主要集中在兩個方便。一是怎樣將輸出結(jié)果與顯示窗口進行綁定,綁定時需要注意什么以及如何調(diào)整。需要去網(wǎng)上查閱資料對對應(yīng)的參數(shù)進行調(diào)整,由于QT的環(huán)境搭建的很好,學(xué)起來還是很輕松的。將菜單對應(yīng)的標(biāo)簽與輸出結(jié)果綁定即可。第二個問題是怎樣實現(xiàn)1秒鐘刷新一次輸出結(jié)果呢?查閱資料發(fā)現(xiàn)可以使用connect(timer, SIGNAL(timeout(), this, SLOT(MainWindowtm();每當(dāng)timer發(fā)生變化時就會調(diào)用SLOT中對應(yīng)的函數(shù),該函數(shù)就是對應(yīng)的進程。每一秒調(diào)用一次從而實現(xiàn)刷新。通過上述方法成功實現(xiàn)了進程并行與輸出結(jié)果的刷新。實驗2: 添加系統(tǒng)功能調(diào)用 2.1 實驗概述 通過添加系統(tǒng)功能調(diào)用,掌握添加系統(tǒng)功能調(diào)用的方法。2.2 實驗內(nèi)容采用編譯內(nèi)核的方法,添加一個新的系統(tǒng)調(diào)用,實現(xiàn)文件拷貝功能編寫一個應(yīng)用程序,測試新加的系統(tǒng)調(diào)用。2.2.1 階段1 添加源代碼1.任務(wù)描述:添加的系統(tǒng)功能調(diào)用需要實現(xiàn)一個文件拷貝的系統(tǒng)功能。2.實驗設(shè)計:本次實驗需要添加的系統(tǒng)功能調(diào)用時文件的復(fù)制拷貝功能,由于實驗1的任務(wù)1已經(jīng)使用c語言實現(xiàn)了該功能則可以借用實驗1任務(wù)1的思想,只是需要將函數(shù)做一些修改,包括函數(shù)名格式,入口參數(shù),以及其中調(diào)用的其他函數(shù)。3.實驗過程:將調(diào)用函數(shù)名修改為以sys_開頭的函數(shù),命名為sys_mysyscall。文件的打開函數(shù)以及輸出結(jié)果函數(shù)也需要使用內(nèi)核函數(shù),避免內(nèi)存檢查時出現(xiàn)錯誤。源代碼如圖2-1所示。圖 2-1 編寫系統(tǒng)調(diào)用源代碼4.實驗結(jié)果:完成系統(tǒng)功能調(diào)用源代碼的設(shè)計。2.2.2 階段2 連接新的系統(tǒng)功能調(diào)用1.任務(wù)描述:該階段的任務(wù)主要是使得內(nèi)核的其余部分知道該系統(tǒng)功能調(diào)用的存在。在該階段需要編輯兩個文件,include/linux/syscalls.h以及arch/x86/syscalls/syscall_32.tbl。2.實驗設(shè)計:該階段需要修改include/linux/syscalls.h的代碼添加新的系統(tǒng)調(diào)用的函數(shù)定義。asmlinkage long sys_mysyscall(int number);接著需要修改arch/x86/syscalls/syscall_32.tbl(系統(tǒng)調(diào)用表)在系統(tǒng)調(diào)用表中為新增的系統(tǒng)調(diào)用分配調(diào)用號和系統(tǒng)調(diào)用名。3.實驗過程:在系統(tǒng)調(diào)用定義中添加新的系統(tǒng)條用定義。操作如圖2-2所示。圖 2-2 添加系統(tǒng)調(diào)用定義接著需要在系統(tǒng)調(diào)用表中為該系統(tǒng)調(diào)用分配一個系統(tǒng)調(diào)用名和一個系統(tǒng)調(diào)用號。系統(tǒng)調(diào)用號為359,系統(tǒng)調(diào)用名為mysyscall如圖2-3所示。圖2-3 分配系統(tǒng)調(diào)用號和調(diào)用名4.實驗結(jié)果:完成第二階段添加系統(tǒng)定義以及為系統(tǒng)調(diào)用分配系統(tǒng)調(diào)用名和系統(tǒng)調(diào)用號。2.2.3 階段3 重建內(nèi)核1.任務(wù)描述: 在第三階段主要完成系統(tǒng)內(nèi)核的重建。2.實驗設(shè)計:,其完成的步驟為:1.生成內(nèi)核配置文件,2.編譯內(nèi)核映像,3.生成并安裝模塊,4.安裝新的系統(tǒng)。其中如果報錯說沒有對應(yīng)的軟件包則需要下載軟件包。3.實驗過程:a.首先根據(jù)自己的內(nèi)核版本下載對應(yīng)的內(nèi)核源碼,生成內(nèi)核配置文件,接著編譯內(nèi)核映像,實現(xiàn)的操作為:make menuconfig。運行成功回出現(xiàn)一個彈出框,可以直接退出,如圖2-4所示。圖 2-4 生成內(nèi)核配置文件1退出后顯示如下結(jié)果如圖 2-5 所示。圖 2-5 生成內(nèi)核配置文件2b.當(dāng)完成內(nèi)核文件的配置下面需要完成內(nèi)核配置映像。操作為指令為make bzImage。如圖2-6所示。圖 2-6 編譯內(nèi)核映像由于在撰寫實驗報告時已經(jīng)完成了編譯,編譯結(jié)果如圖2-7所示。圖 2-7 編譯內(nèi)核映像結(jié)果c.接下來需要編譯內(nèi)核模塊。操作指令如圖2-8所示。圖 2-8 編譯內(nèi)核模塊編譯結(jié)果如圖2-9所示。圖 2-9 編譯內(nèi)核模塊結(jié)果d.生成并安裝模塊。操作指令為:make modules_install,如圖2-10所示。圖 2-10 生成并安裝內(nèi)核模塊d.安裝新的系統(tǒng)。操作指令如圖2-11所示。圖 2-12 安裝新的系統(tǒng)安裝結(jié)果如圖2-12所示。圖 2-13 安裝新的系統(tǒng)2.2.4 階段4 修改grub文件將/etc/default目錄下的grub文件注釋掉 GRUB_HIDDEN_TIMEOUT=0,然后運行update-grub命令。如圖2-14所示。圖 2-14 注釋掉GRUB_HIDDEN_TIMEOUT=02.2.5 重啟 選擇新的修改內(nèi)核 選擇新的修改內(nèi)核如圖 2-15所示。圖 2-15 選擇新的修改內(nèi)核2.2.6 編寫程序測試編寫的檢測程序通過系統(tǒng)調(diào)用的返回值判斷是否賦值成功,如圖2-16所示。圖 2-17 測試程序4.實驗結(jié)果 測試結(jié)果如圖2-18,圖2-19所示。圖 2-18 系統(tǒng)調(diào)用測試圖 2-19 系統(tǒng)調(diào)用測試結(jié)果2.3 實驗小結(jié)對本次實驗使用的理論、技術(shù)、方法和結(jié)果進行總結(jié)。描述一下通過實驗?zāi)阌心男┦斋@。本次實驗的工程量還是相當(dāng)大的,其中需要是實驗步驟很繁多,并且必須一步一步全部正確,不然后面的步驟無法完成。實驗課程的PPT教學(xué)做的還是很完善的,只要根據(jù)要求來,每步做正確,還是很容易的。實驗完成了系統(tǒng)功能調(diào)用的添加。從最開始的編寫系統(tǒng)調(diào)用源代碼的編寫到最后的系統(tǒng)功能調(diào)用的測試還是遇到了很多的問題。其中的內(nèi)核版本的下載一定要和自己的版本很好的兼容,不然可能或多或少出現(xiàn)一些不必要的麻煩。添加的系統(tǒng)功能調(diào)用的源代碼一定要使用內(nèi)核提供的函數(shù)進行編寫,因為用戶態(tài)的內(nèi)存訪問受到限制,可能會引起內(nèi)存檢測時出現(xiàn)錯誤。在編譯內(nèi)核模塊和安裝內(nèi)核模塊時需要很長的時間,需要確保在這段時間里電腦能正常的運行。不然要浪費掉很長的時間做一些重復(fù)的事情。在修改/etc/default/grub文件時可能不能直接修改,需要進行一些特殊的操作,類似獲得權(quán)限。本次實驗的收獲良多,了解并實踐了添加系統(tǒng)功能調(diào)用的整個過程,知道了系統(tǒng)功能調(diào)用的編寫添加的機制,學(xué)會了怎樣去添加一個新的系統(tǒng)功能調(diào)用。實驗3: 添加設(shè)備驅(qū)動程序 3.1 實驗概述 通過添加設(shè)備驅(qū)動程序掌握添加設(shè)備驅(qū)動程序的方法。3.2 實驗內(nèi)容采用模塊方法,添加一個新的字符設(shè)備驅(qū)動程序,實現(xiàn)打開/關(guān)閉、讀/寫等基本操作編寫一個應(yīng)用程序,測試添加的驅(qū)動程序3.2.1 階段1 編寫設(shè)備驅(qū)動程序1.任務(wù)描述:階段1的任務(wù)主要是編寫設(shè)備驅(qū)動程序,模塊的初始化、設(shè)備的功能、以及模塊卸載等。2.實驗設(shè)計:編寫設(shè)備驅(qū)動程序涉及的內(nèi)容主要有:1.完成函數(shù)關(guān)系綁定,2.模塊的初始化、需要實現(xiàn)哪些功能、模塊的卸載以及釋放內(nèi)存。3.實驗過程:a.完成函數(shù)入口綁定。此處實驗只選擇實現(xiàn)了部分功能。如圖3-1所示。圖 3-1 入口點綁定b.實現(xiàn)模塊的初始化以及模塊的卸載如圖3-2所示。圖 3-2 模塊初始化和卸載c.實現(xiàn)設(shè)備驅(qū)動程序的相關(guān)功能。如圖3-3所示。圖 3-4 實現(xiàn)驅(qū)動設(shè)備功能4.實驗結(jié)果:完成設(shè)備驅(qū)動程序的編寫。3.2.2 階段2 編譯設(shè)備驅(qū)動模塊1.任務(wù)描述:該階段主要完成設(shè)備驅(qū)動模塊的編譯。 2.實驗設(shè)計:通過修改通用的Makefile文件完成編譯操作。3.實驗過程:修改課程提供的Makefile文件,在其中添加生成的模塊名mydev.o。如圖3-5所示。圖 3-5 修改Makefile文件這個運行Makefile文件。操作指令:make.4.實驗結(jié)果:完成設(shè)備驅(qū)動模塊的編譯。如圖3-6所示。圖 3-6 設(shè)備驅(qū)動模塊的編譯3.2.3 階段3 加載設(shè)備驅(qū)動模塊1.任務(wù)描述:該階段主要完成設(shè)備驅(qū)動模塊的加載。 2.實驗設(shè)計:使用設(shè)備驅(qū)動模塊的加載指令,完成加載。3.實驗過程:設(shè)備驅(qū)動模塊的加載指令為:insmod mydev.ko。如圖3-7所示。圖 3-7 加載設(shè)備驅(qū)動模塊4.實驗結(jié)果:設(shè)備驅(qū)動模塊加載成功??梢酝ㄟ^在文件/proc/devices中能看到新增加的設(shè)備,包括設(shè)備名mydev和主設(shè)備號。如圖3-8,圖3-9所示。圖 3-8 模塊加載成功圖 3-9 模塊加載成功3.2.4 階段4 生成設(shè)備文件1.任務(wù)描述:該階段主要完成生成對應(yīng)的設(shè)備文件。2.實驗設(shè)計:使用生成設(shè)備文件指令使其生成對應(yīng)的設(shè)備文件名,設(shè)備文件名設(shè)置為test.3.實驗過程:使用設(shè)備文件指令為:insmod mydev.ko。如圖3-10所示。圖 3-10 生成設(shè)備文件4.實驗結(jié)果:如果生成設(shè)備文件成功,可以看見在dev目錄下有一個mydev2文件,如圖3-11所示。圖 3-11 參看設(shè)備文件3.2.4 階段5 編寫應(yīng)用程序測試1.任務(wù)描述:編寫應(yīng)用程序測試。2.實驗設(shè)計:編寫應(yīng)用程序測試,將其視為文件進行操作。3.實驗過程:編寫應(yīng)用程序,代碼如圖3-12所示圖 3-12 生成設(shè)備文件4.實驗結(jié)果:測試結(jié)果正確,如圖3-13所示。圖 3-13 測試結(jié)果3.3實驗小結(jié)本次實驗主要完成添加設(shè)備驅(qū)動程序,熟悉添加設(shè)備驅(qū)動程序的過程,主要過程有便攜設(shè)備驅(qū)動程序、編譯、加載、生成設(shè)備文件、測試等過程。在這期間也遇到很多問題,其中主要集中在編寫設(shè)備驅(qū)動程序

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論