next up previous
Next: Синхронный ввод - Up: Linux & POSIX.1b Previous: Межпроцессная cвязь (IPC)

Захват памяти

Четыре новых функции mlock(), munlock(), mlockall() и munlockall() позволяют запретить пэйжинг для указанных областей памяти -- mlock( ), или для всех страниц (код, стек, данные, разделяемая память, карта файлов, разделяемые библиотеки) к которому процесс имеет доступ -- mlockall(). Это позволяет гарантировать то, что например маленький и критичный ко времени демон останется в памяти, и соответственно может помочь гарантировать необходимое время ответа от этого процесса. Под Linux, этот режим (подобно большому количеству других связанных с особенностями реального времени) дозволен только для суперпользовательских процессов, чтобы избегать злоупотребления этой особенностью обычными пользователями в больших системах с разделением времени.

Другое применение для захвата памяти криптографической программой -- безопасность компьютера. При использовании mlock(), эти системы могут гарантировать, что зашифрованный секретный ключ или пароль, который временно сохранен в маленьком пользовательском массиве, не будет никогда записыватся на устройство своппинга, где, хоть и маловероятно, кто-то мог бы найти секретные байты даже спустя несколько месяцев позже.

В качестве приложений было бы хорошо, если бы в Linux даже не суперпользовательские процессы могли бы позволить себе небольшое число mlock()-нутых редактируемых страниц, например. До четырех захваченных страниц для не суперпользовательского процесса должно бы быть достаточно.

Состояние выполнения: Linus теперь добавил полную POSIX.1b поддержку захвата памяти к альфе Linux, проверка на версии ядра 1.3.43. Там существует также libc-поддержка и описание. Так, что уже не надо ставить патч POSIX.4_locking от Ralf Haller (hal@iitb.fhg.de) или еще какой - нибудь.



Vladimir Chernenkov
Fri Jun 13 10:57:19 MSD 1997