В таблице страниц каких процессов функция vmalloc() выделяет новую память?

В вашем примере:

cat <(datE); echo $?

Что происходит, так это то, что datEвыдает ошибку и не генерирует никаких выходных данных. Затем выдает код ошибки. Однако ввод (null )затем представляется в cat, который счастливо ничего не пережевывает, и теперь ваш код выхода равен нулю.

Если убрать промежуточный шаг, все будет работать так, как вы ожидаете:

$ datE; echo $?
datE: command not found
127

Если вы хотите, чтобы bashпрервал работу при любых сбоях в конвейере и любой неперехваченной ошибке, выполните следующие две команды:

set -e
set -o pipefail

Другие оболочки могут предоставлять аналогичные настройки.

1
28.06.2019, 19:35
1 ответ

vmalloc — это распределитель ядра, он не (обязательно )относится к процессам. Ядро также большую часть времени видит виртуальную память, а не линейную память. Особенность vmallocзаключается в том, что он выделяет только непрерывную виртуальную память, а не физическую память; kmallocвыделяет непрерывную виртуальную и физическую память. Оба возвращают виртуальные адреса.

vmalloc, в отличие от kmalloc, должен выделять новые записи таблицы страниц(kmallocразмещает из предварительно -отображаемой области ); они отображаются в общей части дерева таблицы страниц или, когда KPTI включен, в частной части ядра -дерева.

Подробнее см.Драйверы устройств Linuxв главе 8.

4
27.01.2020, 23:17

Теги

Похожие вопросы