之所以问这个问题,是因为我在测试linux soft-dirty bit的行为时发现,如果我创建一个线程而不触及任何内存,所有页面的soft-dirty bit都会被设置为1(脏)。
例如,在主线程中使用 malloc(100MB),清除软脏位,然后创建一个只使用 sleep() 的线程。线程创建后,所有100MB内存页的软脏位都设置为1。
我认为线程创建只会将页面标记为
shared
状态,而不是修改它,所以软脏位应该保持原样。显然,行为不是那样的。然后我在想是否在所有页面上创建线程触发页面错误?以便操作系统在处理页面错误时将所有页面的软脏位标记为 1。
如果不是,为什么创建线程会使进程的所有内存页都变“脏”?
我希望我能很好地解释这个问题,如果需要更多细节,或者有什么不明白的地方,请告诉我。谢谢!