《操作系统》实验一 进程创建

《操作系统》实验一 进程创建

ID:9303965

大小:47.50 KB

页数:6页

时间:2018-04-27

《操作系统》实验一 进程创建_第1页
《操作系统》实验一 进程创建_第2页
《操作系统》实验一 进程创建_第3页
《操作系统》实验一 进程创建_第4页
《操作系统》实验一 进程创建_第5页
资源描述:

《《操作系统》实验一 进程创建》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、实验一进程创建与撤消一、实验目的通过进程的创建、控制和通讯的设计达到下述目的:⑴加深对进程概念的理解,明确进程和程序的区别;⑵进一步认识并发(共行)执行的概念,区别顺序执行和并发(共行)执行;⑶分析进程争用临界资源的现象,学习解决进程互斥的方法.二、实验要求实现进程控制中的进程创建和进程撤消的功能,使系统能正常工作,并支持内存中的多个用户进程依次调度执行。三、实验内容1、数据结构进程控制块pcb和进程队列结构1)进程控制块pcb定义my.h中定义了pcb结构。该结构中各符号的意义说明如下:structpcb{intid/*进程id号*/name[10];/*进程符

2、号名*/regxreg;/*进程现场保护区*/priority;/*进程优先级*/status;/*进程状态指针*/next;/*进程当前队列链接字*/all_q_next;/*总链队列链接字*/}pcba[num4];2)进程现场保护区regx定义typedefstrustregist{intflag;1ntax;intbx;intcx;intdx;intsi;intdi;intbp;intds;1ntes;lntsp;intSS;intip;intcs;}regx;2、算法1)进程的创建创建一个指名进程,调用格式为:pcbcreat(name);该调用的入口是

3、一个字符指针,指向创建进程符号名字符串,出口是创建进程pcb的地址,它由一个全程变量pcb_addr指向创建进程pcb的首址。创建一个进程的主要工作是找一个空的pcb结构(即id=-1的pcb结构),然后根据系统进程和用户进程的不同填写pcb的信息。用户进程的id为pcb结构数组中的序号,状态为"ready“。其优先级在prio的基础上变化。而系统进程的id应设置为一个特殊值(例如100),其状态为"system",优先级定为0。有关pcb现场保护区的信息,因为调用pcbcreat之前已对进程进行了初始化工作,且初始信息都已送到内存r区,所以在pcbcreat中设

4、置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(是用户进程)插

5、入到就绪队列;}创建流程如下:入口查pcb总链有同名?向pcb资源池申请一个空的pcb结构有pcb?将入口信息填入pcb相应项将pcb入就绪队列和总链队列返回2)进程撤消kill进程撤消功能由kill()完成。其功能就是从总链队列中摘下此pcb结构,并将该pcb中的id置为-1,然后转进程调度程序。3)查找同名进程searchsearch函数的功能是在pcb总链上查找同名进程,若有同名进程存在,则返回的指针值为找到的pcb地址,否则指针值为空。此函数定义如下:struetpcbfar*search(name)char*name.说明:该函数的返回值为指向pcb结构

6、的指针。四.示例(1)用4个基本系统调用实现进程的创建、执行和自我终止:①fork()。创建一个子进程。用它创建的子进程是fork调用者进程(即父进程)的复制品,即进程映象。除了进程标识数以及与进程特性有关的一些参数外,其它与父进程相同,与父进程共享文本段和打开的文件,并都受进程调度程序的调度。如果创建进程失败,则fork()返回值为-1:若创建进程成功,则从父进程返回值是子进程号,从子进程返回的值是0,返回值在R0。m=fork()。②wait()。父进程处于阻塞(或等待)状态,等待子进程执行完成终止后继续工作。其返回值R0为等待子进程的子进程号。n=wait(

7、)。③exit()。子进程自我终止,释放所占资源,通知父进程可以删除自己。此时它的状态变成P_state=SZOMB。④getpid()。获得进程的标识数(进程号),一般是正整数。P=getpid()。编程示例:例1.编写一个程序,父进程生成一个子进程,父进程等待子进程wait(),子进程执行完成后自我终止exit(),并唤醒父进程。父、子进程执行时打印有关信息。main(){inti,j,k;if(i=fork())//非零值{j=wait();printf(“Parentprocess!”);printf(“i=%dk=%d,i,k);}else{k=

8、getpi

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。