![操作系統(tǒng)實(shí)驗(yàn)報(bào)告4_第1頁](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頁](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頁](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頁](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頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/7/21370884-6cdf-496e-8f8f-5a0b02b7a9db/21370884-6cdf-496e-8f8f-5a0b02b7a9db5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、操作系統(tǒng) 實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)序號(hào):4實(shí)驗(yàn)項(xiàng)目名稱:進(jìn)程控制學(xué)號(hào)1207122219姓名鄺沃佳專業(yè)、班軟金二班實(shí)驗(yàn)地點(diǎn)1-418指導(dǎo)教師李遠(yuǎn)敏實(shí)驗(yàn)時(shí)間2014/10/21一、 實(shí)驗(yàn)?zāi)康募耙螅?) 通過對WindowsXP進(jìn)行編程,來熟悉和了解系統(tǒng)。(2) 通過分析程序,來了解進(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專業(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)程并且裝入畫圖程序(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ù):寫出程序的運(yùn)行結(jié)果。 4正在運(yùn)行的進(jìn)程 (2)、編程二 下面給出了一個(gè)使用進(jìn)程和操作系統(tǒng)版本信息應(yīng)用程序(文件名為4-5.cpp)。它利用進(jìn)程信息查詢的API函數(shù)GetProcessVersion()與GetVersionEx()的共同作用。確定運(yùn)行進(jìn)程的操作系統(tǒng)版本號(hào)。閱讀該程序并完成實(shí)驗(yàn)任務(wù)。 #include #include/利用進(jìn)程和操作系統(tǒng)的版本信息的簡單示例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 ”Process 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)的版本信息的簡單示例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+窗口的工具欄中單擊“打開”按鈕,在“打開“對話框中找到并打開4-2.cpp源程序。單擊Build菜單中的Compile 4-2.cpp命令,再單擊“是”按鈕確認(rèn)。系統(tǒng)對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ù):寫出程序運(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)程的簡單方法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)用程序名稱(本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() /打開“自殺”互斥體 HANDLE hMutexSuicide=:OpenMutex( SYNCHRONIZE, /打開用于
16、同步 FALSE, /不需要向下傳遞 g szMutexName); /名稱 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)程的簡單方法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)用程序名稱(本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() /打開“自殺”互斥體 HANDLE hMutexSuicide=:OpenMutex( SYNCHRONIZE, /打開用于同
21、步 FALSE, /不需要向下傳遞 g_szMutexName); /名稱 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說明了一個(gè)進(jìn)程從“生”到“死”的整個(gè)一生,第一次執(zhí)行時(shí),它創(chuàng)建一個(gè)子進(jìn)程,其行為如同“父親”。在創(chuàng)建子進(jìn)程之前,先創(chuàng)建一個(gè)互斥的內(nèi)核對象,其行為對于子進(jìn)程來說,如同一個(gè)“自殺彈”。當(dāng)創(chuàng)建子進(jìn)程時(shí),就打開了互斥體并在其他線程中進(jìn)行別的處理工作,同時(shí)等待著父進(jìn)程使用ReleaseMutex()API發(fā)出“死亡”信號(hào)。然后用Slee
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度私人租地養(yǎng)殖項(xiàng)目投資合同
- 2025年度酒店客房裝飾設(shè)計(jì)租賃合同
- 二零二五年度數(shù)據(jù)中心租賃合同租金變動(dòng)與網(wǎng)絡(luò)安全保障補(bǔ)充協(xié)議
- 二零二五年度校園周邊餐館承包運(yùn)營合同
- 二零二五年度企業(yè)稅務(wù)籌劃與優(yōu)化合同
- 2025年度魚塘養(yǎng)殖權(quán)及品牌使用權(quán)轉(zhuǎn)讓合同
- 2025年度高新技術(shù)企業(yè)員工社保解除勞動(dòng)合同范本證明
- 2025年度文化旅游融合發(fā)展連帶擔(dān)保合同
- 2025年度解除方協(xié)議申請書與市場退出策略合同
- 二零二五年度電動(dòng)自行車充電樁運(yùn)營維護(hù)合同簡易版
- 風(fēng)電場事故案例分析
- 八年級(jí)上冊-2024年中考?xì)v史總復(fù)習(xí)核心考點(diǎn)與重難點(diǎn)(部編版)
- 醫(yī)院科室人才建設(shè)規(guī)劃方案
- 護(hù)理飲食指導(dǎo)整改措施及方案
- 全國大學(xué)生英語競賽詞匯大綱
- 情緒障礙跨診斷治療的統(tǒng)一方案
- 胸外科手術(shù)圍手術(shù)期處理
- 《企業(yè)管理課件:團(tuán)隊(duì)管理知識(shí)點(diǎn)詳解PPT》
- 配網(wǎng)設(shè)備缺陷分類及管理重點(diǎn)標(biāo)準(zhǔn)
- UI與交互設(shè)計(jì)人機(jī)交互設(shè)計(jì)(第二版)PPT完整全套教學(xué)課件
- 《插畫設(shè)計(jì)》課程標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論