操作系统原理实验四

上传人:博****1 文档编号:499385616 上传时间:2024-01-06 格式:DOC 页数:8 大小:58KB
返回 下载 相关 举报
操作系统原理实验四_第1页
第1页 / 共8页
操作系统原理实验四_第2页
第2页 / 共8页
操作系统原理实验四_第3页
第3页 / 共8页
操作系统原理实验四_第4页
第4页 / 共8页
操作系统原理实验四_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《操作系统原理实验四》由会员分享,可在线阅读,更多相关《操作系统原理实验四(8页珍藏版)》请在金锄头文库上搜索。

1、实验4进程控制1、实验目的(1) 通过对 WindowsXP进行编程,来熟悉和了解系统。(2) 通过分析程序,来了解进程的创建、终止。2、实验工具(1) 一台WindowsXP操作系统的计算机。(2) 计算机装有 Microsoft Visual Studio C+6.0 专业版或企业版。3、预备知识(3) CreateProcess ()调用:创建一个进程。(4) ExitProcess ()调用:终止一个进程。4、实验编程(mspa in t.exe)。(1)编程一利用CreateProcess()函数创建一个子进程并且装入画图程序 阅读该程序,完成实验任务。源程序如下:# in clud

2、e # in clude int ma in (VOID) STARTUPINFO si;PROCESS_ INFORMA TION 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,NULL,&si,&pi) fprintf(stderr,” Creat Process Failed ” );return 1;WaitForSi ngleO

3、bject(pi.hProcess,INFINITE); Printf( “ child Complete ” );CloseHa ndle(pi.hProcess); CloseHa ndle(pi hThread);在“命令提示符”窗口运行CL命令产生可执行程序 4-1.exe:C: CL 4-1.cpp实验任务:写出程序的运行结果。4.正在运行的进程(2 )、编程二 下面给出了一个使用进程和操作系统版本信息应用程序(文件名为4-5.cpp)。它利用进程信息查询的 API函数 GetProcessVersion() 与GetVersionEx()的共同 作用。确定运行进程的操作系统版本号。

4、阅读该程序并完成实验任务。#in clude#in clude/利用进程和操作系统的版本信息的简单示例Void mai n()/提取这个进程的ID号DWORD dwIdThis=:GetCurre ntProcessld();获得这一进程和报告所需的版本,也可以发送0以便指明这一进程DWORD dwVerReq=:GetProcessVersio n(dwldThis);WORD wMajorReq=:(WORD)dwVerReq16);WORD wMi norReq=:(WORD)dwVerReq & oxfff);std:cout ” Process ID: ” dwldThis ” ,r

5、equires OS: ” wMajorReq wMinorReq std:endl;/设置版本信息的数据结构,以便保存操作系统的版本信息OSVERSIONINFOEX osvix;:ZeroMemory(&osvix,sizeof(osvix);Osvix.dwOSVersio nln foSize=sizeof(osvix);/提取版本信息和报告:GetVersio nEx(rei nterpret cast(&osvix);Std:cout ” Running on OS: ” osvix.dwMajorVersion ” . ” osvix.dwM ino rVers ion =5/改

6、变优先级:SerPriorityClass(:GetCurre ntProcess()利用这一进程HIGH _ PRIORITY _ CLASS);/改变为 high/报告给用户Std:cout ” Task Manager should now now indicate this”“ process is high priority.” std:endl;实验参考:在Visual C+窗口的工具栏中单击“打开”按钮,在“打开“对话框 中找到并打开4-2.cpp源程序。 单击Build菜单中的Compile 4-2.cpp命令,再单击“是”按钮确认。系统对 4-2.cpp 源程序进行编译。 编

7、译完成后,单击 Build菜单中的Build 4-2.exe命令,建立4-2.exe可执行文件。 在工具栏单击 Execute Program (执行程序)按钮,执行 4-2.exe程序。实验任务:写出程序运行后的以下几项结果。当前PID信息。当前操作系统版本 。系统提示信息 。5、终止进程(3) 编程三下面给出了一个终止进程的应用程序(文件名为 4-3.cpp),它先创建一个子进程,然后命令它发出“自杀弹”互斥体去终止自身的运行。阅读该程序并完成实验任务。#i nclude#in clude#in cludesatic LPCTSTR g _ szMutexName= ” ”;/创建当前进程

8、的克隆进程的简单方法Void StartCl on e()/提取当前可执行文件的文件名TCHAR szFilename MAX PATH:GetModuleFileName(NULL,szFile name,MAX PATH);/格式化用于子进程的命令行,指明它是一个EXE文件和子进程TCHAR szCmdLine MAX PATH;:sprintf(szCmdLine,” ” child ” ,szFilename);/子进程的启动信息结构STARTUPINFO si;:ZeroMemory (rein terpret cast(& si),sizeof(si); si.cb=sizeof(

9、si);/应当是此结构的大小/返回的用于子进程的进程信息PROCESS INFORMATION pi;/用同样的可执行文件名和命令行创建进程,并指明它是一个子进程BOOL bCreateOK=:CreateProcess(SzFile name,/SzCmdLi ne,/NULL,/NULL,/FALSE,/CREATE NEW CONSOLE, /NULL,/NULL,/&si,/&pi);/释放指向子进程的引用if(bCreateOK):CloseHa ndle(pi.hProcess);:CloseHa ndle(pi.hThread);Void Pare nt()产生的应用程序名称(本

10、 EXE文件) 告诉人们这是一个子进程的标志用于进程的默认的安全性用于线程的默认安全性不继承句柄创建新窗口,使输出更直观新环境当前目录启动信息结构返回的进程的信息/ 创建“自杀”互斥程序体HANDLE hMutexSuicide=:CreatgeMutex(NULL,/TRUE,/g szMutexName); / if(hMutexSuicide !=NULL)/ 创建子进程std:cout ” Creating the child process.:StartClo ne();默认的安全性 最初拥有的 为其命名 std : en dl;/ 暂停:sleep(5000);/指令子进程“杀”掉

11、自身std:cout ” Telling the child process to quit.” std:endl;:ReleaseMutex(hMutexSuicide);/ 消除句柄:CloseHa ndle(hMutexSuicide);Void Child()打开“自杀”互斥体HANDLE hMutexSuicide=:Ope nM utex(SYNCHRONIZE ,FALSE,g_ szMutexName);II打开用于同步/不需要向下传递II名称if ( hMutexSuicide !=NULL)II报告正在等待指令 std:e ndl;Std:cout ” Child wait

12、 ing for suicide in struct ions.:WaitForSi ngleObject(hMutexSuicide,INFINITE);II报告准备好终止,消除句柄Std:cout ” Child quiting. ” 1 & & :strcmp(argv 1, ” child ” )=0)Child();elsePare nt();Return 0;分析:程序4-3.cpp说明了一个进程从“生”到“死”的整个一生,第一次执行时,它创建一个子进程, 其行为如同“父亲”。在创建子进程之前, 先创建一个互斥的内核对象,其行为对于子进程来说,如同一个“自杀弹”。当创建子进程时,就

13、打开了互斥体并在其他线程中进行别的处理工作,同时等待着父进程使用ReleaseMutex()API发出“死亡”信号。然后用Sleep()API调用来模拟父进程处理其他工作,等完成时,指令子进程终止。当调用ExitProcess ()时要小心,进程中的所有线程都被立刻通知停止。在设计应用程 序时,必须让主线程在正常的C+运由期关闭(这是由编译器提供默认行为)之后来调用这一函数。当它转向受信状态时,通常可创建一个每个活动线程都可等待和停止的终止事件。在正常的终止操作中,进程的每个工作线程都要终止,由主线程序员调用 ExitProcess()。接着,管理层对进程增加的所有对象释放引用,并将用GetExitChodeProcess ()建立的退出代码从

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 活动策划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号