《操作系统》实验一 进程创建.doc_第1页
《操作系统》实验一 进程创建.doc_第2页
《操作系统》实验一 进程创建.doc_第3页
《操作系统》实验一 进程创建.doc_第4页
《操作系统》实验一 进程创建.doc_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验一 进程创建与撤消一、实验目的通过进程的创建、控制和通讯的设计达到下述目的:加深对进程概念的理解,明确进程和程序的区别;进一步认识并发(共行)执行的概念,区别顺序执行和并发(共行)执行;分析进程争用临界资源的现象,学习解决进程互斥的方法.二、实验要求实现进程控制中的进程创建和进程撤消的功能,使系统能正常工作,并支持内存中的多个用户进程依次调度执行。三、实验内容1、数据结构进程控制块 pcb 和进程队列结构1)进程控制块pcb定义my.h 中定义了pcb结构。该结构中各符号的意义说明如下:struct pcbint id /*进程id号*/name10; /*进程符号名*/regx reg; /*进程现场保护区*/priority; /*进程优先级*/status; /*进程状态指针*/next;/*进程当前队列链接字*/all_q_next;/*总链队列链接字*/pcbanum4;2)进程现场保护区regx定义typedef strust regist int flag;1nt ax;int bx;int cx;int dx;int si;int di;int bp;int ds;1nt es;lnt sp;int SS;int ip;int cs;regx;2、算法1)进程的创建创建一个指名进程,调用格式为:pcbcreat(name);该调用的入口是一个字符指针,指向创建进程符号名字符串,出口是创建进程pcb的地址,它由一个全程变量pcb_addr指向创建进程pcb的首址。创建一个进程的主要工作是找一个空的pcb结构(即id=-1的pcb结构),然后根据系统进程和用户进程的不同填写pcb的信息。用户进程的id为pcb结构数组中的序号,状态为ready“。其优先级在prio的基础上变化。而系统进程的id应设置为一个特殊值(例如100),其状态为system,优先级定为0。有关pcb现场保护区的信息,因为调用pcbcreat之前已对进程进行了初始化工作,且初始信息都已送到内存r区,所以在pcbcreat中设置pcb现场信息只需将r区的内容送pcb的reg区即可。其功能描述如下:进程创建算法算法pcbcreat输入:指向创建进程符号名的指针输出:指向创建进程pcb首址的指针(全程变量pcb_addr)在 pcb 总链队列中查找同名进程 ;if(有同名进程)显示出错信息;exit();在pcb池中找一个空的pcb结构;if(无空pcb)显示出错信息;exit();pcb_addr指向找到的pcb结构首址;if(是系统进程) 设置系统进程pcb信息;else设置用户进程pcb信息;将r区内容送新创建进程pcb的reg区;新创建进程入总链队列;if(是用户进程)插入到就绪队列;创建流程如下:入口 查pcb总链有同名?向pcb 资源池申请一个空的pcb结构有pcb?将入口信息填入pcb相应项将pcb入就绪队列和总链队列返回2)进程撤消 kill进程撤消功能由 kill()完成。其功能就是从总链队列中摘下此pcb结构,并将该pcb中的id置为-1,然后转进程调度程序。3)查找同名进程searchsearch函数的功能是在pcb总链上查找同名进程,若有同名进程存在,则返回的指针值为找到的pcb地址,否则指针值为空。此函数定义如下:struet pcb far *search(name)char *name.说明:该函数的返回值为指向 pcb 结构的指针。四示例(1)用4个基本系统调用实现进程的创建、执行和自我终止:fork()。创建一个子进程。用它创建的子进程是fork调用者进程(即父进程)的复制品,即进程映象。除了进程标识数以及与进程特性有关的一些参数外,其它与父进程相同,与父进程共享文本段和打开的文件,并都受进程调度程序的调度。如果创建进程失败,则fork()返回值为-1:若创建进程成功,则从父进程返回值是子进程号,从子进程返回的值是0,返回值在R0。m=fork()。wait()。父进程处于阻塞(或等待)状态,等待子进程执行完成终止后继续工作。其返回值R0为等待子进程的子进程号。n=wait()。exit()。子进程自我终止,释放所占资源,通知父进程可以删除自己。此时它的状态变成P_state=SZOMB。getpid()。获得进程的标识数(进程号),一般是正整数。P=getpid()。编程示例:例1. 编写一个程序,父进程生成一个子进程,父进程等待子进程wait(),子进程执行完成后自我终止exit(),并唤醒父进程。父、子进程执行时打印有关信息。main() int i,j,k;if (i=fork() /非零值 j=wait();printf(“Parent process!n”);printf(“i=%d k=%dn,i,k);elsek=getpid();printf(“Child process!n”);printf(“i=%d k=%dn,i,k);五、实验题1、编写一个程序,实现进程的“软中断”通信。使用系统调用fork()创建2个子进程,再使用系统调用signal()让父进程捕捉键盘上来的中断信号(即按Del键),在捕捉到中断信号后,父进程用系统调用kill()向2个子进程发信号,子进程捕捉到信号后分别输出下列信息后终止:Child process 1 is killed by parent !Child process 3 is killed by parent !父进程等待2个子进程都终止后,输出如下信息后终止:Parent process is killed !2、编写一段程序,实现进程的管道通信。使用系统调用pipe()建立一条子管道线,2个子进程分别循环向这条管道写一句话:child1 is sending a message! Child2 is sending a message!而父进程则循环从管道中读出信息,显示在屏幕上。 3、编写一个程序,用系统调用fork()创建2个子进程。让每个进程输出一句话。并利用系统调用locking在各进程执行时控制加锁。观察程序执行时屏幕上出现的现象,并说明

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论