Linux操作系统实验:进程观测与fork使用

版权申诉
5星 · 超过95%的资源 3 下载量 173 浏览量 更新于2024-09-10 收藏 517KB DOC 举报
"本次实验是关于计算机操作系统的进程观测,主要在Linux环境下进行。实验旨在让学生理解进程的特点,学习如何查看进程状态,并通过编写程序来实践fork和vfork函数,了解父进程与子进程的关系。实验包含两个部分,分别涉及单进程运行与fork函数生成子进程的观察分析。" 实验一的目的是让学生熟悉Linux下查看进程状态的工具,如`top`和`ps`。`top`用于实时监控系统中所有进程的状态,包括PID(进程ID)、内存使用率和CPU占用率等信息;而`ps`则用于快照式查看某一时刻的进程状态。实验中,学生需要编写一个简单的循环程序,观察其运行时的进程ID,并使用`kill`命令终止进程,同时记录和分析进程的状态数据。 在实验的第二部分,学生需要使用`fork()`函数创建一个子进程。`fork()`函数会复制当前进程的所有信息,返回值在父进程和子进程中不同,从而可以区分它们。在这个实验中,父进程和子进程都会执行一个循环打印语句,但子进程的输出中会包含特定的标识。学生需要分析输出结果并解释现象。通过比较两种不同的程序设计(子进程先执行打印或父进程先执行打印),可以深入理解父子进程的执行顺序和并发特性。 实验步骤中的代码展示了如何使用`fork()`创建子进程。在子进程中,一个循环会打印出"I am the child process",而在父进程中,同样的循环会打印出"I am the parent process"。当`fork()`成功时,它会返回两次,一次在父进程中返回新创建子进程的PID,一次在子进程中返回0。因此,根据`fork()`的返回值,我们可以区分哪个是父进程,哪个是子进程。 在修改后的示例中,子进程的循环被保留,而父进程的循环被删除。这种情况下,子进程会一直打印"I am the child process",直到父进程结束。这展示了在没有父进程同步控制的情况下,子进程可能会无限期地运行。 通过这个实验,学生可以深刻理解进程的创建、管理以及它们如何共享和竞争系统资源,尤其是CPU时间片。这不仅强化了对操作系统基本概念的理解,也为后续更复杂的多线程编程和并发控制奠定了基础。
2009-06-29 上传
Windows 2000可以识别的应用程序包括控制台应用程序、GUI应用程序和服务应用程序。控制台应用程序可以创建GUI,GUI应用程序可以作为服务来运行,服务也可以向标准的输出流写入数据。不同类型应用程序间的惟一重要区别是其启动方法。 Windows 2000是以NT的技术构建的,它提供了创建控制台应用程序的能力,使用户可以利用标准的C++工具,如iostream库中的cout和cin对象,来创建小型应用程序。当系统运行时,Windows 2000的服务通常要向系统用户提供所需功能。 服务应用程序类型需要ServiceMail() 函数,由服务控制管理器 (SCM) 加以调用。SCM是操作系统的集成部分,负责响应系统启动以开始服务、指导用户控制或从另一个服务中来的请求。其本身负责使应用程序的行为像一个服务。通常,服务登录到特殊的LocalSystem账号下,此账号具有与开发人员创建的服务不同的权限。 当令C++ 编译器创建可执行程序时,编译器将源代码编译成OBJ文件,然后将其与标准库相链接。产生的EXE文件是装载器指令、机器指令和应用程序的数据的集合。装载器指令告诉系统从哪里装载机器代码。另一个装载器指令告诉系统从哪里开始执行进程的主线程。在进行某些设置后,进入开发者提供的main() 、ServiceMain() 或WinMain() 函数的低级入口点。机器代码中包括有控制逻辑,它所做的事包括跳转到Windows API函数,进行计算或向磁盘写入数据等。 Windows允许开发人员将大型应用程序分为较小的、互相有关系的服务模块,即动态链接库 (DLL) 代码块,在其中包含应用程序所使用的机器代码和应用程序的数据。