第一次实验报告模板.docx_第1页
第一次实验报告模板.docx_第2页
第一次实验报告模板.docx_第3页
第一次实验报告模板.docx_第4页
第一次实验报告模板.docx_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

湖南科技学院计算机与通信工程系操作系统实验报告实验项目实验一 WINDOWS进程初识课程名称操作系统成 绩实验时间2015年12月15日星期二第十六周实验地点E座305姓 名学号班 级计科1302班一、实验要求1、设计实验步骤;2、将上机过程中出现的问题及解决方法写在实验报告上;3、 掌握WINDOWS实验环境的基本知识。4、认真完成实验报告二、实验目的1、学会使用VC编写基本的Win32 Consol Application(控制台应用程序)。2、掌握WINDOWS API的使用方法。3、编写测试程序,理解用户态运行和核心态运行。三、实验环境VC+6.0四、实验内容及步骤:(1)编写基本的Win32 Consol Application步骤1:登录进入Windows,启动VC+ 6.0。步骤2:在“FILE”菜单中单击“NEW”子菜单,在“projects”选项卡中选择“Win32 Consol Application”,然后在“Project name”处输入工程名,在“Location” 处输入工程目录。创建一个新的控制台应用程序工程。步骤3:在“FILE”菜单中单击“NEW”子菜单,在“Files”选项卡中选择“C+ Source File”, 然后在“File” 处输入C/C+源程序的文件名。 步骤4:将清单1-1所示的程序清单复制到新创建的C/C+源程序中。编译成可执行文件。步骤5:在“开始”菜单中单击“程序”-“附件”-“命令提示符”命令,进入Windows“命令提示符”窗口,然后进入工程目录中的debug子目录,执行编译好的可执行程序:E:课程os课os实验程序os11debughello.exe运行结果 (如果运行不成功,则可能的原因是什么?) :命令行下输入D: cd Microsoft Visual Studio cd Myprojects cd hello cd debughello.exe (2)计算进程在核心态运行和用户态运行的时间步骤1:按照(1)中的步骤创建一个新的“Win32 Consol Application”工程,然后将清单1-2中的程序拷贝过来,编译成可执行文件。步骤2: 在创建一个新的“Win32 Consol Application”工程,程序的参考程序如清单1-3所示,编译成可执行文件并执行。步骤3:在“命令提示符”窗口中运行步骤1中生成的可执行文件,测试步骤2中可执行文件在核心态运行和用户态运行的时间。E:课程os课os实验程序os12debugtime TEST.exe实验步骤:在命令行下输入D: cd Microsoft Visual Studio cd Myprojects cd proclist cd debugproclist.exe 回车,运行成功步骤4:运行结果 (如果运行不成功,则可能的原因是什么?) :步骤5:分别屏蔽While循环中的两个for循环,或调整两个for循环的次数,写出运行结果。屏蔽i循环:屏蔽j循环:调整循环变量i的循环次数:调整循环变量j的循环次数:五、实验运行结果实验1截图实验2截图屏蔽循环变量i后截图屏蔽循环变量j后截图调整循环变量i的循环次数为100后:调整循环变量j的循环次数为100后:六、实验分析和总结:此次实验初步认识了Windows API的使用方法,并根据掌握的知识,利用VC6.0设计了程序,从而进一步掌握用户运行态与核心运行态的异同。在实验过程中也发现了程序变量的随定义、初始化的不同,程序会产生不同的实验结果。七、实验程序代码:清单1-1 一个简单的Windows控制台应用程序/ hello项目# include void main() std:cout “Hello, Win32 Consol Application” std : endl ;清单1-2 核心态运行和用户态运行时间比计算/ proclist项目# include # include # include / 当在用户模式机内核模式下都提供所耗时间时,在内核模式下进行所耗时间的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(int argc,char *argv) if(argc2) cout请给出你要查询的程序名endl;exit(0);/ 对当前系统中运行的过程拍取“快照”HANDLE hSnapshot=:CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS,/ 提取当前过程 0);/ 如果是当前过程,就将其忽略 / 初始化过程入口 PROCESSENTRY32 pe;:ZeroMemory(&pe,sizeof(pe);pe.dwSize=sizeof(pe);BOOL bMore=:Process32First(hSnapshot,&pe);BOOL found = FALSE;while(bMore) / 打开用于读取的过程if(!strcmp(pe.szExeFile,argv1) found = TRUE;HANDLE hProcess=:OpenProcess(PROCESS_QUERY_INFORMATION,/ 指明要得到信息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 ,%d in Kernel mode: dwPctKernel endl; / 消除句柄:CloseHandle(hProcess); / 转向下一个进程bMore=:Process32Next(hSnapshot,&pe);if(found=FALSE)cout当前

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论