Я заметил, что Linux PTE в одном из анонимных сегментов был установлен как недоступный для записи и грязный... Что означает эта комбинация?
TL;DR — это просто означает, что страница не находится в резервном хранилище и доступна только для чтения.
Грязный просто означает, что не записано в резервное хранилище (файл подкачки, файл mmap или inode). Многие вещи, такие как код, всегда считываются из файла, поэтому они поддерживаются индексным узлом.
Если вы mmap
немного памяти только для чтения, то вы могли бы получить эту комбинацию, например. Другими возможностями являются защита стека, обнаружение переполнения буфера во время выполнения распределителя и функция копирования при записи.
Это ненормально. Для типичного распределения у вас будет что-то, поддерживаемое свопом, и только запись приведет к тому, что страница станет грязной. Так что случай, вероятно, менее частый, но достоверный.
См.: биты ARM Linux PTE
ARM Linux эмулирует грязный/доступный
Кажется, мало документации о том, что означает молодой бит. young — это информация о том, что нужно поменять местами. Если что-то молодо и недоступно в течение длительного времени, это хороший кандидат на выселение. Напротив, dirty означает, что его нужно поменять местами. Если страница грязная, значит, она не была записана в резервное хранилище (файл подкачки или файл mmap и т. д.). Затем пейджер должен записать эту страницу. Если она не была грязной (или чистой), то пейджер может просто сбросить память и использовать заново.
Разница между молодым и грязным такая же, как следует и должен.
- L_PTE_PRESENT : 1 - it has physical RAM (not swapped)
- L_PTE_YOUNG : 1 - is has not been used
- L_PTE_DIRTY : 1 - it is different than backing store
- L_PTE_RDONLY : 1 - user space can not write.
- L_PTE_XN : 0 - code can execute.
Например, условие Not Present and dirty кажется невозможным, но условие dirty and read-only допустимо.
person
artless noise
schedule
17.02.2016