linux - 为什么linux用户空间和内核空间的代码运行速度会有差异?

标签 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 UInt32 *)(0xfe110080);  
        *(volatile UInt32 *)(0xfe628024) = i + tv2 ;  
    }
}

结果是
用户层:52002.16 毫秒
内核层:32650.53 毫秒

内核层比用户层快 1.6 倍。

最佳答案

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

例如,以读取文件为例。 要从用户层读取文件,我们调用 read(file_name)。此读取调用在内部调用内核读取调用,内核读取调用与磁盘设备驱动程序通信并获取数据。

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

关于linux - 为什么linux用户空间和内核空间的代码运行速度会有差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8640176/

相关文章:

php - 软件包 libapache2-mod-auth-mysql 不可用

windows - 是否可以在不安装 ssh 的情况下从 Linux 在 Windows 计算机上远程运行批处理脚本?

linux - Jenkins - Selenium WebDriver Firefox 错误 - 无法连接

android - Linux下使用 "execve"运行android模拟器进程,但 "avd"路径错误?

php - 在 Linux 上,我想停止对特定 Windows 服务器的身份验证,该服务器将使用它来使用 Sendmail 发送邮件

c - 获取SATA磁盘的WWN

c++ - 当.so是纯c的时候,用c++/shell脚本写核心主程序是不是一个好的设计?

检查某些 USB 端口以在 C Linux 上获取设备 fd

linux - IOCTL Linux 设备驱动程序

linux - 当pty [Pseudo terminal] slave fd设置被 "tcsetattr"改变时,master端如何不延迟的捕捉到这个事件?