1

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倍高速でした。

4

1 に答える 1

4

一般に、ユーザー層は、タスクを完了するために余分な呼び出しをほとんど行わないため、より時間がかかります。

たとえば、ファイルを読み取る例を考えてみましょう。ユーザー層からファイルを読み取るには、read(file_name) を呼び出します。この読み取り呼び出しは、内部的にカーネルの読み取り呼び出しを呼び出し、ディスクのデバイス ドライバーと対話してデータを取得します。

したがって、呼び出し回数が減るため、カーネル層のパフォーマンスが向上します。

于 2011-12-27T00:47:14.497 に答える