Как можно проверить, принадлежит ли виртуальный адрес памяти пользователя или ядра? (и другие свойства адреса)

# #linux #memory #memory-management #linux-kernel #x86-64

Вопрос:

Предположим, у меня есть такая ошибка, как

 Unable to handle kernel paging request at virtual address ffff8000789abcde
 

Как я могу определить, принадлежит ли этот адрес области памяти пользовательского режима или режиму ядра?
Если это ядро, есть ли способ распознать, что этот адрес находится под подкачкой, или неинициализированная память, или что-то еще (какие другие характеристики / свойства адресов существуют?)?

Интересный пост: Таблицы страниц с пятью уровнями

Комментарии:

1. Для большинства, если не для всех текущих операционных систем, бит 63 адреса указывает, является ли это памятью ядра.

2. Видишь unix.stackexchange.com/q/509607/64699

3. ОС использует переменную TASK_SIZE в ядре , если addr > TASK_SIZE, это пространство ядра

4. «есть ли способ распознать, что этот адрес находится под подкачкой, или неинициализированной памятью, или чем — то еще» — если вы дойдете до такого момента, это означает, что адрес недействителен и не ссылается на какую-либо существующую страницу памяти (подкачанную или нет). Ядро сделало все, что могло, и решило, что больше ничего не остается, кроме как умереть.

5. @MarcoBonelli Хорошо, но как я могу понять, что произошло? Вы хотите сказать, что Unable to handle kernel paging request следы не являются показательными? Не следует ли это исследовать?