操作系统实验一.docx

上传人:b****3 文档编号:4981343 上传时间:2022-12-12 格式:DOCX 页数:16 大小:187.99KB
下载 相关 举报
操作系统实验一.docx_第1页
第1页 / 共16页
操作系统实验一.docx_第2页
第2页 / 共16页
操作系统实验一.docx_第3页
第3页 / 共16页
操作系统实验一.docx_第4页
第4页 / 共16页
操作系统实验一.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

操作系统实验一.docx

《操作系统实验一.docx》由会员分享,可在线阅读,更多相关《操作系统实验一.docx(16页珍藏版)》请在冰豆网上搜索。

操作系统实验一.docx

操作系统实验一

重庆大学实验报告

实验题目:

多线程和多进程的管理与调度学院:

计算机学院专业班级:

年级:

2015级姓名:

学号:

完成时间:

2017年11月1日指导教师:

重庆大学教务处制

实验项目指导教师评定成绩表

学号:

姓名:

班级:

项目

分值

参考标准

评分

学习态度

10

积极与老师、助教讨论(10分)

学习马虎,纪律涣散(5分)

缺勤(0分)

软件

/系统质量

60

功能考虑完善,界面友好,Bug极少,针对异常情况有处理(55-60分)

功能考虑完善,界面良好,有一定Bug(49-54分)

功能较完善,Bug较多(43-48分)

完成程序基本功能(36-42分)

部分实现,无法运行(1-35分)

抄袭、被抄袭(0分)

实验演示答辩

10

重点突出、有特色、专业知识掌握好、能流畅回答老师提问(9-10分)

有一定特色、能较好地回答老师提问(7-8分)

能讲解项目的关键实现,能回答基本问题(0-6分)

实验报告撰写质量

20

文档规范,文字、图表表达清楚(18-20分)

文档较规范,文字、图表表达较清楚(11-17分)

文档不规范,内容空泛、结构混乱(0-10分)

指导教师评定成绩:

指导教师签名:

年月日

实验1多线程和多进程的管理与调度

实验目的

1.加深对进程概念的理解,明确进程与线程的区别。

2.掌握Linux进程创建和撤销的方法,进一步认识并发执行的实质。

3.了解多线程的程序设计方法。

实验内容

1.进程管理

1)获取进程信息

编写程序,获取系统当前执行进程的信息,包括进程名称与ID、PID和PGID等。

2)创建进程

编写进程,实现父进程创建子进程,返回后父子进程都分别循环输出字符串“Iamparent.”或“Iamchild.”5次,每输出一次延时1秒,然后进入下一次循环。

观察并分析运行结果,然后将程序改为父子进程同步执行:

子进程循环输出字符串“Iamchild.”5次,然后父进程再循环输出字符串“Iamparent.”5次。

观察并分析运行结果。

2.线程管理

1)线程创建

主程序创建两个线程,每个线程循环打印一句话,观察运行结果。

2)线程传参

创建两个线程,分别向线程传递如下两种类型的参数:

●传递整数值

●传递字符

实验要求

1.按照要求编写程序,放在相应的目录中,编译成功后执行,并分析实验结果。

2.比较进程退出的不同方式之间的区别:

exit,return,abort

3.根据实际完成内容写实验报告,在报告中记录实验过程中遇到的问题和针对问题的解决方案。

实验提示

1.进程管理相关命令和函数:

ps,top,pstree,getpid(),getpgid(),fork(),exit()

2.线程管理相关函数:

pthread_create(),pthread_join(),pthread_exit()

3.因为pthread的库不是Linux系统的库,所以编译多线程程序时要加上-lpthread。

年级、专业、班级

2015级物联网工程2班

姓名

徐冲

实验题目

多线程和多进程的管理与调度

实验时间

2017年10月25日

实验地点

主教409

实验成绩

实验性质

□验证性□设计性□综合性

教师评价:

□算法/实验过程正确;□源程序/实验内容提交□程序结构/实验步骤合理;□实验结果正确;□语法、语义正确;□报告规范;其他:

评价教师签名:

一、实验目的

1.加深对进程概念的理解,明确进程与线程的区别。

2.掌握Linux进程创建和撤销的方法,进一步认识并发执行的实质。

3.了解多线程的程序设计方法。

二、实验内容

1.进程管理

1)获取进程信息

编写程序,获取系统当前执行进程的信息,包括进程名称与ID、PID和PGID等。

2)创建进程

编写进程,实现父进程创建子进程,返回后父子进程都分别循环输出字符串“Iamparent.”或“Iamchild.”5次,每输出一次延时1秒,然后进入下一次循环。

观察并分析运行结果,然后将程序改为父子进程同步执行:

子进程循环输出字符串“Iamchild.”5次,然后父进程再循环输出字符串“Iamparent.”5次。

观察并分析运行结果。

2.线程管理

1)线程创建

主程序创建两个线程,每个线程循环打印一句话,观察运行结果。

2)线程传参

创建两个线程,分别向线程传递如下两种类型的参数:

传递整数值传递字符

二、实验过程或算法(源程序)

#include

#include

#include

#include

#include

#include

//线程1:

求1~n之间的素数

void*MyThread1(void*in)

{

intn;inth=0,leap=1,k,m,i;

printf("inputthevalueofn:

\n");//输入n的值scanf("%d",&n);

printf("theprimebetween1~%dis:

\n",n);for(intm=2;m<=n;m++){for(inti=2;i<=m/2;i++){if(m%i==0){leap=0;break;

}}if(leap){printf("%4d",m);h++;if(h%10==0)printf("\n");

}leap=1;}

printf("\nthread1exit!

\n");//线程1退出

pthread_exit(0);

}

//线程2:

生成Fibonacci序列

void*MyThread2(void*in)

{

intfib0=0,fib1=1,fib2,i,N;printf("inputfibvalueN:

\n");//输入N值scanf("%d",&N);

printf("thefibsequenceasfollowing:

\n");

for(i=0;i

}}

printf("\nthread2exit!

\n");//线程2退出

pthread_exit(0);

}

//4号进程来创建2个线程

intMainThread4()

{

intret1=0,ret2=0;

pthread_tid1,id2;//定义两个线程id

//调用pthread_create()函数来创建线程1

ret1=pthread_create(&id1,NULL,MyThread1,NULL);

//ret1==1表示创建失败;

//ret1==0表示创建成功;

if(ret1){

//如果出错,报错提示

printf("Creatpthread1error!

\n");

return1;

}

//调用pthread_create()函数来创建线程2

ret2=pthread_create(&id2,NULL,MyThread2,NULL);

//ret2==1表示创建失败;

//ret2==0表示创建成功;

if(ret2){

//如果出错,报错提示

printf("Creatpthread2error!

\n");

return1;

}

pthread_join(id1,NULL);//主线程等待线程1结束pthread_join(id2,NULL);//主线程等待线程2结束

printf("mainthread4exit!

\n");//主线程退出

return0;

}

//3号进程创建的子进程分别调用下面这个函数来完成不同任务voidChildFun(inti)

{

switch(i){case4:

printf("ThisisNo.4process,IDis%d,parentIDis%d,willcreat2thread\n",getpid(),getppid());MainThread4();break;case5:

printf("ThisisNo.5process,IDis%d,parentIDis%d,willexcute./proc2\n",getpid(),getppid());execl("proc2","./proc2",NULL);

break;default:

break;}exit(0);

}

//3号进程来创建两个子进程

intCreatProcess()

{

inti;

for(inti=4;i<=5;i++)

{pid_tchild;

child=fork();

//创建失败

if(child==-1){

printf("Errorhappenedinforkfuction!

\n");

return0;

}

//子进程返回值为0

elseif(child==0)ChildFun(i);//调用函数执行不同操作

}

for(inti=0;i<=1;i++)

{

//进程等待其他子进程的退出

pid_tcpid=wait(NULL);

printf("Theprocess%dexit\n",cpid);}

return0;

}

//父进程创建的两个进程分别调用下面这个函数来完成不同任务voidFun(inti)

{

switch(i){case2:

printf("ThisisNo.2process,IDis%d,parentIDis%d,willexecutecommand:

ls-l:

\n",getpid(),getppid());

//2号进程调用execl函数来执行ls-l命令

execl("/bin/ls","ls","-l",NULL);

break;case3:

printf("ThisisNo.3process,IDis%d,parentIDis%d,willcreat2process\n",getpid(),getppid());

CreatProcess();//3号进程调用这个函数来创建2个子进程break;default:

break;}

for(inti=0;i<=1;i++)

{

//父进程等待其子进程的退出

pid_tcpid=wait(NULL);

printf("Theprocess%dexit\n",cpid);

}exit(0);

}

intmain()

{

inti;

for(i=2;i<=3;i++)

{pid_tchild;

child=fork();

//创建失败

if(child==-1){

printf("Errorhappenedinforkfuction!

\n");

return0;

}

//子进程返回值为0

elseif(child==0){

//printf("NowtheprocessIDis%d:

\n",getpid());

Fun(i);//调用函数执行不同操作

}}

for(i=0;i<=1;i++)

{

//父进程等待子进程的退出

pid_tcpid=wait(NULL);

printf("Theprocess%dexit\n",cpid);

}

//最后父进程退出

printf("TheNo.1parentprocessIDis%dexit\n",getpid());return0;

}

三、实验结果及分析和(或)源程序调试过程

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1