Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么linux用户空间和内核空间之间存在代码运行速度差异?_Linux_Ioctl - Fatal编程技术网

为什么linux用户空间和内核空间之间存在代码运行速度差异?

为什么linux用户空间和内核空间之间存在代码运行速度差异?,linux,ioctl,Linux,Ioctl,当我在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

当我在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毫秒 内核层:32650.53毫秒


内核层比用户层快1.6倍。

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

例如,以读取文件为例。 要从用户层读取文件,我们称之为readfile\u name。这个读取调用在内部调用内核读取调用,内核读取调用与磁盘的设备驱动程序进行对话并获取数据


因此,内核层的性能更好,因为调用的数量减少了。

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

例如,以读取文件为例。 要从用户层读取文件,我们称之为readfile\u name。这个读取调用在内部调用内核读取调用,内核读取调用与磁盘的设备驱动程序进行对话并获取数据


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

感谢您的回复。但我还是很困惑。因为没有需要调用系统调用或任何额外调用的代码。这只是在while循环中使用指针进行的内存访问。可能是用户代码需要更多的检查,以确定它是否具有访问该部分内存的权限。您的意思是,您需要一些权限来访问用户层上的注册表,并在我编译代码时自动添加权限检查代码?谢谢您的回复。但我还是很困惑。因为没有需要调用系统调用或任何额外调用的代码。这只是使用while循环中的指针进行的内存访问。可能是因为用户代码需要更多的检查,以确定它是否具有访问该部分内存的权限。您的意思是,您需要一些权限来访问用户层上的注册表,并在我编译代码时自动添加权限检查代码?