0

copy_to_userカーネルが関数を使用するのはなぜですか?

ユーザー空間のデータを直接操作することはできませんか?

4

2 に答える 2

4

カーネルアプリケーションとユーザースペースアプリケーションのアドレススペースは異なるため、ユーザースペースにコピーするには、アドレススペースを変更する必要があります。各プロセスには、独自の(ユーザー)アドレス空間があります。

また、ユーザースペースにコピーするときにカーネルがクラッシュすることはないため、copy_to_user関数はおそらく宛先アドレスが有効であることを確認します(おそらく、そのアドレスは、たとえばスワップスペースからページインする必要があります)。

Linuxカーネルシステムコールプロセスアドレス空間についてもっと読む...

于 2012-07-22T06:43:27.487 に答える
4

特定のカーネルが 1 つのアーキテクチャー用にのみ作成された場合、これは妥当な選択である場合とそうでない場合があります。

アーキテクチャごとに異なる可能性がある多くの考慮事項があるため、ある種のポリモーフィック操作が必要です...

  • 保護...カーネルのアクセス権が多すぎたり少なすぎたりする可能性があり、どちらの方法でも、特定のターゲットで追加のコードが必要になる場合があります

  • アドレス空間...ユーザー空間とカーネル空間が重複する可能性があるため、ターゲット固有のソリューションまたは一時的なマップが必要になります

  • ページ フォールト管理 ... ユーザー空間へのアクセスはフォールトする可能性があり、これを回避するか許可する必要があります。特定の場所へのアクセスを制限することで、追加のセットアップまたは障害の理由の特定が可能になります。

于 2012-07-22T06:50:39.947 に答える