操作系统实验一.docx
- 文档编号:4981343
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:16
- 大小:187.99KB
操作系统实验一.docx
《操作系统实验一.docx》由会员分享,可在线阅读,更多相关《操作系统实验一.docx(16页珍藏版)》请在冰豆网上搜索。
操作系统实验一
重庆大学实验报告
实验题目:
多线程和多进程的管理与调度学院:
计算机学院专业班级:
年级:
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; } 三、实验结果及分析和(或)源程序调试过程
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验
![提示](https://static.bdocx.com/images/bang_tan.gif)