您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 哈工大《操作系统》实验3
2014级本科《操作系统》实验报告(实验3)学生姓名曾帅学号1143710412院系软件学院任课教师范国祥实验TAXXX实验地点软件学院三楼实验室实验时间2016年05月26日星期四实验题目进程管理实验学时3学时实验目的:掌握Linux下的多进程编程技术;通过对进程运行轨迹的跟踪来形象化进程的概念;在进程运行轨迹跟踪的基础上进行相应的数据统计,从而能对进程调度算法进行实际的量化评价,更进一步加深对调度和调度算法的理解,获得能在实际操作系统上对调度算法进行实验数据对比的直接经验。实验内容及要求:(1)基于模板“process.c”编写多进程的样本程序,实现如下功能:所有子进程都并行运行,每个子进程的实际运行时间一般不超过30秒;父进程向标准输出打印所有子进程的id,并在所有子进程都退出后才退出。(2)在Linux0.11上实现进程运行轨迹的跟踪。基本任务是在内核中维护一个日志文件/var/process.log,把从操作系统启动到系统关机过程中所有进程的运行轨迹都记录在这一log文件中。(3)在修改过的Linux0.11上运行样本程序,通过分析log文件,统计该程序建立的所有进程的等待时间、完成时间(周转时间)和运行时间,然后计算平均等待时间,平均完成时间和吞吐量。可以自己编写统计程序,也可以使用python脚本程序“stat_log.py”进行统计。(4)修改Linux0.11进程调度的时间片,然后再运行同样的样本程序,统计同样的时间数据,和原有的情况对比,体会不同时间片带来的差异。实验过程描述、结果及思考:简要描述实验过程(含操作步骤及看到的结果)。(1)在ubuntu下,利用系统提供的进程控制函数fork、wait系统调用编写多进程程序process.c,编译运行,分析运行结果,之后开始修改linux0.11内核。(2)在init/main.c中的main()中添加创建日志文件/var/process.log的语句。需要在把log文件关联到文件描述符3,012分别是stdinstdout和stderr,按照如下方式修改:(3)向kernel/printk.c中添加日志打印功能,将以下代码添加到原文件中:(4)在kernel/fork.c、kernel/sched.c和kernel/exit.c中,找到正确的状态转换点,并添加合适的状态信息,把它输出到log文件之中。fork.c的修改如下:exit.c的修改如下:sched.c的修改如下:(5)用(4)中修改后的3个程序分别替换linux0.11中原有的程序,并编译内核。(6)运行虚拟机,编译并运行process.c。(7)在虚拟机上运行ls-l/var”或“ll/var”查看process.log是否建立,及它的属性和长度;(8)给stat_log.py加上执行权限(chmod+xstat_log.py),运行“./stat_log.pyprocess.log012345-g”(只统计PID为0、1、2、3、4和5的进程)(9)修改时间片include/linux/sched.h宏INIT_TASK中定义的:0,15,15,分别对应state、counter和priority,将priority值修改,即可实现对时间片大小的调整。问题回答:(1)结合自己的体会,谈谈从程序设计者的角度看,单进程编程和多进程编程最大的区别是什么单进程编程较于多进程编程要更简单,CPU利用率低,因为单进程是顺序执行的,而多进程编程是同步执行的,需要复杂且灵活的调度算法,充分利用CPU资源,所以情况要复杂得多。在设计多进程编程时,要考虑资源的分配,时间片的分配等达到系统调度的平衡。要综合考虑所有进程的情况以达到最优的并行执行效果。且多进程编程的功能更为强大,且应用范围较于单进程编程更加广泛。(2)你是如何修改时间片的?仅针对样本程序建立的进程,在修改时间片前后,log文件的统计结果(不包括Graphic)都是什么样?结合你的修改分析一下为什么会这样变化,或者为什么没变化?include/linux/sched.h宏INIT_TASK中定义的:0,15,15,分别对应state、counter和priority,将priority值修改,即可实现对时间片大小的调整。在修改时间片将priority由15改为150后,Process9~20中Turnaround,Waiting,CPUBurst,I/OBurst变化不大,原因可能是程序中I/O操作占用的时间对于总时间影响的权重过大,导致处理时间体现的并不明显。或者变化不大的原因是,子进程连续占用cpu的时间要比时间片大很多。
本文标题:哈工大《操作系统》实验3
链接地址:https://www.777doc.com/doc-5374380 .html