LINUX.ORG.RU

История изменений

Исправление redgremlin, (текущая версия) :

himem.sys — это только для помещения самого ядра ДОС в блок <верхней> (вот что за блок, не помню) памяти 64k

Не только. Но и для размещения драйверов в свободных участках памяти между 640к и 1024к.

вот что за блок, не помню

В процессорах 8086 адресация памяти была сегментной — участок памяти идентифицировался парой 16битных значений (сегмент и смещение). Сделано это было для упрощения — большинство команд работало только со смещением (64к тогда было довольно дофига и этого хватало). Реальный адрес в памяти получался сдвигом значения в сегменте на 4 бита (1 16ричный разряд) влево и приплюсовыванию значения смещения (1234:5678 (принятая форма записи, числа 16ричные) → 0x12340+x5678 = 0x179B8). Почему 16? Ну расточительностью показалось в те годы оставлять зазоры между сегментами в 256 или больше байт. Но максимальный адресуемый адрес в такой схеме — FFFF:FFFF → 0x10FFEF, а шина адреса у процессора была 20бит и ведущая единичка туда не пролазила, так что использовать эти адреса было нельзя. Поэтому, когда появились 286е процессора с адресной шиной в 24бита, а заявление про «640к хватит всем» уже, кхм, несколько потеряло свою актуальность и памяти всем хотелось побольше, то так и возникла идея использовать эти FFEF на что нибудь полезное, на ядро MS-DOS, к примеру — это ведь не потребует от уже готовых программ никаких изменений, для них просто освободится больше памяти ниже 640к.

Исходная версия redgremlin, :

himem.sys — это только для помещения самого ядра ДОС в блок <верхней> (вот что за блок, не помню) памяти 64k

Не только. Но и для размещения драйверов в свободных участках памяти между 640к и 1024к.

вот что за блок, не помню

В процессорах 8086 адресация памяти была сегментной — участок памяти идентифицировался парой 16битных значений (сегмент и смещение). Сделано это было для упрощения — большинство команд работало только со смещением (64к тогда было довольно дофига и этого хватало). Реальный адрес в памяти получался сдвигом значения в сегменте на 4 бита (1 16ричный разряд) влево и приплюсовыванию значения смещения (1234:5678 (принятая форма записи, числа 16ричные) → 0x12340+x5678 = 0x179B8). Почему 16? Ну расточительностью показалось в те годы оставлять зазоры между сегментами в 256 или больше байт. Но максимальный адресуемый адрес в такой схеме — FFFF:FFFF → 0x10FFEF, а шина адреса у процессора была 20бит. Поэтому, когда появились 286е процессора с адресной шиной в 24бита, а заявление про «640к хватит всем» уже, кхм, несколько потеряло свою актуальность и памяти всем хотелось побольше, то так и возникла идея использовать эти FFEF на что нибудь полезное, на ядро MS-DOS, к примеру — это ведь не потребует от уже готовых программ никаких изменений, для них просто освободится больше памяти ниже 640к.