云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 《操作系统》基本课程实验指导书-2014

《操作系统》基本课程实验指导书-2014

  • 62 次阅读
  • 3 次下载
  • 2025/6/1 3:25:11

//part2

#include #include #include

static void sighandle(int); static long realsecond = 0; static long vtsecond = 0;

static long profsecond = 0;

static struct itimerval realt,virtt,proft; int main(){

struct itimerval v; int i,j;

long moresec,moremsec,t1,t2; signal(SIGALRM,sighandle); signal(SIGVTALRM,sighandle); signal(SIGPROF,sighandle); v.it_interval.tv_sec = 10; v.it_interval.tv_usec = 0; v.it_value.tv_sec = 10; v.it_value.tv_usec = 0;

setitimer(ITIMER_REAL,&v,NULL); setitimer(ITIMER_VIRTUAL,&v,NULL);

setitimer(ITIMER_PROF,&v,NULL); for(j= 0;j<1000;j++){

for(i= 0;i<500;i++){printf(\ } getitimer(ITIMER_PROF,&proft);

getitimer(ITIMER_REAL,&realt); getitimer(ITIMER_VIRTUAL,&virtt); printf(\

moresec = 10 - realt.it_value.tv_sec;

moremsec = (1000000 - realt.it_value.tv_usec)/1000;

printf(\

moresec = 10 - proft.it_value.tv_sec;

moremsec = (1000000 - proft.it_value.tv_usec)/1000;

printf(\

moresec = 10 - virtt.it_value.tv_sec;

moremsec = (1000000 - virtt.it_value.tv_usec)/1000;

printf(\

t1 = (10 - proft.it_value.tv_sec)*1000 + (1000000 - proft.it_value.tv_usec)/1000 + profsecond*10000; t2 = (10 - virtt.it_value.tv_sec)*1000 + (1000000 - virtt.it_value.tv_usec)/1000 + vtsecond*10000; }

static void sighandle(int s) { }

switch(s){ case SIGALRM:realsecond+=10;break; case SIGVTALRM:vtsecond+=10;break; case SIGPROF:profsecond+=10;break;

default :break; }

moresec = (t1 - t2)/1000; moremsec = (t1 - t2) % 1000;

printf(\fflush(stdout);

C、编写一个主程序产生两个子进程,分别低轨计算N =20,30,36的Fibonacci序列。分

别对三个进程计算相应的real time, cpu time,user time ,kernel time。 设计思路:

与(2)原理基本相同,不同的只是在任务开始前要分别设定好每个进程的定时器,而且其最终的实验结果也由相应进程自身打印出来。

C.3、shell程序源代码清单

/**************part3.c***************/ //part3

#include #include #include

#include

static void c1_sighandle(int s); static void c2_sighandle(int s); static void p_sighandle(int s);

static long p_realt_secs = 0,c1_realt_secs = 0,c2_realt_secs = 0; static long p_virtt_secs = 0,c1_virtt_secs = 0,c2_virtt_secs = 0; static long p_proft_secs = 0,c1_proft_secs = 0,c2_proft_secs = 0; static struct itimerval p_realt,c1_realt,c2_realt; static struct itimerval p_virtt,c1_virtt,c2_virtt; static struct itimerval p_proft,c1_proft,c2_proft; static struct itimerval ini_value;

int main(){ int fib = 0; int pid1,pid2; int status;

long moresec,moremsec,t1,t2; pid1 = fork();

if (pid1 == 0){//c1 //set c1 signal handle c);

moresec = 10 - c1_virtt.it_value.tv_sec;

moremsec = (1000000 - c1_virtt.it_value.tv_usec)/1000;

printf(\

moresec = 10 - c1_proft.it_value.tv_sec;

moremsec = (1000000 - c1_proft.it_value.tv_usec)/1000;

printf(\

signal(SIGALRM,c1_sighandle); signal(SIGVTALRM,c1_sighandle); signal(SIGPROF,c1_sighandle); ini_value.it_interval.tv_sec = 10; ini_value.it_interval.tv_usec = 0; ini_value.it_value.tv_sec = 10; ini_value.it_value.tv_usec = 0; //set c1 timer

setitimer(ITIMER_REAL,&ini_value,NULL); setitimer(ITIMER_VIRTUAL,&ini_value,NULL); setitimer(ITIMER_PROF,&ini_value,NULL); fib = fibonacci(20);

//get timer of c1 and print

getitimer(ITIMER_REAL,&c1_realt); getitimer(ITIMER_VIRTUAL,&c1_virtt); getitimer(ITIMER_PROF,&c1_proft); printf(\

moresec = 10 - c1_realt.it_value.tv_sec;

moremsec = (1000000 - c1_realt.it_value.tv_usec)/1000;

printf(\

t1=(10-c1_proft.it_value.tv_sec)*1000+(1000000-c1_proft.it_value.tv_usec)/1000 +

c1_proft_secs*10000; t2=(10-c1_virtt.it_value.tv_sec)*1000+(1000000-c1_virtt.it_value.tv_usec)/1000 + c1_virtt_secs*10000; moresec = (t1 - t2)/1000;

moremsec = (t1 - t2) % 1000;

printf(\fflush(stdout); exit(0);

}//end c1

else{

pid2 = fork();

if (pid2 == 0){//c2 //set c2 signal handle

signal(SIGALRM,c2_sighandle); signal(SIGVTALRM,c2_sighandle); signal(SIGPROF,c2_sighandle); ini_value.it_interval.tv_sec = 10; ini_value.it_interval.tv_usec = 0; ini_value.it_value.tv_sec =10; ini_value.it_value.tv_usec = 0;

//set c2 timer

setitimer(ITIMER_REAL,&ini_value,NULL); setitimer(ITIMER_VIRTUAL,&ini_value,NULL); setitimer(ITIMER_PROF,&ini_value,NULL); fib = fibonacci(30);

//get timer of c2 and print

getitimer(ITIMER_PROF,&c2_proft); getitimer(ITIMER_REAL,&c2_realt); getitimer(ITIMER_VIRTUAL,&c2_virtt); printf(\

moresec = 10 - c2_realt.it_value.tv_sec;

moremsec = (1000000 - c2_realt.it_value.tv_usec)/1000;

printf(\emsec);

moresec = 10 - c2_proft.it_value.tv_sec;

moremsec = (1000000 - c2_proft.it_value.tv_usec)/1000;

printf(\moresec = 10 - c2_virtt.it_value.tv_sec;

  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

//part2 #include #include #include static void sighandle(int); static long realsecond = 0; static long vtsecond = 0; static long profsecond = 0; static struct itimerval realt,virtt,proft; int main(){ struct itimerval v; int i,j; long moresec,moremsec,t1,t2; signal(SIGALRM,sighandle); signal(SIGVTALRM,sigh

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com