2

プロセスをフォークすると、最初は父と息子が同じメモリ ページを共有します。ただし、そのうちの 1 人がこのページに書き込むと、最初のページがこの変更の影響を受けないように複製されます。これは、おおよそコピーオンライトと呼ばれるものです。

私の質問は次のとおりです。プロセスを fork() してから、子がページを変更するとどうなりますか。ページは一度複製されますが、その後、父親もページを変更します。ページが再度複製されましたか? 父親は、息子だけがすでに複製されていることを「知っています」か?

よろしくお願いいたします。

4

2 に答える 2

1

(過度に単純化するリスクがあるジェネリック -- IE はどのように機能するか)

Parent process has Virtual Page 10 as readwrite physical page 1000.
Parent process has Virtual Page 11 as readwrite physical page 1001.

親は子をフォークします。

Parent process has Virtual Page 10 as readonly physical page 1000.
Parent process has Virtual Page 11 as readonly physical page 1001.
Child process has Virtual Page 10 as readonly physical page 1000.
Child process has Virtual Page 11 as readonly physical page 1001.

親が仮想ページ 10 に書き込みます。保護違反をトリガーします。OS が書き込みページのコピーであることを検出 物理ページ 1000 を 1002 にコピー 参照カウントを物理ページ 1000 にデクリメント 命令を再開

Parent process has Virtual Page 10 as readwrite physical page 1002.
Parent process has Virtual Page 11 as readonly physical page 1001.
Child process has Virtual Page 10 as readonly physical page 1000.
Child process has Virtual Page 11 as readonly physical page 1001.

仮想ページへの子書き込み 11 保護違反をトリガーします。OS が書き込みページのコピーであることを検出 物理ページ 1001 を 1003 にコピー 参照カウントを物理ページ 1001 にデクリメント 命令を再開

Parent process has Virtual Page 10 as readwrite physical page 1002.
Parent process has Virtual Page 11 as readonly physical page 1001.
Child process has Virtual Page 10 as readonly physical page 1000.
Child process has Virtual Page 11 as readwrite physical page 1003.

親が仮想ページに書き込む 11 保護違反をトリガーします。OS は、それが書き込みページのコピーであり、参照カウントが 1 であることを検出します。OS は、ページを読み取り書き込み再開命令に変更します。

Parent process has Virtual Page 10 as readwrite physical page 1002.
Parent process has Virtual Page 11 as readwrite physical page 1001.
Child process has Virtual Page 10 as readonly physical page 1000.
Child process has Virtual Page 11 as readwrite physical page 1003.
于 2015-04-16T19:28:46.507 に答える
0

コピー オン ライト ページにアクセスできるプロセスは n 個あり、n ≥ 2 です。1 つのプロセスが書き込みを行うと、そのページはコピーされ、そのプロセスの通常のページになります。元のページは n-1 回だけ共有されるようになりました。n = 1 の場合、通常のページにもなります。コピーを2つ作っても意味がありません。

于 2015-04-14T10:50:37.237 に答える