操作系統(tǒng)試驗進程控制_第1頁
操作系統(tǒng)試驗進程控制_第2頁
操作系統(tǒng)試驗進程控制_第3頁
操作系統(tǒng)試驗進程控制_第4頁
操作系統(tǒng)試驗進程控制_第5頁
已閱讀5頁,還剩5頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

《操作系統(tǒng)》實驗報告學號姓名專業(yè)、班實驗地點指導教師實驗時間實驗序號:3實驗項目名稱:進程控制一、實驗目的及要求(1)通過對WindowsXP進行編程,來熟悉和了解系統(tǒng)。(2)通過分析程序,來了解進程的創(chuàng)建、終止。二、實驗設備(環(huán)境)及要求一臺WindowsXP操作系統(tǒng)的計算機。計算機裝有MicrosoftVisualStudioC++6.0專業(yè)版或企業(yè)版。三、實驗內(nèi)容與步驟(1)編程一利用CreateProcess()函數(shù)創(chuàng)建一個子進程并且裝入畫圖程序(mspaint.exe)。閱讀該程序,完成實驗任務。源程序如下:#include"stdafx.h"include<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););四、程序調(diào)試(結(jié)果及分析)編程一:0l.cpp(1)利用CreateProcess()函數(shù)創(chuàng)建一個子進程并且裝入畫圖程序(mspaint.exe)。閱讀該程序,完成實驗任務。源程序如下:0l.cpp醺?q<u:,醺?q<u:,無標至-畫圖 [o1回漢一ttinclude"stdafx.h"ttinclude<stdio.h>ttinclude<windows.h>intmain(U0ID){STARTUPINFOsi;PROCESS_INFORMfiTIONpi;ZeroMemory(&si,sizeoF(si));si.cb=sizeoF(si);ZeroMemory(&pi,sizeoF(pi));if(?CreateProcess(NULL,"c:\\WIND0WS\\systen32\\i<FprintF(stderr,"CreatProcessFailed");return-1;}WaitForSingleObject(pi.hProcess,INFINITE);printff'childComplete");CloseHandle(pi.hProcess);CloseHandle(pi.hThread); .

前管理員:1口I回jHgSlMicrosoftUindous[版本6.1.版權(quán)所啟<c>2009Microsoft7601]Corporation0保C:MJsersXfidministrator>cd\C:\>E:E:\>CLMicrosoftCopyright-cpp<R>32-bitC/C++OptimizingCompi<C>MicrosoftCorp1984-1998.All1.cpp1M.cpp<22>:MicrosoftCR>Copyright<C>uarningC4715:fmain1:notaIncrementalLinkerUersion6-MicrosoftCorp1992-1998.All/out:1.exeE:\>fff(2)、編程二下面給出了一個使用進程和操作系統(tǒng)版本信息應用程序(文件名為4-5.cpp)。它利用進程信息查詢的API函數(shù)GetProcessVbrsion()與GetVersionEx()的共同作用。確定運行進程的操作系統(tǒng)版本號。閱讀該程序并完成實驗任務。#include"stdafx.h"#include<windows.h>#include<iostream.h>〃利用進程和操作系統(tǒng)的版本信息的簡單示例voidmain()〃提取這個進程的ID號DWORDdwIdThis=::GetCurrentProcessId();〃獲得這一進程和報告所需的版本,也可以發(fā)送0以便指明這一進程DWORDdwVerReq=::GetProcessVersion(dwIdThis);WORDwMajorReq=(WORD)(dwVerReq>16);WORDwMinorReq=(WORD)(dwVerReq&0xffff);::cout<<"ProcessID:"<<dwIdThis<<",requiresOS:"<<wMajorReq<<wMinorReq<<::endl;〃設置版本信息的數(shù)據(jù)結(jié)構(gòu),以便保存操作系統(tǒng)的版本信息OSVERSIONINFOEXosvix;::ZeroMemory(&osvix,sizeof(osvix));osvix.dwOSVersionInfoSize=sizeof(osvix);〃提取版本信息和報告::GetVersionEx(reinterpret_cast<LPOSVERSIONINFO>(&osvix));::cout<<"RunningonOS:"<<osvix.dwMajorVersion<<","<<osvix.dwMinorVersion<<::endl;//如果是NTS(Windows2000)系統(tǒng),則提高其優(yōu)先權(quán)if(osvix.dwPlatformId==VER_PLATFORM_WIN32_NT&&osvix.dwMajorVersion>=5)(〃改變優(yōu)先級::SetPriorityClass(::GetCurrentProcess(), 〃利用這一進程HIGH_PRIORITY_CLASS); 〃改變?yōu)閔igh〃報告給用戶::cout<<"TaskManagershouldindicatethis""processishighpriority."<<::endl;))d'O^ProgramFiles(xS6)\Micro5oftVisualStudio\MyProjerts\1\Debug\1.ej(e'Process10:5196,requiresOS:10RunningonOS:6.2TaskManagershouldindicatethisprocessishighpriority.Pressanykeytocontinue-實驗任務:寫出程序運行后的以下幾項結(jié)果。當前PID信息5092,requiresOS:10 。當前操作系統(tǒng)版本 6.2 。系統(tǒng)提示信息TaskManagershouldindicatethisprocessishighpriority.。(3)編程三下面給出了一個終止進程的應用程序(文件名為4-3.cpp),它先創(chuàng)建一個子進程,然后命令它發(fā)出“自殺彈”互斥體去終止自身的運行。閱讀該程序并完成實驗任務。#include<windows.h>#include<iostream>#include<stdio.h>staticLPCTSTRg_szMutexName="w2kdg.ProcTerm.mutex.Suicide";〃創(chuàng)建當前進程的克隆進程的簡單方法voidStartClone()(〃提取當前可執(zhí)行文件的文件名TCHARszFilename[MAX_PATH];::GetModuleFileName(NULL,szFilename,MAX_PATH);〃格式化用于子進程的命令行,指明它是一個EXE文件和子進程TCHARszCmdLine[MAX_PATH];::sprintf(szCmdLine,"\"%s\"child”,szFilename);〃子進程的啟動信息結(jié)構(gòu)STARTUPINFOsi;::ZeroMemory(reinterpret_cast<void*>(&si),sizeof(si));si.cb=sizeof(si); 〃應當是此結(jié)構(gòu)的大〃返回的用于子進程的進程信息PROCESS_INFORMATIONpi;〃用同樣的可執(zhí)行文件名和命令行創(chuàng)建進程,并指明它是一個子進程BOOLbCreateOK=::CreateProcess(szFilename,〃產(chǎn)生的應用程序名稱(本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();〃暫停::Sleep(5000);〃指令子進程“殺"掉自身std::cout<<"Tellingthechildprocesstoquit."<<std::endl;::ReleaseMutex(hMutexSuicide);〃消除句柄::CloseHandle(hMutexSuicide);

voidChild()〃打開"自殺”互斥體HANDLEhMutexSuicide=::OpenMutex(SYNCHRONIZE,〃打開用于同步SYNCHRONIZE,〃打開用于同步FALSE,〃不需要向下傳遞FALSE,〃不需要向下傳遞g_szMutexName);〃名稱g_szMutexName);〃名稱if(hMutexSuicide!=NULL)〃報告正在等待指令std::cout<<"Childwaitingforsuicideinstructions."<<std::endl;::WaitForSingleObject(hMutexSuicide,INFINITE);〃報告準備好終止,消除句柄std::cout<<"Childquitting."<<std::endl;::CloseHandle(hMutexSuicide);::Sleep(1000);intmain(intarqc,char*argv[])〃決定其行為是父進程還是子進程if(arqc>1&&::strcmp(argv[1],"child")==0)(Child();)else(Parent();)return0;)"D:\ProgramFiles(xfl6]\MicrosoftVisualStudio\MyPCreatingthechildprocess.ITellingthechildprocesstoquit.Pressanykeytocontinue分析: 程序4-3.cpp說明了一個進程從“生”到“死”的整個一生,第一次執(zhí)行時,它創(chuàng)建一個子進程,其行為如同“父親”。在創(chuàng)建子進程之前,先創(chuàng)建一個互斥的內(nèi)核對象,其行為對于子進程來說,如同一個“自殺彈”。當創(chuàng)建子進程時,就打開了互斥體并在其他線程中進行別的處理工作,同時等待著父進程使用ReleaseMutex()API發(fā)出“死亡”信號。然后用Sleep()API調(diào)用來模擬父進程處理其他工作,等完成時,指令子進程終止。當調(diào)用ExitProcess()時要小心,進程中的所有線程都被立刻通知停止。在設計應用程序時,必須讓主線程在正常的C++運由期關閉(這是由編譯器提供默認行為)之后來調(diào)用這一函數(shù)。當它轉(zhuǎn)向受信狀態(tài)時,通??蓜?chuàng)建一個每個活動線程都可等待和停止的終止事件。在正常的終止操作中,進程的每個工作線程都要終止,由主線程序員調(diào)用ExitProcess()。接著,管理層對進程增加的所有對象釋放引用,并將用GetExitChodeProcess()建立的退出代碼從STILL_ACTIVE改變?yōu)镋xitProcess()調(diào)用中返回的值。最后,主線程對象也如同進程對象一樣轉(zhuǎn)變?yōu)槭苄艩顟B(tài)。等到所有打開的句柄都關閉之后,管理層的對象管理器才銷毀進程對象本身。還沒有一種

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論