收藏 分享(赏)

Linux系统进程运行轨迹跟踪与性能统计程序设计_王浩宇.pdf

上传人:哎呦****中 文档编号:2572705 上传时间:2023-07-24 格式:PDF 页数:3 大小:1.66MB
下载 相关 举报
Linux系统进程运行轨迹跟踪与性能统计程序设计_王浩宇.pdf_第1页
第1页 / 共3页
Linux系统进程运行轨迹跟踪与性能统计程序设计_王浩宇.pdf_第2页
第2页 / 共3页
Linux系统进程运行轨迹跟踪与性能统计程序设计_王浩宇.pdf_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

1、科技与创新Science and Technology&Innovation662023 年 第 13 期文章编号:2095-6835(2023)13-0066-03Linux 系统进程运行轨迹跟踪与性能统计程序设计王浩宇(沈阳航空航天大学,辽宁 沈阳 110136)摘要:在 Linux 内核进程调度中,一般采用基于时间片轮转的调度方式,而每个时间片长度的设定则会影响进程的平均周转时间、平均等待时间和吞吐率,进而影响整个调度的效率。结合 Linux 0.11 操作系统,设计出一种进程跟踪程序。通过实时跟踪分析每个进程在其生命周期中的状态转换过程和调度过程来得出并验证时间片设计的最佳方案。关键词

2、:操作系统;进程调度;时间片;Linux中图分类号:TP316文献标志码:ADOI:10.15913/ki.kjycx.2023.13.0181研究背景为了实现程序的并发执行以及可以对并发执行的程序加以描述和控制,操作系统引入了进程的概念。由于进程参与并发执行时配置有相应的进程同步机制以及 PCB(程序控制块),虽然在执行时有异步性但同时也具有可再现性,因此使并发成为了可能。在 Linux 0.11 内核中实现了基于优先级的抢先式调度和时间片轮转调度算法作为其进程同步机制,可以让同一优先级中的就绪进程轮转执行。即每隔一定的时间间隔进行中断,激活调度程序,把 CPU 分配给就绪队列队首进程,令其

3、执行一个时间片。其中,每个进程每次最多只能执行一个时间片。然而,在时间片的选择上往往会影响整个进程调度的效率。时间片太大则平均周转时间长、响应时间慢,时间片太小则系统开销大(进程切换频繁)。为验证并解决此问题,应结合 Linux 操作系统的实际运行情况,分析不同时间片情况下所有进程的平均周转时间与带权周转时间来得出结论。2跟踪程序设计2.1理论概述为了分析进程运行的时间和测试时间片大小的影响,应跟踪记录每个进程在生命周期中的转换调度过程,并创建一个应用程序用来测试。因此,针对前一个任务,需要在源程序中找到涉及到进程状态变换的代码位置,并在该处调用记录函数语句1。将记录函数命名为 fprintk

4、,定义其功能包括记录进程的 ID、刚刚进入的状态、发生转换的时刻以及优先级等信息。而关于测试程序,可以建立一个具有创建多进程、模拟占用 CPU 以及 I/O 操作功能的应用程序。测试时先运行该程序,记录下生成进程的相关信息,之后再生成并导出 log.txt,将二者的内容进行比对分析。2.2日志文件生成fprintk 功能与 printk 函数类似,因此可以定义在printk.c 文件下。记录函数定义完毕后,关键就是在于在何处调用。借助于查找功能,以“RECORD_TASK_STATE”为关键词进行搜索,便可以很轻松地找到所有需要调用的位置2。函数调用位置如图 1 所示。图 1fprintk 函

5、数调用位置2.3多进程生成程序在 Linux 0.11 中创建 processApp 为测试程序,并在其中定义了函数 cpuio_bound(int last,int cpu_time,intio_time)。参数 last 表示占用 CPU 以及 I/O 操作的总时Science and Technology&Innovation科技与创新2023 年 第 13 期67间,不包括在就绪队列中的时间。参数 cpu_time 表示一次连续占用 CPU 的时间,必须大于等于 0。参数io_time 表示一次 I/O 操作占用的时间,必须大于等于0。如果 lastcpu_time+io_time,则

6、往复多次占用 CPU和 I/O 操作,且时间单位均为秒3。在生成的 log.txt文件中,一行信息的格式为进程 ID、进程进入的状态、状态转换的时刻以及进程优先级。其中,状态取值含义如表 1 所示。表 1状态含义表状态含义N进程刚刚创建J进程进入就绪态R进程进入运行态W进程进入阻塞态E进程退出2.4结果分析程序在分析程序中,建立了进程结构体用于记录各个进程的信息,包括进程 ID、周转时间、等待时间、CPU占用时间、I/O 时间等以及进入各状态的时刻。同时为了方便变量的调用计算,将需要最后运算的数据定义为全局变量,分别是平均带权周转时间、平均周转时间、平均等待时间、吞吐率4。在processAp

7、p程序执行完毕后,会生成名为log.txt的文件记录相关数据。计算了各个进程的周转时间、等待时间、带权周转时间等。同时,计算了平均周转、平均等待、吞吐率等结果,便于后续实验中对时间片更改影响的分析。3函数细节设计3.1fprintk 函数fprintk 函数的功能是向 log.txt 文件中写入进程数据,返回值为写入的字符串长度。fprintk 调用的参数包括文件标识符、当前进程的 ID、状态符、滴答数以及进程的优先级,其中,第一个参数 fd 是文件描述符,类似于 C 语言中 printf 的第一个参数,第二个参数 fmt是格式化字符串,后面的是可变参数列表5。除此之外,为了能尽早访问 pro

8、cess.log 文件而记录下所有数据,需要文件描述符的建立语句尽量提前,即放在 start 函数中的 move_to_user_mode 之后调用。其中,又定义了调用 open 函数打开 process.log 的代码,关联到文件描述符 3。由此,fprintk 函数便可以向 process.log 文件中写数据。3.2cpuio_bound 函数cpuio_bound 函数的功能是模拟进程生命周期中占用 CPU(运行态)与 I/O(阻塞态)的情景,由于是void 型函数,因此没有返回值。其中,参数 last 表示占用 CPU 以及 I/O 操作的总时间;参数 cpu_time 表示一次连续

9、占用 CPU 的时间;参数 io_time 表示一次 I/O操作占用的时间6。后二者必须大于等于 0。该函数编写完毕后在 main 函数中调用,生成进程的同时输出父进程和子进程的 ID。3.3DataLoad_Calculate 函数在分析程序中,DataLoad_Calculate 函数的功能是从 log.txt 中读取信息并计算相关数据,文件默认的读取与存储路径设置为 D 盘,返回值为 1(读取成功)或 0(读取失败)。函数主体是进行一个循环调用 fscanf的过程,当 fscanf 读取的有效参数不足 4 个时,说明文件信息已全部读取并结束循环。由于事先定义了进程结构体数组(容量为 10

10、0),因此只需根据读取到的进程 ID 即可快速锁定对应进程的下标(与其 ID 相同)7。之后即可根据后续信息更新该进程的时间点并计算相关数据。当所有信息读取完毕后,再计算总的平均周转时间、平均带权周转时间、平均等待时间以及吞吐率。4程序测试与验证4.1跟踪进程及创建进程程序调试首先运行 Linux 内核。在内核中调用创建进程程序 linuxapp.exe 生成父进程和 4 个子进程,进程 ID 分别为 610。Linux 内核自动生成 log 日志文件,存储在虚拟磁盘 B 中。执行 mcopy 操作,将 log 日志文件另存为 log.txt 文本文档,并将其保存入 floppyb 镜像文件中

11、。该步调试结果如图 2 所示(截图时镜像文件内已保存有 log.txt,故弹出是否覆写已存在的 log.txt 文档提示)。跟踪进程结果保存在 log.txt 中。输出结果每行从左到右依次为该进程的进程 ID、进程刚进入的状态、进入该状态时的系统滴答时间数以及进程的优先级。图 2Linux 0.11 内核操作科技与创新Science and Technology&Innovation682023 年 第 13 期4.2分析 log.txt 数据程序调试在 visual studio 2019 下编写程序来分析 log.txt 数据,计算平均周转时间等信息。该程序默认调取 log.txt文件位于

12、 D:/根目录下。运行 Data Analize.cpp 程序,未报告错误。程序读取 log.txt,并将结果在 D:/中新建文本文档 LOGresult.txt。LOGresult.txt 中给出了参与运行的所有进程的详细数据信息。生成 LOGresult.txt 文件如图 3 所示。图 3生成 LOGresult.txt 文件4.3在 Linux 内核中调整初始时间片调试在 Linux 内核的 sched.h 头文件的第 187 行修改内核定义的初始优先级来直接性地调整进程 0 及其所有子进程的初始时间片,修改时需要改动的参数分别为进程 0 的进程 ID、时间片大小、进程优先级。将时间片长

13、度分别修改为 10、15 以及 20,形成 3 个实验组,其对比分析结果如表 2 所示。表 2统计计算结果时间片大小平均周转时间平均等待时间平均带权周转时间吞吐率/(进程数s-1)103 192.89192.5624.120.055151 688.64244.0013.440.103202 151.79242.2916.520.098由于 Linux 0.11 采用的是抢占式时间片轮转的进程调度算法,时间片大小的选择会对系统性能有很大的影响。由统计结果可以看出,在时间片大小变更后,进程的平均周转时间升高、系统吞吐率降低,时间片较小时其平均等待时间变小。这是由于在时间片较大时,时间片轮转算法将会

14、近似于先来先服务算法,不利于满足短作业和交互式用户的需求;而时间片较小时,虽然有利于短作业,但是会频繁地执行进程调度和上下文的切换,造成额外的系统开销并降低整体效率,这也是为什么在时间片大小为 10 的情况下,虽然其平均等待时间较小,但吞吐率仍然较低8。因此,时间片的选择不是越大越好或越小越好,而是需要根据系统环境选定适合大小的时间片。一个较为可取的时间片大小是略大于一次典型的交互所需要的时间,使大多数交互式进程能在一个时间片内完成。5结束语本文主要设计了一种针对 Linux 0.11 系统的进程跟踪及分析程序。通过动态改变时间片大小以及结果分析,得出并验证了如何设置时间片大小的合理结论。参考

15、文献:1北京英真时代科技有限公司.Linux 内核实验教程_2.1Z.2014.2赵炯.Linux 内核完全注释M.北京:机械工业出版社,2004.3赵炯.Linux 内核完全剖析:基于 0.12 内核M.北京:机械工业出版社,2009.4LOVE R.Linux 内核设计与实现M.陈莉君,康华,译.3版.北京:机械工业出版社,2011.5张荣亮.Linux 操作系统内核分析与研究D.南昌:江西师范大学,2007.6邹治锋.基于 Linux 的进程调度算法的改进与实现D.无锡:江南大学,2006.7汤子瀛,哲凤屏,汤小丹.计算机操作系统M.西安:西安电子科技大学出版社,1996.8杜传业.嵌入式 Linux 内核解析D.天津:河北工业大学,2007.作者简介:王浩宇(2000),男,本科生,研究方向为计算机科学与技术。(编辑:张超)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 专业资料 > 其它

copyright@ 2008-2023 wnwk.com网站版权所有

经营许可证编号:浙ICP备2024059924号-2