欢迎来到天天文库
浏览记录
ID:46326233
大小:782.00 KB
页数:10页
时间:2019-11-22
《实验一进程创建模拟》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验一进程创建模拟一、实验目的1)理解进程创建相关理论;2)掌握进程创建方法;3)掌握进程相关数据结构。二、实验内容本实验针对操作系统中进程创建相关理论进行实验。要求实验者输入实验指导书提供的代码并进行测试。代码简化了进程创建的多个步骤和内容。进程的树形结构采用广义二叉树的方式进行存储。三、实验原理1)进程控制块为了描述和控制进程的运行,系统为每个进程定义了一个进程控制块(PCB),它是进程实体的一部分,是操作系统管理进程最重要的数据结构。其主要包含四类信息:(1)进程标识符它唯一地标识一个进程。通常包括进程号pid,父进程号ppid和用户号uid。(2)
2、处理机状态处理器的状态通常由处理机的各种寄存器中的内容组成。PCB存放中断(阻塞,挂起)时的各寄存器值,当该进程重新执行时,可以从断点处恢复。主要包括:a)通用寄存器;b)指令计数器;c)程序状态字PSW;d)用户栈指针。(3)进程调度信息a)进程状态;b)进程优先级(用于描述优先使用cpu级别的一个整数,高优先级的进程先得到cpu,通常情况下,优先值越小优先级越高);c)其它信息(等待时间、总执行时间等);d)事件(等待原因)。(4)进程控制信息a)程序和数据的地址(程序在内存和外存中的首址);b)进程同步和通信机制;c)资源列表(进程除CPU以外的所有
3、资源);d)链接指针(进程队列中指向下一个进程的PCB首址)。2)进程创建流程(1)申请空白PCB为新进程申请获得唯一的数字标识符,并从PCB集合中索取一个空白PCB。如果无空白PCB,可以创建一个新的PCB。在本实验中,每次动态创建PCB。(2)为新进程分配资源为新进程分配内存空间和栈空间。(3)初始化进程控制块a)初始化标识信息;b)初始化处理机状态信息;c)初始化处理机控制信息。(4)将新进程插入就绪队列3)进程树图1-1进程树进程树用于描述进程家族关系,如图1-1中可以看出,进程P1创建了进程P2、P3、P4、P5,而P2又创建了P6、P7、P8…
4、…。在进程创建过程中,需要对每一个新增加的进程加入到进程树中,有了清晰的父子关系,可以使资源继承或进程删除等操作变得很方便。4)进程总链它是一个PCB链表,每一个新创建的进程必须把其PCB放入总链中,该总链可以对破坏的进程树进行修复,也方便PCB查找。P1P2P3P4P5P6P7P8P9P10P11P12四、数据结构及符号说明1、fork()创建一个新进程。系统调用格式:pid=fork()参数定义:intfork()fork()返回值意义如下:0:在子进程中,pid变量保存的fork()返回值为0,表示当前进程是子进程。>0:在父进程中,pid变量保存的
5、fork()返回值为子进程的id值(进程唯一标识符)。-1:创建失败。如果fork()调用成功,它向父进程返回子进程的PID,并向子进程返回0,即fork()被调用了一次,但返回了两次。此时OS在内存中建立一个新进程,所建的新进程是调用fork()父进程(parentprocess)的副本,称为子进程(childprocess)。子进程继承了父进程的许多特性,并具有与父进程完全相同的用户级上下文。父进程与子进程并发执行。五、程序流程图1、父进程创建子进程程序代码:#includemain(){intp,i;while((p=fork())
6、==-1);//创建子进程直至成功if(p==0)//子进程返回{for(i=0;i<5;i++){printf("Thechildprocess!");sleep(1);//延时1秒}}else{//父进程返回for(i=0;i<5;i++){printf("Theparentprocess!");sleep(1);//延时1秒}}}谢谢观赏
此文档下载收益归作者所有