Что такое оперативная память

Обновлено: 21.11.2024

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

Почему так важна компьютерная память (ОЗУ)?

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

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

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

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

Что такое скорость и задержка ОЗУ?

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

Что делает ОЗУ (память)?

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

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

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

Что использует оперативную память?

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

Нужно ли вам обновить оперативную память?

Являетесь ли вы геймером, дизайнером или просто хотите ускорить свой персональный компьютер, увеличение объема оперативной памяти — это простой и легкий способ повысить производительность вашей системы. Чтобы определить правильный тип памяти для вашего компьютера, используйте Crucial® Advisor™ или System Scanner. Эти инструменты помогут вам определить, какие модули памяти совместимы с вашим компьютером, а также выбрать параметры, соответствующие вашим требованиям к скорости и бюджету.

© Micron Technology, Inc., 2017. Все права защищены. Информация, продукты и/или технические характеристики могут быть изменены без предварительного уведомления. Ни Crucial, ни Micron Technology, Inc. не несут ответственности за упущения или ошибки в типографике или фотографии. Micron, логотип Micron, Crucial и логотип Crucial являются товарными знаками или зарегистрированными товарными знаками Micron Technology, Inc.Все прочие товарные знаки и знаки обслуживания являются собственностью соответствующих владельцев.

В современных операционных системах для управления памятью достаточно установить достаточное количество оперативной памяти. Вот и все. ОС определяет, как ее использовать, и обычно вам вообще не нужно об этом беспокоиться. В DOS доступ к оборудованию и памяти тесно связан со стандартами, определенными архитектурой x86. В DOS память разделена на разные регионы и существует несколько стандартов доступа к памяти, таких как EMS и XMS. Чтобы эффективно использовать доступную оперативную память в DOS, вы должны знать, как архитектура x86 разделяет оперативную память, для чего нужны эти разные области. Также полезно знать наиболее распространенные драйверы управления памятью. Оптимизация вашей системы для получения достаточного количества свободной памяти для ваших программ называется управлением памятью.

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

Содержание

Типы памяти

Обычная память

Обычная память или базовая память — это диапазон памяти от 0 до 640 КБ. Программы загружаются в этот диапазон памяти. Доступная свободная память может быть меньше, так как некоторым драйверам приходится оставлять часть своего кода в памяти для обработки, например. аппаратное обеспечение. Это называется Прекратить и остаться резидентом (TSR). По умолчанию такие драйвера помещаются в обычную память. О количестве свободной обычной памяти сообщает CHKDSK или MEM.

Верхняя память

Область верхней памяти

Область высокой памяти (HMA) — это 64 КБ непосредственно над 1 МБ и часть XMS. Для использования HMA необходимо загрузить HIMEM.SYS в config.sys. При указании строки DOS=HIGH в config.sys DOS запрашивается загрузка деталей в HMA. Сразу после того, как драйвер XMS загружен в config.sys с DEVICE=, а HMA все еще не занят, DOS переместит туда части кода. Если DOS=HIGH был указан, но загрузка в HMA не удалась, сообщается HMA недоступен/низкая загрузка DOS. Внешняя программа MEM сообщает, использует ли DOS HMA.

Расширенная память

Спецификация расширенной памяти (EMS) — это стандарт, разработанный Lotus, Intel и Microsoft. Расширенная память может быть либо памятью на плате расширения памяти, либо частью основной памяти. Спецификация описывает, что эта память может использоваться путем сопоставления большой части размером 64 КБ с верхней областью памяти между 640 КБ и 1 МБ. Область размером 64 КБ в верхней области памяти называется кадром страницы EMS. Последняя версия EMS 4.0 позволяла использовать в качестве расширенной памяти до 32 Мб. Наиболее часто используемый драйвер управления памятью, реализующий EMS, — это EMM386.EXE, который необходимо загрузить в config.sys в качестве второго драйвера после HIMEM.SYS. EMM386 эмулирует расширенную память, используя основную память за пределами верхней области памяти. Для этого он должен переключить ЦП в защищенный режим. Объем свободной основной памяти, превышающий 1 МБ, может быть разделен между EMS и XMS путем добавления параметра AUTO в EMM386.EXE. В случае, если EMS не требуется, эту функцию можно отключить с помощью параметра NOEMS. Это освобождает 64 КБ в верхней области памяти для загрузки TSR-программ.

EMS 3.0: макс. 4 Мб

EMS 3.2: макс. 8 Мб

EMS 4.0: макс. 32 МБ

Расширенная память

Спецификация расширенной памяти (XMS) описывает интерфейс приложения, который позволяет копировать память между обычной и расширенной памятью. Расширенная память — это вся основная память, превышающая 1 Мб. Наиболее распространенным драйвером управления памятью для этой функции является HIMEM.SYS, который необходимо загрузить в качестве первого драйвера в config.sys. Для доступа к памяти выше High Memory Area требуется переключение ЦП в защищенный режим, поэтому для HIMEM.SYS требуется как минимум ЦП 286.

XMS 2.0: макс. 64 МБ

XMS 3.0: макс. 4 ГБ

Дополнительные замечания

Несмотря на то, что UMB является дополнительной функцией XMS, HIMEM.SYS не поддерживает UMB. В чистом MS-DOS для этого требуется загрузить EMM386.EXE.

Инструкции DOS=HIGH и DOS=UMB в config.sys можно комбинировать, написав DOS=HIGH,UMB. Указание DOS=LOW может использоваться для предотвращения использования DOS HMA.

Shadow-RAM — это ОЗУ ниже зарезервированного UMA. В зависимости от набора микросхем эта оперативная память может быть снова отображена в определенных диапазонах памяти UMA. Обычное использование Shadow-RAM — это копирование ПЗУ BIOS в Shadow-RAM, указанное ниже, и последующее отображение ПЗУ. Поскольку код BIOS теперь выполняется из ОЗУ, а не из медленного ПЗУ, вызовы BIOS ускоряются. Эта функция обычно включается в BIOS (Shadow System BIOS и Shadow Video BIOS) или в качестве параметра диспетчера памяти. Также драйвер UMBPCI использует эту функцию для создания UMB через Shadow-RAM.

Архитектурные причины вынуждают резервировать память для передачи DMA карт ISA менее 1 МБ.Обычно он имеет размер 16 КБ и зарезервирован в UMA.

Управление памятью

Получение более традиционной памяти

Сложным аспектом управления памятью DOS может быть освобождение достаточного количества обычной памяти. Часто для игр требуется большой объем свободной обычной памяти, а иногда также бесплатная EMS или XMS. Для этого вы должны использовать менеджеры памяти, которые позволяют, например. включение UMB и установка API для доступа XMS и EMS. Доступность типов памяти зависит от ЦП и набора микросхем.

На процессорах 286 для включения UMB требуется поддержка специального набора микросхем. Достаточно хорошо поддерживается чипсет NEAT. Драйвер HIMEM.SYS берет на себя управление шлюзом A20, делает доступным HMA и устанавливает XMS API. Также можно эмулировать страничный фрейм EMS с помощью драйвера EMM286. Некоторые наборы микросхем имеют перемычки для установки назначения XMS и EMS основной памяти.

ЦП 386 и более поздних версий имеют расширение защищенного режима, называемое виртуальным режимом 8086, которое позволяет имитировать структуру памяти 8086 для приложений. В MS-DOS 5 был включен второй диспетчер памяти под названием EMM386.EXE, который использует расширенные функции процессоров 386. Он загружается после HIMEM.SYS и включает эмуляцию UMB и EMS. Это позволяет загружать TSR в UMB, освобождая обычную оперативную память. Соответствующий оператор загрузки в config.sys — DEVICEHIGH=, а в autoexec.bat — LOADHIGH, который можно сократить до LH. EMM386 переключает ЦП в режим Virtual 8086.

Как правило, менеджеры памяти должны быть загружены первыми. Как правило, TSR, занимающие больше памяти, должны загружаться перед небольшими TSR, чтобы предотвратить фрагментацию памяти. Некоторые драйверы требуют определенного порядка загрузки, например. SMARTDRV.EXE после MSCDEX.EXE, если CD-ROM должен быть прочитан в кэше. Некоторые TSR работают некорректно при загрузке в старшую память, что приводит к сбоям или неустойчивому поведению системы. Если вы заметили какую-либо нестабильность в вашей системе DOS, попробуйте переместить TSR обратно в обычную память, чтобы найти виновника. Вы можете искать альтернативные драйверы или, в худшем случае, менять оборудование. BIOS материнской платы, BIOS графической карты, а также дополнительные карты, такие как контроллеры запоминающих устройств или сетевые карты, используют область памяти от 640 КБ до 1 МБ, разделяя пространство с UMB. Особенно новые графические карты и материнские платы не предназначены для DOS и поставляются с большими BIOS (> 32 КБ). Это может значительно уменьшить доступные UMB. Классическая система DOS имеет от 128 КБ до 192 КБ свободных UMB для TSR. Для использования эмуляции EMS требуется область размером 64 КБ между 640 КБ и 1 МБ, где отображается кадр страницы виртуальной карты EMS. Если не требуется, эмуляцию EMS можно отключить, освобождая 64 КБ UMB.

Другой способ — использовать утилиту, которая изменяет файлы запуска таким образом, чтобы объем свободной обычной памяти был максимальным (например, MS-DOS Memmaker, QEMM Optimize). Обычно эти программы запускают несколько аналитических перезагрузок для сбора информации о драйверах и структуре памяти. В конце представлена ​​оптимизированная конфигурация. Глубина анализа и итоговое качество представленной новой загрузочной конфигурации программ различаются. (задание: развернуть)

Программное обеспечение

HIMEM.SYS: включает XMS (кроме UMB) с 286 до 15 Мб, с 386/486 до 1023 Мб

MS-DOS 5.0: 2,77, макс. 15 МБ XMS

MS-DOS 6.0 : 3.07, распознает макс. 4 ГБ, 1 023 МБ XMS.

MS-DOS 6.2 6.21 6.22 : 3.10, распознает макс. 4 ГБ, 1 023 МБ XMS.

EMM386.EXE: появился в MS-DOS 5.0, использует XMS для создания UMB в UMA, использует XMS для создания EMS

MEMMAKER.EXE: появилась в MS-DOS 6.0, утилита для оптимизации свободной обычной памяти


QEMM386: полный пакет драйверов и утилит управления памятью, последняя версия 9.0/QEMM97

Драйвер управления памятью QEMM386.SYS, реализующий XMS, EMS, UMA, VCPI и DPMI, расширенные функции включают поддержку до 256 МБ ОЗУ, QuickBoot, Stealth, динамическую загрузку драйверов из командной строки и специальную поддержку популярных драйверов, таких как DoubleSpace, Укладчик. Дополнительные утилиты включают

Оптимизировать мощный инструмент для оптимизации свободной обычной памяти

DOS-UP для перемещения DOS в верхнюю память

Проявить инструмент системной информации с акцентом на структуру памяти

QDPMI сервер DPMI 0.9

MagnaRAM — утилита сжатия памяти, заменяющая часть подсистемы виртуальной памяти Windows 3.1.


UMBPCI Верхний драйвер памяти, частичная замена EMM386.EXE. Использует Shadow-RAM вместо расширенной памяти для создания UMB. Функциональность зависит от набора микросхем, список поддерживаемых наборов микросхем см. на домашней странице UMBPCI. Также помните о проблемах с ISA-DMA, использующих метод Shadow-RAM, которые могут привести к повреждению данных, если они не будут правильно настроены. Этот драйвер оставляет ЦП в реальном режиме.

Меня-подростка всегда смущало управление памятью в MS-DOS. Но если оглянуться на пару десятилетий назад, на самом деле это не так сложно понять, как мне сначала показалось.

В отличие от моей обычной ретро-компьютерной деятельности, связанной с компьютерами Commodore, я снова обратил внимание на MS-DOS. У меня никогда не было ПК дома до эпохи Windows 95, но я много работал с MS-DOS во время школьных каникул. Мои воспоминания были связаны с нехваткой памяти, которую я не понимал, и забавными аббревиатурами, а также продолжающимся закатыванием глаз, потому что компьютеры Amiga делали все это намного лучше. Все это казалось таким излишне запутанным, по-настоящему ужасным дизайном, поверх которого были навалены еще очень ужасные вещи.

Однако, оглядываясь назад, да, это сложно, но, возможно, более понятно, чем я думал сначала. И, может быть, это не такой ужасный дизайн, но — по крайней мере, в первые дни — единственно возможный способ, которым это можно было сделать.

Первоначальный ПК — IBM 5150

20-битная адресная шина означает адресное пространство размером 1 МиБ. Все, что должно было быть отображено в памяти — основная оперативная память, видеопамять, ПЗУ и ввод-вывод с отображением памяти — все должно было поместиться в это пространство размером 1 МБ. ЦП 8088 предъявлял некоторые требования к этому адресному пространству — при загрузке он начинал выполнение кода ближе к концу адресного пространства, что для большинства практических целей означает, что системное ПЗУ должно находиться в конце, прямо напротив границы в 1 МБ.

IBM решила выделить две трети пространства под оперативную память — от нуля до границы 640 КБ. ПЗУ - ПЗУ BIOS и Cassette BASIC - находились на противоположном конце, заканчиваясь прямо на границе 1 МБ. Промежуточное значение было зарезервировано для устройств с отображением памяти. Наиболее очевидным примером является видеокарта, которой необходимо разместить часть ОЗУ в пространстве памяти.

Следует подчеркнуть, что в таком расположении нет ничего необычного — все компьютеры той эпохи имели ограниченное адресное пространство и должны были принимать решения о том, как его разделить. IBM также была абсолютно разумна в выборе границ. Да, они могли зарезервировать три четверти адресного пространства для ОЗУ вместо двух третей — это помогло бы в последующие годы, но даже это все еще было бы барьером в будущем. Также следует отметить, что IBM 5150 поставляется с 16 или 64 КБ памяти с возможностью расширения до 256 КБ — огромный запас для роста в то время!

Пространство до 640 КБ позже стало называться обычной памятью, а пространство между 640 КБ и 1 МиБ — областью верхней памяти или UMA. .

Вместе с IBM 5150 появилась IBM PC DOS, которая на самом деле была разработана Microsoft. В ранних версиях IBM PC DOS и MS-DOS практически идентичны. Разработчики программного обеспечения писали свой код для работы в IBM PC DOS или MS-DOS на 5150. Они и не подозревали, что среда, в которой они писали свой код, просуществует еще 20 лет — DOS и ее варианты не были полностью вытеснены потребителями до тех пор, пока выпуск Windows XP в 2001 г.

Нехватка памяти

Модуль 5150 может иметь всего 16 КБ ОЗУ и поддерживать до 64 КБ; его преемник 5160 («XT») поддерживал до 640 КиБ. Как отмечалось выше, это максимальный объем обычной памяти — после этого видеоадаптер использовал пространство памяти, и это нельзя было изменить без нарушения совместимости.

Обычная память была заполнена некоторыми структурами данных ЦП и BIOS, операционной системой (IBM PC DOS или MS-DOS) и драйверами устройств. Все, что осталось, было непрерывным пространством, которое могли использовать приложения. Новые версии DOS будут увеличиваться по мере добавления новых функций; добавление драйверов устройств еще больше уменьшило доступную для приложений память. Память заполняется «снизу» памяти (начиная с нулевой ячейки памяти) — данные оборудования, затем DOS, затем драйверы устройств, затем приложение, которое загружает пользователь, затем рабочая память, которая нужна приложению.

Обычно приложение закрывается, а потребляемая им память освобождается. Но у DOS была интересная функция под названием «завершить работу и остаться резидентной», или TSR. Вызов TSR завершит приложение, но не удалит его из памяти. Пользователь будет возвращен в DOS и сможет запустить другое приложение. Перед вызовом TSR приложение, вероятно, перехватит некоторые прерывания или каким-то образом вклинится в компьютер, чтобы оно все еще могло делать что-то полезное — например, реагировать на данные последовательного порта (скажем, от мыши) или на определенное нажатие клавиши, чтобы оно могло вернуться к жизни.

Здесь вы можете увидеть очевидную проблему: TSR использует часть памяти, которая больше не может использоваться никаким другим приложением. Начните загружать несколько TSR, и ваша нагрузка на 640 КБ обычной памяти возрастет.

Было ясно, что нужно больше памяти. Но как сделать так, чтобы это было совместимо с исходной архитектурой IBM 5150 и DOS?

Эпоха EMS — расширенная память

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

PC AT, Intel 80286 и XMS

Компьютер IBM PC AT, или модель 5170, оснащен процессором Intel 80286. Это был настоящий 16-битный ЦП с 24-битной адресной шиной, то есть он мог использовать до 16 МБ адресного пространства. Эта вновь доступная память за пределами 1 МиБ называется расширенной памятью.

К сожалению, у него есть недостаток. Расширенная память была доступна только тогда, когда ЦП находился в новом защищенном режиме. Когда ЦП работал в своем классическом реальном режиме, программы по-прежнему застревали на 1 МиБ адресного пространства. Преобразование программы из реального режима в защищенный было нетривиальной задачей — программы писались либо для одного режима, либо для другого. Таким образом, все существующие приложения MS-DOS использовали только обычную память, память объемом более 1 МиБ была невидимой, а доступной для использования была не более 640 КиБ.

Чтобы обойти это, была разработана Спецификация расширенной памяти или XMS. Это был программный API, который позволял программам реального режима использовать расширенную память. Для этого требовался диспетчер XMS, который в MS-DOS предоставлялся драйвером устройства HIMEM.SYS. Приложение может выделять блоки памяти за пределами 1 МБ. Он не мог получить доступ к этой памяти напрямую, но мог попросить менеджера XMS скопировать данные между расширенной памятью и обычной памятью. Диспетчер XMS переключал ЦП в защищенный режим, в котором он мог получить доступ ко всей памяти, копировал запрошенные данные, затем возвращал ЦП в реальный режим и возобновлял выполнение. Это дало программам MS-DOS доступ к гораздо большему объему памяти, но они могли использовать только ее часть за раз.

Область высокой памяти

Причуда процессоров Intel в реальном режиме привела к появлению странной лазейки, которая означала, что 80286 и более поздние версии, работающие в реальном режиме, могли получить доступ к очень небольшой области памяти — 65520 байт — сразу за границей 1 МБ. Эта крошечная область памяти называется высокой областью памяти или HMA. XMS-менеджер особым образом управляет этим участком ОЗУ, и MS-DOS может воспользоваться этим, переместив в эту область некоторые свои собственные структуры данных. Это освобождает небольшой объем обычной памяти.

Помогает ли это справиться с нагрузкой на обычную память? Ну, возможно. Да, это означало, что отдельные приложения могли использовать гораздо больше памяти, чем было доступно в обычном пространстве памяти, но за счет накладных расходов на программирование. Приложению по-прежнему приходилось хранить данные в обычной памяти и «выгружать» их. Но у нас все еще есть проблемы с TSR - они должны жить в обычной памяти (хотя они также могут использовать XMS). И по мере того, как наши компьютеры становятся все более сложными, им требуется больше драйверов устройств и больше TSR, например, для работы в качестве клиента в сети.

Обычная память по-прежнему остается узким местом. Что еще можно сделать?

Intel 80386, EMM386 и LOADHIGH

ЦП Intel следующего поколения, 80386, обладает дополнительными функциями. Он был 32-разрядным и поддерживал виртуальную память и подкачку через новый блок управления памятью (MMU). Хотя они были в основном интересны разработчикам современных операционных систем (таких как OS/2 и Windows NT), они также предлагали новый виртуальный режим 8086, который очень помог пользователям MS-DOS и реального режима. Использование виртуального режима 8086 переводило ЦП в режим, в котором вся память была доступна, а MMU работал, но код выполнялся в чем-то, похожем на реальный режим. Это дало возможность использовать больше памяти, сохраняя при этом крайне важную обратную совместимость.

Он был в основном предназначен для многозадачности. Такие ОС, как Concurrent DOS 386 от Digital Research, позволяли одновременно запускать несколько приложений DOS, каждое в своей собственной виртуальной среде 8086 со своими собственными 640 КБ обычной памяти. Microsoft Windows использовала его для открытия окон DOS — каждое окно DOS представляло собой виртуальную среду 8086.

Но DOS нашла применение виртуальному режиму 8086 в виде инструмента EMM386. Загруженный как драйвер устройства, он создал виртуальный режим 8086, который использовался не для многозадачности, а для использования MMU для предоставления столь необходимой дополнительной памяти.

Клоны DOS

Не было только MS-DOS. У IBM была PC-DOS, Digital Research создала DR-DOS (также известную как OpenDOS какое-то время), и есть более новая FreeDOS с открытым исходным кодом. Все они имели те же функции управления памятью, что и MS-DOS, но часто с другими параметрами конфигурации, а драйверы устройств имели разные имена. Например, HIMEM.SYS в DR-DOS называется HIDOS.SYS.

Мы довольно много говорили о 640 КБ обычной памяти, но вернитесь к началу статьи и вспомните, что существует также 384 КБ верхней памяти.До сих пор это было для нас недоступно — видеокарта занимает первую ее часть, ПЗУ BIOS — последнюю ее часть, а промежутки между ними зарезервированы для оборудования, которое необходимо отображать в память, например, для сетевых карт. Однако даже с парой аппаратных устройств в этой области остается достаточно места, которое можно было бы использовать приложениями реального режима.

EMM386 работал, включив MMU и используя его для сопоставления фрагментов расширенной памяти с верхней памятью. Приложение обычно не обращало бы внимания на тот факт, что оно было в виртуальном режиме 8086, а не в реальном режиме, но внезапно часть пространства в верхней памяти стала пригодной для использования ОЗУ. Приложения могут выполнять вызовы API в EMM386 и запрашивать верхнюю память. В отличие от XMS, не требовалось копирование данных — для приложения все это выглядело как память с ограничением в 1 МиБ, поэтому к нему можно было обращаться напрямую.

Обычно в верхней области памяти имеется значительное количество неиспользуемого пространства, которое может использовать EMM386. Биты верхней памяти используются для других целей - по крайней мере, видеокарта и ПЗУ системы BIOS будут занимать часть пространства, а сетевые карты и другое оборудование могут занимать больше - поэтому полезная память может быть разбросана. Непрерывный блок памяти в области старшей памяти, которой управляет EMM386, называется блоком верхней памяти или UMB. Почти всегда в типичной системе MS-DOS будет как минимум два UMB - один под видеопамятью и ПЗУ, а другой - между видео и системным ПЗУ BIOS. В зависимости от вашего оборудования, старшую память, возможно, придется разделить на большее количество UMB.

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

Это не самая простая вещь в использовании — во-первых, она будет фрагментирована, так как у вас почти всегда будет старшая память, фрагментированная на две или более UMB. Кроме того, многие TSR используют больше памяти во время инициализации, а затем освобождают часть этой памяти перед завершением работы и остаются резидентными. Это означает, что вам нужно учитывать две переменные: сколько памяти требуется резидентному TSR во время его инициализации и сколько ему нужно, когда он является резидентным. Тот факт, что резидентный TSR имеет размер 20 КиБ, не гарантирует, что вы сможете получить LOADHIGH для его запуска в UMB размером 20 КиБ, и он будет успешным. После того, как вы сказали LOADHIGH загрузить программу в UMB, если она использует функции распределения памяти DOS, она выйдет из той же UMB.

Поэтому вы сталкиваетесь с головоломкой — иногда упрощенный подход с префиксом LOADHIGH к каждому TSR работает (по умолчанию LOADHIGH выбирает UMD с наибольшим свободным пространством), но может быть не оптимальным. LOADHIGH поддерживает дополнительные параметры, которые дают больший контроль над тем, какие UMB доступны для приложения. Ручная оптимизация быстро становится очень сложной, но такие инструменты, как MEMMAKER, автоматизируют процесс обнаружения и оптимизации и помещают больше в верхнюю память.

Заключение

Ограничения по памяти существуют только в реальном режиме (или виртуальном режиме 8086). Если вы пишете программы, работающие в защищенном режиме, весь этот класс проблем исчезает, а если вы пишете для Windows или других многозадачных ОС, вы уже будете использовать защищенный режим.

Конечно, с учетом того, что «обратная совместимость» составляет такую ​​огромную часть мира, совместимого с ПК, вы не можете просто отказаться от программного обеспечения, работающего в реальном режиме на протяжении десяти или более лет, поэтому вам нужны решения.

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

Об авторе

Ричард Даунер — инженер-программист, ставший архитектором облачных решений. Он специализируется на AWS и живет в Шотландии. Интерес Ричарда к технологиям распространяется на ретро-вычисления и любительский взлом оборудования с помощью Raspberry Pi и FPGA.

В эпоху DOS одной из самых сложных и неприятных вещей было убедиться, что приложения и игры имеют правильную конфигурацию памяти. Проблема возникла из-за ограничений в исходной архитектуре IBM PC, где считалось, что ни один ПК никогда не потребует более 640 КБ ОЗУ!

Действительно, процессоры Intel 8088 и 8086 могли физически получить доступ только к 1 МБ памяти через свои 20 адресных линий. С появлением ЦП 80286 можно было адресовать до 16 МБ, но для сохранения полной обратной совместимости с исходным IBM PC выделение памяти по-прежнему ограничивалось первыми 640 КБ — это обозначалось как Обычная память или Базовая память.

Верхняя память

В исходной архитектуре IBM PC область памяти от 640 КБ до 1 МБ называлась Верхняя память. Предполагалось, что она будет зарезервирована для комбинации видеопамяти, видеопамяти BIOS, опции ПЗУ для определенных устройств и Cassette BASIC. На самом деле большая часть этой области верхней памяти (UMA) объемом 384 КБ не использовалась.

Начиная с MS-DOS 5.0, выпущенной в июне 1991 г., драйверы устройств и TSR можно было загружать в неиспользуемые места в пределах 384 КБ UMA посредством загрузки EMM386.EXE (драйвер устройства, который открывал доступ к UMA). Это помогло сохранить обычную память свободной для запуска программ. Эти местоположения назывались блоками верхней памяти (UMB).

Расширенная память и верхняя область памяти

Вся память объемом более 1 МБ обычно называлась расширенной памятью. В нем небольшая область размером 64 КБ чуть выше отметки 1 МБ называется High Memory Area (HMA).

Опять же, начиная с MS-DOS 5.0, был предоставлен новый драйвер устройства под названием HIMEM.SYS, который позволял загружать части операционной системы в HMA. Это означало, что до 46 КБ обычной памяти можно было освободить для программ вместо хранения части операционной системы.

В системах на базе 80286 и выше для доступа к этой расширенной памяти необходимо перевести ЦП в так называемый "защищенный" режим. Режим по умолчанию при запуске для процессоров 286 и выше назывался «Реальный» режим, который по сути был таким же, как единственный режим, в котором могли работать процессоры 8088 и 8086.

Расширенная память

В связи с тем, что никакое программное обеспечение DOS, на 100% совместимое с IBM PC, не могло поддерживать защищенный режим 286, была возможность создать какой-либо другой механизм для обеспечения доступа к памяти выше 1 МБ.

Решение заключалось в том, чтобы иметь возможность перемещать «окно» доступной памяти по расширенному пространству памяти, что называется переключением банков. Путем выгрузки фрагментов области расширенной памяти (все, что превышает 1 МБ) в область UMA размером 64 КБ можно было получить доступ ко всему объему расширенной памяти, только по одному фрагменту за раз. Этот метод доступа к большему объему памяти развивался и в конечном итоге стал стандартом, известным как LIM EMS (Спецификация расширенной памяти Lotus/Intel/Microsoft), названным в честь консорциума компаний, которые работали над спецификацией и ратифицировали ее.

Именно в этот момент расширенная память получила ярлык XMS, а расширенная память получила ярлык EMS помочь отличить одно от другого. Оба получают доступ к памяти выше отметки 1 МБ, но делают это по-разному.

Чтобы использовать EMS, DOS 4.01 (выпущенная в 1989 г.) поставлялась в комплекте с расширенным менеджером памяти под названием EMM386.SYS. В 1991 году была выпущена более гибкая версия под названием EMM386.EXE с DOS 5.0. EMM386 использовал режим, присутствующий в процессорах 80386 и более поздних версий: режим «Виртуальный 8086».

Читайте также: