Linux kernel 如何设置页面';内核中的s标志?

Linux kernel 如何设置页面';内核中的s标志?,linux-kernel,flags,Linux Kernel,Flags,假设我想在内核中设置一个脏页,我可以这样模拟它吗: #define PG_dirty 4 struct page page1; page1.flags |= (1 << PG_dirty); 似乎set\u-bit做了很多事情。set\u-bit以原子方式设置给定的位,也就是说,并发进程无法看到处于中间状态的标志。例如,使用btslasm指令。顺便说一句,如果您发现了SetPageDirty宏,则无需重新设计其实现-只需使用该宏即可。@Tsyvarev谢谢您的回复。我试图在用户空间

假设我想在内核中设置一个脏页,我可以这样模拟它吗:

#define PG_dirty 4
struct page page1;
page1.flags |= (1 << PG_dirty);

似乎
set\u-bit
做了很多事情。

set\u-bit
以原子方式设置给定的位,也就是说,并发进程无法看到处于中间状态的标志。例如,使用
btsl
asm指令。顺便说一句,如果您发现了
SetPageDirty
宏,则无需重新设计其实现-只需使用该宏即可。@Tsyvarev谢谢您的回复。我试图在用户空间中伪造它,这就是为什么我不能使用
SetPageDirty
。顺便说一下,我知道在表达式中使用按位OR的原因(将标志中的一些位设置为1,对吗?)。但我不明白为什么它会先移位
1
1@Tsyvarev谢谢老兄。明白了。@Tsyvarev很抱歉打扰你,但是如果我想清除这一页上的污点,保持其他部分不变,该怎么办?是
page1.flags&=~(1
#define SetPageDirty(page)      set_bit(PG_dirty, &(page)->flags)