Функции mmap() и do_mmap() : создание интервала адресов
Функции mmap() и do_mmap(): создание интервала адресов
Функция do_mmap() используется ядром для создания нового линейного интервала адресов. Говорить, что эта функция создает новую область VMA, — технически не корректно, поскольку если создаваемый интервал адресов является смежным с существующим интервалом адресов и у этих интервалов одинаковые права доступа, то два интервала объединяются в один. Если это невозможно, то создается новая область VMA В любом случае функция do_mmap() — это функция, которая добавляет интервал адресов к адресному пространству процесса, независимо от того, создается ли при этом новая область VMA или расширяется существующая.
Функция do_mmap() объявлена в файле <linux/mm.h> следующим образом.
unsigned long do_mmap(struct file *file,
unsigned long addr, unsigned long len,
unsigned long prot, unsigned long flag,
unsigned long offset);
Эта функция выполняет отображение на память содержимого файла file начиная с позиции в файле offset; размер отображаемого участка равен len байт. Значения параметров file и offset могут быть нулевыми, в этом случае отображение не будет резервироваться (сохраняться) в файле. Такое отображение называется анонимным (anonymous mapping). Если указан файл и смещение, то отображение называется отображением файла в память (file-backed mapping).
Параметр addr указывает (точнее, всего лишь подсказывает), откуда начинать поиск свободного интервала адресов.
Параметр prot указывает права доступа для страниц памяти в данной области. Возможные значение флагов зависят от аппаратной платформы и описаны в файле <asm/mman.h>. Хотя на практике для всех аппаратных платформ определены флаги, приведенные в табл. 14.2.
Таблица 14.2. Флаги защиты страниц памяти
Флаг Влияние на страницы памяти в созданном интервале адресов PROT_READ Соответствует флагу VM_READ PROT_WRITE Соответствует флагу VM_WRITE PROT_EXEC Соответствует флагу VM_EXEC PROT_NONE К страницам памяти нет доступаПараметр flags позволяет указать все остальные флаги области VMA Эти флаги также определены в <asm/mman.h> и приведены в табл. 14.3.
Таблица 14.3. Флаги защиты страниц памяти
Флаг Влияние на созданный интервал адресов MAP_SHARED Отображение может быть совместно используемым MAP_PRIVATE Отображение не может быть совместно используемым MAP_FIXED Создаваемый интервал адресов должен начинаться с указанного адреса addr MAP_ANONYMOUS Отображение является анонимным, а не отображением файла MAP_GROWSDOWN Соответствует флагу VM_GROWSDOWN MAP_DENYWRITE Соответствует флагу VM_DENYWRITE MAP_EXECUTABLE Соответствует флагу VM_EXECUTABLE MAP_LOCKED Соответствует флагу VM_LOCKED MAP_NORESERVE Нет необходимости резервировать память для отображения MAP_POPULATE Предварительно заполнить (prefault) таблицы страниц MAP_NONBLOCK Не блокировать при операциях ввода-выводаЕсли какой-либо из параметров имеет недопустимое значение, то функция do_mmap() возвращает отрицательное число. В противном случае создастся необходимый интервал адресов. Если это возможно, то этот интервал объединяется с соседней областью памяти. Если это невозможно, то создается новая структура vm_area_struct, которая выделяется в слябовом кэше vm_area_cachep. После этого новая область памяти добавляется в связанный список и красно-черное дерево областей памяти адресного пространства с помощью функции vma_link(). Затем обновляется значение поля total_vm в дескрипторе памяти. В конце концов, функция возвращает начальный адрес вновь созданного интервала адресов.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Создание библиотек DLL на основе функции Asc2Un
Создание библиотек DLL на основе функции Asc2Un Программа тестировалась с двумя функциями преобразования файлов, которые должны были создаваться в виде библиотек DLL, имеющих различные имена, но идентичные точки входа. В данном случае существует только одна точка входа.
Ожидание в течение конечного интервала времени
Ожидание в течение конечного интервала времени Наконец, рассмотрим функцию Sleep, позволяющую потоку отказаться от процессора и перейти из состояния выполнения в состояние ожидания, которое будет длиться в течение заданного промежутка времени. Например,
Системный вызов mmap()
Системный вызов mmap() Возможности функции do_mmap() экспортируются в пространство пользователя с помощью системного вызова mmap(), который определен следующим образом.void *mmap2(void *start, size_t length, int prot, int flags, int fd, off_t pgoff);Этот системный вызов имеет имя mmap2(), т.е. второй вариант функции
Функции munmap() и do_munmap() : удаление интервала адресов
Функции munmap() и do_munmap(): удаление интервала адресов Функция do_munmap() удаляет интервал адресов из указанного адресного пространства процесса. Эта функция объявлена в файле <asm/mman.h> следующим образом.int do_munmap(struct mm_struct *mm, unsigned long start, size_t len);Первый параметр указывает адресное
11.20. Устаревшие функции поиска адресов IPv6
11.20. Устаревшие функции поиска адресов IPv6 В процессе разработки IPv6 интерфейс поиска адресов IPv6 много раз претерпевал серьезные изменения. В какой-то момент интерфейс был сочтен усложненным и недостаточно гибким, так что от него полностью отказались в RFC 2553 [38]. Документ RFC
26.2. Основные функции для работы с потоками: создание и завершение потоков
26.2. Основные функции для работы с потоками: создание и завершение потоков В этом разделе мы рассматриваем пять основных функций для работы с потоками, а в следующих двух разделах мы используем эти функции для написания потоковой модификации клиента и сервера
Маскировка адресов
Маскировка адресов Как было сказано ранее, вам может потребоваться, чтобы в сообщениях вместо имени, возвращаемого по команде hostname, отображалось другое имя узла или домена. Основные средства маскировки адресов включаются посредством опции qualify_domain. С помощью данной
Маскировка адресов
Маскировка адресов Опция myorigin позволяет задать имя, под которым Postfix будет представляться при взаимодействии с другими системами. По умолчанию в качестве значения данной опции задается переменная $myhostname, которая, в свою очередь, определяет доменное имя компьютера.
5.9 Форматы адресов
5.9 Форматы адресов Как показано на рис. 5.4, IP-адрес состоит из двух частей: адреса сети (network address) и локального адреса (local address). Адрес сети идентифицирует сеть, к которой подключен узел, а локальный адрес определяет отдельный узел внутри сети организации. Рис. 5.4. Формат
11.9.2 Аренда адресов
11.9.2 Аренда адресов Процесс выделения адресов предполагает запрос клиентом IP-адреса на определенный период времени (возможно, что и навсегда). Сервер предоставляет клиенту адрес в аренду, указывая период использования данного адреса. Клиент должен периодически
22.4.1 Выделение адресов
22.4.1 Выделение адресов 128-разрядное пространство адреса обеспечивает место для множества различных типов адресов, включая:? Иерархические глобальные одноадресные рассылки на основе адресов провайдеров? Иерархические глобальные одноадресные рассылки по
12.2. Функции mmap, munmap и msync
12.2. Функции mmap, munmap и msync Функция mmap отображает в адресное пространство процесса файл или объект разделяемой памяти Posix. Мы используем эту функцию в следующих ситуациях:1. С обычными файлами для обеспечения ввода-вывода через отображение в память (раздел 12.3).2. Со
Б.2. Основные функции для работы с потоками: создание и завершение
Б.2. Основные функции для работы с потоками: создание и завершение В этом разделе мы опишем пять основных функций для работы с потоками.Функция pthread_createПри запуске пpoгрaммы вызовом exec создается единственный поток, называемый начальным потоком, или главным (initial thread).
7.16 Прибавление интервала к моменту времени
7.16 Прибавление интервала к моменту времени Можно получить новый момент времени, прибавив к существующему интервал. Последний представляется целым числом, которое интерпретируется как число секунд.t0 = Time.nowt1 = t0 + 60 # Ровно одна минута с момента t0.t2 = t0 + 3600 # Ровно один час
4.4.2.1. Создание значений геометрии через функции WKT
4.4.2.1. Создание значений геометрии через функции WKT MySQL обеспечивает ряд функций, которые берут как входные параметры представление Well-Known Text и, факультативно, пространственный идентификатор системы ссылки (SRID). Они возвращают соответствующую геометрию.GeomFromText() принимает
5.3.5. Применения функции mmap()
5.3.5. Применения функции mmap() Функция mmap() может использоваться не только для организации взаимодействия процессов. Часто она выступает в качестве замены функциям read() и write(). Например, вместо того чтобы непосредственно загружать содержимое файла в память, программа может