Dos fn 48h распределить память (дать размер памяти)


Содержание

Создаем вирус и антивирус (38 стр.)

AL=0Fh – установить логическое устройство

Версии: DOS 2.00 и выше. DOS, функция 45h Дублировать описатель файла

BX – существующий описатель файла

CF=0, если функция выполнена успешно

AX – новый описатель файла, дублирующий оригинал

CF=1, если при выполнении функции возникли ошибки

Описание. Создает дополнительный описатель файла, ссылающийся на тот же поток ввода/вывода, что и существующий описатель. Любое продвижение указателя чтения/записи одного описателя (включая любые операции чтения, записи или перемещения указателя посредством функции 42h) действует на его дубликат.

Версии: DOS 2.00 и выше. DOS, функция 46h Переназначить описатель

BX – целевой описатель файла (должен уже существовать)

CX – исходный описатель файла (должен уже существовать)

CF=0, если функция выполнена успешно

CF=1, если при выполнении функции возникли ошибки

Описание. Заставляет описатель файла (handle) ссылаться на другой файл или устройство. Если описатель в CX (источник) открыт, он закрывается, а затем становится дубликатом описателя в BX (назначения). Иными словами, описатели в CX и BX будут ссылаться на один и тот же физический файл или устройство.

Версии: DOS 2.00 и выше. DOS, функция 47h Получить текущее оглавление DOS

DS:SI – адрес локального буфера для результирующего пути – 64 байта

DL – номер диска (0 – текущий, 1 – A и так далее)

CF=0, если функция выполнена успешно

CF=1, если при выполнении функции возникли ошибки

Описание. В буфер по адресу DS:SI помещается в форме ASCIZ путь текущего оглавления для диска, указанного в DL. Путь возвращается в формате: «путь\оглавление»,0. Впереди не подставляется буква диска, а сзади не подставляется символ «\». Например, если текущим является корневое оглавление, эта функция вернет пустую строку (DS: [SI]=0).

Версии: DOS 2.00 и выше. DOS, функция 48h Выделить память

BX – запрошенное количество памяти в 16-байтных параграфах

CF=0, если функция выполнена успешно

AX – сегментный адрес распределенного блока

CF=1, если при выполнении функции возникли ошибки

BX – размер максимального доступного блока памяти (в параграфах)

Описание. Распределяет блок памяти длиной BX параграфов, возвращая сегментный адрес этого блока в AX (блок начинается с AX:0000). Если распределение неудачно, устанавливается флаг CF, в AX возвращается код ошибки, а BX содержит максимальный размер доступной для распределения памяти (в параграфах). Чтобы определить наибольший доступный блок, общепринято устанавливать BX=FFFFh перед вызовом. Распределение завершится с ошибкой, возвратив размер максимального блока памяти в BX.

Версии: DOS 2.00 и выше. DOS, функция 49h Освободить блок памяти

ES – сегментный адрес освобождаемого блока памяти

CF=0, если функция выполнена успешно

CF=1, если при выполнении функции возникли ошибки

Описание. Освобождает блок памяти, начинающийся с адреса ES:0000. Этот блок становится доступным для других запросов системы. Вообще говоря, нужно освобождать лишь те блоки памяти, которые получены через функцию 48h (распределить память). Родитель отвечает за освобождение памяти порожденных процессов. Тем не менее, ничто не препятствует освобождать память чужих процессов.

Версии: DOS 2.00 и выше. DOS, функция 4Ah Изменить размер блока памяти

ES – сегмент распределенного блока памяти

BX – нужный размер блока в 16-байтных параграфах

CF=0, если функция выполнена успешно

CF=1, если при выполнении функции возникли ошибки

BX – размер максимального доступного блока памяти (в параграфах)

Описание. Изменяет размер существующего блока памяти. Когда программа получает управление, функция 4Bh уже распределила блок памяти, начиная с PSP, который содержит всю доступную память. Чтобы освободить память для запуска порождаемых процессов, блок памяти, начинающийся с PSP, необходимо сначала сжать.

Функция 31h и INT 27h (TSR) сжимают блок по адресу PSP.

Версии: DOS 2.00 и выше.

DOS, функция 4Bh Выполнить или загрузить программу

DS:DX – адрес строки ASCIZ с именем файла, содержащего программу

ES:BX – адрес EPB (блока параметров EXEC)

AL=00h – загрузить и выполнить

AL=01h – загрузить, но не выполнять

AL=03h – загрузить программный оверлей

CF=0, если функция выполнена успешно

BX, DX не сохранены

CF=1, если при выполнении функции возникли ошибки

Описание. Данная функция загружает в память и запускает программу, имя которой указано в регистрах DS:DX. Запущенная программа после завершения работы возвратит управление запускаемой. Если диск или путь не указаны, принимаются значения по умолчанию. ES:BX указывает на блок памяти, подготовленный как EPB, формат которого зависит от запрошенной подфункции в AL.

Версии: DOS 2.00 и выше. DOS, функция 4Ch Завершить программу

Описание. Возвращает управление от порожденного процесса его родителю, устанавливая код выхода (его можно опросить функцией 4Dh). Управление передается по адресу завершения в PSP завершающейся программы. Векторы Ctrl-Break и Critical Error восстанавливаются к старым адресам, сохраненным в родительском PSP.

Примечание. Значение ERRORLEVEL (используемое в пакетных файлах DOS) можно использовать для проверки кода выхода самой последней программы.

Версии: DOS 2.00 и выше. DOS, функция 4Dh Получить код выхода программы

AH – код выхода последнего завершившегося процесса

AH=00h – нормальное завершение

AH=01h – завершение через Ctrl-Break INT 23h

AH=02h – завершение по критической ошибке устройства INT 24h

AH=03h – завершение через функцию 31h

Описание. Возвращает код выхода последнего из завершившихся процессов. Эта функция возвращает правильную информацию только однажды для каждого завершившегося процесса.

Версии: DOS 2.00 и выше. DOS, функция 4Eh Найти первый совпадающий файл

DS:DX – адрес строки ASCIZ с именем файла (допускается использовать символы «?» и «*»)

CX – атрибут файла для сравнения

CF=0, если функция выполнена успешно

DTA заполнена данными (Таблица Б-10)

CF=1, если при выполнении функции возникли ошибки

Описание. Если диск и/или путь не указаны, принимаются значения по умолчанию. Обобщенные символы «*» и «?» допускается использовать в имени файла и расширении.


Версии: DOS 2.00 и выше. DOS, функция 4Fh Найти следующий совпадающий файл

DS:DX – адрес данных, возвращенных предыдущей 4Eh (Найти первый файл)

Таблица Б-10. Формат данных в DTA

CF=0, если функция выполнена успешно

DTA заполнена данными

CF=1, если при выполнении функции возникли ошибки

Описание. Эту функцию можно использовать после вызова 4Eh. Следующее имя файла, совпадающее по обобщенному имени и атрибуту файла, копируется в буфер по адресу DS:DX вместе с другой информацией (Таблица Б-10).

Примечание. Параметр DS:DX добавлен в DOS 3.0.

Версии: DOS 2.00 и выше. DOS, функция 52h Получить адрес векторной таблицы связи (Официально не документирована)

Выход: ES:BX – адрес векторной таблицы связи (Таблица Б-11)

Описание. Данная функция возвращает адрес векторной таблицы связи.

Версии: DOS 2.00 и выше. DOS, функция 54h Получить переключатель верификации DOS

AL=00h, если верификация выключена (OFF)

AL=01h, если верификация включена (ON)

Описание. Возвращает текущий статус верификации записи DOS. Если в AL возвращается 1, то DOS считывает обратно каждый сектор, записываемый на диск, чтобы проверить правильность записи. Функция DOS 2Eh позволяет установить/изменить режим верификации.

Версии: DOS 2.00 и выше. Таблица Б-11. Формат векторной таблицы связи

DOS, функция 56h Переименовать/переместить файл

MS-DOS для программиста

6.4. Оперативная память

Если вы помните историю появления персональных компьютеров, то наверное знаете, что объем оперативной памяти в них был порядка сотни-двух Кбайт. В то время этого было достаточно для всех имеющихся тогда программ.

Фирма IBM в своем первом персональном компьютере IBM PC использовала процессор Intel 8086, способный непосредственно адресовать 1024 Кбайт оперативной памяти. Из этого адресного пространства фирма IBM использовала для операционной системы и программ 640 Кбайт памяти, зарезервировав оставшиеся 384 Кбайт для системного постоянного запоминающего устройства, дисплейного адаптера и другой аппаратуры.

Однако по мере того, как компьютеры становились все мощнее и мощнее, для них находились новые задачи, требующие все большего объема оперативной памяти. Первоначально заложенного в архитектуру IBM PC объема памяти программ (640 Кбайт) стало недостаточно для решения сложных задач.

С появлением процессора Intel 80286, способного адресовать до 16 Мбайт оперативной памяти, возникли предпосылки для расширения доступного программам адресного пространства. Архитектура компьютера IBM PC/AT позволяет использовать для программ все 16 Мбайт памяти.

Казалось бы, все хорошо, однако даже если ваш компьютер содержит 16 Мбайт оперативной памяти, операционная система MS-DOS без принятия специальных мер может использовать для себя и программ только первые 640 Кбайт. При этом программам пользователя достается обычно не более 500 — 550 Кбайт основной оперативной памяти, остальная память используется MS-DOS для своих собственных нужд.

Это связано с тем, что MS-DOS использует так называемый реальный режим работы процессора 80286. В реальном режиме процессор 80286 становится несколько улучшенным аналогом старого процессора 8086, и может адресовать только первые 1024 Кбайт памяти.

Возникает странная ситуация, когда память есть, но пользоваться ей нельзя!

Распределение памяти в MS-DOS

Для того, чтобы как-то задействовать память, расположенную выше границы 1024 Кбайт (эту память называют расширенной), в старых версиях MS-DOS использовались драйверы электронного диска ramdrive.sys и кеш дисковой памяти smartdrv.sys. Драйвер электронного диска предназначен для организации быстродействующего квазидиска. Этот диск ведет себя так же, как и обычный, но за счет того, что данные пересылаются в оперативную память, такой диск работает очень быстро.

Начиная с версии 5.0 операционная система MS-DOS может использовать расширенную память и для решения других задач.

В частности, в расширенной памяти (вернее, в ее небольшой начальной части размером около 64 Кбайт, называющейся верхней памятью) могут располагаться модули, буферы и рабочие области самой операционной системы. Если в компьютере используется процессор i386 или i486, можно поместить в расширенную память резидентные программы и драйверы.

Если расположить в расширенной памяти MS-DOS резидентные программы и драйверы, для программ останется порядка 600 — 620 Кбайт памяти. Это на 100 — 140 Кбайт больше, чем при использовании старых версий MS-DOS.

А если ваша программа имеет размер 2 Мбайт и к тому же ей требуется обрабатывать массивы данных размером в 1 Мбайт?

Для решения таких задач в среде MS-DOS можно использовать дополнительную память. Эта память располагается на отдельной плате, которая вставляется в слот расширения материнской платы компьютера. Дополнительная память может быть установлена даже в компьютерах, выполненных на базе процессоров 8086 или 8088, которые не могут адресовать память за границей одного Мбайта. Как это может быть?

Здесь все дело в том, что дополнительная память (которая может по размеру достигать 16 или даже 32 Мбайт) отображается с помощью специальных схем в область памяти, лежащую ниже границы 1024 Кбайт, то есть в стандартную память. Для работы с расширенной памятью выделяются 4 окна в области адресов выше границы 640 Кбайт, но ниже 1024 Кбайт. Причем общий размер этих окон составляет 64 Кбайт.

Программы обращаются по адресам, соответствующим одному из четырех окон. Эти адреса находятся в пределах первых 1024 Кбайт. Но специальное аппаратное устройство отображает в эти окна часть дополнительной памяти, поэтому фактически программа будет работать с дополнительной памятью.

При необходимости окна могут двигаться по дополнительной памяти, позволяя программам адресовать весь объем дополнительной памяти.

Запомните: расширенная память и дополнительная память — разные вещи!

  • Расширенная память (extended memory) — лежит в адресном пространстве процессора выше границы 1024 Кбайт, непосредственно адресуется процессорами 80286/i386/i486/Pentium в так называемом защищенном режиме. Операционная система MS-DOS не может непосредственно использовать расширенную память для загрузки и выполнения программ. Вы можете использовать часть расширенной памяти для размещения ядра MS-DOS, системных буферов, резидентных программ и драйверов. Расширенная память располагается непосредственно на основной плате компьютера.
  • Дополнительная память (expanded memory) — отображается в окна, расположенные в адресном пространстве ниже границы 1024 Кбайт, то есть в стандартную память. Эта память доступна MS-DOS и программам, работающим в реальном режиме, то есть в дополнительную память могут загружаться программы и эти программы могут там выполняться под управлением MS-DOS. Дополнительная память располагается на отдельной плате, которая вставляется в слоты расширения основной платы компьютера. Для работы дополнительной памяти в файле config.sys должен быть установлен специальный драйвер, который поставляется вместе с платой памяти.

Еще одно замечание, касающееся использования программами дополнительной памяти: для получения доступа к дополнительной памяти программы должны непосредственно вызывать драйвер дополнительной памяти. То есть для того чтобы использовать дополнительную память, программы должны быть составлены специальным образом.

Для иллюстрации сказанного выше на рис. 6.15 изображена упрощенная карта распределения оперативной памяти .

Рис. 6.15. Упрощенная схема распределения оперативной памяти

Область от 0 до 640 Кбайт — это так называемая стандартная память. В области стандартной памяти располагаются векторы прерываний, часть ядра операционной системы, резидентные программы, драйверы. В эту же область загружаются запущенные на выполнение программы. В результате оптимизации нам было бы желательно максимально расширить пространство, доступное программам, переместив ядро операционной системы, драйверы и резидентные программы в расширенную память.

Область от 640 до 1024 Кбайт зарезервирована фирмой IBM для аппаратного обеспечения. В ней находятся:

  • память видеоадаптера (адреса от A000h:0000h до BFFFh:FFFFh);
  • ПЗУ для обслуживания видеоадаптеров, дисков и другой аппаратуры (адреса от C000h:0000h до EFFFh:FFFFh);
  • BIOS (адреса от F000h:0000h до FFFFh:000Fh).

Память с адресами от 640 до 1024 Кбайт — это зарезервированная память, она играет ключевую роль в механизме расположения драйверов и резидентных программ в расширенной памяти. Эта память также используется драйверами дополнительной памяти.

Как правило, зарезервированная память задействована не полностью, в ней есть свободные области. Эти свободные области и используются при работе с расширенной или дополнительной памятью.

Драйвер emm386.exe , входящий в MS-DOS, отображает свободные области на расширенную память, пользуясь виртуальным режимом работы процессоров i386, i486 или Pentium (режим виртуального процессора 8086). К сожалению, в этой книге нет места для детального описания виртуального режима работы. Для нас важно, что процессор, находясь в виртуальном режиме при использовании драйвера emm386.exe адресуется к свободным областям зарезервированной памяти. При этом процессор использует механизм адресации, соответствующий реальному режиму работы. Однако на эти свободные области зарезервированной памяти отображаются участки расширенной памяти, находящиеся выше границы 1024 Кбайт.

Если поместить в свободные участки зарезервированной памяти, отображаемые на расширенную память, драйверы или резидентные программы, физически они окажутся в расширенной памяти. Но сами они об этом не будут знать ничего, продолжая работать так, как будто они находятся в стандартной памяти ниже границы 1024 Кбайт.

Драйверы дополнительной памяти также используют свободные участки зарезервированной памяти. Они располагают там окно размером 64 Кбайт, обычно отображаемое с помощью специальной аппаратуры на дополнительную память, установленную на отдельной плате. Как мы уже говорили, дополнительная память не входит в адресное пространство процессора и не может адресоваться им непосредственно ни в реальном, ни в защищенном режиме. Она отображается в окно, расположенное в зарезервированной памяти и программы адресуются к ней только через это окно.

Разумеется, программы могут передвигать окно, адресуя через него по частям всю дополнительную память.

Область от 1024 Кбайт и выше — это расширенная память. Ее начальный участок от 1024 до 1088 Кбайт — область старшей памяти (High Memory Area — HMA ). Именно в эту область MS-DOS может помещать значительную часть своего ядра и области данных. Интересной особенностью области HMA является то, что она доступна для процессора, работающего в реальном режиме, то есть как раз в том режиме, который использует MS-DOS.

Как такое может быть? Для того, чтобы это понять, необходимо вспомнить механизм сегментной адресации памяти, используемый процессорами серии Intel. Физический адрес получается из двух компонент — сегментного адреса и смещения. Каждая компонента — двухбайтовая. Для вычисления адреса в реальном режиме работы процессора к сегментной компоненте, сдвинутой влево на четыре бита, прибавляется компонента смещения.

Например, пусть у нас имеется логический адрес 1234h:0005h. Сегментный адрес равен 1234h, а смещение — 0005h. Сдвигаем сегментный адрес влево на четыре бита, получаем 12340h. Затем прибавляем смещение 0005h и получаем физический адрес 12345h.

Задавая какое-нибудь значение сегментного адреса и меняя смещение, мы можем адресоваться к любому сегменту памяти размером 64 Кбайт в пределах первого Мбайт адресного пространства.

А что получится, если задать сегментный адрес FFFFh, то есть самое большое значение для сегментного адреса?

Очевидно, что конец области оперативной памяти, простирающейся от 0 до 1024 Кбайт, имеет адрес FFFFh:000Fh, так как этому логическому адресу соответствует физический адрес FFFFFh. Адрес FFFFFh — это самый большой адрес, который может быть задан при использовании 20-разрядной адресации. А реальный режим работы процессора использует именно 20-разрядную адресацию.

Зададим себе вопрос: что произойдет, если, например, при записи в память будет указан логический адрес FFFFh:0010h?

Если в вашем компьютере установлен процессор 8086 или 8088, то произойдет запись в самую первую ячейку оперативной памяти, имеющую физический адрес 00000h, так как перенос из девятнадцатого разряда в двадцатый будет игнорирован (адресные разряды в процессоре 8086 или 8088 нумеруются от 0 до 19).

Процессоры 80286, i386, i486 и Pentium имеют большее количество адресных линий, поэтому перенос в двадцатый разряд не будет потерян. Произойдет адресация памяти за пределами первого Мбайта!

За счет двадцатого разряда адресной шины процессор в реальном режиме получает доступ к памяти в диапазоне адресов от FFFFh:0010h до FFFFh:FFFFh. Это почти 64 Кбайт (без шестнадцати байт). Именно эти 64 Кбайт MS-DOS может использовать для размещения своего ядра и областей данных. Все что вам нужно для того чтобы использовать таким образом область старшей памяти HMA — это две строки в файле config.sys :

Как использовать всю доступную память

Возможности, имеющиеся у вас для оптимизации использования оперативной памяти, сильно зависят от типа процессора и наличия расширенной или дополнительной памяти.

IBM PC или IBM PC/XT

Эти компьютеры не оснащены расширенной памятью, но в него может быть установлена плата дополнительной памяти. Если есть дополнительная память, вы можете разместить в ней кеш диска или электронный диск .

Что еще вы можете сделать для увеличения объема доступной программам оперативной памяти? Можно сократить до минимума количество используемых драйверов и резидентных программ.

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

Драйвер Назначение драйвера и рекомендации по использованию
ega.sys Сохранение текущего состояния видеоадаптера EGA. Этот драйвер вам нужен только в том случае, если вы работаете с оболочкой DOSSHELL или Windows и при этом ваш компьютер оснащен видеоадаптером EGA
country.sys Этот драйвер нужен вам только в одном случае — если вы используете интернациональную поддержку, встроенную в MS-DOS, например, работаете с символами кириллицы
display.sys Аналогично предыдущему драйверу
keyboard.sys Аналогично предыдущему драйверу
printer.sys Аналогично предыдущему драйверу
himem.sys Драйвер предназначен для управления расширенной памятью. Он бесполезен на тех компьютерах, в которых отсутствует расширенная память. В частности, на компьютерах IBM PC и IBM PC/XT
ansi.sys Драйвер обеспечивает расширенное управление консолью и используется достаточно редко. Подключайте его только в том случае, если он действительно необходим для правильной работы используемых вами программ, о чем можно узнать из документации на программы
ramdrive.sys Этот драйвер предназначен для организации электронного диска в оперативной памяти. Используйте его только в том случае, когда в компьютере имеется расширенная или дополнительная память достаточного объема. Учтите, что более предпочтительным способом увеличения быстродействия дисковой подсистемы является кэширование дисковой памяти
smartdrv.exe Драйвер нужен для организации кеширования дисковой памяти. Его использование оправдано только на тех компьютерах, которые имеют расширенную или дополнительную память
driver.sys Этот редко используемый драйвер предназначен для поддержки нестандартных или внешних НГМД
setver.exe Драйвер позволяет «обмануть» программы, не рассчитанные на использование MS-DOS версии 6.22. Когда такие программы пытаются определить версию MS-DOS, драйвер setver.exe возвращает заранее оговоренное для каждой программы значение, например, 3.30. Если вы не запускаете программы, рассчитанные на конкретную версию MS-DOS, у вас нет необходимости использовать этот драйвер
emm386.exe Этот драйвер используется для управления расширенной памятью в компьютерах, выполненных на базе процессоров i386, i486 или Pentium. Он совершенно бесполезен, если ваш компьютер содержит процессоры 8086, 8088, NEC20 или 80286


IBM PC/AT с процессором 80286

Если ваш компьютер содержит процессор 80286, вы можете предпринять следующие шаги, направленные на более эффективное использование оперативной памяти:

  • ядро операционной системы MS-DOS и ее буферы можно перенести в область адресов, лежащую выше границы 1024 Кбайт. При этом доступная для программ область оперативной памяти увеличится на несколько десятков Кбайт;
  • компьютер IBM PC/AT с процессором 80286 обычно имеет по крайней мере 384 Кбайт расширенной памяти. Эту память лучше всего задействовать для организации кеширования дисков. Кэширование дисков улучшит производительность дисковой подсистемы компьютера;
  • если вы располагаете расширенной памятью размером в несколько Мбайт, имеет смысл увеличить размер кеша до 2-4 Мбайт. Кроме того, можно организовать в расширенной памяти электронный диск ;
  • если размер расширенной памяти составляет 384 Кбайт, но имеется еще и дополнительная память, вы можете организовать кеш в расширенной памяти и электронный диск в дополнительной. Если вы работаете с программным обеспечением, использующим дополнительную память, лучше ограничиться дисковым кешем в расширенной памяти.

Первое, что необходимо сделать при оптимизации использования памяти — перенести ядро операционной системы MS-DOS, ее буферы и рабочие области в область адресов, лежащую выше границы 1024 Кбайт. Эта возможность появилась в MS-DOS начиная с версии 5.0.

После установки MS-DOS на компьютере IBM PC/AT файл config.sys будет содержать следующие две строки:

Первая строка нужна для подключения драйвера himem.sys , управляющего расширенной памятью. Этот драйвер необходим для размещения MS-DOS выше границы 1024 Кбайт. Вторая строка указывает, что MS-DOS и все ее рабочие области должны быть размещены в расширенной памяти.

Учтите, что эти две строки должны располагаться в файле config.sys именно в том порядке, в котором они были приведены выше — вначале необходимо подключить драйвер himem.sys , а затем указать MS-DOS о необходимости загрузки ее ядра и областей данных в старшие адреса памяти строкой DOS=HIGH.

После того, как вы переместили операционную систему в область адресов выше 1024 Кбайт, займитесь размещением кеша дисковой подсистемы и электронного диска. Здесь все зависит от того, сколько и какой памяти установлено в вашем компьютере. Вам необходимо найти компромисс между размером кеша и дополнительной или расширенной памятью, отведенной используемому программному обеспечению. При этом вы можете воспользоваться рекомендациями, приведенными в разделе, посвященной настройке дисковой системы компьютера.

IBM PC/AT с процессорами i386, i486 и Pentium

Если ваш компьютер содержит процессор i386, i486 или Pentium, к перечисленным выше возможностям добавляется еще две:

  • вы можете разместить практически все используемые драйверы и резидентные программы в расширенной памяти. При этом объем памяти, доступной прикладным программам, составит 618 — 620 Кбайт;
  • вам становится доступна эмуляция дополнительной памяти с использованием расширенной памяти.

Остановимся подробнее на второй возможности.

Обычно компьютеры с процессорами i386, i486 или Pentium оснащены расширенной памятью объемом от 2 до 16 Мбайт (вам могут встретиться компьютеры с еще большим объемом расширенной памяти). Однако все еще встречаются программы рассчитаны на использование дополнительной памяти.

Получается, что у вас есть очень много расширенной памяти, но вам-то нужна дополнительная! Как быть в этом случае? Не покупать же еще и плату дополнительной памяти!

В этом случае необходимо воспользоваться драйвером emm386.exe , входящим в состав MS-DOS. Этот драйвер использует часть расширенной памяти для эмуляции в ней дополнительной памяти. То есть у вас становится меньше расширенной памяти, но появляется дополнительная.

Если вы — обладатель компьютера с процессором 80386 или 80486, вам доступна возможность переноса драйверов и резидентных программ в расширенную память, а также эмуляция дополнительной памяти с использованием расширенной памяти.

Для реализации этих возможностей подключите драйвер emm386.exe :

Эта строка должна располагаться в файле config.sys после строки, подключающей драйвер himem.sys .

В качестве параметра вы можете указать размер эмулируемой дополнительной памяти в Кбайтах. Например, если вам нужна дополнительная память размером 1 Мбайт, используйте следующую строку:

Если вы не укажите размер эмулируемой дополнительной памяти, будет использовано значение по умолчанию — 256 Кбайт.

Для того, чтобы полностью отключить эмуляцию дополнительной памяти, задайте параметр NOEMS:

В этом случае драйвер emm386.exe будет использоваться только для загрузки драйверов и резидентных программ в расширенную память.

Однако даже если вы подключите драйвер emm386.exe , ваши резидентные программы и драйверы не попадут автоматически в расширенную память. Для того, чтобы разместить драйверы и резидентные программы в расширенной памяти, вам необходимо сделать следующее:

  • подключить драйвер himem.sys ;
  • поместить в файл config.sys строку «DOS=HIGH,UMB»;
  • для загрузки драйверов вместо оператора «DEVICE=» использовать оператор «DEVICEHIGH =»;
  • для загрузки резидентных программ в файле autoexec.bat использовать команду LOADHIGH , передав ей в качестве параметра имя и параметры загружаемой резидентной программы.

Для примера приведем образец файла config.sys , в котором подключен драйвер emm386.exe :

В первой строке подключается драйвер himem.sys , необходимый для управления расширенной памятью. Во второй строке подключается драйвер emm386.exe , который используется для эмуляции двух Мбайт дополнительной памяти и для загрузки резидентных программ и драйверов в расширенную память. В третьей строке указывается, что MS-DOS должен быть загружен в верхние адреса памяти, и кроме того, что должна быть использована возможность размещения драйверов и резидентных программ в расширенной памяти.

Последние две строки — пример размещения драйверов в расширенной памяти.

Для загрузки в расширенную память резидентных программ воспользуйтесь командой LOADHIGH или LH . Приведем фрагмент файла autoexec.bat, в котором используется загрузка резидентных программ в расширенную память:

Первая строка демонстрирует загрузку в расширенную память драйвера клавиатуры, вторая — драйвера мыши.

Отметим еще один важный момент, связанный с использованием драйвера emm386.exe .

В состав MS-DOS входит программа mem.exe , предназначенная для исследования оперативной памяти. Запустив ее с параметром /f, вы увидите на экране примерно следующее:

Программа отображает объемы свободных блоков стандартной памяти и блоков верхней памяти.

Обратите внимание, что область верхних блоков памяти фрагментирована. В ней выделяются области с номерами 1 и 2.

При загрузке драйверов и резидентных программ в верхнюю область памяти можно указать параметр /L, указав в нем номер используемой для загрузки области:

Зная объем оперативной памяти, необходимый для драйверов и резидентных программ, вы можете расположить их в верхних блоках памяти оптимальным образом, указав для каждого драйвера или резидентной программы нужную область. Для определения объема резидентной части драйверов и резидентных программ вы можете использовать все ту же программу mem.exe , запустив ее с параметром /D.

Если имеется несколько свободных блоков верхней памяти и десяток драйверов, а также резидентных программ, «ручное» их размещение в областях верхней памяти может отнять много времени. К счастью, в состав MS-DOS входит программа memmaker.exe , выполняющая такое размещение в автоматическом режиме. Иногда после автоматической оптимизации бывает полезно выполнить «ручную доводку», перемести некоторые резидентные программы в другие области верхней памяти.

Детальное обсуждение программы memmaker.exe вы сможете найти во втором томе нашей серии книг «Персональный компьютер — шаг за шагом», который называется «Операционная система Microsoft Windows . Руководство пользователя». Заметим только, что программа memmaker.exe добавляет к номеру области еще и размер резидентной части драйвера или программы:

Быстродействие оперативной памяти

Как ни мало время, требующееся для записи данных в оперативную память или для чтения данных из памяти, но оно отлично от нуля. Обычно процессор компьютера обрабатывает данные быстрее, чем они могут быть получены из оперативной памяти.

Для согласования скорости работы процессора со скоростью работы оперативной памяти часто приходится искусственно занижать производительность процессора, вставляя специальные такты ожидания во временной цикл работы процессора с памятью.

Илон Маск рекомендует:  Параметры компиляции

Разумеется, вы не сможете повлиять на быстродействие установленной в вашем компьютере оперативной памяти, не заменив микросхемы памяти на более быстрые. Но в некоторых компьютерах предусмотрена возможность работы как с быстрой памятью, так и с медленной. Для этого в CMOS-памяти необходимо задать количество используемых при работе с памятью тактов ожидания.

В CMOS-памяти хранится конфигурация аппаратных средств компьютера. После изменения конфигурации компьютера необходимо обновить содержимое CMOS-памяти. Для этого предназначена специальная программа, часто называемая SETUP-программой или программой установки конфигурации.

SETUP-программа может запускаться при включении компьютера (если нажать определенную клавишу, обычно ), либо эта программа может поставляться на дискете вместе с компьютером.

Если ваш компьютер оснащен быстродействующей памятью, необходимо убедиться в том, что процессор не вставляет циклы ожидания при обращении к памяти.

Это особенно необходимо, если в вашем компьютере установлен процессор i386 или i486. Такие компьютеры обычно комплектуются быстрой памятью. И если в CMOS-памяти указано, что надо вставлять циклы ожидания при работе с памятью, компьютер не будет работать с максимальной производительностью.

Другая возможность повышения скорости работы с памятью, но на этот раз с постоянной памятью (BIOS), часто имеется в компьютерах, выполненных на процессорах i386 или i486. Эта возможность заключается в копировании содержимого относительно медленной постоянной памяти BIOS в специальную область быстродействующей оперативной памяти с последующим преобразованием адресов. Используемая область памяти имеет специальное название — теневая память.

При этом программы, обращаясь по адресам, принадлежащим BIOS, будут работать с быстрой оперативной памятью. Это значительно ускорит выполнение программ, активно обращающихся к BIOS.

Будет выполняться копирование BIOS в теневую память или нет — зависит от установки определенной ячейки CMOS-памяти. Для выбора правильного режима вам необходимо воспользоваться SETUP-программой.

Как правило, SETUP-программа описывается в документации на основную плату компьютера. Возможность изменения количества тактов ожидания и режим теневой памяти обычно имеются только в компьютерах, выполненных на процессорах i386, i486 и Pentium, однако бывают и исключения. Например, модели компьютеров фирмы SUMMIT, выполненные на основе процессора 80286, могут работать без тактов ожидания. В них также имеется возможность использования теневой памяти.

«Assembler IBM PC 4. Сегментированная организация памяти в реальном режиме. Виды памяти в среде MS-DOS»

В компьютерах IBM PC используются процессоры фирмы Intel серии i80x86 (i8086 в компьютерах PC/XT и Pentium 4 – условно i80886 – в последних моделях компьютеров). При этом каждый из процессоров, начиная с i80286, имеет специальный режим эмуляции (программной совместимости) базового процессора i8086 с добавлением возможности использования 32-разрядных регистров, начиная сi80386. Обычно этот режим называется режимом реального адреса (Real Address Mode) или R-режим. На какие же параметры процессора i8086 была сориентирована разработка операционной системы MS-DOS, работающая в данном режиме? Данный процессор имеет 16-разрядную внутреннюю архитектуру и такой же разрядности шину данных. Таким образом, диапазон представления целых чисел (данные или адрес) не превышает 2 16 – 1 = 65535 (или 64 К – 1). Однако адресная шина включает 20-линий, что соответствует объёму адресуемой памяти 2 20 = 1 Мбайт (память в компьютере состоит из однобайтовых ячеек, а порядковый номер ячейки образует её физический адрес).

Для того, чтобы с помощью 16-разрядных адресов можно было обращаться в любую точку 20-разрядного адресного пространства, введён двухкомпонентный логический адрес из 16-разрядных компонент:

«Segment (сегмент) : Offset (смещение)».

Здесь Segment – адрес сегмента, а Offset – смещение в этом сегменте. По умолчанию, в реальном режиме используется сегментная модель памяти с объёмом сегмента в 64 Кбайта, расположение объекта в котором, относительно его базового адреса, определяется смещением Offset. Расположение сегмента в адресном пространстве, а также механизм перехода от логического адреса к физическому показан на рис. 2.

Рис. 2. Сегментированная модель памяти реального режима

Рассмотрим пример с использованием 16-теричной системы счисления. Пусть логический адрес равен 0040h : 0220h. Тогда соответствующий ему физический адрес равен 0040h*10h + 0220h = 00620h. Надо отметить, однако, что обратный переход – от физического адреса к логическому – неоднозначен. В общем случае, сегментация – механизм адресации, обеспечивающий несколько независимых адресных пространств как в пределах одной задачи, так и в системе в целом для защиты задач от взаимодействия друг на друга. Назначением базовых адресов сегментов занимается операционная система, а внутри каждого сегмента адреса формируются программой. Это эффективный адрес или смещение Offset. Важные замечания:

¨ DОS в зависимости от объёма кода и данных программы может так назначить базовые адреса, что они будут перекрываться;

¨ физический адрес базы сегмента кратен числу 16, поэтому сегменты начинаются на границах блоков с разницей в 16 байт (параграф);

¨ сегментная организация обеспечивает создание позиционно – независимых или динамически перемещаемых программ. Каждое исполнение программы может происходить с различными значениями базовых адресов сегментов, которые выбираются DОS, исходя из особенностей загрузки памяти.

Основной недостаток реального режима заключается в малом объеме
адресного пространства (всего 1Мбайт) в сочетании с малыми значениями
сегментов (всего 64 Кбайт). Однако, в то время – 1981 г. – думалось иначе.
Этот недостаток был устранён в старших моделях процессоров i80x86 с
32-разрядной архитектурой, использующих защищённый режим виртуального адреса Protected Virtual Address Mode (или просто защищённый режим – P-ре-жим) равный в пределе 4 Гбайтам (64 Гбайта для 36-разрядной адресной шины).

Рассмотрим распределение первого мегабайта памяти компьютера. В зависимости от модификации компьютера, настройки драйверов, управляющих памятью (а также типа версии используемой Windows), структура памяти несколько меняется. Однако размещение основных компонентов памяти (табл. 1) строго унифицировано.

Распределение первого мегабайта памяти компьютера

Оперативная память доступна не вся: как задействовать ее полный объем?

Проблемы, связанные с тем, что в Windows доступна не вся оперативная память, знакомы многим пользователям. При вызове окна свойств системы полный объем отображается, но после него почему-то указывается, что доступно памяти чуть меньше. Еще хуже, когда пользователь точно знает, сколько у него установлено оперативной памяти, а доступно 50 и менее процентов. Почему это происходит, и как задействовать максимальный объем ОЗУ, далее и рассмотрим. Но для начала кратко остановимся на основных причинах такого явления.

Почему доступна не вся оперативная память?

Итак, то, что операционные системы Windows иногда выдают показатели, значения которых заведомо меньше, нежели полный объем установленной оперативной памяти, могут связаны с рядом причин, среди которых наиболее значимыми являются следующие:

  • установлена 32-разрядная система, не поддерживающая память более 4 Гб;
  • максимальный объем памяти не поддерживается материнской платой;
  • в параметрах системы установлено ограничение на максимум используемого объема ОЗУ;
  • в BIOS некорректно заданы настройки перераспределения памяти;
  • память частично зарезервирована под встроенные видеоадаптеры;
  • запущено слишком много активных процессов;
  • установленные планки имеют повреждения, их работоспособность нарушена, или они подключены неправильно;
  • использование памяти блокируется вирусами.


Сразу стоит сказать, что подробно вопросы, связанные с вирусным воздействием, рассматриваться не будут. Тут можно посоветовать просто на всякий случай выполнить проверку, используя для этого портативные антивирусы или аналогичные программы, имеющие в своем распоряжении загрузчики.

Как задействовать всю установленную память простейшими способами?

Куда более важными вопросами, когда оперативная память доступна не вся, являются проблемы с подключением планок памяти или их некорректной работой. Для начала убедитесь, что материнская плата рассчитана на устанавливаемый объем, а также проверьте плотность вставки планок в соответствующие слоты. Нелишним будет и выполнить тест памяти, для чего может использовать собственное средство Windows (mdsched) или сторонние программы вроде Memtest86/86+.

Если неполадки на этом этапе выявлены не будут, обратите внимание на разрядность установленной модификации Windows. В случае наличия 32-битной версии, которая не умеет работать с ОЗУ объемом более 4 Гб (если только не применять специальные средства), сколько бы вы ни устанавливали памяти сверх этого лимита, все равно система его не распознает.

Оптимальным решением станет инсталляция 64-битной версии Windows. Но в этом случае установленные ранее программы могут не работать, а важные файлы придется скопировать в другой логический раздел или на съемный носитель.

Иногда бывает и так, что оперативная память доступна не вся по причине некорректно выставленных опций использования памяти в конфигурации системы (msconfig).

В конфигураторе на вкладке загрузки нажмите кнопку дополнительных параметров и проверьте, установлен ли флажок на пункте максимума памяти. Если он есть, снимите его, сохраните установленные опции и перезагрузите систему.

Как уже понятно, частично память может «съедаться» огромным количеством активных фоновых процессов и служб, которые не видны пользователю. Для начала отключите все ненужные компоненты в автозагрузке (в Windows 7 и ниже для этого используется соответствующая вкладка в настройках конфигурации, в версиях выше – «Диспетчер задач»).

На всякий случай просмотрите активные компоненты системы в разделе программ и компонентов и отключите неиспользуемые (модуль Hyper-V, Internet Explorer, если используете другой браузер, службу печати, если нет принтера, и т. д.). Аналогично можно установить отключенный тип запуска и для некоторых других служб (services.msc), но в этом случае нужно точно знать, что можно деактивировать, а что нет.

Доступно мало оперативной памяти: какие настройки можно изменить в BIOS?

Если проблема и после применения вышеописанных решений осталась, зайдите в настройки первичных систем BIOS/UEFI и проверьте настройки памяти, в которых должен присутствовать пункт, содержащий слова Remapping или Remap (перераспределение).

Если у вас установлена 64-битная Windows, а памяти более 4 Гб, установите для него значение Disabled (отключение). В противном случае его нужно активировать.

Если оперативная память доступна не вся по причине резервирования дополнительного объема для видеокарты, встроенной в материнскую плату, выставьте для этого пункта значение, соответствующее объему памяти адаптера (узнать его можно на вкладке монитора при вызове диалога DirectX – dxdiag). Делается это за счет смены автоматического определения (Auto) на один из доступных вариантов (32, 64 или 128 Мб).

Пропатчивание 32-битных систем

Наконец, задействовать всю память свыше объема в 4 Гб можно и в 32-битных системах, используя для этого утилиту ReadyFor4GB. Сначала запускается исполняемый одноименный EXE-файл из папки приложения, а затем нажимаются кнопки Check и Apply. После этого аналогичные действия выполняются для объекта ntkrnlpa.exe. Затем запускается файл AddBootMenu.cmd и дается подтверждение выполнения команды. После перезагрузки в случае появления меню с загрузчиком выбирается Windows [128GB with ntkr128g.exe].

Примечание: все действия производятся исключительно с запуском файлов от имени администратора на свой страх и риск, поскольку работоспособность системы после применения такого метода в полной мере не гарантируется.

MS-DOS

Операционные системы MS-DOS, Windows 95, Windows 98 и старое железо компьютера — установка, настройка, использование.

MS-DOS 6.22 — установка для игр. Часть 3.

Работа MS-DOS с памятью.

Продолжаем цикл статей об установке MS-DOS 6.22 на старое железо и современный компьютер для удобного запуска игр. В предыдущей статье мы рассмотрели способы минимальной установки операционки на жесткий диск, USB флешку, флоппи диск. Мы создали каркас — ядро работы операционной системы, состоящее всего из трёх файлов command.com, io.sys, msdos.sys. На данный каркас мы будем нанизывать дополнительные составляющие — добавлять файлы и производить записи в настройках системы. В данной статье будет рассмотрена работа MS-DOS с памятью.

Работа MS-DOS с памятью.

В статье очень кратко и несколько поверхностно освещена работа MS-DOS с памятью. Если вас не интересуют теоретические вопросы, можете переходить к четвёртой части цикла, где мы рассмотрим практическую настройку памяти DOS для игр и прикладных программ (файлы CONFIG.SYS, AUTOEXEC.BAT ).

Прежде, чем приступить к рассмотрению темы, предлагаем вам скачать архив файлов MS-DOS 6.22 OEM ver. 1.1.zip. Ссылку для скачивания можно найти на странице нашего сайта : Файлы для скачивания — полный перечень .
После установки с CD-ROM операционной системы MS-DOS 6.22 OEM ver. 1.1 , все файлы были скопированы в папку DOS, заархивированы и выложены для скачивания. Вам остаётся извлекать необходимые файлы и копировать на уже созданный диск с установленной в минимальном объёме MS-DOS 6.22, «нанизывая составляющие- кирпичики» на уже созданный каркас операционки. Таким образом мы избавимся от ненужных лишних файлов и досконально изучим особенности операционной системы.

Структура памяти MS-DOS 6.22 .

В первом персональном компьютере IBM PC использовался процессор Intel 8086, способный непосредственно адресовать 1024 килобайта оперативной памяти. Из этого адресного пространства 640 килобайт памяти (CM — Conventional Memory) использовалось для операционной системы и программ. Оставшиеся 384 килобайта (UMA Apper Memory Area) использовались для BIOS, адаптера дисплея и другого оборудования.

Со временем компьютеры становились более мощными и требовали всё большего объёма оперативной памяти. Первоначально заложенного в архитектуру IBM PC объёма памяти программ (640 килобайт) стало недостаточно для решения сложных задач.

Процессор Intel 80286 мог адресовать уже до 16 мегабайт оперативной памяти. Появилась необходимость расширения доступного программам адресного пространства. Архитектура компьютера IBM AT даёт возможность использовать для программ все 16 мегабайт памяти.

Однако даже если ваш компьютер содержит 16 мегабайт оперативной памяти, операционная система MS-DOS может использовать для себя и программ только первые 640 килобайт. При этом самим программам достаётся обычно не более 500 — 550 килобайт основной оперативной памяти, остальная память используется MS-DOS для своих собственных нужд.

Это связано с тем, что MS-DOS использует так называемый реальный режим работы процессора 80286. В реальном режиме процессор 80286 становится несколько улучшенным аналогом старого процессора 8086, и может адресовать только первые 1024 килобайта памяти.

Освобождаем основную память — задействуем XMS.

Для того, чтобы как-то задействовать память, расположенную выше границы 1024 килобайта (эту память называют расширенной — eXtended Memory Specification или XMS ), в новых версиях MS-DOS появились драйверы электронного диска RAMDRIVE.SYS и кэша дисковой памяти SMARTDRV.SYS. В результате работы RAMDRIVE.SYS часть оперативной памяти вашей машины (для компьютеров на базе Pentium — до 4096Мб) превращается в дополнительный жёсткий диск. Естественно скорость работы этого жёсткого диска невероятно высока! Смысл кеширования дисковой памяти практически пропадает. Минусом является невозможность сохранения данных на таком диске после перезагрузки.

В небольшой начальной части расширенной памяти (XMS) размером около 64 килобайт (Верхняя память — High Memory Area или HMA) могут располагаться модули, буфера и рабочие области самой операционной системы. Если в компьютере используется процессор 80386 или 80486, можно поместить в расширенную память резидентные программы и драйверы.

Не стоит путать расширенную память (extended memory или XMS) с дополнительной памятью (expanded memory или EMS). Дополнительная память располагается на отдельной плате, которая вставляется в слоты расширения материнской платы компьютера. Для работы дополнительной памяти в файле CONFIG.SYS должен быть установлен специальный драйвер, поставляющийся вместе с платой памяти. Дополнительная память (Expanded Memory) сейчас не применяется.

Если расположить в расширенной памяти MS-DOS, резидентные программы и драйверы, для программ останется порядка 600-620 килобайт драгоценной основной (Conventional Memory) памяти! Эта возможность появилась в MS-DOS 5.0 и естественно присутствует в более поздних версиях — MS-DOS 6.22, MS-DOS 7.10 .

Задача — установка MS-DOS 6.22 для игр.

Работа MS-DOS с памятью — тема не одной статьи. Мы обязательно коснёмся её подробнее. Сейчас попробуем использовать наши знания для настройки MS-DOS 6.22 для удобной работы с распространёнными приложениями и запуска игр.

Следует отметить, что произвести одну оптимальную, совместимую для всех программ, настройку DOS не получится по разным причинам. В добрые-старые времена программы писались с учётом особенностей операционок конкретных версий. Причём совместимость не всегда обеспечивалась. Отдельные особенности не получили развития и перестали использоваться более поздними версиями программ (EMS), другие получили развитие и стали использоваться ядром более новых операционных систем Windows (XMA).

Dos fn 48h: распределить память (дать размер памяти)

Kamrad.ru (https://kamrad.ru/index.php)
Убей в себе ламера (https://kamrad.ru/forumdisplay.php?forum > — Как увеличить память DOS? (https://kamrad.ru/showthread.php?thread > VitalyOFF 29-06-2001 13:18:

device=c:\windows\himem.sys (не обязательно. )
device=c:\windows\emm386.exe noems

Как увеличить память DOS?

Как увеличить память DOS?
Комп IIIпень, с 128 оперативкой,MSI Mainboard 815 EP.
Но программы работающие под ДОС бухгалтерские требуют 600 Кб памяти..свободной в наличае только 519 , 131 Кб занимает эмулятор MS-DOS находиться в VHA.

Еще программы сетевые сеть 5 Новел,
Как осободить память.

в autoexac.bat
SET Cliper=F105;

лишнее за remлено или в Lh пересено.

с уважением Катерина.

Wave
В msdos.sys поставь DoubleBuffer=0
ЗЫЖ и ваще, кинь сюда свой autoexec.bat и config.sys

можна перенисти дравера в верхнию память:
device=c:\windows\himem.sys
device=c:\windows\emm386.exe noems
dos=high,umb
потом в config.sys у всех драйверов кроме himem & emm386 заменить device Ha devicehigh
& B autot.bat
loadhigh для резедентных прог
Пример:
loadhigh c:\windows\command\doskey.com
Это так мелочевка, шо вспомню потом допишу Удачи!!

VitalyOFF 02-07-2001 13:23:

Выяснилось, что винды 98 — уже есть ясность .
Memmaker-ом пользоваться под винды 9х не стоит.

LH c:\rk.com
убрать совсем, ведь 3 строчки ниже есть стандартный виндовай русификатор.

mode con codepage prepare=((866) C:\WINDOWS\COMMAND\ega3.cpi)
mode con codepage select=866
keyb ru,,C:\WINDOWS\COMMAND\keybrd3.sys

Вы тут несколько перебдели с rem-ами и отключили кое-что виндовое

DEVICE=C:\WINDOWS\HIMEM.SYS
DEVICE=C:\WINDOWS\EMM386.EXE NOEMS
(убрать RAM и поставить это — тогда отключится EMS и практически всё уйдёт в верхнюю память)
DOS=HIGH,UMB
FILES=105
BUFFERS=40
device=C:\WINDOWS\COMMAND\display.sys con=(ega,,1)
Country=007,866,C:\WINDOWS\COMMAND\country.sys

И вопрос: вы работаете в режиме эмуляции (т.е. перезагружаетесь) или в режиме сеанса MS-DOS (не выходя из виндовса)?

Если второе, то:
в свойствах иконки должна быт закладка ПАМЯТЬ, и там можно установить до 640 кб., и тоже отключить EMS.

И с какой программой вы работаете?

Большое спасибо за такой полный ответ..но..
Мы работаем в сети, с 5 Новеллом и с сетевой базой данных под clipper5.02 , нам именно RAM нужен.
Программа запускается по иконке из виндов загружается эмуллятор MS_DOS .

может есть еще предложения? с робкой надеждой в голосе.

Вы знаете , до этого у нас стояла asys P2B и там память распределялась нормально, это проблема возникла с переходом на новую мамку.

VitalyOFF 02-07-2001 15:13:

Ага. мамка какая? Хотя от этого очень вряд-ли зависит.

Вот по клипперу я ничего сказать не могу, он что только с EMS работает? Параметр RAM указывает, что надо использовать всю доступную память.

Вы уверены, что без параметра RAM клиппер не заработает? Я вот совсем не уверен. А уверен в том, что пока вы не откдючите EMS вы 600 кб. не освободите. Пока есть EMS программы в верхнюю память не загружаются.

А второй вариант — со свойствами иконки попробуйте, для начала поставьте 600 кб. обычной памяти и по паре мегов на EMS & XMS. И поиграйтесь там с настройками.


что-то мне мерещится, что заблуждаетесь вы, батенька, с ключиком NOEMS. У меня когда-то именно из-за него напрочь никто не хотел в верхнюю (HMA) память лезть, пришлось использовать RAM и замечательно работает. с давних пор уже так и пишу:
в CONFIG.SYS:
device=C:\WINDOWS\himem.sys
DOS=HIGH, UMB
devicehigh=C:\WINDOWS\EMM386.EXE RAM Wave 03-07-2001 00:46:

Большое спасибо, за ответы.

вот высылаю вам с тающей надеждой файлы.

PATH C:\WINDOWS;C:\WINDOWS\COMMAND
SET CLIPPER=f105;TEMPPATH:’c:\ivc_buch\TMP’;SWAPPATH:’
c:\ivc_buch\TMP’;DYNF:4
set TEMP=C:\TEMP
LH c:\rk.com
rem nc\nc

rem TShoot: mode con codepage prepare=((866) C:\WINDOWS\COMMAND\ega3.cpi)
rem TShoot: mode con codepage select=866
rem TShoot: keyb ru,,C:\WINDOWS\COMMAND\keybrd3.sys
Set NWLANGUAGE=RUSSKI

FILES=105
BUFFERS=40
DEVICE=C:\WINDOWS\HIMEM.SYS
DOS=HIGH,UMB
DEVICE=C:\WINDOWS\EMM386.EXE RAM
rem TShoot: device=C:\WINDOWS\COMMAND\display.sys con=(ega,,1)
rem TShoot: Country=007,866,C:\WINDOWS\COMMAND\country.sys

Громадное спасибо еще раз.

А может?? существуют, я слышала, программки типа memmaker? подойдут ли они к 98 Виндам.

с уважением Катерина

Вряд ли в NOEMS дело.Да и судя по тому что у него
в конфиге и автоекзеке памяти должно хватать.Оба варианта приемлимы,хотя все это лажа.По умолчанию
при установке винда сама все ставит.Смотрите реестр.И что это за rk.com?
Загружайся в голом досе , должно все работать .

VitalyOFF 03-07-2001 08:23:

mobedik rk.com — это досовский русификтор.

VitalyOFF 03-07-2001 09:25:

cybervaf экспериментальные данные:

call C:\WINDOWS\SYSTEM\_nw_nds2.bat C:\WINDOWS\SYSTEM
mode con codepage prepare=((866) C:\WINDOWS\COMMAND\ega3.cpi)
mode con codepage select=866
keyb ru,,C:\WINDOWS\COMMAND\keybrd3.sys

а теперь config.sys

device=c:\windows\himem.sys
device=c:\windows\emm386.exe noems
dos=high,umb
devicehigh=C:\WINDOWS\COMMAND\display.sys con=(ega,,1)
Country=007,866,C:\WINDOWS\COMMAND\country.sys

Тип памяти Размер Занято Свободно
—————- ———— ———— ————
Обычная 655 360 49 152 606 208
Верхняя 150 048 150 048 0
Зарезервировано 0 0 0
Память XMS 64 730 592 50 656 64 679 936
—————- ———— ———— ————
Всего памяти: 65 536 000 249 856 65 286 144

Ниже 1 МБ: 805 408 199 200 606 208

Максимально допустимый размер программы: 606 192 (592K)
Наибольший свободный блок верхней памяти: 0 (0K)
Резидентная часть MS-DOS загружена в сегмент HMA.

config.sys с RAM

device=c:\windows\himem.sys
device=c:\windows\emm386.exe ram
dos=high,umb
devicehigh=C:\WINDOWS\COMMAND\display.sys con=(ega,,1)
Country=007,866,C:\WINDOWS\COMMAND\country.sys

Тип памяти Размер Занято Свободно
—————- ———— ———— ————
Обычная 655 360 49 152 606 208
Верхняя 84 512 84 512 0
Зарезервировано 0 0 0
Память XMS 64 796 128 124 384 64 671 744
—————- ———— ———— ————
Всего памяти: 65 536 000 258 048 65 277 952

Ниже 1 МБ: 739 872 133 664 606 208

Всего отображаемой памяти (EMS): 65 388 544 (62M)
Свободно отображаемой памяти (EMS): 16 777 216 (16M)
Максимально допустимый размер программы: 606 192 (592K)
Наибольший свободный блок верхней памяти: 0 (0K)
Резидентная часть MS-DOS загружена в сегмент HMA.

Разница толлько в том, что при RAM есть EMS, при NOEMS её нет. А свободная conventional память одинаковая 592 К.

Разрешение спора об опциях RAM — NOEMS:
(из описания emm386)

Although few programs these days use expanded memory, EMM386 is still needed to allow access to the upper memory area. If no expanded memory is required, that part of EMM386’s job can be disabled.

NOEMS —
— Provides access to the upper memory area but does not provide any expanded memory.

NOVCPI —
— Disables support for VCPI programs. *****switch must be used with the NOEMS switch otherwise VCPI support is not disabled. If both switches are set, EMM386 disregards the memory parameter and the MIN switch. Disabling support for VCPI programs reduces the amount of extended memory required by EMM386.

Directs EMM386 to display status and error messages while loading. By default, EMM386 does not display any messages unless it encounters an error. As an alternative to using the switch, status messages can be displayed by holding down the Alt key while EMM386 is loading.

A number of switches allow control over exactly where UMBs and expanded memory page frames are to be located.

RAM=range
Specifies a range of segment addresses to be used for UMBs and also enables EMS support. If =range is omitted, EMM386 uses all available adapter space to create UMBs along with a page frame for EMS.

ROM=range
Specifies a range of segment addresses that EMM386 uses for shadow RAM. Specifying *****switch may speed up your system if it does not already have shadow RAM.

В файле config.sys улучшить ситуацию могут следующие опции для himem.sys:
device=c:\windows\himem.sys /HMAmin=40 /NOEISA /NUMHANDLES=10 /ShadowRAM:OFF /TestMem:Off /V

Да, Катюшка, попробуй записать так:
FILESHIGH=105
BUFFERSHIGH=20

ООО! Я придумал кардинальное решение.
Устанавливаешь на машину Linux. Ядро не ниже 2.2.16.
Устанавливаешь VMWare.
В DOS боксе смотришь сколько памяти и запускаешь супер программу на Клиппере.

VitalyOFF 04-07-2001 08:26:

vp ну в виндах то и по русски всё это написано про emm386.exe и его ключи

А в линуксе есть новелловский клиент-то?

Wave
Так сколько же у тебя свободно сейчас?

Если диск не сжат, то в msdos.sys поставь
DoubleBuffer=0
DblSpace=0
DrvSpace=0

В иконке своей проги выбери свойства-> программа-> дополнительно-> галочку на режим msdos и выбери пункт
Выбрать новую конфигурацию MS-DOS
в поле config напиши:
DEVICE=C:\WINDOWS\HIMEM.SYS
DEVICE=C:\WINDOWS\EMM386.EXE RAM
DOS=HIGH,UMB
FILES=105
BUFFERS=40

В поле autoexec:
PATH C:\WINDOWS;C:\WINDOWS\COMMAND
SET CLIPPER=f105;TEMPPATH:’c:\ivc_buch\TMP’;SWAPPATH:’
c:\ivc_buch\TMP’;DYNF:4
SET TEMP=C:\TEMP
LH c:\rk.com
SET NWLANGUAGE=RUSSKI

больше ничё писать не надо.

Я не знаю сколько в памяти занимает rk.com, но думаю что меньше, чем display(18kb) и keyb(7kb) вместе взятые.

VitalyOFF 05-07-2001 08:03:

Mips про rk ты правильно думаешь , но ИМХО лучше пользоваться стандартным виндовым русификатором.

Вот именно,зачем грузить руссификатор если винда
уже сама его ставит.Поставь все по дефаулт и все
заработает.

Большое спасибо Вам за дисскусию и за помочь.
Не ожидала..я тут уже решила сдаться компу.

rk в памяти занимает не более 10 кб. а если его нет в буглатреских программах,начинают иногда возникать непонятные символы..не всегда но быват..а это никак нельзя. допустить.

извините что долго не отвечала была занята немного другими програмками )
вообще мне надо выбрать ник было Mistake %))))

итак пошла бороться. единственное..Вы мне льстите Луникс я не поставлю ))

с большим уважением и искренним восхищением всем написавшим.
Катерина.

VitalyOFF 07-07-2001 00:19:

Wave с нами и не поставишь .
Так ты проблему-то решила?

Wave, в качестве файлового менеджера в DOS’е (куда же без него!), думаю, надо влепить DOS Navigator. Насколько мне помнится, он кушает что-то около одного кило нижней памяти. И Tetris в нем есть.

Голомызый 07-07-2001 04:56:

VmWare и под NT/2000 прекрасно работает. А по делу, я бы посоветовал QEMM поставить. По освободению нижней памяти ему равных нет. Но нужна версия 97. Более ранние могут винды свалить.

MarshallGr 17-07-2001 15:14:

Еще для CONFIG.SYS
dos=high,umb,NOAUTO
и последняя строка config.sys должна быть
device=C:\WINDOWS\ifshlp.sys
не забудь ее, а то увидишь синий экранчик )

Кстати, все DEVICE в CONFIGIG.SYS можно попробовать исправить на DEVICEHIGH

И еще кардинальный вариант:
раздельная загрузка DOS/WINDOWS. Это можно устроить создав меню в CONFIG.SYS

Например один ДОС + клиент Новеловский (новый) и у тебя свободно памяти где-то 604 — 605 КБ.

2MarshallGr
device=C:\WINDOWS\ifshlp.sys
не забудь ее, а то увидишь синий экранчик )

А ошибка не VFAT, а?
А то я уже достался одному перцу Винду перебивать. У него конфиг свой и чтобы с ДОСом или Виндой.
Завтра попробую!

MarshallGr 25-07-2001 17:14:

Она, родненькая, она!


Но VFAT может быть и не только от того, что ifshlp не грузится.

Иногда умные инсталляционные программы убивают эту строчку, а NOAUTO оставляют.
Вариант такой — поставить на config.sys атрибут ReadOnly — может поможет.

А не подскажете откуда эту чудо QEMM 97 достать можно? Может кто на ftp согласиться закачать?

QEMM 97 для самоубийц. Он там таково наворотит, что пол года разгребать будешь. Особенно если конфиг достаточно запутанный.
Тут уже были написаны нормальные конфиги, не буду повторятся.
Чтобы лучше понять суть дела достаточно на досуге прочитать 2 (!) файла c:\windows\msdosdrv.txt и c:\windows\config.txt. Cоответствеено разделы про emm386 и dos, loadhigh, devicehigh. Там все очень доступно описано.
Ну и напоследок базовый кит ( ) который решает 50% случает нехватки памяти.
В начало конфиг.сус:

dos=high,umb,auto
device=c:\windows\himem.sys
device=c:\windows\emm386.exe noems

Камарады! Установил Windows XP , но не грузится при запуске кодовая страница для кириллицы. Что делать?
Помогите?

Текущее время: 15:13

Powered by: vBulletin Version 2.0.1
Copyright © Jelsoft Enterprises Limited 2000, 2001.
Любое использование материалов сайта
возможно только с разрешения его администрации.

Dos fn 48h: распределить память (дать размер памяти)

Глава 10. UPMM — Used Physical Memory Map.

Для того, чтобы обработчик страничного нарушения «знал», какие страницы физической памяти доступны и где именно они находятся, в нашем примере вводится битовая карта, которая будет называться UPMM (от англ. Used Physical Memory Map — карта использованной физической памяти). Эта аббревиатура и технология является число программным продуктом, придуманном мною лично, в процессорах Intel и их клонах нет ничего подобного; UPMM используется как один из возможных вариантов управления распределением памяти, при этом относительно простым и надёжным.

UPMM по сути представляет собой массив размером 4Кб, а по смыслу — битовую карту размером 32 Кбита. Каждый бит UPMM соответствует одной физической странице памяти; если он сброшен (т.е. равен 0), значит страница — свободна, если установлен (1) — то занята.

Работа с UPMM происходит блоками по 32 бита, т.е. если, например, нужно обратиться к 49-биту, производится чтение двойного слова по смещению 4 относительно начала UPMM, а уже в этом двойном слове обрабатывается 17-й бит.
Обработка битовой карты блоками по 32 бита позволяет максимально быстро обращаться к ней — ведь всё равно процессор тратит одинаковое число тактов при обращении к байту или двойному слову в памяти (если, конечно, процессор — не SX), а оптимизация по скорости у многих ранних моделей вообще относится только к командам, обрабатывающим 32-разрядные операнды.

Для удобства работы с UPMM, для неё создаётся отдельный сегмент данных, доступный через селектор UPMM_sel. Размер этого сегмента — 4Кб, что позволяет описать до 128Мб физической памяти. Для демонстрации страничного преобразования этого вполне достаточно, но для полнофункционального обработчика понадобится сегмент размером 128Кб, чтобы описать 4Гб памяти.

Илон Маск рекомендует:  Проверка данных на валидность

Установка сегмента, описывающего UPMM производится перед переходом в защищённый режим следующим образом:

Здесь в переменной UPMM_size содержится размер сегмента (4Кб). Для .com-программы его можно менять в небольших пределах, т.к. при работе наших примеров подразумевается, что они, во-первых, являются .com-программами, а во-вторых, вместе со всеми данными, занимают не более 64Кб памяти.

Прежде, чем будет создана UPMM, необходимо определить её размер в dd-переменной UPMM_size, а также какие страницы физической памяти 1-го мегабайта уже заняты и какие — свободны. Для этого предусмотрена процедура «setup_for_UPMM»:

Для создания UPMM используется процедура «create_UPMM». Она способна создать UPMM размером до 128Кб, но используется для 4 килобайтовой UPMM. Эта процедура вызывается сразу после процедуры «get_phys_mem_size» и в качестве входного параметра использует размер памяти, возвращённый ею в EAX. Процедура «create_UPMM» использует также dd-переменную UPMM_size и макрос UPMM_sel — селектор дескриптора сегмента, описывающего UPMM:

Для поиска свободной страницы в UPMM используется процедура «find_free_phys_page», которая, по сути, ищет первый нулевой бит в UPMM. После того, как он будет найден, процедура вычисляет адрес физической страницы, которой соответствует этот бит и возвращает его в EAX.
При возврате из этой процедуры флаг переноса CF (в EFLAGS) содержит информацию о процессе поиска — если он сброшен, значит всё в порядке, страница найдена и её адрес находится в EAX. Если же CF установлен, то в UPMM больше нет нулевых бит, следовательно, вся доступная физическая память уже занята. Везде в нашем примере после вызова этой процедуры проверяется флаг CF и если он установлен, выводится сообщение о недостатке памяти и производится аварийное прекращение программы. При реализации системы виртуальной памяти, в таком случае следовало бы найти наименее используемую физическую страницу, свопнуть её на диск и использовать её далее как свободную страницу, но в нашем примере внимание концентрируется именно на обработчике исключения страничного нарушения, а не механизме виртуальной памяти.

Dos fn 48h: распределить память (дать размер памяти)

Требования

  • операционная система Windows 7 или выше;
  • установленный пакет .NET 4.0.

Возможности

  • позволяет редактировать размер и флаг ЛЮБОГО раздела;
  • позволяет изменять параметры командной строки запуска;
  • мультиязычная версия;

Свежая версия
RK_ParamEd_v1.01.rar ( 20,43 КБ )

  • PartitionsA23 — разметка разделов на процессорах AllWinner — для чипов А23 и А33, A31s (возможно подойдёт и для других чипов)

Приложение для обработки файлов разметки схем DOS (MBR+EBR, partition.bin и т.п.) и GUID (файл GPT, EFI и т.п.).
Требования

  • операционная система Windows 7 или выше;
  • установленный пакет .NET 4.0.

Свежая версия
PartitionsEditor_1.02.rar ( 122,15 КБ )

Инструкция пользователя
Скоро будет.

В теме нет куратора. По вопросам наполнения шапки обращайтесь к модераторам раздела через кнопку под сообщениями, на которые необходимо добавить ссылки.
Если в теме есть пользователь, желающий стать Куратором и соответствующий Требованиям для кандидатов, он может подать заявку в теме Хочу стать Куратором (предварительно изучив шапку темы и все материалы для кураторов).

Сообщение отредактировал vaalf — 15.10.18, 12:14

Проверить успешность процесса переразмеки, можно только одним способом : посмотреть каким стал размер того раздела, манипуляции с которым Вы проводили в программе ScatterEditor .
Посмотреть размеры разделов телефона можно, например, через программку MTK Dro >Root-Shell , если его нет) затем жмем на кнопку «Карта блоков» . Появляется новое окошко, в котором и смотрим размеры разделов телефона.


• Командный процессор (интерпретатор команд) – файл COMMAND.СОМ.

• Утилиты и драйверы, расширяющие возможности системы.

• Программа загрузки MS-DOS – загрузочная запись (boot record).

Вся память в соответствии с архитектурой IBM PC условно может быть разбита на три части.

В самых младших адресах памяти (первые 1024 ячейки) размещается таблица векторов прерываний. Это связано с аппаратной реализацией процессора i8088, на котором была реализована ПК. В последующих процессорах (начиная с i80286) адрес таблицы прерываний определяется через содержимое соответст­вующего регистра, но для обеспечения полной совместимости с первым процес­сором при включении или аппаратном сбросе в этот регистр заносятся нули.

Вторая часть памяти отводится для размещения программных модулей самой MS-DOS и для программ пользователя. Эта область памяти называется Conventional Memory (основная, стандартная память).

Третья часть адресного пространства отведена для постоянных запо­минающих устройств и функционирования некоторых устройств ввода/вывода. Эта область памяти получила название UMA (upper memory areas – область верхней памяти).

В младших адресах основной памяти размещается то, что можно назвать ядром этой ОС – системные переменные, основные программные модули, блоки дан­ных для буферирования операций ввода/вывода. Для управления устройствами, драйверы которых не входят в базовую подсистему ввода/вывода, загружают­ся так называемые загружаемые (или инсталлируемые) драйверы. Перечень ин­сталлируемых драйверов определяется специальным конфигурационным файлом CONFIG.SYS.

Память с адресами, большими чем 10FFFFh, может быть использована в DOS-программах при выполнении их на микропроцессорах, имеющих такую возмож­ность. Но для этого с помощью специаль­ных драйверов необходимо переключать процессор в другой режим работы, при котором он сможет использовать адреса выше 10FFFFh. Широкое распростране­ние получили две основные спецификации: XMS (extended memory specification) и EMS (expanded memory specification).

Для того чтобы предоставить больше памяти программам пользователя, в MS-DOS применено то же решение, что и во многих других простейших ОС – командный процессор COMMAND.СОМ сделан состоящим из двух частей. Первая часть явля­ется резидентной, она размещается в области ядра. Вторая часть – транзитная; она размещается в области старших адресов раздела памяти, выделяемой для программ пользователя. И если программа пользователя перекрывает собой об­ласть, в которой была расположена транзитная часть командного процессора, то последний при необходимости восстанавливает в памяти свою транзитную часть, поскольку после выполнения программы она возвращает управление резидент­ной части COMMAND.COM.

Поскольку размер основной памяти (conventional memory) относительно неболь­шой, то очень часто системы программирования реализуют оверлейные структу­ры. Для этого в MS-DOS есть специальные вызовы.

1.7.2. Распределение оперативной памяти
в Microsoft Windows 95/98

С точки зрения базовой архитектуры ОС Windows 95/98 они обе являются 32-разрядными, многопотоковыми ОС с вытесняющей многозадачностью. Основ­ной пользовательский интерфейс этих ОС – графический.

Для своей загрузки они используют операционную систему MS‑DOS 7.0 (MS-DOS 98). Распределение памяти в MS-DOS 7.0 такое же, как и в предыдущих версиях DOS. Однако при загрузке GUI-интерфейса перед загрузкой ядра Win­dows 95/98 процессор переключается в защищенный режим работы и начинает распределять память уже с помощью страничного механизма.

Младшие адреса виртуального адресного пространства совместно используются всеми процессами. Это сделано для обеспечения совместимости с драйверами устройств реального режима, резидентными программами и некоторыми 16-раз­рядными программами Windows. Безусловно, это плохое решение с точки зре­ния надежности, поскольку оно приводит к тому, что любой процесс может непреднамеренно (или же, наоборот, специально) испортить компоненты, нахо­дящиеся в этих адресах.

В Windows 95/98 каждая 32-разрядная прикладная программа выполняется в сво­ем собственном адресном пространстве, но все они используют совместно один и тот же 32-разрядный системный код. Доступ к чужим адресным пространствам в принципе возможен. Другими словами, виртуальные адресные пространства не используют всех аппаратных средств защиты, заложенных в микропроцессор.

Системный код Windows 95 размещается выше границы 2 Гбайт. В пространстве с отметками 2 и 3 Гбайт находятся системные библиотеки DLL (dynamic link library, динамически загружаемый библиотечный модуль), используемые несколькими программами. В 32-битовых микропроцессорах семейства i80х86 имеются четыре уровня защиты, именуемые кольцами с номерами от 0 до 3. Кольцо с номером 0 является наиболее привилегированным, то есть максимально защищенным. Компоненты системы Windows 95, относящиеся к кольцу 0, отображаются на виртуальное адресное пространство между 3 и 4 Гбайт. К этим компонентам относятся собственно ядро Windows, подсистема управле­ния виртуальными машинами, модули файловой системы и виртуальные драй­веры (VxD).

Область памяти между 2 и 4 Гбайт адресного пространства каждой 32-разрядной прикладной программы совместно используется всеми 32-разрядными приклад­ными программами.

В области между 2 и 3 Гбайт также находятся все запускаемые 16‑разрядные прикладные программы Windows. С целью обеспечения совместимости эти про­граммы выполняются в совместно используемом адресном пространстве, где они могут испортить друг друга так же, как и в Windows 3.х.

Адреса памяти ниже 4 Мбайт также отображаются в адресное пространство каж­дой прикладной программы и совместно используются всеми процессами. Бла­годаря этому становится возможной совместимость с существующими драйвера­ми реального режима, которым необходим доступ к этим адресам. Это делает еще одну область памяти незащищенной от случайной записи.

Модель распределения памяти можно проиллюстрировать с помощью рис. 1.11.

Рис. 1.11. Модель памяти ОС Windows 95/98

Минимально допустимый объем оперативной памяти, начиная с которого ОС Windows 95 может функционировать, равен 4 Мбайт, однако при таком объеме пробуксовка столь велика, что практически работать нельзя.

1.7.3. Распределение оперативной памяти
в Microsoft Windows NT

Схема распределения возможного виртуального адресного пространства в системах Windows NT отличается от модели памяти Windows 95/98. Прежде всего, в отличие от Windows 95/98 в гораздо большей степени используется ряд серьезных аппарат­ных средств защиты, имеющихся в микропроцессорах, а также применено прин­ципиально другое логическое распределение адресного пространства.

Во-первых, все системные программные модули находятся в своих собственных виртуальных адресных пространствах, и доступ к ним со стороны прикладных программ невозможен. Ядро системы и несколько драйверов работают в нулевом кольце защиты в отдельном адресном пространстве.

Во-вторых, остальные программные модули самой операционной системы, ко­торые выступают как серверные процессы по отношению к прикладным про­граммам (клиентам), функционируют также в своем собственном системном виртуальном адресном пространстве, невидимом для прикладных процессов.

Ло­гическое распределение адресных пространств приведено на рис. 1.12.

Прикладным программам выделяется 2 Гбайт локального (собственного) линей­ного (неструктурированного) адресного пространства от границы 64 Кбайт до 2 Гбайт (первые 64 Кбайт полностью недоступны). Прикладные программы изо­лированы друг от друга, хотя могут общаться через буфер обмена (clipboard), ме­ханизмы DDE (Dynamic Data Exchange, механизм динамического обмена данными) и OLE (Object Linking and Embedding, механизм связи и внедрения объектов).

В верхней части каждой 2-гигабайтной области прикладной прог­раммы разме­щен код системных DLL кольца 3, который выполняет перенаправление вызовов в совершенно изолированное адресное пространство, где содержится уже собст­венно системный код. Этот системный код, выступающий как сервер-процесс (server process), проверяет значения параметров, исполняет запрошенную функ­цию и пересылает результаты назад в адресное пространство прикладной про­граммы. Хотя сервер-процесс сам по себе остается процессом прикладного уровня, он полностью защищен от вызывающей его прикладной программы и изолиро­ван от нее.

Между отметками 2 и 4 Гбайт расположены низкоуровневые системные компо­ненты Windows NT кольца 0, в том числе ядро, планировщик потоков и диспетчер виртуальной памяти.

Процессами выделения памяти, ее резервирования, освобождения и подкачки управляет диспетчер виртуальной памяти Windows NT (Windows NT virtual memory manager, VMM). В своей работе этот компонент реализует сложную стратегию учета требований к коду и данным процесса для минимизации досту­па к диску, поскольку реализация виртуальной памяти часто приводит к боль­шому количеству дисковых операций.

Каждая виртуальная страница памяти, отображаемая на физическую страницу, переносится в так называемый страничный фрейм (page frame). Прежде чем код или данные можно будет переместить с диска в память, диспетчер виртуальной памяти (модуль VMM) должен найти или создать свободный страничный фрейм или фрейм, заполненный нулями. Заполнение страниц нулями пред­ставляет собой одно из требований стандарта на системы безопасности уровня С2, принятого правительством США. Страничные фреймы должны заполняться нулями для того, чтобы исключить возможность использования их предыдущего содержимого другими процессами. Чтобы фрейм можно было освободить, необ­ходимо скопировать на диск изменения в его странице данных, и только после этого фрейм можно будет повторно использовать. Программы, как правило, не меняют страницы кода. Страницы кода, в которые программы не внесли измене­ний, можно удалить.

Диспетчер виртуальной памяти может быстро и относительно легко удовлетво­рить программные прерывания типа «ошибка страницы» (page fault). Что каса­ется аппаратных прерываний типа «ошибка страницы», то они приводят к подкачке (paging), которая снижает производительность системы.

Когда процесс использует код или данные, находящиеся в физической памяти, система резервирует место для этой страницы в файле подкачки Pagefile.sys на диске. Это делается с расчетом на тот случай, что данные потребуется выгрузить на диск. Файл Pagefile.sys представляет собой зарезервированный блок дисково­го пространства, который используется для выгрузки страниц, помеченных как «грязные», при необходимости освобождения физической памяти. Этот файл может быть как непрерывным, так и фрагментированным; он может быть расположен на системном диске либо на любом другом и даже на несколь­ких дисках. Размер этого страничного файла ограничивает объем данных, кото­рые могут храниться во внешней памяти при использовании механизмов вирту­альной памяти. По умолчанию размер файла подкачки устанавливается равным объему физической памяти плюс 12 Мбайт, однако пользователь имеет возмож­ность изменить его размер по своему усмотрению. Проблема нехватки виртуаль­ной памяти часто может быть решена за счет увеличения размера файла подкачки.

В системах Windows NT 4.0 объекты, создаваемые и используемые приложения­ми и операционной системой, хранятся в так называемых пулах памяти (memory pools). Доступ к этим пулам может быть получен только в привилегированном режиме работы процессора, в котором работают компоненты операционной сис­темы. Поэтому для того чтобы объекты, хранящиеся в пулах, стали видимы задачам приложений, эти задачи должны переключиться в привилегированный режим.

Перемещаемый или нерезидентный пул (paged pool) содержит объекты, которые могут быть при необходимости выгружены на диск. Неперемещаемый или рези­дентный пул (nonpaged pool) содержит объекты, которые должны постоянно на­ходиться в памяти. В частности, к такого рода объектам относятся структуры данных, используемые процедурами обработки прерываний, а также структуры, используемые для предотвращения конфликтов в мультипроцессорных системах.

Исходный размер пулов определяется объемом физической памяти, доступной Windows NT. Впоследствии размер пула устанавливается динамически, и в зави­симости от работающих в системе приложений и сервисов будет изменяться в широком диапазоне.

Вся виртуальная память в Windows NT подразделяется на классы: зарезервиро­ванную (reserved), выделенную (committed) и доступную (available),

Зарезервированная память представляет собой набор непрерывных адресов, которые диспетчер виртуальной памяти (VMM) выделяет для процесса, но не учитывает в общей квоте памяти процесса до тех пор, пока она не будет фактически использована. Когда процессу требуется выполнить запись в па­мять, ему выделяется нужный объем из зарезервированной памяти. Если про­цессу потребуется больший объем памяти, то дополнительная память может быть одновременно зарезервирована и использована, если в системе имеется доступная память.

Память выделена, если диспетчер VMM резервирует для нее место в файле Pagefile.sys на тот случай, когда потребуется выгрузить содержимое памяти на диск. Объем выделенной памяти процесса характеризует фактически по­требляемый им объем памяти. Выделенная память ограничивается размером файла подкачки. Предельный объем выделенной памяти в системе (commit limit) определяется тем, какой объем памяти можно выделить процессам без увеличения размеров файла подкачки. Если в системе имеется достаточный объем дискового пространства, то файл подкачки может быть увеличен и тем самым будет расширен предельный объем выделенной памяти.

Вся память, которая не является ни выделенной, ни зарезервированной, явля­ется доступной. К доступной относится свободная память, обнуленная память (освобожденная и заполненная нулями), а также память, находящаяся в списке ожидания (standby list), которая была удалена из рабочего набора процесса, но может быть затребована вновь.

2. Управление Вводом/выводом

2.1. Основные понятия и концепции организации
ввода/вывода в ОС

Ввод/вывод считается одной из самых сложных областей проекти­рования операционных систем, в которой сложно применить общий подход из-за изобилия частных методов. Сложность возникает из-за огромного числа уст­ройств ввода/вывода разнообразной природы, которые должна поддерживать ОС. При этом перед создателями ОС встает очень непростая задача – не только обеспечить эффективное управление устройствами ввода/вывода, но и создать удобный и эффективный виртуальный интерфейс устройств ввода/вывода, по­зволяющий прикладным программистам просто считывать или сохранять дан­ные, не обращая внимание па специфику устройств и проблемы распределения устройств между выполняющимися задачами. Система ввода/вывода, способная объединить в одной модели широкий набор устройств, должна быть универсаль­ной. Она должна учитывать потребности существующих устройств, от простой мыши до клавиатур, принтеров, графических дисплеев, дисковых накопителей, компакт-дисков и даже сетей. С другой стороны, необходимо обеспечить доступ к устройствам ввода/вывода для множества параллельно выполняющихся задач, причем так, чтобы они как можно меньше мешали друг другу.

Поэтому самым главным является следующий принцип: любые операции по управлению вводом/выводом объявляются привилегированными и могут вы­полняться только кодом самой ОС. Для обеспечения этого принципа в большин­стве процессоров даже вводятся режимы пользователя и супервизора. Как пра­вило, в режиме супервизора выполнение команд ввода/вывода разрешено, а в пользовательском режиме – запрещено. Использование команд ввода/вывода в пользовательском режиме вызывает исключение (вид внутреннего прерывания), и управление через механизм прерываний передается коду ОС. Хотя возможны и более сложные системы, в которых в ряде случаев пользовательским программам разрешено непосредст­венное выполнение команд ввода/вывода.

В мультипрограммных ОС одним из основных видов ресурсов являются устройства ввода/вывода и соответствующее программное обеспечение, с помощью которого осуществляется управление обменом данными между внешними устройствами и оперативной памятью. Помимо разделяемых устройств ввода/вывода (эти устройства допускают разделение посредством ме­ханизма доступа) существуют неразделяемые устройства. Примерами разделяе­мого устройства могут служить накопитель на магнитных дисках, устройство для чтения компакт-дисков. Это устройства с прямым доступом. Примеры не­разделяемых устройств – принтер, накопитель на магнитных лентах. Это уст­ройства с последовательным доступом. Операционные системы должны управ­лять и теми и другими устройствами, предоставляя возможность параллельно выполняющимся задачам использовать различные устройства ввода/вывода.

Можно назвать три основные причины, по которым нельзя разрешать каждой отдельной пользовательской программе обращаться к внеш­ним устройствам не­посредственно:

1. Необходимость разрешать возможные конфликты доступа к устройствам ввода/вывода. Например, две параллельно выполняющиеся программы пыта­ются вывести на печать результаты своей работы. Если не предусмотреть внешнее управление устройством печати, то в результате мы можем получить абсолютно нечитаемый текст, так как каждая программа будет время от вре­мени выводить свои данные, которые будут перемежаться данными другой программы. Другой пример: ситуация, когда одной программе необходимо прочитать данные с некоторого сектора магнитного диска, а другой – запи­сать результаты в другой сектор того же накопителя. Если операции вво­да/вывода не будут отслеживаться каким-то третьим (внешним) процессом-арбитром, то после позиционирования магнитной головки для первого запро­са может тут же появиться команда позиционирования головки для второй задачи, и обе операции ввода/вывода не смогут быть выполнены корректно.

2. Желание увеличить эффективность использования этих ресурсов. Например, у накопителя на магнитных дисках время подвода головки чтения/записи к необходимой дорожке и обращение к определенному сектору может значи­тельно (до тысячи раз) превышать время пересылки данных. В результате, если задачи по очереди обращаются к цилиндрам, далеко отстоящим друг от друга, то полезная работа, выполняемая накопителем, может быть существен­но снижена.

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

Итак, управление вводом/выводом осуществляется операционной системой, компонентом, который чаще всего называют супервизором ввода/вывода. В пере­чень основных задач, возлагаемых на супервизор, входят следующие:

• супервизор ввода/вывода получает запросы на ввод/вывод от прикладных за­дач и от программных модулей самой операционной системы. Эти запросы проверяются на корректность, и если запрос выполнен по спецификациям и не содержит ошибок, он обрабатывается дальше, в противном случае пользо­вателю (задаче) выдается соответствующее диагностическое сообщение о не­действительности (некорректности) запроса;

• супервизор ввода/вывода вызывает соответствующие распределители каналов и контроллеров, планирует ввод/вывод (определяет очередность предостав­ления устройств ввода/вывода задачам, затребовавшим их). Запрос на ввод/вывод либо тут же выполняется, либо ставится в очередь на выполнение;

• супервизор ввода/вывода инициирует операции ввода/вывода (передает управ­ление соответствующим драйверам) и в случае управления вводом/выводом с использованием прерываний предоставляет процессор диспетчеру задач, с тем чтобы передать его первой задаче, стоящей в очереди на выполнение;

• при получении сигналов прерываний от устройств ввода/вывода супервизор идентифицирует их и передает управление соответствующей про­грамме обработки прерывания;

• супервизор ввода/вывода осуществляет передачу сообщений об ошибках, если таковые происходят в процессе управления операциями ввода/вывода;

• супервизор ввода/вывода посылает сообщения о завершении операции вво­да/вывода запросившему эту операцию процессу и снимает его с состояния ожидания ввода/вывода, если процесс ожидал завершения операции.

Таким образом, прикладные программы (а в общем случае – все обрабатываю­щие программы) не могут непосредственно связываться с устройствами ввода/вывода независимо от использования устройств (монопольно или совместно). Установив соответствующие значения параметров в запросе на ввод/вывод, опре­деляющих требуемую операцию и количество потребляемых ресурсов, они могут передать управление супервизору ввода/вывода, который и запускает необходи­мые логические и физические операции.

2.2. Режимы управления вводом/выводом

Как известно, имеются два основных режима ввода/вывода: режим обмена с опро­сом готовности устройства ввода/вывода и режим обмена с прерываниями. Рас­смотрим рис. 2.1.

Пусть для простоты управление вводом/выводом осуществляет центральный процессор (в этом случае часто говорят о наличии программного канала обмена данными между внешними устройством и оперативной памятью, в отличие от канала прямого доступа к памяти, при котором управление вводом/выводом осуществляет специальное дополнительное оборудование). Центральный процессор посылает устройству управле­ния команду выполнить некоторое действие устройству ввода/вывода. Последнее исполняет команду, транслируя сигналы, понятные центральному устройству и устройству управления в сигналы, понятные устройству ввода/вывода. Но быст­родействие устройства ввода/вывода намного меньше быстродействия централь­ного процессора (порой на несколько порядков). Поэтому сигнал готовности (транслируемый или генерируемый устройством управления и сигнализирующий процессору о том, что команда ввода/вывода выполнена и можно выдать новую команду для продолжения обмена данными) приходится очень долго ожидать, постоянно опрашивая соответствующую линию интерфейса на наличие или от­сутствие нужного сигнала. Посылать новую команду, не дождавшись сигнала готовности, сообщающего об исполнении предыдущей команды, бессмысленно, В режиме опроса готовности драйвер, управляющий процессом обмена данными с внешним устройством, как раз и выполняет в цикле команду «проверить нали­чие сигнала готовности». До тех пор пока сигнал готовности не появится, драй­вер ничего другого не делает. При этом, естественно, нерационально использу­ется время центрального процессора. Гораздо выгоднее, выдав команду ввода/вывода, на время забыть об устройстве ввода/вывода и перейти на выполнение другой программы. А появление сигнала готовности трактовать как запрос на прерывание от устройства ввода/вывода. Именно эти сигналы готовности и яв­ляются сигналами запроса на прерывание.

Режим обмена с прерываниями, по своей сути, является режимом асинхронного управления. Для того чтобы не потерять связь с устройством (после того как процессор выдал очередную команду по управлению обменом данными и пере­ключился на выполнение других программ), может быть запущен отсчет времени, в течение которого устройство обязательно должно выполнить команду и выдать сигнал запроса на прерывание. Максимальный интервал времени, в течение которого устройство ввода/вывода или его контроллер должны выдать сигнал запроса на прерывание, часто называют установкой тайм-аута. Если это время истекло после выдачи устройству очередной команды, а устройство так и не от­ветило, то делается вывод о том, что связь с устройством потеряна и управлять им больше нет возможности. Пользователь и/или задача получают соответст­вующее диагностическое сообщение.

Драйверы, работающие в режиме прерываний, представляют собой сложный комп­лекс программных модулей и могут иметь несколько секций: секцию запуска, одну или несколько секций продолжения и секцию завершения.

Секция запуска инициирует операцию ввода/вывода. Эта секция запускается для включения устройства ввода/вывода либо просто для инициации очередной операции ввода/вывода.

Секция продолжения (их может быть несколько, если алгоритм управления об­меном данными сложный и требуется несколько прерываний для выполнения одной логической операции) осуществляет основную работу по передаче данных. Секция продолжения, собственно говоря, и является основным обработчи­ком прерывания. Используемый интерфейс может потребовать для управления вводом/выводом несколько последовательностей управляющих команд, а сигнал прерывания у устройства, как правило, только один. Поэтому после выполнения очередной секции прерывания супервизор прерываний при следующем сигнале готовности должен передать управление другой секции. Это делается за счет изменения адреса обработки прерывания после выполнения очередной секции, если же имеется только одна секция прерываний, то она сама передает управле­ние тому или иному модулю обработки.

Секция завершения обычно выключает устройство ввода/вывода либо просто за­вершает операцию.


Управление операциями ввода/вывода в режиме прерываний требует больших усилий со стороны системных программистов – такие программы создавать слож­нее, чем те, что работают в режиме опроса готовности. Примером тому может служить ситуация с драйверами, обеспечивающими печать. Так, в ОС Windows (и Windows 9x, и Windows NT) драйвер печати через параллельный порт работа­ет не в режиме с прерываниями, как это сделано в других ОС, а в режиме опроса готовности, что приводит к 100%-й загрузке центрального процессора на все вре­мя печати. При этом, естественно, выполняются и другие задачи, запущенные на исполнение, но исключительно за счет того, что ОС Windows реализует вытес­няющую мультизадачность и время от времени прерывает процесс управления печатью и передает центральный процессор остальным задачам.

Многие устройства не допускают совместного использования. Пре­жде всего, это устройства с последовательным доступом. Такие устройства могут стать закрепленными, то есть быть предоставленными некоторому вычислитель­ному процессу на все время жизни этого процесса. Однако это приводит к тому, что вычислительные процессы часто не могут выполняться параллельно – они ожидают освобождения устройств ввода/вывода.

Для организации использова­ния многими параллельно выполняющимися задачами устройств ввода/вывода, которые не могут быть разделяемыми, вводится понятие виртуальных устройств. Использование принципа виртуализации позволяет повысить эффективность вы­числительной системы. Например, несколько приложений должны выводить на печать результаты своей работы, можно каждому вычислительному процессу предоставлять не реальный, а виртуальный принтер и поток выводимых симво­лов (или управляющих кодов для их печати) сначала направлять в специальный файл на магнитном диске, называемый спул-файлом. Затем, по окончании виртуальной печати, в соответствии с принятой дисциплиной обслуживания и приоритетами приложений вы­водить содержимое спул-файла на принтер. Системный процесс, который управ­ляет спул-файлом, называется спулером (spool-reader или spool-writer).

2.3. Основные системные таблицы ввода/вывода

Каждая ОС имеет свои таблицы ввода/вывода, их состав (количество и назначе­ние каждой таблицы) может сильно отличаться. В некоторых ОС вместо таблиц создаются списки, хотя использование статических структур данных для органи­зации ввода/вывода, как правило, приводит к большему быстродействию.

Исходя из принципа управления вводом/выводом через супервизор ОС и учи­тывая, что драйверы устройств ввода/вывода используют механизм прерываний для установления обратной связи центральной части с внешними устройствами, можно сделать вывод о необходимости создания по крайней мере трех систем­ных таблиц.

Первая таблица (или список) содержит информацию обо всех устройствах вво­да/вывода, подключенных к вычислительной системе. Назовем ее условно таб­лицей оборудования (equipment table), а каждый элемент этой таблицы пусть на­зывается UCB (unit control block, блок управления устройством ввода/вывода). Каждый элемент UCB таблицы оборудования, как правило, содержит следую­щую информацию об устройстве:

• тип устройства, его конкретная модель, символическое имя и характеристики устройства;

• как это устройство подключено (через какой интерфейс, к какому разъему, какие порты и линия запроса прерывания используются и т. д.);

• номер и адрес канала (и подканала), если такие используются для управле­ния устройством;

• указание на драйвер, который должен управлять этим устройством, адрес секции запуска и секции продолжения драйвера;

• информация о том, используется или нет буферирование при обмене данны­ми с этим устройством, «имя» (или просто адрес) буфера, если такой выделя­ется из системной области памяти;

• уставка тайм-аута и ячейки для счетчика тайм-аута;

• поле указателя для связи задач, ожидающих устройство, и, возможно, еще много других сведений.

Вторая таблица предназначена для реализации еще одного принципа виртуа­лизации устройств ввода/вывода – независимости от устройства. Желательно, чтобы программист не был озабочен учетом конкретных параметров (и/или воз­можностей) того или иного устройства ввода/вывода, которое установлено (или не установлено) в компьютер. Для него должны быть важны только самые об­щие возможности, характерные для данного класса устройств ввода/вывода, ко­торыми он желает воспользоваться. Например, принтер должен уметь выводить (печатать) символы или графическое изображение. А накопитель на магнитных дисках – считывать или записывать по указанному адресу порцию данных. При этом для программиста так­же не должно иметь значения, каким образом то или иное устройство подключе­но к вычислительной системе, а не только какая конкретная модель устройства используется. Поэтому в запросе на ввод/вывод программист указывает именно логическое имя устройства. Действительное устройство, которое сопоставляется виртуальному (логическому), выбирается супервизором с помощью таблицы, которую условно можно назвать таблицей описания виртуальных логических устройств (DRT, device reference table). Назначение этой второй таблицы – установление связи между виртуальными (логическими) устройствами и реальными устройст­вами, описанными посредством первой таблицы оборудования. Во мно­гих многопользовательских системах такая таблица не одна, а несколько: одна общая и по одной – на каждого пользователя, что позволяет строить необходи­мые связи между логическими (символьными) именами устройств и реальными физическими устройствами, которые имеются в системе.

Третья таблица необходима для организации обратной связи между центральной частью и устройствами ввода/вывода. Это таблица прерываний, ко­торая указывает для каждого сигнала запроса на прерывание тот элемент UCB, который сопоставлен данному устройству, подключенному так, что оно исполь­зует настоящую линию (сигнал) прерывания.

В современных сложных ОС имеется гораздо больше системных таблиц или списков, используемых для организации процессами управления операциями ввода/вывода.

Взаимосвязи между описанными таблицами изображены на рис. 2.2.

Рис. 2.2. Взаимосвязь системных таблиц ввода/вывода

Рассмотрим процесс управления вводом/выводом (рис. 2.3).

Запрос на операцию ввода/вывода от выполняющейся программы поступает на супервизор (действие 1). Тот проверяет системный вызов на соответствие при­нятым спецификациям и в случае ошибки возвращает задаче соответствующее сообщение (действие 1-1). Если же запрос корректен, то он перенаправляется в супервизор ввода/вывода (действие 2). Последний по логическому (виртуаль­ному) имени с помощью таблицы DRT находит соответствующий элемент UCB в таблице оборудования (действие 2’). Если устройство уже занято, то описатель задачи, за­прос которой сейчас обрабатывается супервизором ввода/вывода, помещается в список задач, ожидающих настоящее устройство. Если же устройство свобод­но, то супервизор ввода/вывода определяет из UCB тип устройства и при необ­ходимости запускает препроцессор, позволяющий получить последовательность управляющих кодов и данных, которую сможет правильно понять и отработать устройство (действие 3). Когда «программа» управления операцией ввода/вывода будет готова, супервизор ввода/вывода передаст управление соответствующему драйверу на секцию запуска (действие 4). Драйвер инициализирует операцию управления, обнуляет счетчик тайм-аута и возвращает управление супервизору (диспетчеру задач) с тем, чтобы он поставил на процессор готовую к исполне­нию задачу (действие 5). Система работает своим чередом, но когда устройство ввода/вывода отработает посланную ему команду, оно выставляет сигнал запро­са на прерывания, по которому через таблицу прерываний управление передает­ся на секцию продолжения (действие 6). Получив новую команду, устройство вновь начинает ее обрабатывать, а управление процессором опять передается диспетчеру задач, и процессор продолжает полезную работу. Таким образом, по­лучается параллельная обработка задач, на фоне которой процессор осуществля­ет управление операциями ввода/вывода.

Очевидно, что если имеются специальные аппаратные средства для управления вводом/выводом, снимающие эту работу с центрального процессора (речь идет о каналах прямого доступа к памяти), то в функции центрального процессора будут по-прежнему входить все только что рассмотренные шаги, за исключением последнего – непосредственного управления операциями ввода/вывода. В слу­чае использования каналов прямого доступа к памяти последние исполняют со­ответствующие канальные программы и разгружают центральный процессор, из­бавляя его от непосредственного управления обменом данными между памятью и внешними устройствами.

2.4. Синхронный и асинхронный ввод/вывод

Задача, выдавшая запрос на операцию ввода/вывода, переводится супервизором в состояние ожидания завершения заказанной операции. Когда супервизор по­лучает от секции завершения сообщение о том, что операция завершилась, он переводит задачу в состояние готовности к выполнению, и она продолжает свою работу. Эта ситуация соответствует синхронному вводу/выводу. Синхронный ввод/вывод является стандартным для большинства ОС. Чтобы увеличить ско­рость выполнения приложений, было предложено при необходимости использо­вать асинхронный ввод/вывод.

Простейшим вариантом асинхронного вывода является так называемый буфери­рованный вывод данных на внешнее устройство, при котором данные из при­ложения передаются не непосредственно на устройство ввода/вывода, а в спе­циальный системный буфер. В этом случае логически операция вывода для приложения считается выполненной сразу же, и задача может не ожидать окон­чания действительного процесса передачи данных на устройство. Процессом реального вывода данных из системного буфера занимается супервизор ввода/вывода. Естественно, что выделением буфера из системной области памяти за­нимается специальный системный процесс по указанию супервизора ввода/вы­вода. Итак, для рассмотренного случая вывод будет асинхронным, если, во-пер­вых, в запросе на ввод/вывод было указано на необходимость буферирования данных, а во-вторых, если устройство ввода/вывода допускает такие асинхрон­ные операции и это отмечено в UCB.

Можно организовать и асинхронный ввод данных. Однако для этого необходи­мо не только выделить область памяти для временного хранения считываемых с устройства данных и связать выделенный буфер с задачей, заказавшей опера­цию, но и сам запрос на операцию ввода/вывода разбить на две части (на два за­проса). В первом запросе указывается операция на считывание данных, подобно тому, как это делается при синхронном вводе/выводе. Однако тип (код) запроса используется другой, и в запросе указывается еще по крайней мере один допол­нительный параметр – имя (код) того системного объекта, которое получает за­дача в ответ на запрос и которое идентифицирует выделенный буфер. Получив имя буфера, задача продолжает свою работу. Здесь очень важно подчерк­нуть, что в результате запроса на асинхронный ввод данных задача не переводится супервизором ввода/вывода в состояние ожидания завершения операции ввода/вывода, а остается в состоянии выполнения или в состоянии готовности к вы­полнению. Через некоторое время, выполнив необходимый код, который был оп­ределен программистом, задача выдает второй запрос на завершение операции ввода/вывода. В этом втором запросе к тому же устройству, который, естествен­но, имеет другой код (или имя запроса), задача указывает имя системного объек­та (буфера для асинхронного ввода данных) и в случае успешного завершения операции считывания данных тут же получает их из системного буфера. Если же данные еще не успели до конца переписаться с внешнего устройства в систем­ный буфер, супервизор ввода/вывода переводит задачу в состояние ожидания завершения операции ввода/вывода, и далее все напоминает обычный синхрон­ный ввод данных. Обычно асинхронный ввод/вывод предоставляется в большинстве мультипрограммных ОС.

2.5. Кэширование операций ввода/вывода при работе с накопителями на магнитных дисках

Средняя скорость работы процессора с оперативной памятью на 2-3 порядка выше, чем средняя скорость передачи данных из внешней памяти на магнитных дисках в оперативную память. Для того чтобы сгладить такое сильное несоответствие в производительности основных подсистем, используется буферирование и/или кэширование данных.

Буфер – память для промежуточного хранения данных.

Простейшим вариантом ускорения дисковых операций чтения данных можно считать использование двойного буферирования. Его суть заключается в том, что пока в один буфер заносятся данные с магнитного диска, из второго буфера ранее считанные данные могут быть прочитаны и переданы запросившей их за­даче. Аналогичный процесс происходит и при записи данных. Буферирование используется во всех операционных системах, но помимо буферирования приме­няется и кэширование. Кэширование исключительно полезно в том случае, когда программа неоднократно читает с диска одни и те же данные. После того как они один раз будут помещены в кэш, обращений к диску больше не потребуется и скорость работы программы значительно возрастет.

Под кэшем можно понимать буферную память, предназначенную для промежуточного хранения наиболее часто используемых процессором данных. Если мы считываем какое-то множество секторов, содержащих записи того или иного файла, то эти данные, пройдя через кэш, там остаются (до тех пор, пока другие секторы не заменят эти буферы). Если впоследствии потребуется повторное чтение, то данные могут быть извлечены непосредственно из опера­тивной памяти без фактического обращения к диску. Ускорить можно и опера­ции записи: данные помещаются в кэш, и для запросившей эту операцию задачи можно считать, что они уже фактически записаны. Задача может продолжить свое выполнение, а системные внешние процессы через некоторое время запи­шут данные на диск. Это называется операцией отложенной записи (lazy write, «ленивая запись»). Если отложенная запись отключена, только одна задача мо­жет записывать на диск свои данные. Остальные приложения должны ждать своей очереди. Это ожидание подвергает информацию риску не меньшему (если не большему), чем отложенная запись, которая к тому же и более эффективна по скорости работы с диском.

Количество буферов, составляющих кэш, ограничено, поэтому возникает ситуация, когда вновь прочитанные или записываемые новые секторы данных должны будут заменить данные в этих буферах. Возможно использова­ние различных дисциплин, в соответствии с которыми будет назначен какой-ли­бо буфер под вновь затребованную операцию кэширования.

Кэширование дисковых операций может быть улучшено за счет введения техники упреждающего чтения (read ahead). Она основана на чтении с диска гораздо большего количества данных, чем на самом деле запросила операционная система или приложение. Когда некоторой программе требуется счи­тать с диска только один сектор, программа кэширования читает еще и несколько дополнительных блоков данных. А операции последовательного чтения несколь­ких секторов фактически незначительно замедляют операцию чтения затребо­ванного сектора с данными. Поэтому, если программа вновь обратится к диску, вероятность того, что нужные ей данные уже находятся в кэше, достаточно высо­ка. Поскольку передача данных из одной области памяти в другую происходит во много раз быстрее, чем чтение их с диска, кэширование существенно сокраща­ет время выполнения операций с файлами.

В мультипрограммных ОС при выполнении многих задач запросы на чтение и запись данных могут идти таким потоком, что при их обслуживании образуется очередь. Если выполнять эти запросы в поряд­ке поступления их в очередь, то вследствие случайного характера обращений к тому или иному сектору магнитного диска мы можем иметь значительные поте­ри времени на поиск данных. ОС может переупорядочивать запросы с целью минимизации затрат времени на поиск данных. Перечислим известные дисциплины, в соответствии с которыми можно пере­страивать очередь запросов на операции чтения/записи данных:

1. SSTF (shortest seek time – first) – с наименьшим временем поиска – первым. В соответствии с этой дисциплиной при позиционировании магнитных голо­вок следующим выбирается запрос, для которого необходимо минимальное перемещение с цилиндра на цилиндр, даже если этот запрос не был первым в очереди на ввод/вывод. Однако для этой дисциплины характерна резкая дис­криминация определенных запросов, а ведь они могут идти от высокоприори­тетных задач. Обращения к диску проявляют тенденцию концентрироваться, в результате чего запросы на обращение к самым внешним и самым внутрен­ним дорожкам могут обслуживаться существенно дольше и нет никакой гаран­тии обслуживания. Достоинством такой дисциплины является максимально возможная пропускная способность дисковой подсистемы.

2. Scan (сканирование). По этой дисциплине головки перемещаются то в одном, то в другом «привилегированном» направлении, обслуживая «по пути» под­ходящие запросы. Если при перемещении головок чтения/записи более нет попутных запросов, то движение начинается в обратном направлении.

3. Next-Step Scan – отличается от предыдущей дисциплины тем, что на каждом проходе обслуживаются только запросы, которые уже существовали на мо­мент начала прохода. Новые запросы, появляющиеся в процессе перемеще­ния головок чтения/записи, формируют новую очередь запросов, причем та­ким образом, чтобы их можно было оптимально обслужить на обратном ходу.

4. C-Scan (циклическое сканирование). По этой дисциплине головки перемеща­ются циклически с самой наружной дорожки к внутренним, по пути обслу­живая имеющиеся запросы, после чего вновь переносятся к наружным ци­линдрам. Эту дисциплину иногда реализуют таким образом, чтобы запросы, поступающие во время текущего прямого хода головок, обслуживались не по­путно, а при следующем ходе, что позволяет исключить дискриминацию за­просов к самым крайним цилиндрам; она характеризуется очень малой дис­персией времени ожидания обслуживания. Эту дисциплину обслуживания часто называют «элеваторной».

Управление файлами

Дата добавления: 2020-11-18 ; просмотров: 1502 | Нарушение авторских прав

3. Распределение оперативной памяти в ms-dos

MS-DOS – это однопрограммная операционная система. В ней можно организовать запуск резидентных задач, но в целом она предназначена только для выполнения одного вычислительного процесса. Поэтому распределение памяти в ней построено по простой схеме (рис. 6).

В состав операционной систем MS-DOS входят следующие основные компоненты:

модуль расширения BIOS – файл io.sys;

основной базовый модуль обработки прерываний DOS – файл msdos.sys. Этот файл реализует работу файловой системы DOS;

командный процессор (интерпретатор команд) – файл command.com;

утилиты и драйверы, расширяющие возможности системы;

п рограмма загрузкиMS-DOS – загрузочная запись (boot record).

Рис. 6 Распределение оперативной памяти в ОС MS DOS

Распределение памяти в ОС MS-DOS начинается с первых 640 Кбайт. Однако полный объем памяти, используемый системой для работы, может быть расширен до 1 Мбайта с помощью драйвера himem.sys. Для этого необходимо в файл конфигурации операционной системы config.sys добавить строку: device=_путь_\himem.sys. Для разрешения размещения части кода ядра DOS и заданий пользователя в области памяти свыше 640 Кб необходимо в config.sys добавить строку: dos=high,umb. Для загрузки драйверов и резидентных прогарам в верхнюю память компьютера используется драйвер верхней памяти emm386.exe. А для указания конкретных программ, которые должны размещаться в этой области перед заданием пути к их размещению необходимо дописать devicehigh и lh в файле autoexec.bat. Для контроля за правильность загрузки оперативной памяти в MS DOS используется программа mem.ехе. Просмотреть загрузку оперативной памяти можно также из окна файлового менеджера (например, vc.com) нажав сочетание клавиш: Alt+F5.

4. Распределение оперативной памяти в Windows nt

В операционных системах Windows NT тоже используется плоская модель па­мяти. Заметим, что Windows NT 4.0 Server практически не отличается от Win­dows NT 4.0 Workstation; разница лишь в наличии у сервера некоторых дополни­тельных служб, дополнительных утилит для управления доменом и несколько иных значений в настройках системного реестра. Однако схема распределения возможного виртуального адресного пространства в системах Windows NT рази­тельно отличается от модели памяти Windows 95/98. Прежде всего, в отличие от Windows 95/98 в гораздо большей степени используется ряд серьезных аппарат­ных средств защиты, имеющихся в микропроцессорах, а также применено прин­ципиально другое логическое распределение адресного пространства (рис. 7).

Прикладные программы обращаются к DLL, которые перенаправляют обращение к системе

Этот системный код находится в своем собственном адресном пространстве и недоступен вызывающим его процессам

Рис. 7 Распределение памяти в ОС Windows NT

Во-первых, все системные программные модули находятся в своих собственных виртуальных адресных пространствах, и доступ к ним со стороны прикладных программ невозможен. Ядро системы и несколько драйверов работают в нулевом кольце защиты в отдельном адресном пространстве.

Во-вторых, остальные программные модули самой операционной системы, ко­торые выступают как серверные процессы по отношению к прикладным про­граммам (клиентам), функционируют также в своем собственном системном виртуальном адресном пространстве, невидимом для прикладных процессов.

Прикладным программам выделяется 2 Гбайт локального (собственного) линей­ного (неструктурированного) адресного пространства от границы 640 Кбайт до 2 Гбайт (первые 640 Кбайт полностью недоступны). Прикладные программы изо­лированы друг от друга, хотя могут общаться через буфер обмена (clipboard), ме­ханизмы DDE (механизм динамического обмена данными) и OLE (механизм связи и внедрения объектов).

В верхней части каждой 2-гигабайтной области прикладной программы разме­щен код системных DLL кольца 3, который выполняет перенаправление вызовов в совершенно изолированное адресное пространство, где содержится уже собст­венно системный код. Этот системный код, выступающий как сервер-процесс (server process), проверяет значения параметров, исполняет запрошенную функ­цию и пересылает результаты назад в адресное пространство прикладной про­граммы. Хотя сервер-процесс сам по себе остается процессом прикладного уровня, он полностью защищен от вызывающей его прикладной программы и изолиро­ван от нее.

Между отметками 2 и 4 Гбайт расположены низкоуровневые системные компо­ненты Windows NT кольца 0, в том числе ядро, планировщик потоков и диспетчер виртуальной памяти. Системные страницы в этой области наделены привиле­гиями супервизора, которые задаются физическими схемами кольцевой защиты процессора. Это делает низкоуровневый системный код невидимым и недоступ­ным для записи для программ прикладного уровня, но приводит к падению про­изводительности во время переходов между кольцами.

Для 16-разрядных прикладных Windows-программ ОС Windows NT реализует сеансы Windows on Windows (WOW). В отличие от Windows 95/98 ОС Win­dows NT дает возможность выполнять 16-разрядные программы Windows инди­видуально в собственных пространствах памяти или совместно в разделяемом адресном пространстве. Почти во всех случаях 16-и 32-разрядные прикладные программы Windows могут свободно взаимодействовать, используя OLE, неза­висимо от того, выполняются они в отдельной или общей памяти. Собственные прикладные программы и сеансы WOW выполняются в режиме вытесняющей многозадачности, основанной на управлении отдельными потоками. Множест­венные 16-разрядные прикладные программы Windows в одном сеансе WOW выполняются в соответствии с кооперативной моделью многозадачности. Win­dows NT может также выполнять в многозадачном режиме несколько сеансов DOS. Поскольку Windows NT имеет полностью 32-разрядную архитектуру, не существует теоретических ограничений на ресурсы GDI (интерфейс графических устройств) и USER.

При запуске приложения создается процесс со своей информационной структу­рой. В рамках процесса запускается задача. При необходимости этот тред (задача) может запустить множество других тредов (задач), которые будут выполняться параллельно в рамках одного процесса. Очевидно, что множество запущенных процессов также выполняются параллельно и каждый из процессов может пред­ставлять из себя мультизадачное приложение. Задачи (треды) в рамках одного процесса выполняются в едином виртуальном адресном пространстве, а процес­сы выполняются в различных виртуальных адресных пространствах. Отображе­ние различных виртуальных адресных пространств исполняющихся процессов на физическую память реализует сама ОС; именно корректное выполнение этой задачи гарантирует изоляцию приложений от невмешательства процессов. Для обеспечения взаимодействия между выполняющимися приложениями и между приложениями и кодом самой операционной системы используются соответст­вующие механизмы защиты памяти, поддерживаемые аппаратурой микропро­цессора.

Процессами выделения памяти, ее резервирования, освобождения и подкачки управляет диспетчер виртуальной памяти Windows NT (Windows NT virtual memory manager, VMM). В своей работе этот компонент реализует сложную стратегию учета требований к коду и данным процесса для минимизации досту­па к диску, поскольку реализация виртуальной памяти часто приводит к боль­шому количеству дисковых операций.

Каждая виртуальная страница памяти, отображаемая на физическую страницу, переносится в так называемый страничный фрейм (page frame). Прежде чем код или данные можно будет переместить с диска в память, диспетчер виртуальной памяти (модуль VMM) должен найти или создать свободный страничный фрейм или фрейм, заполненный нулями. Заметим, что заполнение страниц нулями пред­ставляет собой одно из требований стандарта на системы безопасности уровня С2 , принятого правительством США. Страничные фреймы должны заполняться нулями для того, чтобы исключить возможность использования их предыдущего содержимого другими процессами. Чтобы фрейм можно было освободить, необ­ходимо скопировать на диск изменения в его странице данных, и только после этого фрейм можно будет повторно использовать. Программы, как правило, не меняют страницы кода. Страницы кода, в которые программы не внесли измене­ний, можно удалить.

Диспетчер виртуальной памяти может быстро и относительно легко удовлетво­рить программные прерывания типа «ошибка страницы» (page fault). Что каса­ется аппаратных прерываний типа «ошибка страницы», то они приводят к подкачке (paging), которая снижает производительность системы. Мы уже говорили о том, что в Windows NT, к большому сожалению, выбрана дисциплина FIFO для замещения страниц, а не более эффективные дисциплины LRU и LFU.

Когда процесс использует код или данные, находящиеся в физической памяти, система резервирует место для этой страницы в файле подкачки Pagefile.sys на диске. Это делается с расчетом на тот случай, что данные потребуется выгрузить на диск. Файл Pagefile.sys представляет собой зарезервированный блок дисково­го пространства, который используется для выгрузки страниц, помеченных как «грязные», при необходимости освобождения физической памяти. Заметим, что этот файл может быть как непрерывным, так и фрагментированным; он может быть расположен на системном диске либо на любом другом и даже на несколь­ких дисках. Размер этого страничного файла ограничивает объем данных, кото­рые могут храниться во внешней памяти при использовании механизмов вирту­альной памяти.

Вся виртуальная память в Windows NT подразделяется на классы: зарезервиро­ванную (reserved), выделенную (committed) и доступную (available).

Зарезервированная память представляет собой набор непрерывных адресов, которые диспетчер виртуальной памяти (VMM) выделяет для процесса, но не учитывает в общей квоте памяти процесса до тех пор, пока она не будет фактически использована. Когда процессу требуется выполнить запись в па­мять, ему выделяется нужный объем из зарезервированной памяти. Если про­цессу потребуется больший объем памяти, то дополнительная память может быть одновременно зарезервирована и использована, если в системе имеется доступная память

Память выделена, если диспетчер VMM резервирует для нее место в файле Pagefile.sys на тот случай, когда потребуется выгрузить содержимое памяти на диск. Объем выделенной памяти процесса характеризует фактически по­требляемый им объем памяти. Выделенная память ограничивается размером файла подкачки. Предельный объем выделенной памяти в системе (commit limit) определяется тем, какой объем памяти можно выделить процессам без увеличения размеров файла подкачки. Если в системе имеется достаточный объем дискового пространства, то файл подкачки может быть увеличен и тем самым будет расширен предельный объем выделенной памяти.

Вся память, которая не является ни выделенной, ни зарезервированной, явля­ется доступной. К доступной относится свободная память, обнуленная память (освобожденная и заполненная нулями), а также память, находящаяся в списке ожидания (standby list), которая была удалена из рабочего набора процесса, но может быть затребована вновь.

Илон Маск рекомендует:  Потоки в visual basic
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL