版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、課程實驗報告操作系統(tǒng)課程設(shè)計課程名稱:專業(yè)班級:學(xué) 號:姓 名:指導(dǎo)教師:報告日期: 計算機科學(xué)與技術(shù)學(xué)院.目錄 TOC o 1-5 h z 實驗1:進程并發(fā)實驗1 HYPERLINK l bookmark31 o Current Document 1.1實驗概述1 HYPERLINK l bookmark34 o Current Document 1.2實驗內(nèi)容1 HYPERLINK l bookmark39 o Current Document 1.3實驗設(shè)計1 HYPERLINK l bookmark42 o Current Document 1.4實驗過程2 HYPERLINK l b
2、ookmark54 o Current Document 1.5實驗結(jié)果3 HYPERLINK l bookmark57 o Current Document 1.6實驗小結(jié)3實驗2:添加系統(tǒng)功能調(diào)用 4 HYPERLINK l bookmark60 o Current Document 實驗概述 4 HYPERLINK l bookmark82 o Current Document 實驗內(nèi)容 42.2.1階段1添加源代碼42.2.2階段2連接新的系統(tǒng)功能調(diào)用 42.2.3階段3重建內(nèi)核52.2.4階段4修改grub文件 62.3實驗小結(jié)6實驗3:添加設(shè)備驅(qū)動程序8 HYPERLINK l b
3、ookmark79 o Current Document 3.1實驗概述83.2實驗內(nèi)容81階段1編寫設(shè)備驅(qū)動程序83.2.2階段2編譯設(shè)備驅(qū)動模塊83.2.3階段3加載設(shè)備驅(qū)動模塊93.2.4階段4生成設(shè)備文件93.2.4階段5編寫應(yīng)用程序測試93.3實驗小結(jié) 1011 實驗總結(jié)實驗1:進程并發(fā)實驗1.1實驗概述通過本次進程并發(fā)實驗,讓同學(xué)更加熟悉和理解Linux編程環(huán)境。1.2實驗內(nèi)容本次實驗的內(nèi)容主要分為兩個任務(wù):編寫一個C程序,用read、write等系統(tǒng)調(diào)用實現(xiàn)文件拷貝功能。命令形式: copy 源文件名目標文件名編寫一個C程序,使用圖形編程庫(QT/GTK)分窗口顯示三個并發(fā)進程的
4、運行 (一個窗口實時顯示當(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ù)闹?間站可以設(shè)置一個緩沖數(shù)組,此次試驗設(shè)計了一個大小為10個字節(jié)的數(shù)組。打 開復(fù)制源文件,返回一個INT標識,使用readbuf()函數(shù),每次讀取10個字 節(jié)的內(nèi)容,將內(nèi)容存放到緩沖區(qū)數(shù)組,使用writebuf()函數(shù)將緩沖區(qū)的10個 字節(jié)寫到復(fù)制文件中,重復(fù)上述過程直到將整個復(fù)制過程完成。任務(wù)2:實驗的第二個階段是實現(xiàn)進程
5、的同步,實現(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)進程的所代表的具體細節(jié)。為了實現(xiàn)進程的 結(jié)果能實時更新,需要調(diào)用connect()函數(shù),該函數(shù)的功能是每當(dāng)其中的timer 每次發(fā)生變化時,就回調(diào)用該類的成員函數(shù),也就是進程的具體實現(xiàn),從而實時 顯示進程的細節(jié)內(nèi)容。而3個進程的實現(xiàn)是在Main中創(chuàng)建3個類,對應(yīng)3個進程, 調(diào)用類的一些函數(shù)實現(xiàn)進程并發(fā)。
6、.1.4實驗過程給出實驗過程的詳細描述,分步驟說明實驗的具體操作過程 任務(wù)1。首先需要有復(fù)制源文件和復(fù)制目的文件,具體實現(xiàn)方式如圖1-1所示。圖1-1打開文件分別以只讀和只寫的方式將文件打開。創(chuàng)建緩沖區(qū),大小為10個字節(jié)的數(shù)組。如圖1 -2所示。圖1-2創(chuàng)建緩存區(qū)通過循環(huán)讀寫的方式實現(xiàn)文件的復(fù)制,如圖1 -3所示。圖1-3文件復(fù)制關(guān)閉文件。其中的writebuf和readbuf是自己編寫的一個讀和寫的函數(shù),調(diào)用的是read 和write函數(shù)。如圖1 -4所示。圖1-4讀寫函數(shù)任務(wù)2。首先根據(jù)3個不同的進程創(chuàng)建3個不同的類。如圖1-5,圖1-6,圖1-7所示。 圖1-5進程1圖1-6進程2 圖1
7、-7進程3分別為這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求和在一個入口函數(shù)中創(chuàng)建3個不同的子進程,在進程中分別創(chuàng)建對應(yīng)的類,使用 類的方法來實現(xiàn)進程的功能。具體實現(xiàn)如圖1-11.圖1.11入口函數(shù)分別為這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ù)制成功
8、或者復(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ù)完成文件的賦值
9、拷貝。只要是運用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)的標簽與輸出結(jié)果綁定即可
10、。第二個問題是怎樣實現(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)用。1階段1添加源代碼任務(wù)描述:添加的系統(tǒng)功能調(diào)用需要
11、實現(xiàn)一個文件拷貝的系統(tǒng)功能。實驗設(shè)計:本次實驗需要添加的系統(tǒng)功能調(diào)用時文件的復(fù)制拷貝功能,由于實 驗1的任務(wù)1已經(jīng)使用c語言實現(xiàn)了該功能則可以借用實驗1任務(wù)1的思想,只 是需要將函數(shù)做一些修改,包括函數(shù)名格式,入口參數(shù),以及其中調(diào)用的其他函 數(shù)。實驗過程:將調(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)用源代碼實驗結(jié)果:完成系統(tǒng)功能調(diào)用源代碼的設(shè)計。2.2.2階段2連接新的系統(tǒng)功能調(diào)用任務(wù)描述:該階段的任務(wù)主要是使得內(nèi)核的其余部分知道該系統(tǒng)功能調(diào)用的存
12、 在。在該階段需要編輯兩個文件,include/linux/syscalls.h以及 arch/x86/syscalls/syscall_32.tbl。實驗設(shè)計:該階段需要修改include/linux/syscalls.h的代碼添加新的系統(tǒng) 接著需要修改 number);sys_mysyscall(int long asmlinkage 調(diào)用的函數(shù)定義。. arch/x86/syscalls/syscall_32.tbl (系統(tǒng)調(diào)用表)在系統(tǒng)調(diào)用表中為新增的系 統(tǒng)調(diào)用分配調(diào)用號和系統(tǒng)調(diào)用名。實驗過程:在系統(tǒng)調(diào)用定義中添加新的系統(tǒng)條用定義。操作如圖2-2所示。圖2-2添加系統(tǒng)調(diào)用定義接著需要在
13、系統(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)用名實驗結(jié)果:完成第二階段添加系統(tǒng)定義以及為系統(tǒng)調(diào)用分配系統(tǒng)調(diào)用名和系統(tǒng) 調(diào)用號。2.2.3階段3重建內(nèi)核任務(wù)描述:在第三階段主要完成系統(tǒng)內(nèi)核的重建。實驗設(shè)計:,其完成的步驟為:1.生成內(nèi)核配置文件,2.編譯內(nèi)核映像,3.生 成并安裝模塊,4.安裝新的系統(tǒng)。其中如果報錯說沒有對應(yīng)的軟件包則需要下載 軟件包。實驗過程:a.首先根據(jù)自己的內(nèi)核版本下載對應(yīng)的內(nèi)核源碼,生成內(nèi)核配置文 件,接著編譯內(nèi)核映像,實現(xiàn)的操作為:make menuconfig
14、。運行成功回出現(xiàn)一 個彈出框,可以直接退出,如圖2-4所示。圖2-4生成內(nèi)核配置文件1退出后顯示如下結(jié)果如圖2-5所示。圖2-5生成內(nèi)核配置文件2當(dāng)完成內(nèi)核文件的配置下面需要完成內(nèi)核配置映像。操作為指令為make bzImage。如圖2-6所示。圖2-6編譯內(nèi)核映像由于在撰寫實驗報告時已經(jīng)完成了編譯,編譯結(jié)果如圖2-7所示。圖2-7編譯內(nèi)核映像結(jié)果接下來需要編譯內(nèi)核模塊。操作指令如圖2-8所示。圖2-8編譯內(nèi)核模塊所示。2-9編譯結(jié)果如圖圖2-9編譯內(nèi)核模塊結(jié)果生成并安裝模塊。操作指令為:make modules_install,如圖2-10所示。圖2-10生成并安裝內(nèi)核模塊d.安裝新的系統(tǒng)。
15、操作指令如圖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測試程序?qū)嶒灲Y(jié)果測試結(jié)果如圖2-18,圖2-19所示。圖
16、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ù)進 行編
17、寫,因為用戶態(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)閉、讀/寫
18、等基本 操作編寫一個應(yīng)用程序,測試添加的驅(qū)動程序1階段1編寫設(shè)備驅(qū)動程序任務(wù)描述:階段1的任務(wù)主要是編寫設(shè)備驅(qū)動程序,模塊的初始化、設(shè)備的功 能、以及模塊卸載等。實驗設(shè)計:編寫設(shè)備驅(qū)動程序涉及的內(nèi)容主要有:1.完成函數(shù)關(guān)系綁定,2.模塊的初始化、需要實現(xiàn)哪些功能、模塊的卸載以及釋放內(nèi)存。實驗過程:完成函數(shù)入口綁定。此處實驗只選擇實現(xiàn)了部分功能。如圖3-1所示。圖3-1入口點綁定實現(xiàn)模塊的初始化以及模塊的卸載如圖3-2所示。圖3-2模塊初始化和卸載實現(xiàn)設(shè)備驅(qū)動程序的相關(guān)功能。如圖3-3所示。圖3-4實現(xiàn)驅(qū)動設(shè)備功能實驗結(jié)果:完成設(shè)備驅(qū)動程序的編寫。3.2.2階段2編譯設(shè)備驅(qū)動模塊任務(wù)描述:該階段
19、主要完成設(shè)備驅(qū)動模塊的編譯。文件完成編譯操作。Makefile實驗設(shè)計:通過修改通用的2.實驗過程:修改課程提供的Makefile文件,在其中添加生成的模塊名mydev.o。如圖3-5所示。圖3-5修改Makefile文件這個運行Makefile文件。操作指令:make.實驗結(jié)果:完成設(shè)備驅(qū)動模塊的編譯。如圖3-6所示。圖3-6設(shè)備驅(qū)動模塊的編譯3.2.3階段3加載設(shè)備驅(qū)動模塊任務(wù)描述:該階段主要完成設(shè)備驅(qū)動模塊的加載。實驗設(shè)計:使用設(shè)備驅(qū)動模塊的加載指令,完成加載。實驗過程:設(shè)備驅(qū)動模塊的加載指令為:insmod mydev.ko。如圖3-7所示。圖3-7加載設(shè)備驅(qū)動模塊實驗結(jié)果:設(shè)備驅(qū)動模
20、塊加載成功??梢酝ㄟ^在文件/proc/devices中能看到 新增加的設(shè)備,包括設(shè)備名mydev和主設(shè)備號。如圖3-8,圖3-9所示。圖3-8模塊加載成功圖3-9模塊加載成功3.2.4階段4生成設(shè)備文件任務(wù)描述:該階段主要完成生成對應(yīng)的設(shè)備文件。實驗設(shè)計:使用生成設(shè)備文件指令使其生成對應(yīng)的設(shè)備文件名,設(shè)備文件名設(shè) 置為test.實驗過程:使用設(shè)備文件指令為:insmod mydev.ko。如圖3-10所示。圖3-10生成設(shè)備文件實驗結(jié)果:如果生成設(shè)備文件成功,可以看見在dev目錄下有一個mydev2文 件,如圖3-11所示。圖3-11參看設(shè)備文件3.2.4階段5編寫應(yīng)用程序測試1.任務(wù)描述:編寫應(yīng)用程序測試。實驗設(shè)計:編寫應(yīng)用程序測試,將其視為文件進行操作。2.實驗過程:編寫應(yīng)用程序,代碼如圖3-12所示圖 3-12 生成設(shè)備文件實驗結(jié)果:測試結(jié)果正確,如圖3-13所示。圖 3-13 測試結(jié)果3.3實驗小結(jié)本次實驗主要完成添加設(shè)備驅(qū)動程序,熟悉添加設(shè)備驅(qū)動程序的過程,主要過程 有便攜設(shè)備驅(qū)動程序、編譯、加載、生成設(shè)備文件、測試等過程。在這期間也遇 到很多問題,其中主要集中在編寫設(shè)
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度寵物用品銷售及養(yǎng)護服務(wù)外包協(xié)議4篇
- 2025年度廠房租賃合同配套基礎(chǔ)設(shè)施完善協(xié)議4篇
- 旅游部門半年回顧
- 專用借款協(xié)議:2024年版詳盡協(xié)議版A版
- 2025年度智能家居產(chǎn)品定制生產(chǎn)合同范本4篇
- 二零二四三方國際貿(mào)易融資借款協(xié)議2篇
- 2025年度拆除項目環(huán)保驗收合同模板4篇
- 二手房交易代簽合同范本2024年版版
- 個性化服務(wù)型酒店房間租賃協(xié)議版A版
- 二零二五版船艇交易環(huán)保與安全協(xié)議3篇
- 施工現(xiàn)場水電費協(xié)議
- SH/T 3046-2024 石油化工立式圓筒形鋼制焊接儲罐設(shè)計規(guī)范(正式版)
- 2024年??谑羞x調(diào)生考試(行政職業(yè)能力測驗)綜合能力測試題及答案1套
- 六年級數(shù)學(xué)質(zhì)量分析及改進措施
- 一年級下冊數(shù)學(xué)口算題卡打印
- 真人cs基于信號發(fā)射的激光武器設(shè)計
- 【閱讀提升】部編版語文五年級下冊第三單元閱讀要素解析 類文閱讀課外閱讀過關(guān)(含答案)
- 四年級上冊遞等式計算練習(xí)200題及答案
- 法院后勤部門述職報告
- 2024年國信證券招聘筆試參考題庫附帶答案詳解
- 道醫(yī)館可行性報告
評論
0/150
提交評論