哈工大《操作系统》实验3

上传人:鲁** 文档编号:475812342 上传时间:2023-05-09 格式:DOCX 页数:8 大小:102.49KB
返回 下载 相关 举报
哈工大《操作系统》实验3_第1页
第1页 / 共8页
哈工大《操作系统》实验3_第2页
第2页 / 共8页
哈工大《操作系统》实验3_第3页
第3页 / 共8页
哈工大《操作系统》实验3_第4页
第4页 / 共8页
哈工大《操作系统》实验3_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《哈工大《操作系统》实验3》由会员分享,可在线阅读,更多相关《哈工大《操作系统》实验3(8页珍藏版)》请在金锄头文库上搜索。

1、2014级本科操作系统实验报告(实验 3)学生姓名曾帅学号1143710412院系软件学院任课教师范国祥实验TAXXX实验地点软件学院三楼实验室实验时间2016年05月26日星期四实验题目进程管理实验学时3学时实验目的:掌握Linux下的多进程编程技术;通过对进程运行轨迹的跟踪来形象化进程的概念;在进程运行轨迹跟踪的基础上进行相应的数据统计,从而能对进程调度算法进行实际的量化评价, 更进一步加深对调度和调度算法的理解,获得能在实际操作系统上对调度算法进行实验数据对比的直接 经验。实验内容及要求:(1) 基于模板“process.c”编与多进程的样本程序,实现如下功能:所有子进程都并行运行,每个

2、子进程的实际运行时间一般不超过30秒;父进程向标准输出打印所有子进程的id,并在所有子进程都退出后才退出。(2) 在Linux 0.11上实现进程运行轨迹的跟踪。基本任务是在内核中维护一个日志文件/var/ process.log,把从操作系统启动到系统关机过程中所有进程的运行轨迹都记录在这一log文件中。(3) 在修改过的Linux0.11上运行样本程序,通过分析log文件,统计该程序建立的所有进程的等 待时间、完成时间(周转时间)和运行时间,然后计算平均等待时间,平均完成时间和吞吐量。可以自 己编写统计程序,也可以使用python脚本程序“stat_log.进行统计。(4) 修改Linux

3、0.11进程调度的时间片,然后再运行同样的样本程序,统计同样的时间数据,和原 有的情况对比,体会不冋时间片带来的差异。实验过程描述、结果及思考:简要描述实验过程(含操作步骤及看到的结果)。(1) 在ubuntu下,利用系统提供的进程控制函数fork、wait系统调用编写多进程程序process.c,编译 运行,分析运行结果,之后开始修改linux0.11内核。(2) 在init/main.c中的m ain ()中添加创建日志文件/var/process.log的语句。需要在把log文件关联到文件 描述符3, 0 1 2分别是stdin stdout和stderr,按照如下方式修改:137 mo

4、ve to user mode() ;/* 切换到用户模式 */138 /*/139 setup(void *)&drive info);140 (void) open(,/dev/tty0,0 RDWR,);/*建立文件描述符和/dev/ttyO的关联*/141 (void) dup(0);一/*文件描述符 1也和/dev/ttyO关联*/142 (void) dup(0);/*文件描述符2也和/dev/ttyO关联*/143 (void) open(/var/process.log,0 CREAT10 TRUNC10 WRONLY,0666);145 if (!fork() /* we c

5、ount on this going ok */146 init();(3) 向kernel/printk.c中添加日志打印功能,将以下代码添加到原文件中:14#include 15#include 44454647464950static char logbufiiez*!; intfprlntk(ijrt fd, cxnsI char *fnrt,)va Iist args;int county struct file * file;: struct m incicte * inodejvaij&tarttargs. frrU:CDtint=w:s.prlntr(logbuT F fit

6、r arg&h va_encHarg5.);if (fd filpfd) /*从进程0的文件描述符表中得到文件句柄/73return 0;74inode=file-f_inode;7576asm (push %fsntM77 push %dsntM78pop %fsnt79”pushl %0ntw80“pushl $logbufntH81pushl %lnt82”pushl %2nt83”call file writent84858687888990“addl $12,%espnt”popl %entpop %fs:r (count),r (file)/r (inode):ax,cxfdx|

7、return count;(4) 在kernel/fork.c、kernel/sched.c和kernel/exit.c中,找到正确的状态转换点,并添加合适的状态信息,把它输出到log文件之中。 fork.c的修改如下:92939495969713613713813914Q141p-start time = jiffies;/*在初始化f进稈的开始时间向log文件输出一条进程创建的log*/ fprintk(3, ,%ldt%ct%ldnM,last pid,N Jiffies); /*/ ptss.back link = 0; p-state = TASKRUNNING;/*输出一个进入就绪

8、队列的log*/| fprintk(3,%ldt%ct%ldnflastpid,JJiffies);/* do this last, just in case /return last pid;exit.c的修改如下:174175176177178179190191192193194195196197code = (*p)exit code;:输出一条进稈迫出的Log*/fprintk(3f tt%ldt%ct%ldn,flag fE1 Jiffies);release严p);current-state=TASK INTERRUPTIBLE;/*/*输出一条等待的Log*/if (curren

9、t-pid!=0)fprintk(3,ldt%ct%ldn”疋urentpid,*WJiffies); scheduleO;if (! (current-signal &= *(1(SIGCHLD-1)sched.c的修改如下:11711811912&121122123124125if | (*pj& -_BL0CKABL L ( *p)-blotkfrd)丛(pl-state=TA$K_IWTffiWfTIBLE)tte=TA5K_RUNMIMG:y * + *+ * 44*4+ *4*4+-#* f户蹩出的Log* fprirrtk3, (*p)pid, PJ Jiffies);14314

10、4145146147148149150151152153154155156(*p)counter = (*p)counter 1) + (*p)-priority;if(current-state = TASK RUNNING & current != tasknext) 严输出就缩的Log*/ fprintk(3,%ldt%ct%ldn,current-pid,JJiffies); if(current != tasknext)/*输出可运行的Log*/ fprintk(3,%ldt%ct%ldn,tasknext-pid, RJiffies); /*/switchto(next);158

11、int159 160161162163164165166167168 sys pause(void)current-state = TASK INTERRUPTIBLE;/*检査并输出等待的Log*/if (current-pid != 0)fprintk(3,%ldt%ct%ldn,current-pid,WJiffies);schedule();return 0;179180181182183184185186187188189190191192193194p = current; current-state = TASK UNINTERRUPTIBLE; /*m *“*/厂检査并输出等待的Log*/ if (currentpid != 0) fprintk(3,%ldt%ct%ldn*fcurrent-pid, W* jiffies);schedule。; if (tmp)tmpstate=0;严输出就纟耆的Log*/fprintk(3,M%ldt%ct%ldnftmp-pid,J,jifties); /*/207208209210211212213214215216217218219220repeat:current-state = TASKINTERRUPTIBLE;/*检査并输出等待的Log*/if (current-pid != 0)fprintk(3,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 建筑资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号