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

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《操作系统》实验一 进程创建

实验一 进程创建与撤消 一、目的 通过进程的创建、控制和通讯的设计达到下述目的: ⑴加深对进程概念的理解,明确进程和程序的区别; ⑵进一步认识并发(共行)执行的概念,区别顺序执行和并发(共行)执行; ⑶分析进程争用临界资源的现象,学习解决进程互斥的方法.、内容 进程控制块 pcb 和进程队列结构 1)进程控制块pcb定义 my.h 中定义了pcb结构。该结构中各符号的意义说明如下: struct pcb { int id /*进程id号*/ name[10]; /*进程符号名*/ regx reg; /*进程现场保护区*/ priority; /*进程优先级*/ status; /*进程状态指针*/ next;/*进程当前队列链接字*/ all_q_next;/*总链队列链接字*/ }pcba[num4]; 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)进程的创建 它由一个全程变量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(是用户进程) 插入到就绪队列; } 创建流程如下: 2)进程撤消 kill 进程撤消功能由 kill()完成。其功能就是从总链队列中摘下此pcb结构,并将该pcb中的id置为-1,然后转进程调度程序。 3)查找同名进程search search函数的功能是在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=%d\n,i,k); } else{k=getpid(); printf(“Child process!\n”); printf(“i=%

文档评论(0)

pangzilva + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档