进程运行轨迹的跟踪和统计

实验目的

掌握 Linux 下的多进程编程技术;

通过对进程运行轨迹的跟踪来形象化进程的概念;

在进程运行轨迹跟踪的基础上进行相应的数据统计,从而能对进程调

度算法进行实际的量化评价,更进一步加深对调度和调度算法的理

解,获得能在实际操作系统上对调度算法进行实验数据对比的直接经验。

实验内容

1. 基于模板process.c编写多进程的样本程序,实现如下功能:

i.

所有子进程都并行运行,每个子进程的实际运行时间一般不超

30 秒;

ii.

父进程向标准输出打印所有子进程的 id,并在所有子进程都退

出后才退出;

2. Linux 0.11 上实现进程运行轨迹的跟踪。基本任务是在内核中维护

一个日志文件/var/process.log,把从操作系统启动到系统关机过程中

所有进程的运行轨迹都记录在这一 log 文件中。

3. 在修改过的 0.11 上运行样本程序,通过分析 log 文件,统计该程序建

立的所有进程的等待时间、完成时间(周转时间)和运行时间,然后

计算平均等待时间,平均完成时间和吞吐量。可以自己编写统计程

序,也可以使用 python 脚本程序—— stat_log.py ——进行统计。

4. 修改 0.11 进程调度的时间片,然后再运行同样的样本程序,统计同样

的时间数据,和原有的情况对比,体会不同时间片带来的差异。

实验步骤

1、第一步:编写process.c文件

process.c文件的保存路径为~oslab/hdc/usr/root

由于在挂起的虚拟机中无法新建文件,我们需要找一个地方存放编写的process.c文件,然后复制粘贴过去

编写的process.c代码如下

2、日志文件

2.1、修改main.c

使在linux-0.11启动之后,就创建process.log并开始记录

2.2、添加fprintk()函数

2.3、寻找状态切换点

对以下文件进行修改

/kernel/fork.c

/kernel/sched.c文件进行修改

sleep_on()函数

  • interruptible_sleep_on()函数
  • schedule()函数

  • wake_up函数()

  • kernel/exit.c  do_exit()函数

  • sys_waitpid()函数

  • 2.4 测试

    使用以下命令,重新编译内核

    注意在重新编译内核之前,要确认虚拟机不再被挂起

  • 使用以下命令,进入bochs:

  • 进入bochs之后,依次输入以下命令

    实验结果如图所示:

  • 退出bochs ,在终端中将process.log文件复制到oslab文件夹中,就可以直接在宿主机ubuntu上查看log文件

  • 统计数据
  •    从github上将stat_log.py下载下来,保存在~/oslab/hdc/var/,在ubuntu中断输入以下命令,

    实验结果如下图所示:

  • 4.修改时间片及测试

  • 是在linux-0.11/include/linux/sched.h的宏

  • 只需要修改第三个数字即可,即时间片的初始值

    例如改成10  ,然后再重新make all ,得到的结果如下图所示

实验总结:

        单进程编程是一个进程从上到下顺序进行;多进程编程可以通过并发执行,即多个进程之间交替执行,如某一个进程正在I/O输入输出而不占用CPU时,可以让CPU去执行另外一进程,这需要采用某种调度算法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值