IOMemoryDescriptor
Абстрактный базовый класс, определяющий общие методы для описания физической памяти или виртуальной памяти.
Объект IOMemoryDescriptor представляет буфер или диапазон памяти, указанной как один или несколько диапазонов физических адресов или диапазоны виртуальных адресов. Это содержит методы для возврата физически непрерывных сегментов памяти (фрагменты) для использования с IOMemoryCursor и методов для отображения памяти в любое адресное пространство с кэшированием и помещенными отображающимися опциями.
Наследование
Не применимый
Соответствует
Не применимый
Оператор импорта
Не применимый
Objective C
@import Kernel;
Доступность
Доступный в OS X v10.0 и позже.
-
Полная обработка памяти после передачи I/O заканчивается.
Объявление
C++
virtual IOReturn complete( IODirection forDirection =
forDirection
) = 0;Параметры
forDirection
DEPRECATED направление I/O просто завершился, или kIODirectionNone для направления, указанного дескриптором памяти.
Возвращаемое значение
Код IOReturn.
Обсуждение
Этот метод нельзя вызвать, если не было ранее выпущено подготавливать; подготавливать () и завершенный () должно произойти в парах, прежде и после передачи I/O, включающей листаемую память. В 10,3 или большие системы дольше не уважают параметр направления для завершения. Направление полностью определяется в, подготавливают () время.
-
Отображает IOMemoryDescriptor в задачу.
Объявление
C++
IOMemoryMap * createMappingInTask( task_t
intoTask
, mach_vm_address_tatAddress
, IOOptionBitsoptions
, mach_vm_size_t offset = 0, mach_vm_size_t length = 0 );Параметры
intoTask
Поставил целевую задачу для отображения. Передайте kernel_task для адресного пространства ядра.
atAddress
Если помещенное отображение требуют, atAddress указывает свой адрес, и kIOMapAnywhere не должен быть установлен. Иначе, atAddress проигнорирован.
options
Отображающиеся опции определяются в IOTypes.h,
если отображение может быть создано где-нибудь, kIOMapAnywhere должен быть передан. Если не набор, atAddress параметр устанавливает расположение отображения, если это доступно в целевой карте.
kIOMapDefaultCache для запрещения кэша в областях I/O, kIOMapCopybackCache в RAM общего назначения.
kIOMapInhibitCache, kIOMapWriteThruCache, kIOMapCopybackCache для установки надлежащего кэширования.
kIOMapReadOnly для разрешения только доступов только для чтения к памяти - записи вызовет и отказ доступа.
kIOMapReference только успешно выполнится, если отображение уже будет существовать, и объект IOMemoryMap является просто дополнительной ссылкой, т.е. никакое новое отображение не будет создаваться.
kIOMapUnique позволяет специальному виду отображения создаваться, который может использоваться с IOMemoryMap:: перенаправление () API. Эти отображения не будут совместно использованы, как значение по умолчанию - всегда будет уникальное отображение, создаваемое для вызывающей стороны, не существующего отображения с дополнительной ссылкой.
offset
Смещение начала в память IOMemoryDescriptor, где запускается отображение. Нуль является значением по умолчанию для отображения всей памяти.
length
Продолжительность отображения, которое требуют на подмножество IOMemoryDescriptor. Нуль является значением по умолчанию для отображения всей памяти.
Возвращаемое значение
Ссылка на объект IOMemoryMap представление отображения, которое может предоставить виртуальный адрес отображения и другой информации. Отображение может быть совместно использовано с многократными вызывающими сторонами - многократных карт избегают, если существует совместимый. Объект IOMemoryMap возвратился, должен быть выпущен только, когда вызывающая сторона закончила получать доступ к отображению, поскольку освобождение объекта уничтожает отображение. Экземпляр IOMemoryMap также сохраняет IOMemoryDescriptor, который он отображает, в то время как он существует.
Обсуждение
Это - метод общего назначения для отображения всех или части памяти, описанной дескриптором памяти в задачу в любом доступном адресе, или в фиксированном адресе, если это возможно. Кэширование и опции только для чтения может быть установлено для отображения. Отображение представлено как возвращенная ссылка на объект IOMemoryMap, который может быть совместно использован, если отображение совместимо с существующим отображением IOMemoryDescriptor. Объект IOMemoryMap возвратился, должен быть выпущен только, когда вызывающая сторона закончила получать доступ к отображению, поскольку освобождение объекта уничтожает отображение.
-
Средство доступа для получения направления дескриптор памяти создавалось с.
Объявление
C++
virtual IODirection getDirection() const;
Возвращаемое значение
Направление.
Обсуждение
Этот метод возвращает направление, с которым создавался дескриптор памяти.
-
Средство доступа для получения длины дескриптора памяти (по всем его диапазонам).
Объявление
C++
virtual IOByteCount getLength() const;
Возвращаемое значение
Количество байта.
Обсуждение
Этот метод возвращает общую длину памяти, описанной дескриптором, т.е. суммой длин его диапазонов.
-
Получите число резидентных и/или грязных страниц, охваченных IOMemoryDescriptor.
Объявление
C++
IOReturn getPageCounts( IOByteCount *
residentPageCount
, IOByteCount *dirtyPageCount
);Параметры
residentPageCount
- Количество байта если ненуль, указатель на, которое возвратит число резидентных страниц, охваченных этим IOMemoryDescriptor.
dirtyPageCount
- Количество байта если ненуль, указатель на, которое возвратит число грязных страниц, охваченных этим IOMemoryDescriptor.
Возвращаемое значение
Код IOReturn.
Обсуждение
Этот метод возвращает число резидентных и/или грязных страниц, охваченных IOMemoryDescriptor.
-
Возвратите физический адрес первого байта в памяти.
Объявление
C++
IOPhysicalAddress getPhysicalAddress();
Возвращаемое значение
Физический адрес.
Обсуждение
Этот метод возвращает физический адрес первого байта в памяти. Это является самым полезным на памяти, которая, как известно, была физически непрерывна.
-
Повредите дескриптор памяти в его физически непрерывные сегменты.
Объявление
C++
#ifdef __LP64__ virtual addr64_t getPhysicalSegment( IOByteCount
offset
, IOByteCount *length
, IOOptionBits options = 0 ) = 0; #else /* !__LP64__ */ virtual addr64_t getPhysicalSegment( IOByteCountoffset
, IOByteCount *length
, IOOptionBitsoptions
); #endif /* !__LP64__ */Параметры
offset
Байтовое смещение в память, чей физический адрес для возврата.
length
Если ненулевой, getPhysicalSegment сохранит здесь длину физически непрерывного segement при данном смещении.
Возвращаемое значение
Физический адрес или нуль, если смещение вне длины памяти.
Обсуждение
Этот метод возвращает физический адрес байта при данном смещении в память, и дополнительно длины физически непрерывного сегмента от того смещения.
-
Средство доступа к получению тега для дескриптора памяти.
Объявление
C++
virtual IOOptionBits getTag(
void
);Возвращаемое значение
Тег.
Обсуждение
Этот метод возвращает тег для дескриптора памяти. Биты тега не интерпретируются IOMemoryDescriptor.
-
Основной инициализатор для всех вариантов дескрипторов памяти. Поскольку больше полного описания видит IOMemoryDescriptor:: withOptions.
Объявление
C++
virtual bool initWithOptions( void *
buffers
, UInt32count
, UInt32offset
, task_ttask
, IOOptionBitsoptions
, IOMapper *mapper =kIOMapperSystem
);Возвращаемое значение
истина на успехе, ложь при отказе.
Обсуждение
Обратите внимание на то, что эта функция может привыкнуть к re-init ранее создаваемый дескриптор памяти.
-
Отображает IOMemoryDescriptor в карту ядра.
Объявление
C++
virtual IOMemoryMap * map( IOOptionBits options = 0 );
Параметры
options
Отображение опций как в полной версии createMappingInTask метода, с принятым kIOMapAnywhere.
Возвращаемое значение
Посмотрите полную версию createMappingInTask метода.
Обсуждение
Это - метод ярлыка для отображения всей памяти, описанной дескриптором памяти в карту ядра в любом доступном адресе. Посмотрите полную версию createMappingInTask метода для получения дальнейшей информации.
-
Выполните работу на памяти дескриптора памяти.
Объявление
C++
virtual IOReturn performOperation( IOOptionBits
options
, IOByteCountoffset
, IOByteCountlength
);Параметры
options
Работа для выполнения на памяти:
kIOMemoryIncoherentIOFlush - передают эту опцию сохранить к памяти и сбросить любые данные в кэше процессора для диапазона памяти с синхронизацией, чтобы гарантировать, что данные прошли через все уровни кэша процессора. Это не может поддерживаться на всей архитектуре. Этот тип сброса может использоваться для некогерентного I/O, такого как AGP - это НЕ требуется для PCI когерентные операции. Дескриптор памяти, должно быть, был ранее подготовлен.
kIOMemoryIncoherentIOStore - передают эту опцию хранить к памяти любые данные в кэше процессора для диапазона памяти с синхронизацией, чтобы гарантировать, что данные прошли через все уровни кэша процессора. Это не может поддерживаться на всей архитектуре. Этот тип сброса может использоваться для некогерентного I/O, такого как AGP - это НЕ требуется для PCI когерентные операции. Дескриптор памяти, должно быть, был ранее подготовлен.
offset
Байтовое смещение в память дескриптора памяти.
length
Длина диапазона данных.
Возвращаемое значение
Код IOReturn.
Обсуждение
Этот метод выполняет некоторую работу на диапазоне памяти дескриптора памяти. Когда память дескриптора памяти не отображается, должно быть более эффективно использовать этот метод, чем отображение памяти для выполнения работы фактически.
-
Подготовьте память к передаче I/O.
Объявление
C++
virtual IOReturn prepare( IODirection forDirection =
forDirection
) = 0;Параметры
forDirection
Направление I/O просто завершилось, или kIODirectionNone для направления, указанного дескриптором памяти.
Возвращаемое значение
Код IOReturn.
Обсуждение
Это вовлекает разбивку на страницы в память, при необходимости, и проводное соединение его вниз на время передачи. Полное () метод завершает обработку памяти после того, как закончится передача I/O. Обратите внимание на то, что подготавливать вызов не ориентирован на многопотоковое исполнение, и ожидается, что клиент более легко будет в состоянии гарантировать единственную поточную обработку определенного дескриптора памяти.
-
Данные копии с буфера дескриптора памяти на указанный буфер.
Объявление
C++
virtual IOByteCount readBytes( IOByteCount
offset
, void *bytes
, IOByteCountwithLength
);Параметры
offset
Байтовое смещение в память дескриптора памяти.
bytes
Вызывающая сторона предоставила буфер для копирования данных в.
withLength
Длина данных для копирования.
Возвращаемое значение
Число байтов скопировало, нуль будет возвращен, если указанное смещение будет вне длины дескриптора. Сборки ядра разработки/отладки будут утверждать, ли смещение вне длины дескриптора.
Обсуждение
Этот метод копирует данные с памяти дескриптора памяти при данном смещении к буферу вызывающей стороны. Дескриптор памяти MUST имеет набор битов kIODirectionOut direcction и быть подготовленным. kIODirectionOut означает, что этот дескриптор памяти будет выведен к внешнему устройству, таким образом, readBytes будет использоваться для получения памяти в локальный буфер для передачи PIO в устройство.
-
Устанавливает уже существующее отображение.
Объявление
C++
virtual IOMemoryMap * setMapping( task_t
task
, IOVirtualAddressmapAddress
, IOOptionBits options = 0 );Параметры
task
Адресное пространство, в котором существует отображение.
mapAddress
Виртуальный адрес отображения.
options
Кэширование и атрибуты «только для чтения» отображения.
Возвращаемое значение
Объект IOMemoryMap, создаваемый для представления отображения.
Обсуждение
Этот метод говорит IOMemoryDescriptor об отображении, существующем, но создававшемся в другом месте. Это позволяет более поздним вызывающим сторонам метода карты совместно использовать это внешне создаваемое отображение. Объект IOMemoryMap возвратился, создается для представления его. Этот метод не обычно необходим.
-
Управляйте purgeable состоянием памяти дескрипторов памяти.
Объявление
C++
virtual IOReturn setPurgeable( IOOptionBits
newState
, IOOptionBits *oldState
);Параметры
newState
- желаемое новое purgeable состояние памяти:
kIOMemoryPurgeableKeepCurrent - не внесите изменения в purgeable состояние памяти.
kIOMemoryPurgeableVolatile - делают память энергозависимой - в отношении памяти может предъявить претензии система VM, не сохраняя ее содержание к запоминающему устройству.
kIOMemoryPurgeableNonVolatile - делают память энергонезависимой - память обрабатывается как с обычными выделениями и должна быть сохранена к запоминающему устройству, если разбито на страницы.
kIOMemoryPurgeableEmpty - сделайте память энергозависимой, и отбросьте любые страницы, выделенные ей.
oldState
- если не-NULL, предыдущее purgeable состояние памяти возвращается сюда:
kIOMemoryPurgeableNonVolatile - память была энергонезависимой.
kIOMemoryPurgeableVolatile - память была энергозависима, но ее содержание не было отброшено системой VM.
kIOMemoryPurgeableEmpty - память была энергозависима и была отброшена системой VM.
Возвращаемое значение
Код IOReturn.
Обсуждение
Буферы могут быть выделены с возможностью изменить их purgeable состояние - IOBufferMemoryDescriptor с kIOMemoryPurgeable опцией, VM_FLAGS_PURGEABLE может быть передан vm_allocate () в пространстве пользователя для выделения таких буферов. purgeable состоянием такого буфера можно управлять с setPurgeable (). Процесс создания purgeable энергонезависимого дескриптора памяти и определение его предыдущего состояния является атомарным - если purgeable дескриптор памяти сделан энергонезависимым, и старое состояние возвращается как kIOMemoryPurgeableVolatile, то предыдущее содержание памяти абсолютно неповреждено и останется таким, пока память не сделана энергозависимой снова. Если старое состояние возвращается как kIOMemoryPurgeableEmpty тогда, в отношении памяти предъявили претензии, в то время как это было в энергозависимом состоянии, и было потеряно его предыдущее содержание.
-
Установите тег для дескриптора памяти.
Объявление
C++
virtual void setTag( IOOptionBits
tag
);Параметры
tag
Тег.
Обсуждение
Этот метод устанавливает тег для дескриптора памяти. Биты тега не интерпретируются IOMemoryDescriptor.
-
Создайте IOMemoryDescriptor для описания одного виртуального диапазона задачи ядра.
Объявление
C++
static IOMemoryDescriptor * withAddress( void *
address
, IOByteCountwithLength
, IODirectionwithDirection
);Параметры
address
Виртуальный адрес первого байта в памяти.
withLength
Длина памяти.
withDirection
Направление I/O, которое будет связано с дескриптором, который может влиять на работу того, чтобы подготавливать и завершить методы на некоторой архитектуре.
Возвращаемое значение
Создаваемый IOMemoryDescriptor на успехе, чтобы быть выпущенным вызывающей стороной или нулем при отказе.
Обсуждение
Этот метод создает и инициализирует IOMemoryDescriptor для памяти, состоящей из единственного диапазона виртуальной памяти, отображенного в карту ядра. Этот дескриптор памяти должен быть подготовлен, прежде чем он сможет использоваться для извлечения данных из описанной памяти.
-
Создайте IOMemoryDescriptor для описания одного виртуального диапазона указанной карты.
Объявление
C++
static IOMemoryDescriptor * withAddressRange( mach_vm_address_t
address
, mach_vm_size_twithLength
, IOOptionBitsoptions
, task_ttask
);Параметры
address
Виртуальный адрес первого байта в памяти.
withLength
Длина памяти.
options
kIOMemoryDirectionMask (options:direction) Это откусывание указывает направление I/O, которое будет связано с дескриптором, который может влиять на работу того, чтобы подготавливать и завершить методы на некоторой архитектуре.
task
Задача виртуальные диапазоны отображается в. Обратите внимание на то, что в отличие от IOMemoryDescriptor:: withAddress (), kernel_task память должен быть явно подготовлен, когда передано этому API. Параметром задачи может быть NULL для указания памяти физическим адресом.
Возвращаемое значение
Создаваемый IOMemoryDescriptor на успехе, чтобы быть выпущенным вызывающей стороной или нулем при отказе.
Обсуждение
Этот метод создает и инициализирует IOMemoryDescriptor для памяти, состоящей из единственного диапазона виртуальной памяти, отображенного в указанную карту. Этот дескриптор памяти должен быть подготовлен, прежде чем он сможет использоваться для извлечения данных из описанной памяти.
-
Создайте IOMemoryDescriptor для описания одного или более виртуальных диапазонов.
Объявление
C++
static IOMemoryDescriptor * withAddressRanges( IOAddressRange *
ranges
, UInt32rangeCount
, IOOptionBitsoptions
, task_ttask
);Параметры
ranges
Массив структур IOAddressRange, указывающих виртуальные диапазоны в указанной карте, составляющие память, которая будет описана. IOAddressRange является версией на 64 бита IOVirtualRange.
rangeCount
Задействованное количество массива диапазонов.
options
kIOMemoryDirectionMask (options:direction) Это откусывание указывает направление I/O, которое будет связано с дескриптором, который может влиять на работу того, чтобы подготавливать и завершить методы на некоторой архитектуре. kIOMemoryAsReference Для options:type = Виртуальный или Физический это указывает, что дескриптор памяти не должен копировать массив диапазонов в локальную память. Это - оптимизация, чтобы попытаться минимизировать ненужные выделения.
task
Задача каждый из виртуальных диапазонов отображается в. Обратите внимание на то, что в отличие от IOMemoryDescriptor:: withAddress (), kernel_task память должен быть явно подготовлен, когда передано этому API. Параметром задачи может быть NULL для указания памяти физическим адресом.
Возвращаемое значение
Создаваемый IOMemoryDescriptor на успехе, чтобы быть выпущенным вызывающей стороной или нулем при отказе.
Обсуждение
Этот метод создает и инициализирует IOMemoryDescriptor для памяти, состоящей из массива диапазонов виртуальной памяти каждый отображенный в указанную исходную задачу. Этот дескриптор памяти должен быть подготовлен, прежде чем он сможет использоваться для извлечения данных из описанной памяти.
-
Основной инициализатор для всех вариантов дескрипторов памяти.
Объявление
C++
static IOMemoryDescriptor *withOptions( void *
buffers
, UInt32count
, UInt32offset
, task_ttask
, IOOptionBitsoptions
, IOMapper *mapper =mapper
);Параметры
buffers
Указатель на массив IOAddressRange, когда options:type является kIOMemoryTypeVirtual64 или kIOMemoryTypePhysical64 или ядром на 64 бита. Для типа UPL это - upl_t, возвращенный mach/memory_object_types.h пчелой, прежде всего используемой внутренне UBC. IOVirtualRanges или IOPhysicalRanges составляют 32 бита, только вводит для использования, когда options:type является kIOMemoryTypeVirtual или kIOMemoryTypePhysical на ядрах на 32 бита.
count
options:type = Виртуальный или Физический подсчет содержит количество числа entires в буферном массиве. Для options:type = UPL это поле содержит общую длину.
offset
Только используемый, когда options:type = UPL, когда это поле содержит смещение для памяти в буферах upl.
task
Только используемый options:type = Виртуальный, задача каждый из виртуальных диапазонов отображаются в.
options
kIOMemoryDirectionMask (options:direction) Это откусывание указывает направление I/O, которое будет связано с дескриптором, который может влиять на работу того, чтобы подготавливать и завершить методы на некоторой архитектуре. kIOMemoryTypeMask (options:type) kIOMemoryTypeVirtual64, kIOMemoryTypeVirtual, kIOMemoryTypePhysical64, kIOMemoryTypePhysical, kIOMemoryTypeUPL Указывает что какой дескриптор основной памяти памяти для использования. Это подполе также управляет интерпретацией буферов, количества, смещения и параметров задачи. kIOMemoryAsReference Для options:type = Виртуальный или Физический это указывает, что дескриптор памяти не должен копировать массив диапазонов в локальную память. Это - оптимизация, чтобы попытаться минимизировать ненужные выделения. kIOMemoryBufferPageable, Только используемый IOBufferMemoryDescriptor в качестве индикации, что виртуальная память ядра фактически листаема и мы должны использовать ядро листаемая подкарта, а не карта по умолчанию.
mapper
Какой IOMapper должен использоваться для отображения физических адресов в памяти в адреса пространства I/O. Значения по умолчанию к 0, который указывает, что системный картопостроитель должен использоваться, если существующий.
Возвращаемое значение
Создаваемый IOMemoryDescriptor на успехе, чтобы быть выпущенным вызывающей стороной или нулем при отказе.
Обсуждение
Этот метод создает и инициализирует IOMemoryDescriptor для памяти, это имеет три основных варианта: Виртуальный, Физический и Мах UPL. Эти варианты выбраны с параметром опций, видят ниже. Этот дескриптор памяти должен быть подготовлен, прежде чем он сможет использоваться для извлечения данных из описанной памяти.
-
Скопируйте конструктора, генерирующего новый дескриптор памяти, если изменилась резервная память для виртуального адреса и длины той же задачи.
Объявление
C++
static IOMemoryDescriptor * withPersistentMemoryDescriptor( IOMemoryDescriptor *
originalMD
);Параметры
originalMD
Дескриптор памяти, который будет дублирован.
Возвращаемое значение
Или исходный дескриптор памяти с дополнительным сохраняет или новый дескриптор памяти, 0 для плохого исходного дескриптора памяти или некоторого другого дефицита ресурсов.
Обсуждение
Если исходный адрес дескриптора памяти и длина все еще поддерживаются той же реальной памятью, т.е. пользователь не освободил и перераспределенная память в том же адресе тогда, исходный дескриптор памяти возвращается с дополнительной ссылкой. Иначе мы создаем полностью новый дескриптор памяти с теми же характеристиками как предыдущая, но с новым представлением vm. Отметьте не законный для вызывания этой функции с чем-либо кроме IOGeneralMemoryDescriptor, создававшегося с kIOMemoryPersistent опцией.
-
Создайте IOMemoryDescriptor для описания одного физического диапазона.
Объявление
C++
static IOMemoryDescriptor * withPhysicalAddress( IOPhysicalAddress
address
, IOByteCountwithLength
, IODirectionwithDirection
);Параметры
address
Физический адрес первого байта в памяти.
withLength
Длина памяти.
withDirection
Направление I/O, которое будет связано с дескриптором, который может влиять на работу того, чтобы подготавливать и завершить методы на некоторой архитектуре.
Возвращаемое значение
Создаваемый IOMemoryDescriptor на успехе, чтобы быть выпущенным вызывающей стороной или нулем при отказе.
Обсуждение
Этот метод создает и инициализирует IOMemoryDescriptor для памяти, состоящей из единственного диапазона физической памяти.
-
Данные копии к буферу дескриптора памяти от указанного буфера.
Объявление
C++
virtual IOByteCount writeBytes( IOByteCount
offset
, const void *bytes
, IOByteCountwithLength
);Параметры
offset
Байтовое смещение в память дескриптора памяти.
bytes
Вызывающая сторона предоставила буфер для копирования данных с.
withLength
Длина данных для копирования.
Возвращаемое значение
Число байтов скопировало, нуль будет возвращен, если указанное смещение будет вне длины дескриптора. Сборки ядра разработки/отладки будут утверждать, ли смещение вне длины дескриптора.
Обсуждение
Этот метод копирует данные в память дескриптора памяти при данном смещении от буфера вызывающей стороны. Дескриптор памяти MUST имеет набор битов kIODirectionIn direcction и быть подготовленным. kIODirectionIn означает, что этот дескриптор памяти будет введен от внешнего устройства, таким образом, writeBytes будет использоваться для записи памяти в дескриптор для драйверов PIO.
-
Зарезервированный для будущего использования. (Только внутреннее использование)
Объявление
C++
struct IOMemoryDescriptorReserved * reserved;