ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:225.10KB ,
资源ID:1186141      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/1186141.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(1404031019秦亮实验1.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

1404031019秦亮实验1.docx

1、1404031019秦亮实验1计算机科学与技术系 实 验 报 告专业名称网络工程 课程名称操作系统原理 项目名称进程的一生 班 级网工1班 学 号 1404031019 姓 名秦亮 同组人员无 实验日期 2016.11.9一、实验目的与要求:1.实验目的通过对Windows 2000编程,进一步熟悉操作系统的基本概念,较好地理解Windows 2000的结构。2.工具/准备工作在开始本实验之前,请回顾教科书的相关容。需要做以下准备:1) 一台运行Windows 2000 Professional操作系统的计算机。2) 计算机中需安装Visual C+ 6.0专业版或企业版。3.实验容与步骤1.

2、 简单的控制台应用程序2. GUI应用程序3. 进程对象 1. 简单的控制台应用程序我们先来创建一个名为“Hello,World”的应用程序。步骤1:登录进入Windows 2000 Professional。步骤2:在“开始”菜单中单击“程序”-“附件”-“记事本”命令,将清单3-l中的程序键入记事本中,并把代码保存为Hello.cpp。 清单3-1 一个简单的Windows 2000控制台应用程序 / hello项目 # include void main() std:cout “Hello, Windows 2000” CL Hello.cpp来创建可执行的Hello.EXE。操作能否正

3、常进行?如果不行,则可能的原因是什么?不行,可能原因是:需要添加环境变量CL.EXEDos中提示:CL不是部或外部命令,也不是可运行的程序或批处理文件。步骤4:运行Hello.EXE程序,产生用户键入的一行文字。运行结果 (如果运行不成功,则可能的原因是什么?) 图1 3-1 2. GUI应用程序在下面的实验中,C+ 编译器创建一个GUI应用程序,代码中包括了WinMain() 方法,这是GUI类型的应用程序的标准入口点。步骤5:在“开始”菜单中单击“程序”-“附件”-“记事本”命令,将清单3-2中的程序键入记事本中,并把代码保存为3-2.cpp。 清单3-2 Windows 2000的GUI

4、应用程序 / msgbox项目 # include / 标准的include / 告诉连接器与包括MessageBox API函数的user32库进行连接# pragma comment(lib, “user32.lib” )/ 这是一个可以弹出信息框然后退出的筒单的应用程序 int APIENTRY WinMain(HINSTANCE /* hInstance */ , HINSTANCE /* hPrevInstance */ , LPSTR /* lpCmdLine */ , int /* nCmdShow */ ) : MessageBox( NULL, / 没有父窗口 “Hello,

5、 Windows 2000” , / 消息框中的文本 “Greetings”, / 消息框标题 MB_OK) ; / 其中只有一个OK按钮 / 返回0以便通知系统不进入消息循环 return(0) ;也可以利用任何其他文本编辑器键入程序代码,如果这样,例如使用WORD来键入和编辑程序,则应该注意什么问题?答:注意格式和容不要是中文下编写的。步骤6:在“命令提示符”窗口运行CL.EXE,产生3-2.EXE文件:C: CL 3-2.cpp在清单3-2的GUI应用程序中,首先需要Windows.h头文件,以便获得传送给WinMain() 和MessageBox() API函数的数据类型定义。接着的p

6、ragma指令指示编译器/连接器找到User32.LIB库文件并将其与产生的EXE文件连接起来。这样就可以运行简单的命令行命令CL MsgBox.CPP来创建这一应用程序,如果没有pragma指令,则MessageBox() API函数就成为未定义的了。这一指令是Visual Studio C+ 编译器特有的。接下来是WinMain() 方法。其中有四个由实际的低级入口点传递来的参数。hInstance参数用来装入与代码相连的图标或位图一类的资源,无论何时,都可用GetModuleHandle() API函数将这些资源提取出来。系统利用实例句柄来指明代码和初始的数据装在存的何处。句柄的数值实际

7、上是EXE文件映像的基地址,通常为0x00400000。下一个参数hPrevInstance是为向后兼容而设的,现在系统将其设为NULL。应用程序的命令行 (不包括程序的名称) 是lpCmdLine参数。另外,系统利用nCmdShow参数告诉应用程序如何显示它的主窗口 (选项包括最小化、最大化和正常) 。最后,程序调用MessageBox() API函数并退出。如果在进入消息循环之前就结束运行的话,最后必须返回0。运行结果 (试将其中的信息与清单3-1程序的运行结果进行比较) :图2 3-2答:本实验表示了一个简单的进程句柄的应用。在系统中运行的任何进程都可调用GetCurrentProces

8、s()API函数,此函数可返回标识进程本身的句柄。然后就可在Windows需要该进程的有关情况时,利用这一句柄来提供。 3. 进程对象操作系统将当前运行的应用程序看作是进程对象。利用系统提供的惟一的称为句柄 (HANDLE) 的,就可与进程对象交互。这一只对当前进程有效。本实验表示了一个简单的进程句柄的应用。在系统中运行的任何进程都可调用GetCurrentProcess() API函数,此函数可返回标识进程本身的句柄。然后就可在Windows需要该进程的有关情况时,利用这一句柄来提供。步骤7:将清单3-3.cpp程序键入记事本中,并把代码保存为3-3.cpp。清单3-3 获得和使用进程的句柄

9、 / prochandle项目 # include # include / 确定自己的优先权的简单应用程序 void main() / 从当前进程中提取句柄 HANDLE hProcessThis = : GetCurrentProcess() ; / 请求核提供该进程所属的优先权类 DWORD dwPriority = : GetPriorityClass(hProcessThis) ; / 发出消息,为用户描述该类 std : cout “Current process priority: ” ; switch(dwPriority) case HIGH_PRIORITY_CLASS: s

10、td : cout “High” ; break; case NORMAL_PRIORITY_CLASS: std: cout “Normal” ; break; case IDLE_PRIORITY_CLASS: std : cout “Idle” ; break; case REALTIME_PRIORITY_CLASS: std : cout “Realtime” ; break; default: std : cout “” ; break; std : cout CL 3-3.cpp运行结果:图3 3-3步骤9:将清单3-4.cpp程序键入记事本中,并把代码保存为3-4.cpp。清单

11、3-4显示如何找出系统中正在运行的所有进程,如何利用OpenProcess() API函数来获得每一个访问进程的进一步信息。清单3-4 利用句柄查出进程的详细信息/ proclist项目# include # include # include / 当在用户模式机核模式下都提供所耗时间时,在核模式下进行所耗时间的64位计算的帮助方法 DWORD GetKernelModePercentage(const FILETIME & ftKernel, const FILETIME & ftUser) / 将FILETIME结构转化为64位整数 ULONGLONG qwKernel =( ( (ULO

12、NGLONG) 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) ; / 以下

13、是将当前运行进程名和消耗在核模式下的时间百分数都显示出来的应用程序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_INFORMATION, / 指明要得到信息 FALSE, /

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1