Инструкции загрузки/сохранения могут обращаться только к виртуальной памяти. Все они проходят через MMU. MMU всегда преобразует адреса, используя текущую таблицу страниц.
Linux разделяет память на «Low» и «High» только на 32 -битных процессорах. 32-битный виртуальный адрес -идентифицирует одно из 4 ГБ различных местоположений. Чтобы получить доступ к более чем 4 ГБ различных областей физической памяти, мы должны использовать временные виртуальные сопоставления.
Посмотрите официальный документ:linux -5.0/Documentation/vm/highmem.rst
The general recommendation is that you don't use more than 8GiB on a 32-bit machine - although more might work for you and your workload, you're pretty much on your own - don't expect kernel developers to really care much if things come apart.
Помимо :"логический адрес ядра" означает тип виртуального адреса, который указывает внутри постоянного отображения младшей памяти. Этот термин использовался в отдельной книге по Linux. Он не используется вне контекста этой книги.
Вопрос :В чем «преимущество» постоянного отображения очень большой области физической памяти, т. е. «мало памяти»?
Ответ :Это означает, что большая часть кода ядра Linux может избежать дополнительной сложности и снижения производительности при работе с "высокой памятью". т.е. необходимость создания временных сопоставлений. Это особенно важно, учитывая, что большой объем памяти имеет отношение только к устаревшему 32-разрядному -процессору.
Большая часть кода ядра может размещаться внутри малой памяти. Большинству кода ядра не требуется большой объем оперативной памяти. Исключением является то, что Linux позволяет размещать кэш страниц в верхней памяти. Таким образом, код ядра, который касается кеша страниц, должен знать об этом.
Даже буферы сокета (сети )не поддерживают highmem. Пример:https://www.airship.com/blog/linux-kernel-tuning-for-c500k/
Если pushcommand просто читает сначала имя пользователя, а затем пароль из стандартного ввода, разделенные новой строкой, вы можете сделать следующее:
echo "$username\n$password" | pushcommand
Вызов "echo" здесь выводит переменные имени пользователя и пароля в отдельных строках.
"|" означает «взять вывод команды слева и передать его в качестве ввода команде справа». Эта конструкция называется «конвейером» в сценариях оболочки.
Для сценариев более сложных взаимодействийЯ бы рекомендовал взглянуть на expect или, возможно, kermit . Чтобы получить помощь с expect или kermit, вам нужно опубликовать пример того, как на самом деле выглядит интерактивное использование pushcommand, например. какие подсказки он отображает и так далее.