Linuxユーザースペースとカーネルスペースで単純なwhileループコードを実行し、経過時間を測定すると、違いが得られます。
テストコードは、ArmCortexSoCチップの一部のハードウェアレジスタにアクセスすることです。
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 ;
}
}
結果は、
ユーザーレイヤー:5202.16ミリ秒
カーネルレイヤー:32650.53ミリ秒です。
カーネルレイヤーはユーザーレイヤーより1.6倍高速でした。