1

当我在 linux 用户空间和内核空间运行一些简单的 while 循环代码并测量经过的时间时,我可以得到差异。

测试代码是访问 Arm Cortex SoC 芯片中的一些硬件寄存器。

for(k = 0; k < 100000; k++)
{   //I tested this code in user space and kernel space with IOCTL.
    for(i = 0; i < 1000; i++)  
    {  
        tv2 = *(volatile UInt32 *)(0xfe110080);  
        *(volatile UInt32 *)(0xfe628024) = i + tv2 ;  
    }
}

结果是
用户层:52002.16 ms
内核层:32650.53 ms

内核层比用户层快 1.6 倍。

4

1 回答 1

4

一般来说,用户层需要更多时间,因为它很少额外调用来完成任务。

例如,以读取文件为例。要从用户层读取文件,我们调用 read(file_name)。这个读取调用内部调用内核读取调用,它与磁盘的设备驱动程序对话并获取数据。

因此,由于调用次数的减少,内核层的性能更好。

于 2011-12-27T00:47:14.497 回答