ioctl()、Unlocked_ioctl()、compat_ioctl()の違いは何ですか?

ioctl()、Unlocked_ioctl()、compat_ioctl()の違いは何ですか?

Linux 2.6.36のソースコードを見る:lxr.linux.noioctl()、方法が見つかりませんfile_operations。代わりに、2つの新しい呼び出しが見つかりました:unlocked_ioctl()compat_ioctl()ioctl()、、そしてunlocked_ioctl()の違いは何ですかcompat_ioctl()

ベストアンサー1

メタ回答:Linuxカーネルで発生したすべての生の操作は通過します。lkml(Linuxカーネルメーリングリスト)。説明の概要を表示するには、読んで検索してください。lwn (Linux Weekly News)

答え:ioctl() の新しい方法渡すジョナサン・コベット:

ioctl()BKL(Big Kernel Lock)の下で実行されるカーネルの残りの部分の1つ。過去には、BKLを使用すると、長期的な実行ioctl()方法により、無関係なプロセスに長い遅延が発生する可能性がありました。

unlocked_ioctl以下は、2.6.11で導入されたパッチの説明ですcompat_ioctl。これioctlフィールドの削除2.6.36で非常に遅く起きました。

説明:ioctl実行時にコストが発生します。大きなカーネルロック(BKL)なので、同時に他の項目を実行することはできません。これはマルチプロセッサシステムではあまり良くないので、BKLを取り除くために多くの努力を払ってきました。まずunlocked_ioctl紹介が与えられます。これにより、各ドライバーの作成者は使用するロックを選択できます。これは難しい可能性があるため、古いドライバはまだ機能しますがioctl(使用されている)、新しいドライバには拡張インターフェイス(unlocked_ioctl)を使用できる移行期間があります。最終的に、すべてのドライバが変換されioctl削除される可能性があります。

compat_ioctl実際には関係ありませんが、同時に追加されました。その目的は、32ビットユーザーモードプログラムをioctl64ビットカーネルから呼び出すことを可能にすることです。最後のパラメータの意味はioctlドライバーによって異なり、ドライバー独立変換は不可能です。

おすすめ記事