CPU MEM 画曲线

      在编程时突然想到为什么CPU会满负荷,我怎么样才能控制CPU的利用率? 感觉很有意思,我一开始是这么想的,CPU利用率跟运算类型有关,比如INT操作比float操作更费CPU。经过实验,基本没区别,看来跟这个没有关系。然后就应该是空闲时间的原因了。

       还有一个问题是现在CPU都是多线程的,操作系统会自动调度到不同线程上去,所以就算画出来效果也不是很好。还好操作系统有库让我自定义调度到哪个线程或者说那个CPU核。具体操作:

 

      关于sched具体操作,自行man:

  •       man sched.h
  •       man sched_setaffinity
  •       man cpu_set

 

      这个问题比较容易,现在已经可以试着画方波了。

 

cpu1

 

      接下去画了一下sin的,不太标准,有些问题没有解决,代码不贴,直接上图:

cpu4

      内存理论上来说比CPU简单,但是由于内存分配和释放需要一定时间,所以图像不是很准确,主要思想是运用malloc 和 free。实验中发现光malloc系统是没有真正分配内存的,只有memset或者赋值的时候,才会显示真正分配。下面来一张比较搓的图。

mem

“goto” in kernel

     Rules are for the guidance of wise men, and the obedience of fools.

————-   Douglas Bader

     很多教材上都强调不要使用goto,会让程序混乱逻辑不清。我突发奇想测试一下linux内核里有没有goto。方法:

grep goto * -r | wc -l

       在kernel 3.11.1中有110139个记录,我就吓了一跳。难道kernel的维护人员不知道这个常识。于是就搜索,发现早就有人提出过这个问题了。在linux today 一篇文章中就对此进行了讨论。

        其中有一句话让人幡然醒悟,”Rules are for the guidance of wise men, and the obedience of fools.” 规则指导智者,愚人服从规则。我是个愚人。看看上面的解释说:

 “No gotos” is a rule that makes sense in most circumstances. Great for protecting novices from shooting themselves in the foot. But to give another quote,

“The professional knows when to break the rules”. From my photography, I know that accidentally breaking the rules usually produces crap shots – stuff by people I call “snappers”. But deliberately breaking the rules can produce spectacular results.

 

       这个评论者很风趣,经常用俗语。他没有否定不能用goto的说法。但是不是一定不能用,“专业的知道什么时候该打破规则”.就像摄影一样,不小心打破规则就会出烂片,适时故意打破规则可以拍到惊艳的照片。果然我还是too naive.

      那么 什么时候该用goto呢?这个问题就好解决了,因为我已经知道goto是可以用的,而这个问题的由来是linux内核里出现很多goto,而linux内核是最牛的人在维护。那就直接看源码好了。下面的是随便截了一段代码。

 

       可以清晰的看出,goto在c语言中就是用来处理异常的。goto就非常方便,无需一步步退出反而让程序逻辑不清。大概就是这个意思。另外最近看了一点点汇编,发现goto应该是起源于汇编。

      综上,goto可以在处理异常等类似情况下使用,而用来模拟for while就是不应该的,确实会让程序混乱。