操作系統(tǒng)實(shí)驗(yàn)報(bào)告4_第1頁
操作系統(tǒng)實(shí)驗(yàn)報(bào)告4_第2頁
操作系統(tǒng)實(shí)驗(yàn)報(bào)告4_第3頁
操作系統(tǒng)實(shí)驗(yàn)報(bào)告4_第4頁
操作系統(tǒng)實(shí)驗(yàn)報(bào)告4_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余12頁可下載查看

下載本文檔

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

文檔簡(jiǎn)介

《操作系統(tǒng)》實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)序號(hào): 4實(shí)驗(yàn)項(xiàng)目名稱:進(jìn)程控制學(xué) 號(hào)1207122219姓 名實(shí)驗(yàn)序號(hào): 4實(shí)驗(yàn)項(xiàng)目名稱:進(jìn)程控制學(xué) 號(hào)1207122219姓 名鄺沃佳實(shí)驗(yàn)地點(diǎn)1-418指導(dǎo)教師李遠(yuǎn)敏專業(yè)、班實(shí)驗(yàn)時(shí)間軟金二班2014/10/21實(shí)驗(yàn)?zāi)康募耙笸ㄟ^對(duì)WindowsXP進(jìn)行編程,來熟悉和了解系統(tǒng)。通過分析程序,來了解進(jìn)程的創(chuàng)建、終止。二、 實(shí)驗(yàn)設(shè)備(環(huán)境)及要求一臺(tái)WindowsXP操作系統(tǒng)的計(jì)算機(jī)。計(jì)算機(jī)裝有MicrosoftVisualStudioC++6.0專業(yè)版或企業(yè)版。?CreateProcess()調(diào)用:創(chuàng)建一個(gè)進(jìn)程。?ExitProcess()調(diào)用:終止一個(gè)進(jìn)程。三、 實(shí)驗(yàn)內(nèi)容與步驟(1)編程一利用CreateProcess()函數(shù)創(chuàng)建一個(gè)子進(jìn)程并且裝入畫圖程序 (mspaint.exe)。閱讀該程序,完成實(shí)驗(yàn)任務(wù)。源程序如下:include<stdio.h>include<windows.h>intmain(VOID){STARTUPINFOsi;PROCESSINFORMATIONpi;ZeroMemory(&si,sizeof(si));Si.cb=sizeof(si);ZeroMemory(&pi,sizeof(pi));if(!CreateProcess(NULL,c:\WINDOWS\system32\mspaint.exe”,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi)){fprintf(stderr,"CreatProcessFailed");return—1;}WaitForSinqleObject(pi.hProcess,INFINITE);Printf(“hildComplete”);CloseHandle(pi.hProcess);CloseHandle(pihThread);}IIglobalEEmbEir二.ntain +戛〒翳回Jrj,nincliide<Gtdio.h>Uincl>ude<Nindovs,h>intnain(UOlOi)<STARTUPIHrOsi;PFtOCESSlNFDRHATlDINpi;^ernMenorijjffisi.sizeof(si));si.cb=sizeof(si);■ZertibipnoFy(£rpi ;if(?CreateProcess(NULL,^c:\XWJHD0VS\\si_istpini32\\inspaiiitaexeh\HOLL,NULL.FALSE#rmi叫修改后:#inelude<stdio.h>#include<windows.h>intmain(VOID){STARTUPINFOsi;PROCESS_INFORMATIONpi;ZeroMemory(&si,sizeof(si));si.cb=sizeof(si);ZeroMemory(&pi,sizeof(pi));if(!CreateProcess(NULL,"c:\\WINDOWS\\system32\\mspaint.exe",NULL,NULL,FALSE,0,NULL,NULL,&si,&pi)){fprintf(stderr,"CreatProcessFailed");return-1;}WaitForSingleObject(pi.hProcess,INFINITE);printf("childComplete");CloseHandle(pi.hProcess);CloseHandle(pi.hThread);}在"命令提示符"窗口運(yùn)行 CL命令產(chǎn)生可執(zhí)行程序 4-1.exe:C:\>CL4-1.cpp

C:X>cdtestC:\tesc>cltest.cddmcrnsnFtIR)12-bit +OptimizingConpilnrUrminn12 AH RHhR^MirpflTflFfcCorp1984-1^9ft.Al1piaKti .fcotxt-cpptcat_cpp<27>:warningrC^715:*mainJ:neta1)cui^ti'ol^athsrctui'navalueMitrwiufL<H>[iiLrciieMtdlLinherUeruiuH6,00,016#CuiJijrlyhL<C>HlcrusufCCurpl?92-i?9B.AllrlyhbxresErued.<ont:test.exetc&t.oJbjC:\tesc>_實(shí)驗(yàn)任務(wù):寫出程序的運(yùn)行結(jié)果。'?■未命名-盲圈 口回I*'?■未命名-盲圈 口回I*文件0)編輯⑥查看F團(tuán)像①頻色?幫助⑩11111111miningCompilevUgpsion12?0E84-丄9¥呂?A11pightsreserved.malnJ:notallcontro1pathsrUepsion6.00.816892-1V98?Allrightsreserued.要義得幫助」請(qǐng)?jiān)趶?qiáng)幫助”菜單中,單擊C:Xtest>test_exe4.正在運(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<windows.h>#include<iostream>//利用進(jìn)程和操作系統(tǒng)的版本信息的簡(jiǎn)單示例Voidmain(){//提取這個(gè)進(jìn)程的ID號(hào)DWORDdwldThis=::GetCurrentProcessld();〃獲得這一進(jìn)程和報(bào)告所需的版本,也可以發(fā)送 0以便指明這一進(jìn)程DWORDdwVerReq=::GetProcessVersion(dwldThis);WORDwMajorReq=::(WORD)dwVerReq>16);WORDwMinorReq=::(WORD)dwVerReq&oxfff);std::cout<< ”ProcessID:”<<dwldThis< ”,requiresOS:”<<wMajorReq<<wMinorReq<<std::endl;//設(shè)置版本信息的數(shù)據(jù)結(jié)構(gòu),以便保存操作系統(tǒng)的版本信息OSVERSIONINFOEXosvix;::ZeroMemory(&osvix,sizeof(osvix));Osvix.dwOSVersionInfoSize=sizeof(osvix);//提取版本信息和報(bào)告::GetVersionEx(reinterpretcast<LPOSVERSIONINFO>(&osvix));Std::cout<< ”RunningonOS:”<<osvix.dwMajorVersion<< ”.'<osvix.dwMinorVersion<<std::endl;//如果是NTS(Windows2000)系統(tǒng),則提高其優(yōu)先權(quán)If(osvix.dwPlatformld==VERPLATFORMWIN32NT&&Osvix.dwMajorVersion>=5{//改變優(yōu)先級(jí)::SerPriorityClass(::GetCurrentProcess() 〃利用這一進(jìn)程HIGHPRIORITYCLASS); 〃改變?yōu)閔igh//報(bào)告給用戶Std::cout<<"TaskManagershouldnownowindicatethis”processishighpriority."<<std::endl;}}|| - |T . ■ttinclude<uindous.^>Xliiciude<lustredii>"利用進(jìn)程和操作系統(tǒng)的版本信息的簡(jiǎn)單示例?oldmaln(){"提瑕逸昨泄程旳」?號(hào)DWORDduI<lThis=::GetCurrentProcessld();"荻得這一進(jìn)程和報(bào)告所需的版本,也可以發(fā)學(xué)以便指明這一進(jìn)程DUORDdviU^rReq=::GetProce^sUerEionfduIdThis);WORDvjHajQrReq=((W0RD)dvVerReq>16);UQRDwninarReq=((WORD)dvUerReq&axfFfF);std::cout?alProcessID:"?dwIdThis?"frequiresOS:M?uHajorHeq?wHinorReg?std::endl;"i殳置皈本信息的數(shù)據(jù)結(jié)枸,以便保存換作系統(tǒng)飲版本信息修改后:#include<windows.h>#include<iostream>//利用進(jìn)程和操作系統(tǒng)的版本信息的簡(jiǎn)單示例voidmain(){〃提取這個(gè)進(jìn)程的ID號(hào)DWORDdwldThis=::GetCurrentProcessld();〃獲得這一進(jìn)程和報(bào)告所需的版本,也可以發(fā)送 0以便指明這一進(jìn)程DWORDdwVerReq=::GetProcessVersion(dwldThis);WORDwMajorReq=((WORD)dwVerReq>16);WORDwMinorReq=((WORD)dwVerReq&0xffff);std::cout<<"ProcessID:"<<dwIdThis<<",requiresOS:"<<wMajorReq<<wMinorReq<<std::endl;//設(shè)置版本信息的數(shù)據(jù)結(jié)構(gòu),以便保存操作系統(tǒng)的版本信息OSVERSIONINFOEXosvix;::ZeroMemory(&osvix,sizeof(osvix));osvix.dwOSVersionInfoSize=sizeof(osvix);〃提取版本信息和報(bào)告::GetVersionEx(reinterpret_cast<LPOSVERSIONINFO>(&osvix));std::cout<<"RunningonOS:"<<osvix.dwMajorVersion<<"."<<osvix.dwMinorVersion<<std::endl;//如果是NTS(Windows2000)系統(tǒng),則提高其優(yōu)先權(quán)if(osvix.dwPlatformld==VER_PLATFORM_WIN32_NT&&osvix.dwMajorVersion>=5){〃改變優(yōu)先級(jí)::SetPriorityClass(::GetCurrentProcess(), //利用這一進(jìn)程HIGH_PRIORITY_CLASS); //改變?yōu)閔igh〃報(bào)告給用戶std::cout<<"TaskManagershouldnownowindicatethis"

實(shí)驗(yàn)任務(wù)。#include<windows.h>#include<iostream>#include<stdio.h>saticLPCTSTRg_szMutexName="w2kdg.ProcTerm.mutex.Suicide”//創(chuàng)建當(dāng)前進(jìn)程的克隆進(jìn)程的簡(jiǎn)單方法VoidStartClone(){//提取當(dāng)前可執(zhí)行文件的文件名TCHARszFilename 〔MAXPATH〕::GetModuleFileName(NULL,szFilename,MAXPATH);//格式化用于子進(jìn)程的命令行,指明它是一個(gè) EXE文件和子進(jìn)程TCHARszCmdLine〔MAXPATH〕;::sprintf(szCmdLine, ”” ”child”,szFilename);//子進(jìn)程的啟動(dòng)信息結(jié)構(gòu)STARTUPINFOsi;::ZeroMemory(reinterpretcast<void*>(&si),sizeof(si));si.cb=sizeof(si); // 應(yīng)當(dāng)是此結(jié)構(gòu)的大小//返回的用于子進(jìn)程的進(jìn)程信息PROCESSINFORMATIONpi;//用同樣的可執(zhí)行文件名和命令行創(chuàng)建進(jìn)程,并指明它是一個(gè)子進(jìn)程BOOLbCreateOK=::CreateProcess(SzFilename,SzCmdLine,NULL,NULL,FALSE,//////////CREATENEWCONSOLE,NULL,SzFilename,SzCmdLine,NULL,NULL,FALSE,//////////CREATENEWCONSOLE,NULL,NULL,&si,&pi);////////產(chǎn)生的應(yīng)用程序名稱(本EXE文件)告訴人們這是一個(gè)子進(jìn)程的標(biāo)志用于進(jìn)程的默認(rèn)的安全性用于線程的默認(rèn)安全性不繼承句柄// 創(chuàng)建新窗口,使輸出更直觀新環(huán)境當(dāng)前目錄啟動(dòng)信息結(jié)構(gòu)返回的進(jìn)程的信息//釋放指向子進(jìn)程的引用if(bCreateOK){::CloseHandle(pi.hProcess);::CloseHandle(pi.hThread);}VoidParent(){//創(chuàng)建“自殺”互斥程序體HANDLEhMutexSuicide=::CreatgeMutex(NULL//TRUE ,gszMutexName);

if(hMutexSuicide!=NULL)//創(chuàng)建子進(jìn)程std::cout<< ”::StartClone();//暫停::sleep(5000);////默認(rèn)的安全性最初擁有的為其命名Creatingthechildprocess.”<<std::endl;“殺”掉自身”Tellingthechildprocesstoquit.::ReleaseMutex(hMutexSuicide);// 指令子進(jìn)程std::cout<<// 消除句柄::CloseHandle(hMutexSuicide);}VoidChild(){〃打開“自殺”互斥體HANDLEhMutexSuicide=::OpenMutex(SYNCHRONIZE,FALSE,gszMutexName);if(hMutexSuicide!=NULL){II打開用于同步//不需要向下傳遞II名稱”<<std::endl;//報(bào)告正在等待指令Std::cout<<"Childwaitingforsuicideinstructions."”<std::endl;::WaitForSingleObject(hMutexSuicide,INFINITE);報(bào)告準(zhǔn)備好終止,消除句柄”Childquiting.”<<std::endl;::CloseHandle(hMutexSuicide);::sleep(1000);}//Std:cout<<intmain(intarqc,char*argv 〔〕){//決定其行為是父進(jìn)程還是子進(jìn)程if(argc>1&&::strcmp(argv 〔1〕,”child”)==0){Child();}else{Parent();}Return0;}仃(AllglobalmembEriE▼(Globals)main亙★筋隘仃(AllglobalmembEriE▼(Globals)main+劇3classesttinclude<uindDU5+劇3classesffinclude<iostream>wlnciude<stdio.h>staticLPCTSTRy_szllutexHane-"u2kdg.Proc*rerm.mutew.Suicide4"創(chuàng)建當(dāng)前進(jìn)程的克隆逬程的簡(jiǎn)單方祛uoidStartCLone(){/殛取當(dāng)前可執(zhí)行文件的文件名TChARSZFllenamp[HAX_rATH];::GetNodUlEFilet1aiie(NULL,5zFileiiaiw^MAXPATH);/術(shù)式化埔于子進(jìn)程的命令行.指明它是一個(gè)EJ(E文件和子進(jìn)程TCHARszCmdLine[MAX_PflTH]:::sprintF(szCndLinef"\"^s\"child";"子進(jìn)程的信動(dòng)信息結(jié)構(gòu)STARTUPINFOsi;hI2Sl|- Cunfiguration:3-lfin32Debug—— Linking…3.exe-0error(s),nviarning(s)修改后:#include<windows.h>#include<iostream>#include<stdio.h>staticLPCTSTRg_szMutexName="w2kdg.ProcTerm.mutex.Suicide";//創(chuàng)建當(dāng)前進(jìn)程的克隆進(jìn)程的簡(jiǎn)單方法voidStartClone(){〃提取當(dāng)前可執(zhí)行文件的文件名TCHARszFilename[MAX_PATH];::GetModuleFileName(NULL,szFilename,MAX_PATH);

〃格式化用于子進(jìn)程的命令行,指明它是一個(gè) EXE文件和子進(jìn)程TCHARszCmdLine[MAX_PATH];::sprintf(szCmdLine,"\"%s\"child",szFilename);//子進(jìn)程的啟動(dòng)信息結(jié)構(gòu)STARTUPINFOsi;::ZeroMemory(reinterpret_cast<void*>(&si),sizeof(si));si.cb=sizeof(si); //應(yīng)當(dāng)是此結(jié)構(gòu)的大小//返回的用于子進(jìn)程的進(jìn)程信息PROCESS_INFORMATIONpi;//用同樣的可執(zhí)行文件名和命令行創(chuàng)建進(jìn)程,并指明它是一個(gè)子進(jìn)程BOOLbCreateOK=::CreateProcess(szFilename, //產(chǎn)生的應(yīng)用程序名稱(本EXE文件)szCmdLine, 〃告訴人們這是一個(gè)子進(jìn)程的標(biāo)志NULL,NULL,FALSE,CREATE_NEW_CONSOLE,NULL,NULL,NULL,FALSE,CREATE_NEW_CONSOLE,NULL,NULL,&si,&pi);//釋放指向子進(jìn)程的引用if(bCreateOK)//用于進(jìn)程的默認(rèn)的安全性〃用于線程的默認(rèn)安全性//不繼承句柄//創(chuàng)建新窗口,使輸出更直觀//新環(huán)境//當(dāng)前目錄〃啟動(dòng)信息結(jié)構(gòu)〃返回的進(jìn)程的信息{::CloseHandle(pi.hProcess);::{::CloseHandle(pi.hProcess);::CloseHandle(pi.hThread);}}voidParent(){//創(chuàng)建“自殺”互斥程序體HANDLEhMutexSuicide=::CreateMutex(NULL, 〃默認(rèn)的安全性TRUE, 〃最初擁有的g_szMutexName); //為其命名if(hMutexSuicide!=NULL){//創(chuàng)建子進(jìn)程std::cout<<"Creatingthechildprocess."<<std::endl;::StartClone();〃暫停::Sleep(5000);//指令子進(jìn)程“殺”掉自身std::cout<<"Tellingthechildprocesstoquit."<<std::endl;::ReleaseMutex(hMutexSuicide);〃消除句柄::CloseHandle(hMutexSuicide);}}voidChild(){〃打開“自殺”互斥體//打開用于同步//打開用于同步//不需要向下傳遞//名稱SYNCHRONIZE,FALSE,g_szMutexName);if(hMutexSuicide!=NULL){//報(bào)告正在等待指令std::cout<<"Childwaitingforsuicideinstructions."<<std::endl;::WaitForSingleObject(hMutexSuicide,INFINITE);//報(bào)告準(zhǔn)備好終止,消除句柄std::cout<<"Childquiting."<<std::endl;::CloseHandle(hMutexSuicide);::Sleep(1000);}}intmain(intargc,char*argv[]){//決定其行為是父進(jìn)程還是子進(jìn)程if(argc>1&&::strcmp(argv[1],"child")==0){Child();}else{Parent();}return0;}分析:程序4-3.cpp說明了一個(gè)進(jìn)程從“生”到“死”的整個(gè)一生,第一

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論