当前位置:文档之家› 操作系统原理实验2+岳青山+0907052247

操作系统原理实验2+岳青山+0907052247

《操作系统原理》实验报告实验序号:2 实验项目名称: Windows 基本进程管理1、实验目的通过观察任务管理器,来观察各个进程的动态信息。

2、实验工具(1)一台WindowsXP操作系统的计算机。

(2)计算机装有Microsoft Visual Studio C++6.0专业版或企业版。

3、预备知识·任务管理器,了解用户计算机上正在运行的程序和进程的相关信息。

·Windows环境中的编程。

相关内容参见本次实验参考资料部分。

4、基本实验1)观察任务管理器步骤一:进入WindowsXP。

步骤二:按Ctrl+Alt+Delete(或按Ctrl+Shift+Esc)键都可以调出任务管理器。

步骤三:单击“查看”→“选择列”选项,可以看到一些选项,这里,可以查看每个进程的PID,CPU使用时间,内存的使用情况,当前的进程是系统的还是用户的,每个句柄的数量,每个进程的优先级,等等。

步骤四:单击“性能”标签,在所示的“性能”选项卡中可以看到CPU的使用情况、内存的使用情况。

2)通过命令观察进程情况、步骤一:单击“开始”→“运行”选项,输入cmd“命令提示符”下。

步骤二:输入tasklist。

步骤三:继续输入tasklist/?来寻找帮助,里面有更详细的解释。

3)通过命令来关闭一个进程步骤一:单击“开始”→“运行”选项,输入cmd“命令提示符”下。

步骤二:输入tasklist后回车执行。

步骤三:继续输入taskkill/PID 208/T5、实验编程进行一个简单的Windows的图形用户接口(GUI)编程。

步骤一:进入WindowsXP。

步骤二:进入Microsoft Visual Studio C++6.0。

步骤三:在菜单栏中单击“文件”→“新建”→“文件”→C++Source File,选择路径(如D:\1.cpp),并命名为1.cpp。

步骤四:将下面的程序源代码输入。

步骤五:单击Windows系统的“开始”→“运行”选项,输入cmd。

步骤六:依次输入命令为cd \d:// 这里是存放的源程序地方,如果是放在其他地方,则利用cd命令进入源程序的地方CL 1.cpp// 对这是源程序进行编程步骤七:若没有错误,则会自动生成1.exe和1.obj文件,双击“1.exe”,即可看到结果。

源代码如下:# include < windows.h># include < stdio.h>//告诉连接器与包括MessageBox API函数的user32库进行连接# pragma comment(lib,”user32.lib”)int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){∷MessageBox(NULL, //没有父窗口“hello windows XP”, // 消息框中的文本显示hello windows XP“提示”,//消息框的标题MB OK); // 其中只有一个OK按钮//返回0以便通知系统不进入消息循环return 0;}6、扩展实验1、获得和使用进程的句柄步骤一:进入WindowsXP。

步骤二:Microsoft Visual Studio C++6.0。

步骤三:在菜单栏中单击“文件”→“新建”→“文件”→C++Source File,选择路径(如:D:\2.cpp。

步骤四:将下面的程序源代码输入。

步骤五:单击Windows 系统的“开始”→“运行”选项,输入cmd。

步骤六:依次输入命令为:cd\d://这里是存放的源程序地方,如果是放在其他地方,则利用cd命令进入源程序的地方CL 2.cpp//对这是源程序进行编译步骤七:若没有错误,则会自动生成2.exe和2.obj文件,双击2.exe,程序源代码如下:#include < windows.h >#include < iostream.h >#include < stdio.h >//确定自己的优先权的简单应用程序void main()﹛//从当前过程中提取句柄HANDLE hProcessThis=::GetCurrentProcess();//请求内核提供该过程所属的优先权类DWORD dwPriority=::GetPriorityClass(hProcessThis);//发出消息,为用户描述该类std::cout〈〈“current process priority:”;switch(dwPriority)﹛case HIGH PRIORITY CLASS:std::cont<<”High”;break;case NORMAL PRIORITY CLASS:std::coutg<<”Normal”,break;case IDLE PRIORITY CLASS;std::cout<<”Idle”;break;case REALTIME PRIORITY CLASS:std::cout<<”Realtime”;break;default:std::cout<<”<unknown>”;break;﹜Std::cout<<std::endl;Getchar();﹜2)利用句柄来获得进程的详细信息步骤一:进入进入WindowsXP。

步骤二:Microsoft Visual Studio C++6.0。

步骤三:在菜单栏中单击“文件”→“新建”→“文件”→C++Source File,选择路径(如D:\3.cpp),并命名为3.cpp。

步骤四:将下面的程序源代码输入。

步骤五:单击Windows系统的“开始”→“运行”选项,输入cmd。

步骤六:依次输入命令为:cd\d://这里是存放的源程序地方,如果是放在其他地方,则利用cd命令进入源程序的地方CL 3.cpp//对这是源程序进行编译步骤七:若没有错误,则会自动生成3.exe和3.obj文件,双击”3.exe”,程序源代码如下:#include < windows.h >#include < tlhelp32.h >#include < iostream.h >#include < stdio.h >//当在用户模式机内模式下都提供所耗时间时,在内核模式下进行所耗时间的64位计算的帮助方法DWORD GetKernelModePercentage(const FILETIME& ftKernel,const FILETIME& ftUser) {//将FILETIME结构转化为64位整数ULONGLONG qwKernel = (((ULONGLONG)ftKernel.dwHighDateTime)<<32) + ftKernel.dwLowDateTime;ULONGLONG qwUser = (((ULONGLONG)ftUser.dwHighDateTime)<<32) + ftUser.dwLowDateTime;//将消耗时间相加,然后计算消耗在内模式下的时间百分比ULONGLONG qwTotal = qwKernel + qwUser;DWORD dwPct = (DWORD)(((ULONGLONG)100 * qwKernel)/qwTotal);return(dwPct);}//以下是将当前运行过程名和消耗在内模式下的时间百分数都显示出来的应用程序void main(){//对当前系统中运行的过程拍取“快照”HANDLE hSnapshot = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, //提取当前过程0); //如果是当前过程,就将其忽略//初始化过程入口PROCESSENTRY32 pe;::ZeroMemory(&pe,sizeof(pe));pe.dwSize = sizeof(pe) ;BOOL bMore = ::Process32First(hSnapshot,&pe);while(bMore){//打开用于读取的过程HANDLE hProcess = ::OpenProcess(PROCESS_QUERY_INFORMA TION, //指明要得到信息FALSE, //不必继承这一句柄pe.th32ProcessID); //要打开的过程if(hProcess != NULL){//找出进程的时间FILETIME ftCreation, ftKernelMode,ftUserMode,ftExit;::GetProcessTimes(hProcess, //所感兴趣的进程&ftCreation, //进程的启动时间&ftExit, //结束时间(如果有的话)&ftKernelMode, //在内核模式下消耗的时间&ftUserMode); //在用户模式下消耗的时间//计算内核模式消耗的时间百分比DWORD dwPctKernel = ::GetKernelModePercentage(ftKernelMode, //在内核模式上消耗的时间ftUserMode); //在用户模式下消耗的时间//向用户显示进程的某些信息cout << "process ID:" << pe.th32ProcessID<< ",EXE file:" << pe.szExeFile<< ", % in Kernel mode:" << dwPctKernel << endl;//消除句柄::CloseHandle(hProcess);}//转向下一个进程bMore = ::Process32Next(hSnapshot,&pe);}getchar();}7、实验结果与数据处理12356.16.2。

相关主题