操作系统原理实验二

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CL 1.cpp//对这是源程序进行编程
步骤七:若没有错误,则会自动生成1.exe和1.obj文件,双击“1.exe”,即可看到结果。
源代码如下:
# include <windows.h>
# include <stdio.h>
//告诉连接器与包括MessageBoxAPI函数的user32库进行连接
PROCESS_QUERY_INFORMATION, //指明要得到信息
FALSE, //不必继承这一句柄
pe.th32ProcessID); //要打开的过程
if(hProcess!= NULL)
{
//找出进程的时间
FILETIMEftCreation,ftKernelMode,ftUserMode,ftExit;
<< ",EXE file:" <<pe.szExeFile
<< ", % in Kernel mode:" <<dwPctKernel<<endl;
//消除句柄
::CloseHandle(hProcess);
}
//转向下一个进程
bMore= ::Process32Next(hSnapshot,&pe);
::GetProcessTimes(
hProcess, //所感兴趣的进程
&ftCreation, //进程的启动时间
&ftExit, //结束时间(如果有的话)
&ftKernelMode, //在内核模式下消耗的时间
&ftUserMode); //在用户模式下消耗的时间
//计算内核模式消耗的时间百分比
break;
case NORMALPRIORITYCLASS:
std::coutg<<”Normal”,
break;
case IDLEPRIORITYCLASS;
std::cout<<”Idle”;
break;
case REALTIMEPRIORITYCLASS:
std::cout<<”Realtime”;
步骤四:单击“性能”标签,在所示的“性能”选项卡中可以看到CPU的使用情况、内存的使用情况。
2)通过命令观察进程情况、
步骤一:单击“开始”→“运行”选项,输入cmd“命令提示符”下。
步骤二:输入tasklist。
步骤三:继续输入tasklist/?来寻找帮助,里面有更详细的解释。
3)通过命令来关闭一个进程
const FILETIME&ftUser) {
//将FILETIME结构转化为64位整数
ULONGLONGqwKernel= (((ULONGLONG)ftKernel.dwHighDateTime)
<<32) +ftKernel.dwLowDateTime;
ULONGLONGqwUser= (((ULONGLONG)ftUser.dwHighDateTime)
DWORDdwPriority=::GetPriorityClass(hProcessThis);
//发出消息,为用户描述该类
std::cout〈〈“current process priority:”;
switch(dwPriority)

case HIGHPRIORITYCLASS:
std::cont<<”High”;
·Windows环境中的编程。
相关内容参见本次实验参考资料部分。
4、基本实验
1)观察任务管理器
步骤一:进入WindowsXP。
步骤二:按Ctrl+Alt+Delete(或按Ctrl+Shift+Esc)键都可以调出任务管理器。
步骤三:单击“查看”→“选择列”选项,可以看到一些选项,
这里,可以查看每个进程的PID,CPU使用时间,内存的使用情况,当前的进程是系统的还是用户的,每个句柄的数量,每个进程的优先级,等等。
//初始化过程入口
PROCESSENTRY32pe;
::ZeroMemory(&pe,sizeof(pe));
pe.dwSize=sizeof(pe) ;
BOOLbMore= ::Process32First(hSnapshot,&pe);
while(bMore)
{
//打开用于读取的过程
HANDLEhProcess= ::OpenProcess(
}
getchar();
}
7、实验后撰写实验报告。
程序源代码如下:
#include <windows.h>
#include <iostream.h>
#include <stdio.h>
//确定自己的优先权的简单应用程序
void main()

//从当前过程中提取句柄
HANDLEhProcessThis=::GetCurrentProcess();
//请求内核提供该过程所属的优先权类
<<32) +ftUser.dwLowDateTime;
//将消耗时间相加,然后计算消耗在内模式下的时间百分比
ULONGLONGqwTotal=qwKernel+qwUser;
DWORDdwPct= (DWORD)(((ULONGLONG)100 *qwKernel)/qwTotal);
return(dwPct);
步骤四:将下面的程序源代码输入。
步骤五:单击Windows系统的“开始”→“运行”选项,输入cmd。
步骤六:依次输入命令为:
cd\
d://这里是存放的源程序地方,如果是放在其他地方,则利用cd命令进入源程序的地方
CL 2.cpp//对这是源程序进行编译
步骤七:若没有错误,则会自动生成2.exe和2.obj文件,双击2.exe,
步骤三:在菜单栏中单击“文件”→“新建”→“文件”→C++SourceFile,选择路径(如D:\1.cpp),并命名为1.cpp。
步骤四:将下面的程序源代码输入。
步骤五:单击Windows系统的“开始”→“运行”选项,输入cmd。
步骤六:依次输入命令为
cd\
d://这里是存放的源程序地方,如果是放在其他地方,则利用cd命令进入源程序的地方
break;
default:
std::cout<<”<unknown>”;
break;

Std::cout<<std::endl;
Getchar();

2)利用句柄来获来自百度文库进程的详细信息
步骤一:进入进入WindowsXP。
步骤二:Microsoft Visual Studio C++6.0。
步骤三:在菜单栏中单击“文件”→“新建”→“文件”→C++SourceFile,选择路径(如D:\3.cpp),并命名为3.cpp。
“提示”,//消息框的标题
MBOK); //其中只有一个OK按钮
//返回0以便通知系统不进入消息循环
return 0;
}
6、扩展实验
1、获得和使用进程的句柄
步骤一:进入WindowsXP。
步骤二:Microsoft Visual Studio C++6.0。
步骤三:在菜单栏中单击“文件”→“新建”→“文件”→C++SourceFile,选择路径(如:D:\2.cpp。
}
//以下是将当前运行过程名和消耗在内模式下的时间百分数都显示出来的应用程序
void main()
{
//对当前系统中运行的过程拍取“快照”
HANDLEhSnapshot= ::CreateToolhelp32Snapshot(
TH32CS_SNAPPROCESS, //提取当前过程
0); //如果是当前过程,就将其忽略
步骤一:单击“开始”→“运行”选项,输入cmd“命令提示符”下。
步骤二:输入tasklist后回车执行。
步骤三:继续输入taskkill/PID 208/T
5、实验编程
进行一个简单的Windows的图形用户接口(GUI)编程。
步骤一:进入WindowsXP。
步骤二:进入Microsoft Visual Studio C++6.0。
程序源代码如下:
#include <windows.h>
#include < tlhelp32.h >
#include <iostream.h>
#include <stdio.h>
//当在用户模式机内模式下都提供所耗时间时,在内核模式下进行所耗时间的64位计算的帮助方法
DWORDGetKernelModePercentage(const FILETIME&ftKernel,
实验2:Windows基本进程管理
1、实验目的
通过观察任务管理器,来观察各个进程的动态信息。
2、实验工具
(1)一台WindowsXP操作系统的计算机。
(2)计算机装有Microsoft Visual Studio C++6.0专业版或企业版。
3、预备知识
·任务管理器,了解用户计算机上正在运行的程序和进程的相关信息。
步骤四:将下面的程序源代码输入。
步骤五:单击Windows系统的“开始”→“运行”选项,输入cmd。
步骤六:依次输入命令为:
cd\
d://这里是存放的源程序地方,如果是放在其他地方,则利用cd命令进入源程序的地方
CL 3.cpp//对这是源程序进行编译
步骤七:若没有错误,则会自动生成3.exe和3.obj文件,双击”3.exe”,
# pragma comment(lib,”user32.lib”)
intAPIENTRYWinMain(HINSTANCEhInstance,
HINSTANCEhPrevInstance,
LPSTRlpCmdLine,
intnCmdShow)
{
∷MessageBox(
NULL, //没有父窗口
“hello windows XP”, //消息框中的文本显示hello windows XP
DWORDdwPctKernel= ::GetKernelModePercentage(
ftKernelMode, //在内核模式上消耗的时间
ftUserMode); //在用户模式下消耗的时间
//向用户显示进程的某些信息
cout<< "process ID:" << pe.th32ProcessID
相关文档
最新文档