Linux 中线程创建会触发页面错误吗?它与 soft-dirty PTE 有什么关系?

问题描述 投票:0回答:0

之所以问这个问题,是因为我在测试linux soft-dirty bit的行为时发现,如果我创建一个线程而不触及任何内存,所有页面的soft-dirty bit都会被设置为1(脏)。

例如,在主线程中使用 malloc(100MB),清除软脏位,然后创建一个只使用 sleep() 的线程。线程创建后,所有100MB内存页的软脏位都设置为1。

我认为线程创建只会将页面标记为

shared
状态,而不是修改它,所以软脏位应该保持原样。显然,行为不是那样的。然后我在想是否在所有页面上创建线程触发页面错误?以便操作系统在处理页面错误时将所有页面的软脏位标记为 1。

如果不是,为什么创建线程会使进程的所有内存页都变“脏”?

我希望我能很好地解释这个问题,如果需要更多细节,或者有什么不明白的地方,请告诉我。谢谢!

linux multithreading linux-kernel pthreads page-fault
© www.soinside.com 2019 - 2024. All rights reserved.