![操作系統(tǒng)實(shí)驗(yàn)報(bào)告4_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/7/21370884-6cdf-496e-8f8f-5a0b02b7a9db/21370884-6cdf-496e-8f8f-5a0b02b7a9db1.gif)
![操作系統(tǒng)實(shí)驗(yàn)報(bào)告4_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/7/21370884-6cdf-496e-8f8f-5a0b02b7a9db/21370884-6cdf-496e-8f8f-5a0b02b7a9db2.gif)
![操作系統(tǒng)實(shí)驗(yàn)報(bào)告4_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/7/21370884-6cdf-496e-8f8f-5a0b02b7a9db/21370884-6cdf-496e-8f8f-5a0b02b7a9db3.gif)
![操作系統(tǒng)實(shí)驗(yàn)報(bào)告4_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/7/21370884-6cdf-496e-8f8f-5a0b02b7a9db/21370884-6cdf-496e-8f8f-5a0b02b7a9db4.gif)
![操作系統(tǒng)實(shí)驗(yàn)報(bào)告4_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/7/21370884-6cdf-496e-8f8f-5a0b02b7a9db/21370884-6cdf-496e-8f8f-5a0b02b7a9db5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、操作系統(tǒng) 實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)序號(hào):4實(shí)驗(yàn)項(xiàng)目名稱(chēng):進(jìn)程控制學(xué)號(hào)1207122219姓名鄺沃佳專(zhuān)業(yè)、班軟金二班實(shí)驗(yàn)地點(diǎn)1-418指導(dǎo)教師李遠(yuǎn)敏實(shí)驗(yàn)時(shí)間2014/10/21一、 實(shí)驗(yàn)?zāi)康募耙螅?) 通過(guò)對(duì)WindowsXP進(jìn)行編程,來(lái)熟悉和了解系統(tǒng)。(2) 通過(guò)分析程序,來(lái)了解進(jìn)程的創(chuàng)建、終止。二、實(shí)驗(yàn)設(shè)備(環(huán)境)及要求(1) 一臺(tái)WindowsXP操作系統(tǒng)的計(jì)算機(jī)。(2) 計(jì)算機(jī)裝有Microsoft Visual Studio C+6.0專(zhuān)業(yè)版或企業(yè)版。(3) CreateProcess()調(diào)用:創(chuàng)建一個(gè)進(jìn)程。(4) ExitProcess()調(diào)用:終止一個(gè)進(jìn)程。三、實(shí)驗(yàn)內(nèi)容與步驟(1)編程一 利
2、用CreateProcess()函數(shù)創(chuàng)建一個(gè)子進(jìn)程并且裝入畫(huà)圖程序(mspaint.exe)。閱讀該程序,完成實(shí)驗(yàn)任務(wù)。源程序如下: # include # include int main(VOID) STARTUPINFO si; PROCESS INFORMATION pi; ZeroMemory(&si,sizeof(si); Si.cb=sizeof(si); ZeroMemory(&pi,sizeof(pi); if(!CreateProcess(NULL, “c: WINDOWSsystem32 mspaint.exe”, NULL, NULL, FALSE, 0, NULL,
3、NULL, &si,&pi) fprintf(stderr,”Creat Process Failed”);return 1;WaitForSingleObject(pi.hProcess,INFINITE);Printf(“child Complete”);CloseHandle(pi.hProcess);CloseHandle(pi hThread); 修改后:#include #include int main(VOID) STARTUPINFO si;PROCESS_INFORMATION pi;ZeroMemory(&si,sizeof(si);si.cb=sizeof(si);Ze
4、roMemory(&pi,sizeof(pi);if(!CreateProcess(NULL,c:WINDOWSsystem32mspaint.exe, NULL,NULL,FALSE,0,NULL, NULL,&si,&pi)fprintf(stderr,Creat Process Failed);return -1; WaitForSingleObject(pi.hProcess,INFINITE);printf(child Complete);CloseHandle(pi.hProcess);CloseHandle(pi.hThread); 在“命令提示符”窗口運(yùn)行CL命令產(chǎn)生可執(zhí)行程序
5、4-1.exe: C: CL 4-1.cpp 實(shí)驗(yàn)任務(wù):寫(xiě)出程序的運(yùn)行結(jié)果。 4正在運(yùn)行的進(jìn)程 (2)、編程二 下面給出了一個(gè)使用進(jìn)程和操作系統(tǒng)版本信息應(yīng)用程序(文件名為4-5.cpp)。它利用進(jìn)程信息查詢(xún)的API函數(shù)GetProcessVersion()與GetVersionEx()的共同作用。確定運(yùn)行進(jìn)程的操作系統(tǒng)版本號(hào)。閱讀該程序并完成實(shí)驗(yàn)任務(wù)。 #include #include/利用進(jìn)程和操作系統(tǒng)的版本信息的簡(jiǎn)單示例Void main() /提取這個(gè)進(jìn)程的ID號(hào) DWORD dwIdThis=:GetCurrentProcessId(); /獲得這一進(jìn)程和報(bào)告所需的版本,也可以發(fā)送0
6、以便指明這一進(jìn)程DWORD dwVerReq=:GetProcessVersion(dwIdThis);WORD wMajorReq=:(WORD)dwVerReq16);WORD wMinorReq=:(WORD)dwVerReq & oxffff);std:cout ”P(pán)rocess ID:” dwIdThis ”,requires OS:” wMajorReq wMinorReq std:endl;/設(shè)置版本信息的數(shù)據(jù)結(jié)構(gòu),以便保存操作系統(tǒng)的版本信息OSVERSIONINFOEX osvix;:ZeroMemory(&osvix,sizeof(osvix);Osvix.dwOSVersi
7、onInfoSize=sizeof(osvix);/提取版本信息和報(bào)告:GetVersionEx(reinterpret cast(&osvix);Std:cout ”Running on OS:” osvix.dwMajorVersion ”.” osvix.dwMinorVersion =5 /改變優(yōu)先級(jí):SerPriorityClass(:GetCurrentProcess() /利用這一進(jìn)程 HIGH PRIORITY CLASS); /改變?yōu)閔igh/報(bào)告給用戶Std:cout ”Task Manager should now now indicate this” “process
8、is high priority.” std:endl;修改后:#include#include/利用進(jìn)程和操作系統(tǒng)的版本信息的簡(jiǎn)單示例void main()/提取這個(gè)進(jìn)程的ID號(hào)DWORD dwIdThis=:GetCurrentProcessId();/獲得這一進(jìn)程和報(bào)告所需的版本,也可以發(fā)送0以便指明這一進(jìn)程DWORD dwVerReq=:GetProcessVersion(dwIdThis);WORD wMajorReq=(WORD)dwVerReq16);WORD wMinorReq=(WORD)dwVerReq&0xffff);std:coutProcess ID:dwIdThis
9、 ,requires OS:wMajorReqwMinorReqstd:endl;/設(shè)置版本信息的數(shù)據(jù)結(jié)構(gòu),以便保存操作系統(tǒng)的版本信息OSVERSIONINFOEX osvix;:ZeroMemory(&osvix,sizeof(osvix);osvix.dwOSVersionInfoSize=sizeof(osvix);/提取版本信息和報(bào)告:GetVersionEx(reinterpret_cast(&osvix);std:coutRunning on OS:osvix.dwMajorVersion.osvix.dwMinorVersion=5)/改變優(yōu)先級(jí):SetPriorityClass
10、(:GetCurrentProcess(), /利用這一進(jìn)程HIGH_PRIORITY_CLASS); /改變?yōu)閔igh/報(bào)告給用戶std:coutTask Manager should now now indicate thisprocess is high priority.std:endl;實(shí)驗(yàn)參考:在Visual C+窗口的工具欄中單擊“打開(kāi)”按鈕,在“打開(kāi)“對(duì)話框中找到并打開(kāi)4-2.cpp源程序。單擊Build菜單中的Compile 4-2.cpp命令,再單擊“是”按鈕確認(rèn)。系統(tǒng)對(duì)4-2.cpp源程序進(jìn)行編譯。編譯完成后,單擊Build菜單中的Build 4-2.exe命令,建立4-
11、2.exe可執(zhí)行文件。在工具欄單擊Execute Program(執(zhí)行程序)按鈕,執(zhí)行4-2.exe程序。實(shí)驗(yàn)任務(wù):寫(xiě)出程序運(yùn)行后的以下幾項(xiàng)結(jié)果。當(dāng)前PID信息 1628 。當(dāng)前操作系統(tǒng)版本 Running on OS:5.1 。系統(tǒng)提示信息 Task Manager should now now indicate thisprocess is high priority 。5、終止進(jìn)程(3)編程三 下面給出了一個(gè)終止進(jìn)程的應(yīng)用程序(文件名為4-3.cpp),它先創(chuàng)建一個(gè)子進(jìn)程,然后命令它發(fā)出“自殺彈”互斥體去終止自身的運(yùn)行。閱讀該程序并完成實(shí)驗(yàn)任務(wù)。 #include #include #i
12、nclude satic LPCTSTR g szMutexName=”w2kdg.ProcTerm.mutex.Suicide”;/創(chuàng)建當(dāng)前進(jìn)程的克隆進(jìn)程的簡(jiǎn)單方法Void StartClone() /提取當(dāng)前可執(zhí)行文件的文件名 TCHAR szFilenameMAX PATH :GetModuleFileName(NULL,szFilename,MAX PATH); /格式化用于子進(jìn)程的命令行,指明它是一個(gè)EXE文件和子進(jìn)程 TCHAR szCmdLineMAX PATH; :sprintf(szCmdLine,”%s”child”,szFilename); /子進(jìn)程的啟動(dòng)信息結(jié)構(gòu) STA
13、RTUPINFO si; :ZeroMemory(reinterpret cast(&si),sizeof(si); si.cb=sizeof(si); /應(yīng)當(dāng)是此結(jié)構(gòu)的大小 /返回的用于子進(jìn)程的進(jìn)程信息 PROCESS INFORMATION pi; /用同樣的可執(zhí)行文件名和命令行創(chuàng)建進(jìn)程,并指明它是一個(gè)子進(jìn)程 BOOL bCreateOK=:CreateProcess( SzFilename, /產(chǎn)生的應(yīng)用程序名稱(chēng)(本EXE文件) SzCmdLine, /告訴人們這是一個(gè)子進(jìn)程的標(biāo)志 NULL, /用于進(jìn)程的默認(rèn)的安全性 NULL, /用于線程的默認(rèn)安全性 FALSE, /不繼承句柄 CR
14、EATE NEW CONSOLE, /創(chuàng)建新窗口,使輸出更直觀 NULL, /新環(huán)境 NULL, /當(dāng)前目錄 &si, /啟動(dòng)信息結(jié)構(gòu) &pi); /返回的進(jìn)程的信息 /釋放指向子進(jìn)程的引用 if(bCreateOK) :CloseHandle(pi.hProcess); :CloseHandle(pi.hThread); Void Parent() /創(chuàng)建“自殺”互斥程序體 HANDLE hMutexSuicide=:CreatgeMutex( NULL, /默認(rèn)的安全性 TRUE, /最初擁有的 g szMutexName); /為其命名 if(hMutexSuicide !=NULL)
15、/創(chuàng)建子進(jìn)程 std:cout ”Creating the child process.” std : endl; :StartClone(); /暫停 :sleep(5000); /指令子進(jìn)程“殺”掉自身 std:cout ”Telling the child process to quit.” std:endl; :ReleaseMutex(hMutexSuicide); /消除句柄 :CloseHandle(hMutexSuicide); Void Child() /打開(kāi)“自殺”互斥體 HANDLE hMutexSuicide=:OpenMutex( SYNCHRONIZE, /打開(kāi)用于
16、同步 FALSE, /不需要向下傳遞 g szMutexName); /名稱(chēng) if ( hMutexSuicide !=NULL) /報(bào)告正在等待指令 Std:cout ”Child waiting for suicide instructions.” std:endl; :WaitForSingleObject(hMutexSuicide,INFINITE); /報(bào)告準(zhǔn)備好終止,消除句柄 Std:cout ”Child quiting.” 1 & & :strcmp(argv1,”child”)=0) Child(); else Parent(); Return 0; 修改后:#includ
17、e #include #include static LPCTSTR g_szMutexName=w2kdg.ProcTerm.mutex.Suicide;/創(chuàng)建當(dāng)前進(jìn)程的克隆進(jìn)程的簡(jiǎn)單方法void StartClone() /提取當(dāng)前可執(zhí)行文件的文件名 TCHAR szFilenameMAX_PATH; :GetModuleFileName(NULL,szFilename,MAX_PATH); /格式化用于子進(jìn)程的命令行,指明它是一個(gè)EXE文件和子進(jìn)程 TCHAR szCmdLineMAX_PATH; :sprintf(szCmdLine,%schild,szFilename); /子進(jìn)程的
18、啟動(dòng)信息結(jié)構(gòu) STARTUPINFO si; :ZeroMemory(reinterpret_cast(&si),sizeof(si); si.cb=sizeof(si); /應(yīng)當(dāng)是此結(jié)構(gòu)的大小 /返回的用于子進(jìn)程的進(jìn)程信息 PROCESS_INFORMATION pi; /用同樣的可執(zhí)行文件名和命令行創(chuàng)建進(jìn)程,并指明它是一個(gè)子進(jìn)程 BOOL bCreateOK=:CreateProcess( szFilename, /產(chǎn)生的應(yīng)用程序名稱(chēng)(本EXE文件) szCmdLine, /告訴人們這是一個(gè)子進(jìn)程的標(biāo)志 NULL, /用于進(jìn)程的默認(rèn)的安全性 NULL, /用于線程的默認(rèn)安全性 FALSE,
19、 /不繼承句柄 CREATE_NEW_CONSOLE, /創(chuàng)建新窗口,使輸出更直觀 NULL, /新環(huán)境 NULL, /當(dāng)前目錄 &si, /啟動(dòng)信息結(jié)構(gòu) &pi); /返回的進(jìn)程的信息 /釋放指向子進(jìn)程的引用 if(bCreateOK) :CloseHandle(pi.hProcess); :CloseHandle(pi.hThread); void Parent() /創(chuàng)建“自殺”互斥程序體 HANDLE hMutexSuicide=:CreateMutex( NULL, /默認(rèn)的安全性 TRUE, /最初擁有的 g_szMutexName); /為其命名 if(hMutexSuicide
20、 !=NULL) /創(chuàng)建子進(jìn)程 std:coutCreating the child process.std:endl; :StartClone(); /暫停 :Sleep(5000); /指令子進(jìn)程“殺”掉自身 std:coutTelling the child process to quit.std:endl; :ReleaseMutex(hMutexSuicide); /消除句柄 :CloseHandle(hMutexSuicide); void Child() /打開(kāi)“自殺”互斥體 HANDLE hMutexSuicide=:OpenMutex( SYNCHRONIZE, /打開(kāi)用于同
21、步 FALSE, /不需要向下傳遞 g_szMutexName); /名稱(chēng) if ( hMutexSuicide !=NULL) /報(bào)告正在等待指令 std:coutChild waiting for suicide instructions.std:endl; :WaitForSingleObject(hMutexSuicide,INFINITE); /報(bào)告準(zhǔn)備好終止,消除句柄 std:coutChild quiting.1&:strcmp(argv1,child)=0) Child(); else Parent(); return 0; 分析:程序4-3.cpp說(shuō)明了一個(gè)進(jìn)程從“生”到“死”的整個(gè)一生,第一次執(zhí)行時(shí),它創(chuàng)建一個(gè)子進(jìn)程,其行為如同“父親”。在創(chuàng)建子進(jìn)程之前,先創(chuàng)建一個(gè)互斥的內(nèi)核對(duì)象,其行為對(duì)于子進(jìn)程來(lái)說(shuō),如同一個(gè)“自殺彈”。當(dāng)創(chuàng)建子進(jìn)程時(shí),就打開(kāi)了互斥體并在其他線程中進(jìn)行別的處理工作,同時(shí)等待著父進(jìn)程使用ReleaseMutex()API發(fā)出“死亡”信號(hào)。然后用Slee
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 哈爾濱城市職業(yè)學(xué)院《數(shù)字化博物館》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣州應(yīng)用科技學(xué)院《信號(hào)與線性系統(tǒng)分析》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣東輕工職業(yè)技術(shù)學(xué)院《電子商務(wù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 佛山職業(yè)技術(shù)學(xué)院《數(shù)字化技術(shù)設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 長(zhǎng)春工業(yè)大學(xué)《組織與管理研究方法》2023-2024學(xué)年第二學(xué)期期末試卷
- 西安健康工程職業(yè)學(xué)院《技術(shù)經(jīng)濟(jì)分析與生產(chǎn)管理》2023-2024學(xué)年第二學(xué)期期末試卷
- 濰坊學(xué)院《放射化學(xué)基礎(chǔ)》2023-2024學(xué)年第二學(xué)期期末試卷
- 陜西服裝工程學(xué)院《平面構(gòu)成》2023-2024學(xué)年第二學(xué)期期末試卷
- 內(nèi)蒙古豐州職業(yè)學(xué)院《沂蒙文化與沂蒙精神》2023-2024學(xué)年第二學(xué)期期末試卷
- 魯教版歷史六下《繁榮與開(kāi)放的社會(huì)》聽(tīng)課評(píng)課記錄
- 湖南省長(zhǎng)沙市開(kāi)福區(qū)青竹湖湘一外國(guó)語(yǔ)學(xué)校2023-2024學(xué)年九年級(jí)下學(xué)期一模歷史試題
- 帶狀皰疹與帶狀皰疹后遺神經(jīng)痛(HZ與PHN)
- 漢密爾頓抑郁和焦慮量表
- 風(fēng)電場(chǎng)事故案例分析
- 前列腺癌的診斷與治療
- 人教版八年級(jí)數(shù)學(xué)初中數(shù)學(xué)《平行四邊形》單元教材教學(xué)分析
- EPC項(xiàng)目設(shè)計(jì)及施工的配合
- 年產(chǎn)5萬(wàn)噸1,4-丁二醇的工藝流程設(shè)計(jì)
- 八年級(jí)上冊(cè)-2024年中考?xì)v史總復(fù)習(xí)核心考點(diǎn)與重難點(diǎn)(部編版)
- 醫(yī)院科室人才建設(shè)規(guī)劃方案
- 儲(chǔ)油罐安全操作規(guī)程培訓(xùn)
評(píng)論
0/150
提交評(píng)論