Cтраница 2
Третья проблема, связанная с отображением файлов на память, вызвана тем, что файл может оказаться больше сегмента памяти и даже больше чем все виртуальное адресное пространство. При этом единственный способ работы системного вызова тар состоит в отображении на память части файла. Хотя такой метод и работает, он все же менее удобен, чем отображение всего файла целиком. [16]
![]() |
Некоторые системные вызовы для управления памятью Системный вызов Описание. [17] |
Системные вызовы mmap и unmap управляют отображением файлов на адресное пространство памяти. Он должен быть кратен размеру страницы. Если этот параметр равен 0, тогда операционная система определяет этот адрес сама и возвращает его в а. Второй параметр, len, задает количество отображаемых байтов. Он также должен быть кратен размеру страницы. Третий параметр, prot, задает режим защиты для отображаемого файла. Файл может быть помечен как доступный для чтения, записи, исполнения или любой комбинации этих трех битов. [18]
![]() |
Некоторые системные вызовы для управления памятью Системный вызов Описание. [19] |
Системные вызовы пиар и unmap управляют отображением файлов на адресное пространство памяти. Он должен быть кратен размеру страницы. Если этот параметр равен 0, тогда операционная система определяет этот адрес сама и возвращает его в а. Второй параметр, len, задает количество отображаемых байтов. Он также должен быть кратен размеру страницы. Третий параметр, prot, задает режим защиты для отображаемого файла. Файл может быть помечен как доступный для чтения, записи, исполнения или любой комбинации этих трех битов. Четвертый параметр, flags, определяет, является ли отображаемый файл приватным или доступным для совместного использования, а также содержит ли параметр addr жесткое требование или это всего лишь намек. [20]
Второй системный вызов, unmap, отменяет отображения файла на память. Если отменяется отображение только части файла, то остальная часть файла продолжает отображаться па память. [21]
Второй системный вызов, unmap, отменяет отображения файла на память. Если отменяется отображение только части файла, то остальная часть файла продолжает отображаться на память. [22]
Программное обеспечение баз данных должно располагать средствами отображения файлов структуры прикладного программиста ( левая часть диаграммы на рис. 3.1, этап 3) в такую физическую структуру данных, которая запоминается на реальном носителе ( правая часть этой диаграммы), и наоборот. [23]
Последние четыре функции API, перечисленные в таблице, управляют отображением файлов на адресное пространство памяти. Чтобы отобразить файл на адресное пространство памяти, сначала следует создать объект отображения ( см. табл. 11.6) при помощи функции CreateFileMapping. Эта функция возвращает дескриптор объекта отображения, а также может ввести имя объекта в файловую систему, чтобы другие процессы могли пользоваться этим объектом. Следующие две функции включают и выключают отображение файла на адресное пространство памяти. Последняя функция в таблице может использоваться процессом для отображения на память файла, уже использующегося подобным образом другим процессом. Таким образом, несколько процессов могут совместно использовать области своих виртуальных адресных пространств. Эта техника позволяет им записывать данные в ограниченные области памяти других процессов. [24]
Отображаемые в память файлы реализуются так же, как другие выделенные страницы, только теневые страницы могут находиться в файле на диске, а не в страничном файле. Однако когда отображение файла удаляется, версия на диске обновляется. [25]
![]() |
Этапы выполнения команды Is, введенной в оболочке. [26] |
После этого следует создать и заполнить новое адресное пространство. Если системой поддерживается отображение файлов на адресное пространство памяти, как, например, в System V, BSD и в большинстве других версий UNIX, то таблицы страниц настраиваются следующим образом: в них указывается, что страниц в памяти нет, кроме, возможно, одной страницы со стеком, а содержимое адресного пространства может подгружаться из исполняемого файла на диске. Когда новый процесс начинает работу, он немедленно вызывает страничное прерывание, в результате которого первая страница программы подгружается с диска. Таким образом, ничего не нужно загружать заранее, что позволяет быстро запускать программы, а в память загружать только те страницы, которые действительно нужны программам. Наконец, в стек копируются аргументы и строки окружения, сигналы сбрасываются, а все регистры устанавливаются на ноль. С этого момента новая команда начинает исполнение. [27]
Операционная система UNIX не только объединяет файлы и устройства ввода-вывода, но также позволяет получать доступ к другим процессам через каналы, как к файлам. Более того, если поддерживается отображение файлов на адресное пространство памяти, процесс может обращаться к своей виртуальной памяти так, как если бы это был файл. [28]
![]() |
Основные функции API для управления виртуальной памятью в системе Windows NT. [29] |
Последние 4 функции API предназначены для управления отображаемыми в память файлами. Чтобы отобразить файл, сначала нужно создать объект отображения файла с помощью функции CreateFileMapping. Эта функция возвращает идентификатор ( handle) объекту отображения файла и иногда еще и вводит в систему файлов имя для него, чтобы другой процесс мог использовать объект. Две функции отображают файлы и удаляют отображение соответственно. Следующая функция нужна для того, чтобы отобразить файл, который в данный момент отображен другим процессом. Таким образом, два и более процессов могут разделять области своих адресных пространств. [30]