Процесс может изменить защиту, связанную с областью его виртуальной памяти, использовав системный вызов mprotect. Размер защищаемой области может быть всего в одну страницу. Поскольку ядро для осуществления защиты прав доступа зависит от аппаратного обеспечения, степень детализации защиты ограничена нижележащим оборудованием. Для области можно установить любую комбинацию прав доступа на чтение, запись и исполнение. Во многих архитектурах не различаются права доступа на чтение и исполнение; на таких архитектурах право на исполнение рассматривается как право на чтение.
Ядро реализует системный вызов mprotect, находя существующую структуру vm_map_entry или структуры, которые охватывают область, указанную при вызове. Если существующие права доступа те же самые, что и в запросе, дальнейшие действия не требуются. В противном случае новые права доступа сравниваются с максимальным значением защиты, связанным с vmjnapentry. Максимальное значение устанавливается во время вызова mmap и отражает максимальное значение, допускаемое лежащим в основе файлом. Если новые права доступа действительны, для описания новых прав доступа должны быть подготовлены одна или более структур vm_map_entry. Набор перекрывающихся условий, которые должны быть учтены, сходен с тем, который описан в предыдущем подразделе. Вместо замещения объекта, лежащего в основе новых структур vm_map_entry, эти структуры vmjnapentry по-прежнему ссылаются на тот же самый объект; различие в том, что они предоставляют ему другие права доступа.
- 05/11/2010 00:51 - Завершение процесса
- 04/11/2010 18:14 - Роль модуля pmap
- 02/11/2010 21:26 - Переносимость
- 02/11/2010 12:16 - Процесс подкачки
- 01/11/2010 22:58 - Подкачка процессов
- 31/10/2010 22:44 - Отображение файлов
- 29/10/2010 23:12 - Демон выгрузки страниц
- 29/10/2010 05:27 - Параметры страничной подкачки
- 29/10/2010 00:56 - Замещение страниц
- 28/10/2010 11:59 - Раскраска страниц (page coloring)