[解決済み] 共有メモリページとフォーク
2022-02-04 02:01:32
質問
親プロセスが他のプロセスといくつかのページを共有しており、親プロセスをフォークした場合。私が知っている限りでは、子はページテーブルをコピーし、私たちはページを読み取り専用に設定し、Copy-On-Writeを実行します。しかし、これでは、書き込みを行うと共有メモリページのコピーが作成されてしまい、これは間違っています。Linuxカーネルはどのようにこれを回避しているのでしょうか?
解決方法は?
カーネルは、どのメモリページが共有メモリ操作で割り当てられたかを知っています。子プロセスがフォークされたとき、それらのページは Copy-on-Write とマークされないので、すべてのプロセス間で共有されたままとなります。
このことは
vm_area_struct
データ構造で
vm_flags
メンバになります。フラグの1つは
VM_SHARED
. mm/memory.c には、ページを COW に変換すべきかどうかを判断する次のような関数があります。
static inline int is_cow_mapping(vm_flags_t flags)
{
return (flags & (VM_SHARED | VM_MAYWRITE)) == VM_MAYWRITE;
}
このフラグがどのように設定され、使用されるかについて詳しく知りたい場合は、次のサイトにアクセスしてください。 Linuxクロスリファレンス で、VM_SHARED を検索してください。
関連
-
[解決済み】環境変数TERMが設定されていない件
-
[解決済み】 "find: paths must priore expression:" カレントディレクトリのファイルも見つける再帰的検索を指定するには?
-
[解決済み] linuxでpsから特定のプロセスをgrepする方法は?
-
[解決済み] scpでファイルをコピーする:接続がタイムアウトした[closed]。
-
[解決済み] bashの「#$」はどういう意味ですか?
-
[解決済み] 単一のコマンドでssh経由でコマンドが見つからない、ターミナルに接続したら見つかった[重複]。
-
[解決済み] ワイルドカードマッチングに基づいて、現在のフォルダとサブフォルダ内のすべてのファイルを再帰的に検索するにはどうすればよいですか?
-
[解決済み] フォルダとそのサブフォルダ/ファイルのパーミッションを一括で変更する方法
-
[解決済み] Python の open() はファイルが存在しない場合、ファイルを作成しない
-
[解決済み】fork()、vfork()、exec()、clone()の違いについて)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】 readChar(con, 5L, useBytes = TRUE) のエラー : 接続を開くことができません。
-
[解決済み] SVNパッチの作成と適用方法について教えてください。
-
[解決済み] glibc: elfファイルのOS ABIが無効です。
-
[解決済み] Linuxのシェルでwebsocketの応答を読み取る方法
-
[解決済み] at&tアセンブリの「push」と「pushq」の違いは何ですか?
-
[解決済み] MongoDBへの接続が拒否された errno 111
-
[解決済み] svn diffコマンドの使用
-
[解決済み] mvで移動先のディレクトリが存在しない場合、作成させる方法はありますか?
-
[解決済み] モスキートクライアントの取得が接続を拒否
-
[解決済み] GDB からソースがないとのクレーム