操作系统实验指导书

windows的“任务管理器”观察进程的状态,进行进程的创建、切换和撤销。

(2)语言级—以普通程序员身份认识高级语言VC++/Java/VB的进程创建与撤销工具。

(3)模拟级—以OS设计师身份编程模拟实现进程创建与撤销功能,并在屏幕上观察进程活动的结果。 三、实验步骤

1、windows的进程管理 当前状态

图2-1 windows任务管理器

切换前

第 5 页 共 25 页

图2-2 windows任务管理器

切换后

图2-3 windows任务管理器

撤销

第 6 页 共 25 页

图2-4 windows任务管理器

2、VC++进程创建与撤销工具

Windows所创建的每个进程都从调用CreateProcess() API函数开始,该函数的任务是在对象管理器子系统内初始化进程对象。每一进程都以调用ExitProcess() 或TerminateProcess() API函数终止。通常应用程序的框架负责调用 ExitProcess() 函数。对于C++ 运行库来说,这一调用发生在应用程序的main() 函数返回之后。

本实验显示了创建子进程的基本框架。该程序只是再一次地启动自身,显示它的系统进程ID和它在进程列表中的位置。

步骤1:登录进入Windows。

步骤2:在“开始”菜单中单击“程序”-“Microsoft Visual Studio 6.0”–“Microsoft Visual C++ 6.0”命令,进入Visual C++窗口。

第 7 页 共 25 页

步骤3:“文件”->“新建”->“C++ Source File”,建立源程序2-1.cpp。

清单2-1 创建子进程

#include #include

int main(int argc, CHAR* argv[]) { STARTUPINFO si;

PROCESS_INFORMATION pi;

ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si);

ZeroMemory( &pi, sizeof(pi) );

std::string strCmdLine = \ // Start the child process.

if( !CreateProcess( NULL, // No module name (use command line) (LPSTR)strCmdLine.c_str(), // Command line NULL, // Process handle not inheritable NULL, // Thread handle not inheritable FALSE, // Set handle inheritance to FALSE 0, // No creation flags

NULL, // Use parent's environment block NULL, // Use parent's starting directory &si, // Pointer to STARTUPINFO structure

&pi) // Pointer to PROCESS_INFORMATION structure ) {

printf( \ return 1; }

// Wait until child process exits.

WaitForSingleObject( pi.hProcess, INFINITE ); // Close process and thread handles. CloseHandle( pi.hProcess ); CloseHandle( pi.hThread ); getchar(); return 0; }

步骤4:单击“Build”菜单中的“Compile 2-1.cpp”命令,系统显示:

This build command requires an active project workspace. Would

you like to create a default project workspace ?

第 8 页 共 25 页

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4