我试图理解
int getrusage(int who, struct rusage* usage)
工作是为了计算一个程序的运行时间。
我红色的手册页,可能是10次,但仍然无法得到它。试图在网上找到一些东西,但是找到了关于这个功能的手册页。
我不清楚的是rusage结构中存储了什么 - 手册页不是很清楚 - 所以我尝试用调试器运行它,直接看看里面有什么,但仍然不明白它,特别是两个结构 - timeval ru_utime和timeval ru_stime - 如何工作。
它们里面有什么内容假设不同的值,有时为0,其他时间为2000等。
我运行了一个带有for循环的简单程序,它可以不断地分配和释放内存。我用秒表实际看到需要多少时间,耗时5.23秒。但是我在这些结构中看到的似乎完全不相关:
在循环之前:
ru_utime = {tv_sec = 0,tv_usec = 1000},ru_stime = {tv_sec = 0,tv_usec = 1000循环之后:
ru_utime = {tv_sec = 4,tv_usec = 677000},ru_stime = {tv_sec = 0,tv_usec = 2000}
所以,任何人都可以解释这个我还是给出了一个很好的联系,以解释这个问题?我将非常感激。
答案 0 :(得分:4)
您感兴趣的两个子结构描述如下:
<强> ru_utime 强> 这是在用户模式下执行的总时间,以timeval结构(秒加微秒)表示。
<强> ru_stime 强> 这是在内核模式下执行的总时间,以timeval结构(秒加上微秒)表示。
为了防止粉碎所有内存,您的系统有两个“权限级别”,称为内核模式和用户模式。为了保持这种快速和简单,您的用户模式无法查看所有内存,无法与I / O设备通信,并且只能真正进行数字运算。对于任何更复杂的事情(例如,内存页面分配,文件系统读/写,将内容打印到屏幕上),它必须要求内核代替它,它可以访问所有这些内容。这是通过一种称为“系统调用”的机制完成的;阅读这篇wiki文章,以便进一步阅读:http://en.wikipedia.org/wiki/System_call
在较高级别,ru_utime
结构返回程序执行实际计算所花费的时间,ru_stime
结构返回程序等待答案的时间。进行磁盘访问,打印到屏幕等时的内核。