win32k.sys - часть подсистемы win32, работающий в режиме ядра.
kernel32.dll, user32.dll, gdi32.dll - основные dll системы win32.
Основная задача – преобразование логического (линейного) адреса в физический.
1. DOS. Логический адрес состоит из двух составляющих: из 16-разрядного сегмента и 16-разрядного смещения.
смещение
сегмент
:
Например. 5720 : 1А3В
В процессоре 8086 20-разрядный адрес. Получение физического адреса: сегментная составляющая сдвигается на 4 разряда влево (это равносильно умножению на 16). К смещению слева добавляется 0000 и затем числа складываются.
0000 смещение
сегмент 0000
Например. 57200
+ 01A3B
58C3B
Таким образом, можно адресовать в DOS FFFF:FFFF или 1Мб + 64Кб – 16.
Только с появлением 80286 появилась возможность работы с верхней памятью (HMA). В DOS вся память делится на смежные блоки:
B
D
М ////// SD
M ////////
Z
MCB (Memory Control Block). Каждый блок начинается с 16-байтного заголовка. MZ
M - занято
Z - свободно
В заголовке указывается размер каждого блока в параграфах и имя программы, которая является владельцем этого блока. Если в качестве имени указана SC значит это системный код, если SD, то системные данные. Как правило SD является первым блоком в MCB. Первый байт каждого заголовка подблока начинается с символа, который определяет тип системных данных:
B - буферы ввода/вывода (в config.sys это BUFFERS= )
D - драйверы
F - системная таблица файлов (FILES= )
S - системные стеки прерываний (STACKS= )
L - структура последнего диска в системе (LASTDRIVE= )