当前位置:文档之家› 操作系统实验

操作系统实验

操作系统实验报告实验一进程控制与描述一、实验目的通过对Windows 2000编程,进一步熟悉操作系统的基本概念,较好地理解Windows 2000的结构。

通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解Windows 2000中进程的“一生”。

二、实验环境硬件环境:计算机一台,局域网环境;软件环境:Windows 2000 Professional、Visual C++ 6.0企业版。

三、实验内容和步骤第一部分(共三个程序):Windows 2000 Professional下的GUI应用程序,使用Visual C++编译器创建一个GUI 应用程序,代码中包括了WinMain()方法,该方法GUI类型的应用程序的标准入口点。

程序1-1# include <windows.h># pragma comment(lib, “user32.lib” )int APIENTRY WinMain(HINSTANCE /* hInstance */ ,HINSTANCE /* hPrevInstance */,LPSTR /* lpCmdLine */,int /* nCmdShow */ ){:: MessageBox(NULL,“Hello, Windows 2000” ,“Greetings”,MB_OK) ;return(0) ; }实验结果然后改变参数,运行结果如下:1-2显示了当前进程的优先级:1-3进一步显示进程的具体情况:第二部分:进程的“一生”(共三个程序)1、创建进程本程序展示的是一个简单的使用CreateProcess() API函数的例子。

首先形成简单的命令行,提供当前的EXE文件的指定文件名和代表生成克隆进程的号码。

大多数参数都可取缺省值,但是创建标志参数使用了:BOOL bCreateOK标志,指示新进程分配它自己的控制台,这使得运行示例程序时,在任务栏上产生许多活动标记。

然后该克隆进程的创建方法关闭传递过来的句柄并返回main() 函数。

在关闭程序之前,每一进程的执行主线程暂停一下,以便让用户看到其中的至少一个窗口。

CreateProcess() 函数有____10___个核心参数?本实验程序中设置的各个参数的值是:CreateProcess(LPCWSTR lpszImageName, //指向可执行的模块的指针LPCWSTR lpszCmdLine, //指向可执行命令行字符串的指针LPSECURITY_ATTRIBUTES lpsaProcess, //CE 不支持LPSECURITY_ATTRIBUTES lpsaThread, //CE 不支持BOOL fInheritHandles, //CE 不支持DWORD fdwCreate, //创建标志LPVOID lpvEnvironment, //CE 不支持LPWSTR lpszCurDir, //CE 不支持LPSTARTUPINFOW lpsiStartInfo, //CE 不支持LPPROCESS_INFORMATION lppiProcInfo //指向进程信息结构体的指针);相应设置值:szFilename,szCmdLine,NULL,NULL,FALSE,CREATE_NEW_CONSOLE,NULL,NULL,&si,&pi相关资料CreateProcess API函数来创建相应的进程,该函数的原型如下:CreateProcess(LPCWSTR lpszImageName, //指向可执行的模块的指针LPCWSTR lpszCmdLine, //指向可执行命令行字符串的指针LPSECURITY_ATTRIBUTES lpsaProcess, //CE 不支持LPSECURITY_ATTRIBUTES lpsaThread, //CE 不支持BOOL fInheritHandles, //CE 不支持DWORD fdwCreate, //创建标志LPVOID lpvEnvironment, //CE 不支持LPWSTR lpszCurDir, //CE 不支持LPSTARTUPINFOW lpsiStartInfo, //CE 不支持LPPROCESS_INFORMATION lppiProcInfo //指向进程信息结构体的指针);该函数最重要的两个参数是lpszImageName和lpszCmdLine,下面的几个应用也主要是通过设置这两个参数来达到目的。

(以下的程序在Pocket PC 2003 SE上通过测试)1、打开指定的URLTCHAR szAppName[_MAX_PATH] = TEXT("iexplore.exe");//IE浏览器程序TCHAR szCmdLine[_MAX_PATH] = TEXT(""); CreateProcess(szAppName,szCmdLine, NULL, NULL,FALSE, 0, NULL, NULL, NULL, NULL);2、打开指定的文件夹TCHAR szAppName[_MAX_PATH] = TEXT("fexplore.exe");//资源管理器程序TCHAR szCmdLine[_MAX_PATH] = TEXT(\\Windows\\);CreateProcess(szAppName,szCmdLine, NULL, NULL,FALSE, 0, NULL, NULL, NULL, NULL);3、打开帮助文件PROCESS_INFORMATION pi;TCHAR szAppName[_MAX_PATH] = TEXT("peghelp.exe");//系统帮助程序,PC上是在c:\WINDOWS目下的winhlp32.exeTCHAR szCmdLine[_MAX_PATH] = TEXT("myhelp.html");//自己制作的帮助文档,甚至是系//统原有的帮助文件,如wince.htm、bluetooth.htm等等。

myhelp.html应该放在\Windows 目录下CreateProcess(szAppName,szCmdLine, NULL, NULL,FALSE, 0, NULL, NULL, NULL, &pi);通过以上的方式,可以在自己的应用程序里打开相应的帮助文件。

从以上的3种应用可以看出,只要知道系统自带的应用程序名,就可以通过设定szAppName和szCmdLine相应的值,来调用相应的程序,来达到自己想要的目的。

只要认真挖掘,一定可以发现更多的应用。

2、正在运行的进程使用进程和操作系统的版本信息分析程序,写出运行结果:当前PID信息:3092当前操作系统版本:00系统提示信息:Task Manager should now indicate this process is high priority.程序向读者表明了如何获得当前的PID和所需的进程版本信息。

为了运行这一程序,系统处理了所有的版本不兼容问题。

接着,程序演示了如何使用GetVersionEx() API函数来提取OSVERSIONINFOEX结构。

这一数据块中包括了操作系统的版本信息。

其中,“OS : 5.1”表示当前运行的操作系统是:windowsXP最后一段程序利用了操作系统的版本信息,以确认运行的是windows XP。

代码接着将当前进程的优先级提高到比正常级别高。

单击Ctrl + Alt + Del键,进入“Windows任务管理器”,在“应用程序”选项卡中右键单击本任务,在快捷菜单中选择“转到进程”命令。

在“Windows任务管理器”的“进程”选项卡中,与本任务对应的进程映像名称是(为什么?) :______ vcspawn.exe右键单击该进程名,在快捷菜单中选择“设置优先级”命令,可以调整该进程的优先级,如设置为“高”后重新运行程序,屏幕显示有变化吗?为什么?设置为高后process ID变为3744,但是requires OS和Running OS 都没有改变,原因是只改变了该进程的优先级操作系统没有改变3终止进程指令其子进程来“杀掉”自己的父进程先分析程序功能,再写出运行结果:1) Creating the child process.表示:创建子进程2) Telling the child process to quit表示:删除子进程在熟悉源代码的基础上,利用本实验介绍的API函数来尝试改进本程序(例如使用GetProcessTimes() API函数) 并运行。

请描述你所做的工作:GetProcessTimes() API函数可向主调者显示进程的终止时间。

具体实现方法及说明API GetProcessTimesDeclare Function GetProcessTimes Lib "kernel32" Alias "GetProcessTimes" (ByValhProcess As Long, lpCreationTime As FILETIME, lpExitTime As FILETIME, lpKernelTime As FILETIME, lpUserTime As FILETIME) As Long说明获取与一个进程的经过时间有关的信息返回值Long,非零表示成功,零表示失败。

会设置GetLastError参数表参数类型及说明hProcess Long,一个进程句柄lpCreationTime FILETIME,指定一个FILETIME结构,在其中装载进程的创建时间lpExitTime FILETIME,指定一个FILETIME结构,在其中装载进程的中止时间lpKernelTime FILETIME,指定一个FILETIME结构,在其中装载进程花在内核模式上的总时间lpUserTime FILETIME,指定一个FILETIME结构,在其中装载进程花在用户模式上的总时间说明四、实验总结在实验中通过读程序和调试程序更深的了解了进程的意义。

熟悉了操作系统的进程概念,和Windows 2000中进程的“一生”。

也通过上网查了一些关于进程的资料。

进程定义:一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程。

进程的特征:动态性--具有动态的地址空间独立性--各进程的地址空间相互独立并发性--宏观上各进程同时运行结构化--进程的地址空间是结构化的进程与程序的区别:进程是动态的,程序是静态的:程序是有序代码的集合;进程是程序的执行。

相关主题