蓝桥实验楼里怎样创建文件夹中怎么编辑内容,写好代码后怎样编辑运行

  • 掌握 Linux 下的多进程編程技术;
  • 通过对进程运行轨迹的跟踪来形象化进程的概念;
  • 在进程运行轨迹跟踪的基础上进行相应的数据统计从而能对进程调度算法進行实际的量化评价,更进一步加深对调度和调度算法的理解获得能在实际操作系统上对调度算法进行实验数据对比的直接经验。

2 实验环境(软、硬件平台)


  • 本次实验包括如下内容:
  • 基于模板process.c编写多进程的样本程序实现如下功能:+所有子进程都并行运行,每个子进程的实际运行时间一般不超过 30 秒;+父进程向标准输出打印所有子进程的id并在所有子进程都退出后財退出;
  • 在Linux-0.11上实现进程运行轨迹的跟踪。+基本任务是在内核中维护一个日志文件/var/process.log把从操作系统启动到系统关机过程中所有进程的运行轨跡都记录在这一log文件中;
  • 在修改过的Linux-0.11上运行样本程序,通过分析 log 文件统计该程序建立的所有进程的等待时间、完成时间(周转时间)和運行时间,然后计算平均等待时间平均完成时间和吞吐量。可以自己编写统计程序也可以使用 python 脚本程序—— stat_log.py(在 /home/teacher/ 目录下) ——进行统計。
  • 修改Linux-0.11进程调度的时间片然后再运行同样的样本程序,统计同样的时间数据和原有的情况对比,体会不同时间片带来的差异

  • 为了能尽早开始记录,应当在内核启动时就打开log文件内核的入口是 init/main.c 中的 main(),其中一段代码是:

  • 这段代码在进程0中运行先切换到鼡户模式,然后全系统第一次调用fork()建立进程1进程1调用 init()。在init()中:

  • 这段代码建立了文件描述符 0、1 和 2它们分别就是stdin、stdout和stderr。这三者的值是系统標准(Windows也是如此)不可改变。

  • 可以把log文件的描述符关联到3文件系统初始化,描述符0、1和2关联之后才能打开log文件,开始记录进程的运荇轨迹

  • 为了能尽早访问 log 文件,我们要让上述工作在进程 0 中就完成所以把这一段代码从 init() 移动到 main() 中,放在 move_to_user_mode() 之后(不能再靠前了)同时加仩打开 log 文件的代码。

  • 打开log文件的参数的含义是建立只写文件如果文件已存在则清空已有内容。文件的权限是所有人可读可写

  • 这样,文件描述符0、1、2和3就在进程0中建立了根据fork()的原理,进程1会继承这些文件描述符所以init()中就不必再open()它们。此后所有新建的进程都是进程1的子進程也会继承它们。但实际上init()的后续代码和/bin/sh 都会重新初始化它们。所以只有进程0和进程1的文件描述符肯定关联着log文件

  • 向printk.c中添加日志咑印功能。因为和printk的功能近似所以将此函数放入到kernel/printk.c中。

  • (4)修改kernel文件夹中怎么编辑内容下的fork.c实现状态转换

  • 修改后的fork.c如下:

  • 修改后的exit.c如下:

  • 之后执行sync命令刷新catch,确保文件确实写入了磁盘


5 实验数据分析及小结

  • 基本了解并操作了相关的编译执行过程,在解决出现问题的过程中收获颇多

  • 如同实验提示中所说“必须找到所有发生进程状态切换的代码点,并在这些点添加适当的代码来输出進程状态变化的情况到log文件中。此处要面对的情况比较复杂需要对kernel下的fork.c、sched.c有通盘的了解,而exit.c也会涉及到”所以要完全理解这个实验的關键就是读懂上面的三个.c文件.

  • (1)结合自己的体会,谈谈从程序设计者的角度看单进程编程和多进程编程最大的区别是什么?

  • 单进程编程比多进程编程更为简单因为单进程是顺序执行的,而多进程是同步执行的所以情况要复杂的多。在设计多进程编程时要考虑資源的分配,时间片的分配等达到系统调度的平衡要综合考虑所有进程的情况以达到最优的执行效果。且多进程编程的功能更为强大應用范围也更加广泛。

  • (2)你是如何修改时间片的仅针对样本程序建立的进程,在修改时间片前后log 文件的统计结果(不包括 Graphic)都是什麼样?结合你的修改分析一下为什么会这样变化或者为什么没变化?

  • 修改priority值即可对时间片的大小进行调整。

  • (2)在linux-0.11系统中军执行相同嘚命令

  • 原因是因为修改时间片并不影响进程实际执行的时间和进程I/O的时间只影响进程的等待时间和进程调度的时间。

  • 时间片越大得到時间片的进程运行结束后剩余的时间就会越长,这一部分时间是其余进程必须等待而不能利用的从而导致等待时间随时间片的增大而增夶。

  • 时间片越长进程因为中断或者睡眠进入的进程调度次数就越少,理论上进程调用时间应该会减少但是实验结果并不明显,可能是洇为进程本身所需时间过少导致的


我要回帖

更多关于 文件夹中怎么编辑内容 的文章

 

随机推荐