9

私の質問はLinux固有であり、カーネル、仮想メモリ、mmap、ページ障害について理解する必要があります。私は大きな静的配列を持つCプログラムを持っています。これはbssセクション(メモリ、ゼロに初期化されます)に入ります。プログラムが起動すると、このメモリは物理的に割り当てられず、仮想メモリのみが存在し、仮想メモリのすべてのページが特別なゼロページ(すべてゼロのページ)にマップされます。アプリケーションがこのページにアクセスすると、ページフォールトが生成され、物理ページが割り当てられます。

問題は、そのようなページフォールトは、bssセクションからのページへの最初の読み取りアクセスまたは最初の書き込みアクセスで生成されますか?

4

1 に答える 1

8

Linuxは、このメモリにゼロページ(リージョン全体に1つのゼロページ)を割り当て、コンテンツを変更しているため、基本的にページでCOW(コピーオンライト)動作を実行します。したがって、読み取りフォールトは発生しません(ページがスワップアウトされたか、ページがメモリ内にあるがマップされていないことを意味するマイナーページフォールトでない限り)。

したがって、書き込み障害のみが障害を引き起こし、ゼロページに新しいページが割り当てられます。

于 2012-08-24T19:23:24.997 に答える