- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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=%
您可能关注的文档
- 《信息技术基础》模块会考复习题..doc
- 《信息管理基础》课程复习大纲.doc
- 《修饰文章》学案.doc
- 《信用卡核心融资杠杆》笔记.doc
- 《做一个幸福的教师》.ppt
- 《今天我值日》件.ppt
- 《做好生产品质管理》教材.ppt
- 《做学习的主人》课件_图文.ppt
- 《假如生活中没有了诚信》教学策划.doc
- 《信用法》完整版.ppt
- 第三单元解决问题的策略 三年级下册数学高频考点重难点讲义(苏教版)(1).docx
- 4.4 解比例 数学六年级下册同步培优讲义(苏教版).docx
- 第四单元《根据方向与距离确定物体位置》(教案)五年级下册数学青岛版.docx
- (奥数典型题)第三讲 分解质因数 五年级下册数学思维拓展提升讲义(人教版).docx
- 2.2:2、5、3的倍数-人教版五年级数学下册第二单元:因数和倍数.docx
- 第六单元正比例和反比例 六年级下册数学高频考点重难点讲义(苏教版).docx
- 第二单元除数是一位数的除法 三年级下册数学高频考点重难点讲义(人教版).docx
- 第二单元-认识三角形和四边形 四年级数学下册提升(北师大版).docx
- 第一单元观察物体(三)五年级下册数学高频考点重难点讲义(人教版).docx
- 第九单元 数学广角—推理 二年级数学下册重难点知识点(人教版).docx
文档评论(0)