您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 数据通信与网络 > 操作系统实验2-Windows基本进程管理
《操作系统》实验报告实验序号:2实验项目名称:Windows基本进程管理学号姓名专业、班实验地点指导教师实验时间一、实验目的及要求通过观察任务管理器,来观察各个进程的动态信息。二、实验设备(环境)及要求(1)一台WindowsXP操作系统的计算机。(2)计算机装有MicrosoftVisualStudioC++6.0专业版或企业版。三、实验内容与步骤1、基本实验1)观察任务管理器步骤一:进入WindowsXP。步骤二:按Ctrl+Alt+Delete键调出任务管理器。步骤三:单击“查看”→“选择列”选项,可以看到一些选项,这里,可以查看每个进程的PID,CPU使用时间,内存的使用情况,当前的进程是系统的还是用户的,每个句柄的数量,每个进程的优先级,等等。步骤四:单击“性能”标签,在所示的“性能”选项卡中可以看到CPU的使用情况、内存的使用情况。2)通过命令观察进程情况:步骤一:单击“开始”→“运行”选项,输入cmd“命令提示符”下。步骤二:输入tasklist。步骤三:继续输入tasklist/?来寻找帮助,里面有更详细的解释。3)通过命令来关闭一个进程:步骤一:单击“开始”→“运行”选项,输入cmd“命令提示符”下。步骤二:输入tasklist后回车执行。步骤三:继续输入taskkill/PID208/T2、实验编程:进行一个简单的Windows的图形用户接口(GUI)编程。步骤一:进入WindowsXP。步骤二:进入MicrosoftVisualStudioC++6.0。步骤三:在菜单栏中单击“文件”→“新建”→“文件”→C++SourceFile,选择路径(如D:\1.cpp),并命名为1.cpp。步骤四:将下面的程序源代码输入。步骤五:单击Windows系统的“开始”→“运行”选项,输入cmd。步骤六:依次输入命令为cd\d://这里是存放的源程序地方,如果是放在其他地方,则利用cd命令进入源程序的地方CL1.cpp//对这是源程序进行编程步骤七:若没有错误,则会自动生成1.exe和1.obj文件,双击“1.exe”,即可看到结果。源代码如下:#includewindows.h#includestdio.h//告诉连接器与包括MessageBoxAPI函数的user32库进行连接#pragmacomment(lib,”user32.lib”)intAPIENTRYWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnCmdShow){::MessageBox(NULL,//没有父窗口“hellowindowsXP”,//消息框中的文本显示hellowindowsXP“提示”,//消息框的标题MBOK);//其中只有一个OK按钮//返回0以便通知系统不进入消息循环return0;}运行结果:3、扩展实验1、获得和使用进程的句柄步骤一:进入WindowsXP。步骤二:MicrosoftVisualStudioC++6.0。步骤三:在菜单栏中单击“文件”→“新建”→“文件”→C++SourceFile,选择路径(如:D:\2.cpp。步骤四:将下面的程序源代码输入。步骤五:单击Windows系统的“开始”→“运行”选项,输入cmd。步骤六:依次输入命令为:cd\d://这里是存放的源程序地方,如果是放在其他地方,则利用cd命令进入源程序的地方CL2.cpp//对这是源程序进行编译步骤七:若没有错误,则会自动生成2.exe和2.obj文件,双击2.exe,程序源代码如下:#includewindows.h#includeiostream.h#includestdio.h//确定自己的优先权的简单应用程序voidmain(){//从当前过程中提取句柄HANDLEhProcessThis=::GetCurrentProcess();//请求内核提供该过程所属的优先权类DWORDdwPriority=::GetPriorityClass(hProcessThis);//发出消息,为用户描述该类::coutcurrentprocesspriority:;switch(dwPriority){caseHIGH_PRIORITY_CLASS:::coutHigh;break;caseNORMAL_PRIORITY_CLASS:::coutNormal;break;caseIDLE_PRIORITY_CLASS:::coutIdle;break;caseREALTIME_PRIORITY_CLASS:::coutRealtime;break;default:::coutunknown;break;}::cout::endl;getchar();}运行结果:2)利用句柄来获得进程的详细信息:步骤一:进入进入WindowsXP。步骤二:MicrosoftVisualStudioC++6.0。步骤三:在菜单栏中单击“文件”→“新建”→“文件”→C++SourceFile,选择路径(如D:\3.cpp),并命名为3.cpp。步骤四:将下面的程序源代码输入。步骤五:单击Windows系统的“开始”→“运行”选项,输入cmd。步骤六:依次输入命令为:cd\d://这里是存放的源程序地方,如果是放在其他地方,则利用cd命令进入源程序的地方CL3.cpp//对这是源程序进行编译步骤七:若没有错误,则会自动生成3.exe和3.obj文件,双击”3.exe”,程序源代码如下:#includewindows.h#includetlhelp32.h#includeiostream.h#includestdio.h//当在用户模式机内模式下都提供所耗时间时,在内核模式下进行所耗时间的64位计算的帮助方法DWORDGetKernelModePercentage(constFILETIME&ftKernel,constFILETIME&ftUser){//将FILETIME结构转化为64位整数ULONGLONGqwKernel=(((ULONGLONG)ftKernel.dwHighDateTime)32)+ftKernel.dwLowDateTime;ULONGLONGqwUser=(((ULONGLONG)ftUser.dwHighDateTime)32)+ftUser.dwLowDateTime;//将消耗时间相加,然后计算消耗在内模式下的时间百分比ULONGLONGqwTotal=qwKernel+qwUser;DWORDdwPct=(DWORD)(((ULONGLONG)100*qwKernel)/qwTotal);return(dwPct);}//以下是将当前运行过程名和消耗在内模式下的时间百分数都显示出来的应用程序voidmain(){//对当前系统中运行的过程拍取快照HANDLEhSnapshot=::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,//提取当前过程0);//如果是当前过程,就将其忽略//初始化过程入口PROCESSENTRY32pe;::ZeroMemory(&pe,sizeof(pe));pe.dwSize=sizeof(pe);BOOLbMore=::Process32First(hSnapshot,&pe);while(bMore){//打开用于读取的过程HANDLEhProcess=::OpenProcess(PROCESS_QUERY_INFORMATION,//指明要得到信息FALSE,//不必继承这一句柄pe.th32ProcessID);//要打开的过程if(hProcess!=NULL){//找出进程的时间FILETIMEftCreation,ftKernelMode,ftUserMode,ftExit;::GetProcessTimes(hProcess,//所感兴趣的进程&ftCreation,//进程的启动时间&ftExit,//结束时间(如果有的话)&ftKernelMode,//在内核模式下消耗的时间&ftUserMode);//在用户模式下消耗的时间//计算内核模式消耗的时间百分比DWORDdwPctKernel=::GetKernelModePercentage(ftKernelMode,//在内核模式上消耗的时间ftUserMode);//在用户模式下消耗的时间//向用户显示进程的某些信息::coutprocessID:pe.th32ProcessID,EXEfile:pe.szExeFile,%inKernelmode:dwPctKernelendl;//消除句柄::CloseHandle(hProcess);}//转向下一个进程bMore=::Process32Next(hSnapshot,&pe);}getchar();}运行结果:四、总结与体会一、在做实验编程时,因为工程建错导致文件不能执行。还有自己复制的代码,导致很多代码中有很多符号为中文,虽然都是一些小问题,但修改起来较麻烦。二、在本次实验中,我对VC6.0这个软件有了进一步的了解。并且对于任务管理器的使用变得更加的熟练。六、教师评语签名:日期:成绩
本文标题:操作系统实验2-Windows基本进程管理
链接地址:https://www.777doc.com/doc-4524645 .html