操作系统实验一Word文档下载推荐.docx
《操作系统实验一Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《操作系统实验一Word文档下载推荐.docx(16页珍藏版)》请在冰豆网上搜索。
缺勤(0分)
软件
/系统质量
60
功能考虑完善,界面友好,Bug极少,针对异常情况有处理(55-60分)
功能考虑完善,界面良好,有一定Bug(49-54分)
功能较完善,Bug较多(43-48分)
完成程序基本功能(36-42分)
部分实现,无法运行(1-35分)
抄袭、被抄袭(0分)
实验演示答辩
重点突出、有特色、专业知识掌握好、能流畅回答老师提问(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.进程管理
编写程序,获取系统当前执行进程的信息,包括进程名称与ID、PID和PGID等。
2.线程管理
传递整数值传递字符
二、实验过程或算法(源程序)
#include<
stdio.h>
unistd.h>
stdlib.h>
pthread.h>
sys/types.h>
sys/wait.h>
//线程1:
求1~n之间的素数
void*MyThread1(void*in)
{
intn;
inth=0,leap=1,k,m,i;
printf("
inputthevalueofn:
\n"
);
//输入n的值scanf("
%d"
&
n);
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("
}leap=1;
}
\nthread1exit!
//线程1退出
pthread_exit(0);
}
//线程2:
生成Fibonacci序列
void*MyThread2(void*in)
intfib0=0,fib1=1,fib2,i,N;
inputfibvalueN:
//输入N值scanf("
N);
thefibsequenceasfollowing:
for(i=0;
N;
i++){if(i==0)printf("
0"
elseif(i==1)printf("
1"
else{fib2=fib0+fib1;
%d"
fib2);
fib0=fib1;
fib1=fib2;
}}
\nthread2exit!
//线程2退出
//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){
//如果出错,报错提示
Creatpthread1error!
return1;
//调用pthread_create()函数来创建线程2
ret2=pthread_create(&
id2,NULL,MyThread2,NULL);
//ret2==1表示创建失败;
//ret2==0表示创建成功;
if(ret2){
Creatpthread2error!
pthread_join(id1,NULL);
//主线程等待线程1结束pthread_join(id2,NULL);
//主线程等待线程2结束
mainthread4exit!
//主线程退出
return0;
//3号进程创建的子进程分别调用下面这个函数来完成不同任务voidChildFun(inti)
switch(i){case4:
ThisisNo.4process,IDis%d,parentIDis%d,willcreat2thread\n"
getpid(),getppid());
MainThread4();
case5:
ThisisNo.5process,IDis%d,parentIDis%d,willexcute./proc2\n"
execl("
proc2"
"
./proc2"
NULL);
default:
}exit(0);
//3号进程来创建两个子进程
intCreatProcess()
inti;
for(inti=4;
=5;
i++)
{pid_tchild;
child=fork();
//创建失败
if(child==-1){
Errorhappenedinforkfuction!
//子进程返回值为0
elseif(child==0)ChildFun(i);
//调用函数执行不同操作
for(inti=0;
=1;
{
//进程等待其他子进程的退出
pid_tcpid=wait(NULL);
Theprocess%dexit\n"
cpid);
//父进程创建的两个进程分别调用下面这个函数来完成不同任务voidFun(inti)
switch(i){case2:
ThisisNo.2process,IDis%d,parentIDis%d,willexecutecommand:
ls-l:
//2号进程调用execl函数来执行ls-l命令
/bin/ls"
ls"
-l"
case3:
ThisisNo.3process,IDis%d,parentIDis%d,willcreat2process\n"
CreatProcess();
//3号进程调用这个函数来创建2个子进程break;
//父进程等待其子进程的退出
intmain()
for(i=2;
=3;
elseif(child==0){
//printf("
NowtheprocessIDis%d:
getpid());
Fun(i);
for(i=0;
//父进程等待子进程的退出
//最后父进程退出
TheNo.1parentprocessIDis%dexit\n"
三、实验结果及分析和(或)源程序调试过程