Windows для профессионалов

       

Системная информация


Многие параметры операционной системы (размер страницы, гранулярность выделения памяти и др) зависят от используемого в компьютере процессора. Поэтому нельзя жестко "зашивать" их значения в исходный код пpoгpaмм. Эту информацию надо считывать в момент инициализации процесса с помощью функции GetSystemfnfo:

VOID GetSystemInfo(LPSYSTEM_INFO psinf);

Вы должны передать в GetSystemInfo адрес структуры SYSTEM_INFO, и функция инициализирует элементы этой структуры:

typedef struct _SYSTEM_INFO
{

union
{

DWORD dwOemIdж
// не используйте этот элемент он устарел

struct
{

WORD wProcessorArchitecture;
WORD wRescrved;

};

};

DWORD dwPageSize;
LPVOID lpMinimurnApplirationAddress;
LPVOID lpMaximumApplicationAddress;
DWORD_PTR dwActiveProcessorMask;
DWORD dwNumberOfProcessors;
DWORD dwProcessorType;
DWORD dwAllocationGranularity;
WORD wProcessorLevel;
WORD wProcessorRpvi4inn;

} SYSTEM INFO *LPSYSlEM_INFO;

При загрузке система определяет значения элементов этой структуры, для конкретной системы их значения постоянны Функция GetSystemInfo предусмотрена специально для того, чтобы и приложения могли получать эту информацию. Из всех элементов структуры лишь четыре имеют отношение к памяти. Они описаны в следующей таблице.



Элемент Описание
dwPageStze Размер страницы памяти. На процессорах x86 это значение ра но 4096, а на процессорах Alpha — 8192 байтам.
IpMinimumApplicationAddress Минимальный адрес памяти доступного адресного пространен для каждого процесса. В Windows 98 это значение равно 4 194 304, или 0x00400000, поскольку нижние 4 Мб адресного пространства каждого процесса недоступны. В Windows 2000 это значение равно 65 536, или 0x00010000, так как в этой сие теме резервируются лишь первые 64 Кб адресного пространст каждого процесса.
lpMaximwnApplicationAddress Максимальный адрес памяти доступного адресного простран ства, отведенного в "личное пользование" каждому процессу. В Windows 98 этот адрес равен 2 147 483 647, или 0x7FFFFFFF, так как верхние 2 Гб занимают общие файлы, проецируемые в память, и разделяемый код операционной системы. В Windows 2000 этот адрес соответствует началу раздела для кода и данных режима ядра за вычетом 64 Кб.
dwAllocationGranularity Гранулярность резервирования регионов адресного простран ства На момент написания книги это значение составляет 64 для всех платформ Windows.
<
Остальные элементы этой структуры показаны в таблице ниже.

Элемент Описание
dwOemld Устарел, больше не используется
wReserved Зарезервирован на будущее; пока не используется
dwNumberOfProcessors Число процессоров в компьютере
dwActiveProcessorMask Битовая маска, которая сообщает, какие процессоры активны (выполняют потоки)
dwProcessorType Используется только в Windows 98; сообщает тип процессора, например Intel 386, 486 или Pentium
wProcessorArchitecture Используется только в Windows 2000; сообщает тип архитектуры процессора, например Intel, Alpha, 64-разрядный Intel или 64-разрядный Alpha
wProcessorLevel Используется только в Windows 2000; сообщает дополнительные подробности об архитектуре процессора, например Intel Pentium Pro или Pentium II
wProcessorRevision Используется только в Windows 2000; сообщает дополнительные подробности об уровне данной архитектуры процессора

Содержание раздела