北理工操作统一、CPU占用率控制实验报告.docxVIP

北理工操作统一、CPU占用率控制实验报告.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
北理工操作统一、CPU占用率控制实验报告

实验一 CPU占用率控制 班级: 学号: 姓名: 实验一 CPU占用率控制 一、实验目的 1、通过编写和调试程序以加深对CPU调度的理解; 2、熟悉Windows任务管理器CPU信息的获取和使用方法; 二、实验要求 编写程序实现下面任意一题: 1.CPU占用率为一条直线,固定在50%; 2.CPU占用率为一条正弦曲线。 参考: 1.在任务管理器的一个刷新周期内,CPU忙(执行应用程序)的时间和刷新周期 总时间的比率,就是CPU的占用率,也就是说,任务管理器中显示的是每个刷新周期内 CPU占用率的统计平均值。 2.单核环境下,空死循环会导致100%的CPU占有率。 三、实验环境 硬件设备:个人计算机。 系统软件:windows操作系统,Visual C++6.0编译环境。 四、实验原理 通过观察任务管理器,它大约1s更新一次。当CPU使用率为0时,System Idle Process占用了CPU的空闲时间。 System Idle Process在CPU空闲的的时候,发出一个IDLE命令,使CPU挂起(暂时停止工作),可有效的降低CPU内核的温度,无法终止。在这个进程里出现的CPU占用数值并不是真正的占用而是体现的CPU的空闲率,也就说这个数值越大CPU的空闲率就越高,反之就是CPU的占用率越高。 当系统中的进程或者在等待用户输入,或者在等待某些事件的发生(发出I/O请求等待I/O响应),或者主动进入休眠状态(比如Sleep())。 在任务管理器的一个刷新周期内,CPU忙(执行应用程序)的时间和刷新周期总时间的比率,就是CPU的占用率,也就是说,任务管理器中显示的是每个刷新周期内CPU占用率的统计平均值。 单核环境下,空死循环会导致100%的CPU占有率。 对于多核CPU来说,同一个进程可能被CPU的任务分配器分配到不同的核心上执行,所以造成无法让任务管理器达到预想的效果。其实打开任务管理器,可以看到多个CPU使用记录。 1、实现CPU占用率为一条直线,固定在50%。 GetTickCount()可以得到系统从启动到运行到现在所经历时间的毫秒值。最多能统计到49.7天。另外,利用Sleep()函数,最多也只能精确到1毫秒。因此,可以在“毫秒”这个量级做操作和比较。 要操纵CPU的usage曲线,就需要使CPU在一段时间内跑busy和idle两个不同的循环,从而通过不同的时间比例来获得调节CPU占用率的控制。 利用GetTickCount()来实现busy loop的循环,用Sleep()实现idle loop。 2、CPU占用率为一条正弦曲线。 可以用sin函数的幅度来表示忙状态占用的时间的大小,当sin函数达到最大值时,CPU占用率为100%,空闲时间大小为0;当sin函数达到最小值时,CPU占用率为0%,忙时间大小为0。通过在一个周期2*π中等分200份,将每一个间隔点的half +(sin(PI*radian)*half))的值存入busySpan[i],将其补值存入idleSpan[i]。half是整个值域INTERVAL的一半。这样可以近似趋近一条正弦曲线。 首先设定采样参数,设一个周期内采样点数和步进单位的大小。 根据sin函数的大小分别计算忙时间和空闲时间的大小,通过计数完成周期采样。 同第一题用GetTickCount()来实现忙状态的循环,用Sleep()实现空闲状态循环。通过计数实现周期采样。 五、实验结果 六、感想体会 七、实验代码 #includeiostream #includecmath #includewindows.h static int PERIOD = 60 * 1000; //周期ms const int COUNT = 300; //一个周期计算次数 const double GAP_LINEAR = 100; //线性函数时间间隔100ms const double PI = 3.1415926535898; //PI const double GAP = (double)PERIOD / COUNT; //周期函数时间间隔 const double FACTOR = 2 * PI / PERIOD; //周期函数的系数 static double Ratio = 0.5; //线性函数的值 0.5即50% static double Max=0.9; //方波函数的最大值 static double Min=0.1; //方波函数的最小值 typedef double Func(double); //定义一个函数类型 Func*为函数指针 typedef void

您可能关注的文档

文档评论(0)

linjuanrong + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档