




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
湖南科技學(xué)院計算機與通信工程系
《操作系統(tǒng)》實驗報告實驗項目實驗二進程管理課程名稱操作系統(tǒng)成績實驗時間2014年12月15日星期三第十六周實驗地點E座305姓名學(xué)號班級計科1302班一、實驗要求1、設(shè)計實驗步驟;2、將上機過程中出現(xiàn)的問題及解決方法寫在實驗報告上;3、掌握WINDOWS進程管理的知識。4、認真完成實驗報告二、實驗?zāi)康?、通過創(chuàng)建進程、觀察正在運行的進程和終止進程的程序設(shè)計和調(diào)試操作,進一步熟悉操作系統(tǒng)的進程概念,理解Windows進程的“一生”。2、通過閱讀和分析實驗程序,學(xué)習(xí)創(chuàng)建進程、觀察進程、終止進程以及父子進程同步的基本程序設(shè)計方法。三、實驗環(huán)境VC++6.0四、實驗內(nèi)容及步驟:(1).創(chuàng)建進程本實驗顯示了創(chuàng)建子進程的基本框架。該程序只是再一次地啟動自身,顯示它的系統(tǒng)進程ID和它在進程列表中的位置。步驟1:創(chuàng)建一個“Win32ConsolApplication”工程,然后拷貝清單2-1中的程序,編譯成可執(zhí)行文件。步驟2:在“命令提示符”窗口運行步驟1中生成的可執(zhí)行文件。運行結(jié)果:范例:E:\課程\os課\os實驗、程序\os11\debug>os21(假設(shè)編譯生成的可執(zhí)行文件是os21.exe)按下ctrl+alt+del,調(diào)用windows的任務(wù)管理器,記錄進程相關(guān)的行為屬性:步驟3:在“命令提示符”窗口加入?yún)?shù)重新運行生成的可執(zhí)行文件。運行結(jié)果:范例:E:\課程\os課\os實驗、程序\os11\debug>os213(假設(shè)編譯生成的可執(zhí)行文件是os21.exe)按下ctrl+alt+del,調(diào)用windows的任務(wù)管理器,記錄進程相關(guān)的行為屬性:步驟4:修改清單2-1中的程序,將nClone的定義和初始化方法按程序注釋中的修改方法進行修改,編譯成可執(zhí)行文件(執(zhí)行前請先保存已經(jīng)完成的工作)。再按步驟2中的方式運行,看看結(jié)果會有什么不一樣。運行結(jié)果:從中你可以得出什么結(jié)論:nClone的作用:控制程序的起始輸入值,控制窗口個數(shù),當nClone>5時,程序就會停止執(zhí)行變量的定義和初始化方法(位置)對程序的執(zhí)行結(jié)果有影響嗎?為什么?變量的定義和初始化方法(位置)對程序的執(zhí)行結(jié)果有影響,例如當nClone第二次修改的時候,程序就無法停止執(zhí)行。(2).父子進程的簡單通信及終止進程步驟1:創(chuàng)建一個“Win32ConsolApplication^X程,然后拷貝清單2-2中的程序,編譯成可執(zhí)行文件。步驟2:在VC的工具欄單擊“ExecuteProgram”(執(zhí)行程序)按鈕,或者按Ctrl+F5鍵,或者在“命令提示符”窗口運行步驟1中生成的可執(zhí)行文件。運行結(jié)果:范例:E:\課程\os課\os實驗、程序\os11\debug>os22(假設(shè)編譯生成的可執(zhí)行文件是os22.exe)步驟3:按源程序中注釋中的提示,修改源程序2-2,編譯執(zhí)行(執(zhí)行前請先保存已經(jīng)完成的工作)。運行結(jié)果:在程序中加入跟蹤語句,或調(diào)試運行程序,同時參考MSDN中的幫助文件CreateProcess()的使用方法,理解父子進程如何傳遞參數(shù)。給出程序執(zhí)行過程的大概描述:程序通過main()來傳遞參數(shù),當argc的值大于1時,程序繼續(xù)執(zhí)行,當argc的值小于1時,程序結(jié)束執(zhí)行。步驟4:填空CreateProcess()函數(shù)有5個核心參數(shù)?本實驗程序中設(shè)置的各個參數(shù)的值是:TOC\o"1-5"\h\zszFilename;szCmdLine;NULL;NULL;FLASE;CREATENEWCONSOLE;NULL;NULL;&si;π步驟5:按源程序中注釋中的提示,修改源程序2-2,編譯執(zhí)行。運行結(jié)果:步驟6:參考MSDN中的幫助文件CreateMutex()、OpenMutex()、ReleaseMutex()和WaitForSingleObject()的使用方法,理解父子進程如何利用互斥體進行同步的。給出父子進程同步過程的一個大概描述:CreateMutex()創(chuàng)建互斥體進程,OpenMutex()打開互斥體進程,ReleaseMutex()釋放互斥體,WaitForSingleObject()檢測hHandle事件的信號狀態(tài),通過這些方法可實現(xiàn)當前只有一個進程被創(chuàng)建或使用,實現(xiàn)進程的同步。五、實驗運行結(jié)果
(1)2.程序運行截圖2.任務(wù)管理器截圖>rniproccreate.exe(32bit)0%0.3ME0ME渺0Mbps>同proccreate.exe(32bit)0%0.3MB0MB渺0Mbps>Iproccreste.exe(22bit)0%0.2MB0M日渺0Mbps;>同proccreate.exe(32.bit)0%0.3MB0MB渺0Mbps>rniproccreate.exe(32bit)0%0.3MBDMB渺0Mbps3.加參數(shù)后運行截圖£3D:\Mic『osoftVistialStudio\MyP『可ects\proccreate\D&bug\proccre-aze.exe.DI?roi[jD:\MicrosoftVisualStudio^MyProjects\proccr&afie\DeLug\prDcere-ataexe□XPruuesi;10:8244,GIuiieID:5AD:MlicrosoftVisualStudioMlyProjects\proccreate\Debugroccreate-exe3ProcessID:5曜56.CloneID:3>園proccre-ate.exe(32bit)0%0.3MBDMBAJ?0Mbps同proccreate.exe(32bit)0%0.3MBDMB渺0Mbps4.第一次修改截圖D:\MicrosoftVisual£tudio\MyProjscts\pr>mproccreate.exe(32bit)0%0.3ME0MB渺0Mbps>同proccreate.exe(32.bit)0.3MB□MB渺0MbpsI.=|proccres1re.exe(32bit)o%0.3ME0MB渺0Mbps>mproccreate.exe(32bit)0%0.3MB0MB渺0Mbps>園proccreate.exe(32bit)0%0.3MBDMB渺0Mbps六、實驗分析和總結(jié):此次實驗,我們創(chuàng)建了進程,并根據(jù)對實驗程序、實驗代碼的分析、觀察,我們了解了一個Windows應(yīng)用程序的“一生”。同時也初步的了解了父子進程間的通信,以及終止進程。但是從個人對實驗的理解來看,似乎沒有完全弄懂實驗的內(nèi)容,所以在后期需要在這方面的知識加強學(xué)習(xí)。七、實驗程序代碼://proccreate項目#include<windows.h>#include<iostream>#include<stdio.h>//創(chuàng)建傳遞過來的進程的克隆過程并賦于其ID值voidStartClone(intnCloneID){//提取用于當前可執(zhí)行文件的文件名TCHARszFilename[MAX_PATH];GetModuleFileName(NULL,szFilename,MAX_PATH);//格式化用于子進程的命令行并通知其EXE文件名和克隆IDTCHARszCmdLine[MAX_PATH];sprintf(szCmdLine,"\"%s\"%d",szFilename,nCloneID);//用于子進程的STARTUPINFO結(jié)構(gòu)STARTUPINFOsi;ZeroMemory(&si,sizeof(si));si.cb=sizeof(si);//必須是本結(jié)構(gòu)的大小//返回的用于子進程的進程信息PROCESS_INFORMATIONpi;//利用同樣的可執(zhí)行文件和命令行創(chuàng)建進程,并賦于其子進程的性質(zhì)BOOLbCreateOK=::CreateProcess(szFilename,//產(chǎn)生這個EXE的應(yīng)用程序的名稱szCmdLine,//告訴其行為像一個子進程的標志NULL,//缺省的進程安全性NULL,//缺省的線程安全性FALSE,//不繼承句柄CREATE_NEW_CONSOLE,//使用新的控制臺NULL,//新的環(huán)境NULL,//當前目錄&si,//啟動信息&pi);//返回的進程信息、//對子進程釋放引用if(bCreateOK){CloseHandle(pi.hProcess);CloseHandle(pi.hThread);}}intmain(intargc,char*argv[]){//確定派生出幾個進程,及派生進程在進程列表中的位置intnClone=0;//修改語句:intnClone;//第一次修改:nClone=0;if(argc>1){//從第二個參數(shù)中提取克隆ID::sscanf(argv[1],"%d",&nClone);}//第二次修改:nClone=0;//顯示進程位置std::cout<<"ProcessID:"<<::GetCurrentProcessId()<<",CloneID:"<<nClone<<std::endl;//檢查是否有創(chuàng)建子進程的需要constintc_nCloneMax=5;if(nClone<c_nCloneMax){//發(fā)送新進程的命令行和克隆號StartClone(++nClone);}//等待響應(yīng)鍵盤輸入結(jié)束進程getchar();return0;}清單2-2父子進程的簡單通信及終止進程的示例程序//procterm項目include<windows.h>include<iostream>include<stdio.h>staticLPCTSTRg_szMutexName="w2kdg.ProcTerm.mutex.Suicide";//創(chuàng)建當前進程的克隆進程的簡單方法voidStartClone(){//提取當前可執(zhí)行文件的文件名TCHARszFilename[MAXPATH];GetModuleFileName(NULL,szFilename,MAX_PATH);//格式化用于子進程的命令行,字符串"child”將作為形參傳遞給子進程的main函數(shù)TCHARszCmdLine[MAX_PATH];〃實驗2-2步驟3:將下句中的字符串child改為別的字符串,重新編譯執(zhí)行,執(zhí)行前請先保存已經(jīng)完成的工作sprintf(szCmdLine,"\"%s\"child",szFilename);//子進程的啟動信息結(jié)構(gòu)STARTUPINFOsi;ZeroMemory(&si,sizeof(si));si.cb=sizeof(si);//應(yīng)當是此結(jié)構(gòu)的大小//返回的用于子進程的進程信息PROCESS_INFORMATIONpi;//用同樣的可執(zhí)行文件名和命令行創(chuàng)建進程,并指明它是一個子進程BOOLbCreateOK=CreateProcess(szFilename,//產(chǎn)生的應(yīng)用程序的名稱(本EXE文件)szCmdLine,//告訴我們這是一個子進程的標志NULL,//用于進程的缺省的安全性NULL,//用于線程的缺省安全性FALSE,//不繼承句柄CREATE_NEW_CONSOLE,〃創(chuàng)建新窗口NULL,//新環(huán)境NULL,//當前目錄&si,//啟動信息結(jié)構(gòu)&pi);//返回的進程信息//釋放指向子進程的引用if(bCreateOK){CloseHandle(pi.hProcess);CloseHandle(pi.hThread);}}voidParent(){〃創(chuàng)建“自殺”互斥程序體HANDLEhMutexSuicide=CreateMutex(NULL,//缺省的安全性TRUE,//最初擁有的g_szMutexName);//互斥體名稱if(hMutexSuicide!=NULL){//創(chuàng)建子進程std::cout<<"Creatingthechildprocess."<<std::endl;StartClone();//指令子進程“殺”掉自身std::cout<<"Tellingthechildprocesstoquit."<<std::endl;//等待父進程的鍵盤響應(yīng)getchar();〃釋放互斥體的所有權(quán),這個信號會發(fā)送給子進程的WaitForSingleObject過程ReleaseMutex(hMutexSuicide);//消除句柄CloseHandle(hMutexSuicide);}}voidChild(){//打開“自殺”互斥體HANDLEhMutexSuicide=OpenMutex(SYNCHRONIZE,//打開用于同步FALSE,//不需要向下傳遞g_szMutexName);//名稱if(hMutexSuicide!=NULL){//報告我們正在等待指令std::cout<<"Childwaitingforsuicideinstructions."<<std::endl;//子進程進入阻塞狀態(tài),等待父進程通過互斥體發(fā)來的信號WaitForSingleObject(hMutexS
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 文化旅游產(chǎn)業(yè)發(fā)展合同
- 廣東省陽江市高新區(qū)2024-2025學(xué)年高一上學(xué)期1月期末地理試題 含解析
- 家電行業(yè)智能家電互聯(lián)互通方案
- 企業(yè)采購原材料采購協(xié)議
- 水電站建設(shè)運營合作協(xié)議
- 旅游行業(yè)服務(wù)質(zhì)量保障協(xié)議
- 網(wǎng)絡(luò)科技行業(yè)數(shù)據(jù)安全使用承諾書
- 企業(yè)員工福利計劃與服務(wù)支持方案
- 私人教練健身訓(xùn)練合同協(xié)議
- 產(chǎn)品銷售代理合同集
- 中小學(xué)教師職稱晉升水平能力測試題及答案
- 蘇少版八下美術(shù)教案
- 人教版四年級數(shù)學(xué)下冊第一單元提升測試卷(Word版含答案)
- Arcgis教程1基本知識
- 學(xué)業(yè)規(guī)劃、職業(yè)發(fā)展與就業(yè)指導(dǎo)課件
- 西南交通大學(xué)文科建設(shè)發(fā)展綱要
- 蘇教版數(shù)學(xué)六年級下冊第三單元《解決問題的策略》課課件
- 四年級數(shù)學(xué)思維訓(xùn)練社團活動(素質(zhì)拓展)電子教案
- 金屬切削過程中的變形 revised課件
- 蒙古族文化課件
- 簡明燒傷健康量表
評論
0/150
提交評論