Фрагмент системной страницы, характеризующий атрибуты областей адресного пространства системы
#include <sys/syspage.h>
struct asinfo_entry {
uint64_t start;
uint64_t end;
uint16_t owner;
uint16_t name;
uint16_t attr;
uint16_t priority;
int (*alloc_checker)( struct syspage_entry *__sp,
uint64_t *__base,
uint64_t *__len,
size_t __size,
size_t __align );
uint32_t spare;
};
Структура содержит информацию системной страницы, характеризующую атрибуты областей адресного пространства системы и включает следующие поля:
- start
- Начальный физический адрес описываемой области.
- end
- Конечный физический адрес описываемой области (последний байт, а не следующий за ним).
- owner
- Смещение относительно начала раздела, которое определяет родительскую область («владельца») описываемой области. Если у области отсутствует владелец (она является корнем адресного пространства), в этом поле указывается значение
AS_NULL_OFF
. - name
- Смещение относительно начала раздела strings системной страницы, которое определяет строку с именем описываемой области.
- attr
- Содержит несколько бит, которые влияют на диапазон адресов. В поле можно устанавливать следующие биты:
- AS_ATTR_READABLE
- Диапазон адресов доступен для чтения.
- AS_ATTR_WRITABLE
- Диапазон адресов доступен для записи.
- AS_ATTR_CACHABLE
- Диапазон адресов кешируется (следует сбрасывать этот бит, если память относится к устройству).
- AS_ATTR_VISIBLE
- Устаревшее поле.
- AS_ATTR_KIDS
- Указывает, что эта область является родительской по отношению к другим областям. Библиотека устанавливает этот бит автоматически; не нужно устанавливать его при создании раздела.
- AS_ATTR_CONTINUED
- Указывает, что один «логический» диапазон адресов состоит из нескольких описываемых областей. Этот бит устанавливается для всех областей, кроме последней. Библиотека libstartup задает и использует его автоматически; не нужно устанавливать его при создании раздела.
- priority
- Задает скорость памяти в диапазоне адресов. Чем меньше значение этого поля, тем медленнее память. Макрос
AS_PRIORITY_DEFAULT
задает значение поля по умолчанию (на текущий момент 100). - alloc_checker
- Поле в настоящее время не используется, однако в будущем позволит более гибко управлять распределением памяти системы (например, размещать память ISA, которая обслуживается контроллером прямого доступа к памяти, в границах 64 Кбайт).
ЗОСРВ «Нейтрино»
struct syspage_entry
Руководство по разработке модуля startup
Предыдущий раздел: Описание API системной библиотеки