[DOS] Доступная память

agaaaa

Я вот балуюсь написанием менеджера кучи для доса. Вот возник вопросик: с какого адреса можно творить с памятью всё, что заблагорассудится, не боясь затронуть системную часть? (положение проги в памяти я знаю - его можно не учитывать)

Ivan8209

Нет такого адреса.
---
...Я работаю антинаучным аферистом...

maggi14

Со времен микропроцессора 8088 здесь находятся все исполняемые программы, в том числе и операционная система. Эта преемственность сохранилась до сих пор. В самом начале этой области находится:
Таблица векторов прерываний. Она всегда находится в диапазоне адресов 0000:0000h - 0000:0400h (первый килобайт памяти). Таблица определяет адреса прерываний - готовых процедур операционной системы, которые компьютер вызывает для выполнения определенной задачи. Программы прерываний стандартизованы для всех операционных систем фирмы Microsoft.
Файл надстройки над системой BIOS - файл IO.SYS. В этом файле находятся программы-прерывания ввода/вывода, специфичные для операционной системы Microsoft.
Система обработки прерывания (Int 21h) системы MS-DOS - файл MSDOS.SYS
Примечание: эта часть отсутствует в операционных системах Windows. Она целиком помещается в файле IO.SYS.
Стеки операционной системы MS-DOS. Эти стеки используются исключительно программами - прерываниями операционной системы. Число стеков варьируется в MS-DOS в пределах от 8-ми до 64-х, а их размер - от 32-х до 512-ти байт. Стеки устанавливаются командой STACKS в файле Config.sys.
Системное окружение. Здесь расположены переменные окружения операционной системы (задаваемые командами SET, PATH, Prompt, Lastdrive и некоторыми другими.) Размер системного окружения задается в опциях команды SHELL файла Config.sys.
Буфера ввода/вывода дисковых накопителей. Число буферов ввода/вывода задается командой Buffers файла Config.sys. На каждый буфер выделяется по 532 байта.
Дескрипторы открытых файлов. На каждый дескриптор отводится 64 байта. Число дескрипторов устанавливается командой FILESфайла Config.sys.
Драйверы, запускаемые командой Device файла Config.sys. Среди них могут быть драйверы расширенной памяти Himem.sys, дополнительной памяти Emm386.exe, а также совмещенный драйвер Quemm386.sys.
Резидентные программы, загружаемые в память командой Install файла Config.sys.
Резидентная часть командного процессора Command.com.
Резидентные программы, загружаемые из файла Autoexec.bat и командной строки.
Вся остальная базовая память доступна для программ MS-DOS. Общий объем базовой памяти, занятой системными программами, не должен превышать 256 Кбайт, а рекомендуемый максимальный размер этой области - 128 Кбайт.
ссылка с картинкой: http://asm.shadrinsk.net/mem1.htm

Marinavo_0507

Насколько я помню, в DOS нужно выделять память, почти как в операционной системе.

maggi14

а можно и не выделять, насколько помню я

Marinavo_0507

Можно, но тогда все шансы попасть на занятую область.

yolki

с использованием возможностей himem.sys можно писть выше 1мб - ничего не боясь запортитт.
не знаю предел, но вроде с хаймемом можно использовать до 64 МБ памяти (extended memory).
усть ещё приблуда emm386 (expanded memory manager) - но ей лучше не пользоваться.
такой вопрос: а нафига? есть же приличные dpmi для доса. взять хоть DOS4GW от watcom - для С/С++/фортрана имеем нормальный защищённый режим с 32 битной адресацией, виртуальной памятью (с вполне осязаемыми сегфолтами ) и прочими вкусностями.
для паскаля есть freepascal тоже с dpmi.

agaaaa

Премного благодарен

klyv

А, может, лучше сперва с помощью функций DOS занять максимальный непрерывный кусок памяти, а потом в нём творить чудеса?
Если не хочется выходить за первые 640К, конечно.
Оставить комментарий
Имя или ник:
Комментарий: