进程控制块
- 格式:ppt
- 大小:908.50 KB
- 文档页数:52


实验一 进程控制
一、实验目的:
加深对进程概念的理解,明确进程和程序的区别;掌握Linux操作系统的进程创建和终止操作,体会父进程和子进程的关系及进程状态的变化;进一步认识并发执行的实质,编写并发程序。
二、实验平台:
虚拟机:VMWare9以上
操作系统:Ubuntu12.04以上
编辑器:Gedit | Vim
编译器:Gcc
三、实验内容:
(1)编写一段程序,使用系统调用fork()创建两个子进程,当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示“身份信息”:父进程显示“Parent process! PID=xxx1 PPID=xxx2”;子进程显示“Childx process! PID=xxx PPID=xxx”。多运行几次,观察记录屏幕上的显示结果,并分析原因。
说明:
xxx1为进程号,用getpid()函数可获取进程号;
xxx2为父进程号,用getppid()函数可获取父进程号;
Childx中x为1和2,用来区别两个子进程;
wait()函数用来避免父进程在子进程终止之前终止。
程序源码:
#include
#include
#include
#define NUM 2
int main(void)
{
pid_t pid1,pid2;
if((pid1=fork())<0){
printf("创建进程1失败");
}else{
if(pid1==0){
//子进程1执行
printf("Child1 process: ");
printf("PID=%d PPID=%d \n",getpid(),getppid());
sleep(2);
}else{
实验一、进程控制实验
1.1 实验目的
加深对于进程并发执行概念的理解。实践并发进程的创建和控制方法。观察和体验进程的动态特性。进一步理解进程生命期期间创建、变换、撤销状态变换的过程。掌握进程控制的方法,了解父子进程间的控制和协作关系。练习 Linux 系统中进程创建与控制有关的系统调用的编程和调试技术。
1.2 实验说明
1)与进程创建、执行有关的系统调用说明 进程可以通过系统调用fork()创建子进程并和其子进程并发执行.子进程初始的执行映像是父进程的一个复本.子进程可以通过
exec()系统调用族装入一个新的执行程序。父进程可以使用 wait()或 waitpid()系统调用等待子进程的结束并负责收集和清理子进程的退出状态。
fork()系统调用语法:
#include pid_t
fork(void);
fork 成功创建子进程后将返回子进程的进程号,不成功会返回-1.
exec 系统调用有一组 6 个函数,其中示例实验中引用了 execve 系统调用语法:
#include
int execve(const char *path, const char *argv[], const char * envp[]); path 要装入的新的执行文件的绝对路径名字符串.
argv[] 要传递给新执行程序的完整的命令参数列表(可以为空).
envp[] 要传递给新执行程序的完整的环境变量参数列表(可以为空). Exec 执行成功后将用一个新的程序代替原进程,但进程号不变,它绝不会再返回到调用进程了。如果 exec 调用失败,它会返回-1。
wait() 系统调用语法:
#include
#include pid_t
wait(int *status);
概述
进程控制块(PCB)(系统为了管理进程设置的一个专门的数据结构,用它
来记录进程的外部特征,描述进程的运动变化过程。系统利用PCB来控制
和管理进程,所以PCB是系统感知进程存在的唯一标志。进程与PCB是一
一对应的)
编辑本段应用
在不同的操作系统中对进程的控制和管理机制不同,PCB中的信息多少也
不一样,通常PCB应包含如下一些信息。
1、进程标识符 name:
每个进程都必须有一个唯一的标识符,可以是字符串,也可以是一个数
字。
2、进程当前状态 status:
说明进程当前所处的状态。为了管理的方便,系统设计时会将相
同的状态的进程组成一个队列,如就绪进程队列,等待进程则要根据等
待的事件组成多个等待队列,如等待打印机队列、等待磁盘I/O完成队列
等等。
3、进程相应的程序和数据地址,以便把PCB与其程序和数据联系起来。
4、进程资源清单。列出所拥有的除CPU外的资源记录,如拥有的I/O设备
,打开的文件列表等。
5、进程优先级 priority:
进程的优先级反映进程的紧迫程度,通常由用户指定和系统设置。
6、CPU现场保护区 cpustatus:
当进程因某种原因不能继续占用CPU时(如等待打印机),释放CPU
,这时就要将CPU的各种状态信息保护起来,为将来再次得到处理机恢复
CPU的各种状态,继续运行。
7、进程同步与通信机制 用于实现进程间互斥、同步和通信所需的信号
量等。
8、进程所在队列PCB的链接字 根据进程所处的现行状态,进程相应
的PCB参加到不同队列中。PCB链接字指出该进程所在队列中下一个进程
PCB的首地址。
9、与进程有关的其他信息。 如进程记账信息,进程占用CPU的时间等。
编辑本段实例
实验一:进程控制与描述
一、实验目的:
利用Windows提供的API函数,编写程序,实现进程的创建和终止(如创建写字板进程及终止该进程),加深对操作系统进程概念的理解,观察操作系统进程运行的动态性能,获得包含多进程的应用程序编程经验。
二、实验原理:
1.进程的创建
进程的创建通过CreateProcess()函数来实现,CreateProcess()通过创建一个新的进程及在其地址空间内运行的主线程来启动并运行一个新的程序。具体地,在执行CreateProcess()函数时,首先由操作系统负责创建一个进程内核对象,初始化计数为1,并立即为新进程创建一块虚拟地址空间。随后将可执行文件或其他任何必要的动态链接库文件的代码和数据装载到该地址空间中。在创建主线程时,也是首先由系统负责创建一个线程内核对象,并初始化为1。最后启动主线程并执行进程的入口函数WinMain(),完成对进程和执行线程的创建。
2.实现技巧
CreateProcess()函数的原型声明如下:
BOOL CreateProcess(
LPCTSTR lpApplicationName, // 可执行模块名
LPTSTR lpCommandLine, // 命令行字符串
LPSECURITY_ATTRIBUTES lpProcessAttributes, // 进程的安全属性
LPSECURITY_ATTRIBUTES lpThreadAttributes, // 线程的安全属性
BOOL bInheritHandles, // 句柄继承标志
DWORD dwCreationFlags, // 创建标志
LPVOID lpEnvironment, // 指向新的环境块的指针
LPCTSTR lpCurrentDirectory, // 指向当前目录名的指针