私はユーザスペースとカーネルスペースで少し混乱しています。 Linuxまたはカーネル空間のa.outの4 GBの仮想メモリに含まれるカーネル空間は異なり、その4 GBのメモリ空間には含まれません。また、オペレーティングシステム用に予約されている4 GBの仮想メモリの部分には、カーネルまたはカーネルスペースが含まれています。上記のすべての概念が間違っている場合は、私に連絡してください。a.outのカーネルスペース
答えて
すべてはOSに依存します。
ほとんどのオペレーティングシステムでは、ユーザーモードからカーネルモードに切り替えるのが容易になるため、2/2または3/1のように4GB単位で領域を分割するため、切り替え中にページテーブルを再マップする必要はありません。
しかし、Linuxでは4GBのユーザースペースと4GBのカーネルスペースも許可されています。しかし、想像することができますが、これはカーネルモードに切り替える必要があるたびに完全なメモリを再マッピングする必要があり、オーバーヘッドが発生します。
あなたのメモリ空間にはありますが、OSはユーザモードコードからカーネルスペースにアクセスすることを許可していません。この種のアクセス制御は、ページテーブルの特権ビットのために可能です。
ユーザスペースからのカーネルへのすべての呼び出しは、実際にはint 80h
コールです。この呼び出しは、呼び出しをカーネルの割り込みハンドラに転送し、カーネル空間とユーザ空間の両方にアクセス可能にします。
+1。しかし、LinuxではPentium Pro以降、PAEも可能です。Pentium Proは、カーネルが最大64ギガバイトまで対応可能です。 –
いいえ、PAEではカーネルが4Gb以上のアドレスを直接指定していません。 64Gbを使用するようにマップを管理するだけです。 –
32ビットLinux用の標準メモリモデルは、カーネルに1 GB、ユーザースペースに3 GBを使用します。
合計で4 GBのメモリスペースが使用できるため、「はい」の場合、カーネルのスペースはアドレススペースに含まれます。
This articleには、分割を示すグラフがあります。
これは、はい、カーネルスペースが4GBのアドレス指定可能な仮想メモリに含まれていることを意味します。私はこの答えを+1しましたが、OSのメモリ空間に関する質問の部分には触れませんでした... – Romain
- 1. カーネルスペースからのGPIOアクセス
- 2. gccでa.outファイル形式を生成
- 3. カーネルスペースからLinuxをシャットダウン(埋め込み)
- 4. カーネルスペースにパケットを書き込む方法
- 5. ユーザスペースとカーネルスペースを同じCコードでコンパイル
- 6. linux "gdb a.out param1 param2"はparam1と2を "gdb"または "a.out"に渡しますか?
- 7. 別のコンピュータでa.outを実行しています
- 8. ARMベースのボードのカーネルスペースで外部バスにアクセスする
- 9. カーネルスペースで別のシステムコールからシステムコールを作る方法
- 10. カーネルスペースでのオーバーヘッドを正確に測定する方法
- 11. カーネルスペースが必要なのはなぜですか?
- 12. カーネルスペースからLinuxのルートを追加/削除する
- 13. カーネルスペースとカーネルスタックの関係は何ですか?
- 14. Linuxカーネルスペースのシステム時間を設定する
- 15. makefileでa.outを生成し、警告メッセージを無効にする
- 16. "./a.out"を信号SIGSEGV(アドレス境界エラー)で終了させる
- 17. コードを示すエラー***スタックが検出スマッシング***:./a.out終了中断(コアダンプ)
- 18. Linuxカーネルスペースでソケットconnect()からローカルソースポートを取得するには?
- 19. カーネルスペースからsockfdを取得するには?
- 20. カーネルスペースで完全なカーネルバージョンを取得する
- 21. Windows 10ドライバのカーネルスペース仮想アドレスとユーザー空間仮想アドレスの対応
- 22. ユーザスペースnetlinkソケットは、カーネルスペースから空のメッセージを受け取ります
- 23. Android端末からa.outファイルを実行することはできません
- 24. デバイスドライバコードはどこで実行されますか?カーネルスペースまたはユーザースペース?
- 25. カーネルスペースからユーザスペースへの物理ハードウェアのボタン操作をAndroidがどのように処理するか
- 26. Piボードの起動時に自動的にa.outファイルを実行する方法は?
- 27. C++ファイルをコンパイルすると、ファイル名が "a.out"になるのはなぜですか?
- 28. "***スタックスマッシングが検出されました***:./a.out terminated Aborted(コアダンプされました)" - 配列の挿入
- 29. デバイスのメモリマップされたIOアドレスは、プロセスのカーネルスペースにマップされていますか?
- 30. カーネルスペースとユーザースペースの間で通信するためにNetlinkを使用するmsghdrの動作
私は最近、Linuxでのメモリ管理について読んで、このブログを見つけました。http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory非常に役に立ちました –
私は "a。何かと何か関係がありますか? –