Память

                        1. Краткий обзор памяти

    Микропроцессор лучше всего работает с 16-битовыми числами,  которые
могут принимать значения,  не  превышающие  65536  или  64К.  Поскольку
компьютер  использует  числовые  адреса для отыскания своего пути через
память,  предполагается,  что память не может содержать более 64К байт.
Как показал опыт, 64К байт слишком мало для серьезных применений компь-
ютера; многие из наших компьютеров оборудованы памятью, емкость которой
в десять раз больше - 640К. Поэтому возникает вопрос: как выполнять ра-
боту,  испольуя такую большую память и продолжая  применять  16-битовые
числа ля доступа к ней?
     Решение, которое было реализовано фирмой Intel в семействе микроп-
роцессоров  8086 заключается в применении так называемых сегментирован-
ных адресов.  Сегментированные адреса составляются из  двух  16-битовых
слов,  объединяемых  таким способом,  чтобы они могли определять адреса
1048576 (или приблизительно миллион) байтов  памяти.  Для  того,  чтобы
посмотреть,  как это делается, нужно рассмотреть следующее: арифметику,
которая используется при объединении двух слов сегментированного  адре-
са,  и  способ обработки этих сегментированных адресов внутри микропро-
цессора.
     Арифметика включает так называемое "сложение со сдвигом",  которое
позволяет создавать 20-битовое двоичное число (которое может  принимать
значения до 1048578) из двух 16-битовых чисел.  Предположим,  что у нас
имеется два 16-битовых слова,  которые имеют шестнадцатеричные значения
ABCD и 1234.  Напомним,  что каждая шестнадцатеричая цифра представляет
четыре бита,  поэтому четыре шестадцатеричные  цифры  (ABCD  или  1234)
представляют 16 битов.  Возьмем одно из этих двух чисел, скажем ABCD, и
добавим 0 к его концу:  ABCD0.  Фактически это означает сдвиг числа  на
одну шестнадцатеричную позицию (или на четыре двоичные позиции) или ум-
ножение значения числа на шестнадцать.  Теперь число  состоит  из  пяти
шестнадцатеричных  цифр (или 20 битов) и принадлежит миллионному диапа-
зону.  Однако,  к сожалению,  оно не может быть использовано в качестве
полного 20-битового адреса памяти,  поскольку в конце этого числа стоит
0:  это число может представлять только адреса,  оканчивающиеся  на  0,
т.е. только каждый шестнадцатый байт.
     Для того,  чтобы завершить описание схемы сегментированной адреса-
ции,  мы возьмем другое 16-битовое число (1234 в нашем примере) и доба-
вим его к сдвинутому числу:

                                ABCD0
                              +  1234
                               -------
                                ACF04

     Когда мы объединяем два 16-битовых слова таким способом,  мы полу-
чаем 20-битовое число,  которое может принимать любое значение от 0  до
1048577.  И  это та арифметическая схема,  которая обеспечивает способ-
ность PC работать с миллионом байтов памяти,  используя 16-битовые чис-
ла.
     Две части этой схемы адресации называются частью сегмента и частью
смещения. В нашем примере ABCD есть значение сегмента, а 1234 есть зна-
чение смещения.  Часть сегмента определяет адрес  памяти,  кратный  16,
т.е.  адрес,  в последней позиции которого имеется шестнадцатеричный 0.
Адреса памяти,  которые кратны 16,  называются границами параграфов или
параграфами сегментов.
     Часть смещения сегментированного адреса определяет некоторое  точ-
ное  местоположение байта,  следующее за местоположением параграфа сег-
мента.  Поскольку 16-битовое слово смещения может варьироваться от 0 до

                                     - 2 -
65535  (или 64К),  то часть смещения сегментированного адреса позволяет
нам работать с 64К байтами памяти,  используя один и тот же адрес  сег-
мента.
     Представим стандартный способ записи сегментированных адресов, ко-
торый  вы  часто  будете встречать при изучении технических материалов,
относящихся к PC.  Сегментированный адрес обычно записывается в следую-
щем виде:  ABCD:1234.  Первым указывается адрес сегмента, затем следует
двоеточие и адрес смещения.  Если вы работаете с языком ассемблера  или
используете программу DEBUG,  то такую запись вы будете встречать очень
часто.  Если вы взглянете на листинг программы DEBUG,  представленный в
разделе  "Таблица  векторов  прерываний",  то вы увидите такую запись в
правом столбце.
     Почти всегда,  когда  мы  говорим  об адресах внутри памяти нашего
компьютера,  мы обращаемся к ним в их сегментированной форме. Но иногда
нам нужно взглянуть на них в их конечной форме, когда две части сегмен-
тированного адреса объединены;  когда это требуется сделать, я буду на-
зывать соответствующие адреса абсолютными адресами,  чтобы не возникало
путаницы. В нашем примере объединения частей ABCD и 1234 результирующим
абсолютным адресом является ACF04.
     Часть сегмента сегментированного адреса  полностью  обрабатывается
набором из четырех специальных регистров сегментов,  Каждый из этих че-
тырех регистров предназначен для локализации  параграфа  сегмента.  Ре-
гистр сегмента кода CS указывает,  где находится код программы. Регистр
сегмента данных DS определяет местоположение основных данных программы.
Регистр  дополнительного  сегмента  ES дополняет сегмент данных DS так,
что данные можно сдвигать между двумя отдельными частями памяти. И, на-
конец, регистр сегмента стека SS предоставляет информацию о базовом ад-
ресе стека компьютера.  Детальная адресация осуществляется  посредством
обработки адреса смещения. В то время как часть сегмента сегментирован-
ного адреса может использоваться только когда она загружается в один из
этих  четырех  регистров,  адреса смещения могут использоваться намного
более гибко.  Наши программы могут получать смещения адресов из различ-
ных регистров (таких как универсальные регистры AX,  BX и т.д.  или ин-
дексные регистры SI и DI). Смещения могут также указываться в фактичес-
ких командах программы на машинном языке,  либо вычисляться посредством
объединения содержимого регистров и команд машинного языка.  Существует
большая гибкость в способе обработки адресов смещений.
     Когда программа выполняется в компьютере,  она  должна  отыскивать
свой путь как среди частей программы,  так и среди соответствующих дан-
ных.  По упрощенной терминологии,  каждая программа использует  регистр
сегмента  кода CS для определения местоположения частей программы и ре-
гистр сегмента данных DS для обнаружения данных.  Во  время  выполнения
программы  эти регистры можно трактовать как фиксированные или изменяе-
мые.  Если какой-либо из них фиксируется (т.е. не изменяется программой
во  время ее выполнения),  то соответствующая компонента (код программы
или данные) не может использовать более 64К памяти,  адресуемой  данным
единственным значением сегмента.  Однако,  если какой-либо из регистров
может динамически изменяться во время работы программы,  то  для  соот-
ветствующей  компоненты такое ограничение на ее размер снимается.  Если
фиксируются оба регистра,  то мы имеем модель малой памяти, которая ог-
раничивает  программу  объемом в 64К для кода и в 64К для данных;  если
могут изменяться оба регистра,  то мы имеем большую модель, без ограни-
чений.  Между этими моделями имеются еще две модели:  когда один из ре-
гистров фиксируется, а другой может меняться.
     Преимущества наличия  возможностей  изменения  регистров сегментов
(нет ограничений в 64К) очевидны;  плата за эти преимущества  не  столь
очевидна,  однако, она вполне реальна. Когда программа осмеливается ма-
нипулировать регистрами сегментов,  требуется дополнительная работа  по
загрузке  (что замедляет функционирование) и дополнительная степень уп-

                                     - 3 -
равления памятью (что может усложнить  логику  программы).  Между  ско-
ростью, размером и простотой, с одной стороны, необходим компромисс.

                 2.Младшие адреса памяти

     Часть памяти нашего компьютера с самыми младшими адресами отводит-
ся для некоторых важных применений, которые определяют функционирование
компьютера. В специальном применении младшей области памяти можно выде-
лить три области.
     Первая - эта таблица векторов прерываний,  которая определяет мес-
тоположение подпрограмм обработки прерывания. Первые 1024 байтов памяти
специально отводятся для таблиц векторов прерываний,  предусматривается
место для 256 различных прерываний - несколько больше,  чем обычно  ис-
пользуется.  Эти таблицы занимают область памяти с абсолютными адресами
от 0 до 400 (шестнадцатеричное). (Более детально вы можете ознакомиться
с этим в разделе "Таблица векторов прерываний".)
     Вторая область используется в качестве рабочего места для подпрог-
рамм  ROM-BIOS.  Поскольку  ROM-BIOS  управляет  основной деятельностью
компьютера и составляющих его компонент,  то для хранения его собствен-
ных записей требуется определенная область памяти. Такой областью явля-
ется область данных ROM-BIOS, одна из наиболее интересных частей компь-
ютерной памяти. Среди всего того многого, что хранится в области данных
ROM-BIOS,  имеется буфер, в котором хранится информация о клавишах, на-
жатых  до того,  как наши программы готовы принять такую информацию,  а
также информация об объеме имеющейся памяти в  компьютере  и  индикатор
режима  использования  экрана,  речь о котором пойдет в следующей главе
(если вы внимательно рассмотрите программу ALL-CHAR в приложении А,  то
вы обнаружите подпрограмму,  проверяющую и использующую режим вывода на
экран).
     Для области данных ROM-BIOS устанавливается отдельная область раз-
мером в 256 байтов и с адресами от 400 до 500.
     Третьей частью  специальной области младших адресов в памяти явля-
ется рабочая область ДОС и Бейсика, которая находится между абсолютными
адресами 500 и 600. Эта область используется совместно ДОС и Бейсиком в
качестве рабочей области,  аналогично рабочей области ROM-BIOS, которая
предшествует ей.
     Ключевой рабочей областью памяти является та  часть,  которая  ис-
пользуется  для программ и соответствующих данных:  эта область состоит
из первых десяти блоков (0-9).  Эту область часто называют областью па-
мяти пользователя для того, чтобы отличать ее от остальной части адрес-
ного пространства.  Когда мы говорим об объеме имеющейся в  PC  памяти,
фактически речь идет об объеме памяти пользователя,  которая устанавли-
вается в этой области.  Теоретически память  пользователя  может  иметь
размеры от 16К (четвертая часть первого блока в 64К) до 640К, когда ус-
тановлены все десять блоков памяти.  Независимо от объема установленной
памяти,  она образует один непрерывный кусок,  начиная с блока 0 и про-
должаясь до конца установленной памяти.
     Фактически имеется несколько различных видов памяти (более подроб-
но об этом мы узнаем ниже)  и  тот  вид  памяти,  который  определяется
здесь,  является  обычной памятью с произвольным доступом (произвольной
выборкой), которая используется для выполнения чтения и записи и, кото-
рую называют также ЗУПВ (запоминающеее устройство с произвольной выбор-
кой).  Память ЗУПВ отличает следующее:  во-первых, данные, хранящиеся в
этой  памяти могут проверяться (сличаться) и изменяться (записываться),
а,  во-вторых, эта память непостоянна, что означает, что данные, храня-
щиеся в ней, сохраняются только на время работы компьютера.
     Эта память предназначена для хранения наших программ и данных, по-
ка компьютер обрабатывает их. Объем установленной памяти ЗУПВ во многом
определяет размер и диапазон  проблем,  которые  могут  разрешать  наши

                                     - 4 -
компьютеры.

     Блок 0   1-ый   64К    Обычная память пользователя  до  64К
     Блок 1   2-ой   64К    Обычная память пользователя  до 128К
     Блок 2   3-ий   64К    Обычная память пользователя  до 192К
     Блок 3   4-ый   64К    Обычная память пользователя  до 256К
     Блок 4   5-ый   64К    Обычная память пользователя  до 320К
     Блок 5   6-ой   64К    Обычная память пользователя  до 384К
     Блок 6   7-ой   64К    Обычная память пользователя  до 448К
     Блок 7   8-ой   64К    Обычная память пользователя  до 512К
     Блок 8   9-ый   64К    Обычная память пользователя  до 576К
     Блок 9  10-ый   64К    Обычная память пользователя  до 640К
     Блок A  11-ый   64К    Расширение памяти для видео
     Блок B  12-ый   64К    Стандартная память для видео
     Блок C  13-ый   64К    Расширение ПЗУ (XT,EGA,3270 PC)
     Блок F  16-ый   64К    Система ROM-BIOS и ROM-BASIC

     Рис. Блоки памяти PC

     Базисная конструкция семейства PC  отдельно  устанавливает  только
десять  из  шестнадцати блоков в адресном пространстве для этой главной
рабочей области памяти. Это более 60% от общего объема. Сегодня эта об-
ласть объмом в 640К кажется слишком малой для проблем, которые нам нуж-
но решать на наших PC,  однако,  для того времени, когда разрабатывался
PC, этот объем казался огромным. В то время обычные персональные компь-
ютеры ограничивались памятью объемом 64 или 128К и PC с памятью в  640К
считался необычным. (Эта та ошибка, которая повторяется вновь и вновь в
истории компьютеризации: недооценка потребностей в росте и расширении).
     Можно слегка  расширить  область  памяти  пользователя  емкостью в
640К,  вторгнувшись в некоторые из следующих за ней системных областей,
но это не очень разумно,  ибо блоки памяти, располагающиеся за областью
пользователя,  резервируются для специальных применений (о которых речь
пойдет ниже).
     Отнюдь не каждый отдельный бит области памяти пользователя  досту-
пен  для  использования нашими программами.  Часть этой области памяти,
начинающаяся с адреса памяти 0,  специально устанавливается для ведения
записей,  которые должен иметь компьютер. Об этом упоминалось в разделе
"Младшие адреса памяти",  более детальная техническая информация об од-
ной  из частей этой области приводится в разделе "Таблица векторов пре-
рываний".  Однако,  за исключением этой небольшой (и интересной) части,
весь  раздел  в  640К  специально предназначен для использования нашими
программами, поэтому не стоит уделять ему много внимания. С другой сто-
роны,  остальные блоки памяти,  некоторые их использования представляют
для нас несомненный интерес.

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

     В то время как обычные члены семейства PC,  использующие микропро-
цессор  8088,  ограничиваются  адресацией лишь одного мегабайта памяти,
ветвь AT семейства,  которая использует микропроцессор 286, может рабо-
тать с памятью большего объема.
     Как упоминалось при рассмотрении микропроцессора 286 (в конце гла-
вы 6),  компьютеры, базирующиеся на микропроцессоре 286, могут иметь до
16 Мегабайт памяти. Интересно отметить, что точно такой лимит на память
применялся  в течение многих лет к огромным многомиллионным универсаль-
ным компьютерам фирмы IBM.  Забавно,  что огромные универсальные машины
фирмы IBM имели память, емкость которой не превышала емкость памяти на-
ших маленьких микропроцессоров.
     Помимо способности  вмещать огромные объемы реальной рабочей памя-

                                     - 5 -
ти,  микропроцессор 286 может также работать с огромными объемамми вир-
туальной памяти, ловкой имитацией большего объема памяти, чем имеется в
наличии.  (См.  раздел "Как действует виртуальная память"). Виртуальная
память  модели  AT  может  предоставляться в объеме до одного гигобайта
(1024 Мегабайтов) для каждой программы, которая выполняется в компьюте-
ре.
     Для того,  чтобы извлечь все преимущества от использования  расши-
ренной памяти или виртуальной памяти модели AT, необходимо наличие опе-
рационной системы (и программ сопровождения), которая обладала бы соот-
ветствующими возможностями. Поскольку основная операционная система для
семейства PC,  ДОС,  разрабатывалась без учета применения расширенной и
виртуальной памяти,  потенциал соответствующих возможностей будет оста-
ваться раскрытым не полностью,  пока не появятся  операционная  система
нового поколения и прикладное программное обеспечение,  разработанные с
учетом особенностей моделей AT.
     Несмотря на все это,  программы могут, в определенной степени, ис-
пользовать возможности расширенной памяти AT.  Стандартным способом для
программ  является использование для этих целей обслуживающих программ,
включенных в ROM-BIOS. Одна из таких обслуживающих программ осуществля-
ет  передачу блоков данных (любого нужного нам размера) между специаль-
ной расширенной памятью и обычной памятью.  Программа может также  осу-
ществлять  переключение микропроцессора 286 с реального режима (в кото-
ром он действует как обычный микропроцессор 8088) на защищенный  режим.
Однако,  для  успешного  манипулирования защищенным режимом,  программа
должна быть более усложненной.  Если все,  что требуется для программ -
это  получить выгоды от использования расширенной памяти,  то она может
просто воспользоваться обслуживающей программой передачи данных в памя-
ти,  содержащейся в BIOS, и избежать всех сложностей, связанных с рабо-
той в защищенном режиме.
              ________ ________ ________ ________    ДЕЙСТВИТЕЛЬНЫЕ
             |        |        |        |        |   ОБЛАСТИ ПАМЯТИ,
             |________|________|________|________|   в которых нахо-
                 |            \               \      дятся части вир-
Виртуальная      |             \               \     туальной памяти
память программ  |              \               \
пользователя     |               \               \
 ______          |                \               \
|      |         |                 \               \
|______|         |                  \               \
  |             _|______            _\____        ___\__ ВИРТУАЛЬНАЯ
  |    ________|        |__________|      |______|      |____
  |-->|        |________|          |______|      |______|    |
      |________|        |__________|      |______|      |____|ПАМЯТЬ
          \                |                /            /
            \              |              /            /
              \            |            /            /
                \          |          /            /
                 \         |         /            /
                  \        |        /            /
                   \       |       /            /
                    \      |      /            /
                     \     |     /            /
                 ____________________________
                |                            |
                |  ДИСК, на котором хранятся |
                |  части виртуальной памяти  |
                |____________________________|
                            Рис. Виртуальная память

                                     - 6 -

1-реальная память; 2-хранение активных частей виртуальной памяти;
3-программа использует виртуальную память; 4-виртуальная память;
5-диск; 6-хранение частей виртуальной памяти


                  4. Виртуальная память

     Виртуальная память представляет собой хитроумную операцию, которая
включает определенную,  тщательно организованную кооперацию между  мик-
ропроцессором,  программой поддержки виртуальной памяти и диском компь-
ютера. По существу, виртуальная память действует следующим образом.
     Когда программа устанавливается на выполнение в компьютере, опера-
ционная система создает "пространство виртуальной памяти",  которое яв-
ляется моделью памяти и адресов памяти, которые программа имеет в своем
расположении.  Затем часть "реальной" или фактической физической памяти
компьютера передается в виртуальную память,  что является ядром концеп-
ции виртуальной памяти. Используя средство, которое является неотъемле-
мой частью микропроцессора 286,  программа поддержки виртуальной памяти
операционной системы сообщает микропроцессору 286 о том,  что  реальной
памяти, выделяемой программе, следует назначить некоторый другой адрес,
которым будет пользоваться программа. Средство "распределения памяти" в
микропроцессоре  286  делает так,  что реальная память вроде имеет иной
рабочий адрес, отличный от истинного, реального адреса.
     Программа начинает  работать  в  некотором  (большом) пространстве
виртуальной памяти, отображаемом в часть реальной памяти (более меньше-
го объема) компьютера. Пока программа работает только в этой части сво-
ей виртуальной памяти все идет хорошо.  Программа фактически использует
адреса памяти,  отличные от тех,  которые определяются в программе,  но
это не имеет значения. Что происходит, когда программа пытается исполь-
зовать несколько больше виртуальной памяти,  чем было выделено реальной
памяти (которая имеет меньший объем,  чем виртуальная память)?  В  этом
случае таблица отображения микропроцессора обнаруживает,  что программа
пытается использовать адрес,  который не существует в  текущий  момент;
микропроцессор  генерирует  так назывыаемое прерывание из-за отсутствия
страницы.
     Когда происходит прерывание из-за отсутствия страницы (означающее,
что программа пытается использовать виртуальный адрес,  который  факти-
чески не отображается в реальной памяти), вступает в действие специаль-
ная программа поддержки виртуальной памяти. Она временно помещает прог-
рамму в состояние блокировки,  пока занимается этим кризисом. Программа
поддержки выбирает определнную часть виртуальной памяти,  которая в те-
кущий момент находится в реальной памяти и, временно помещает ее содер-
жимое на диск;  это называется откачкой.  Эта часть реальной памяти за-
действуется в качестве понадобившейся части виртуальной памяти.
     Когда откачанная часть памяти требуется вновь,  она  подкачивается
обратным копированием с диска.
     Как видите,  диск компьютера используется в  качестве  склада  для
хранения  частей виртуальной памяти,  которые не используются в текущий
момент.
     В зависимости  от хода вычислительного процесса,  функционирование
виртуальной памяти может протекать очень гладко,  либо оно может  вклю-
чать  столько  операций  откачки и подкачки,  что на ожидание перекачки
данных между памятью и диском будет  тратится  слишком  много  времени.
Когда это происходит, то такая ситуация называется "пробуксовкой": ког-

                                     - 7 -
да система виртуальной памяти начинает  пробуксовывать,  производитель-
ность компьютера резко падает.
     Практическое функционирование  системы  виртуальной  памяти  может
включать очень чувствительное уравновешивающее действие,  известное как
настройка системы.  Наши микрокомпьютеры могут извлекать пользу от уме-
ренного  и взвешенного использования виртуальной памяти,  но,  вместе с
тем,  они слишком малы и слишком медлительны для  того,  чтобы  извлечь
максимальную выгоду от применения этой мощной концепции.


      5. Группы блоков памяти и увеличенная память
     ----------------------------------------------

     Переключение блоков  позволяет  компьютеру фактически иметь больше
памяти,  чем это обеспечивается одномегабайтным адресным  пространством
микропроцессора.  Практически память находится в компьютере, однако, за
ней жестко не закрепляется какое-либо  место  в  адресном  пространстве
микропроцессора.  Вместо этого память как бы пребывает в забвении,  без
адреса,  являясь недоступной для наших программ,  пока не происходит ее
включение.
     Платы для этого специального вида  памяти  с  переключением  групп
блоков позволяют,  когда угодно, включать или выключать адресацию памя-
ти.  Например, плата такой памяти может содержать восемь "блоков" памя-
ти, каждый из которых имеет объем 64К (всего 512К). Всем этим блокам по
64К соответствует один адресный блок (64К) в компьютерной памяти. В лю-
бой  момент активным может быть лишь один из восьми блоков,  когда дос-
тупны данные из этого блока, другие блоки будут блокированы.
     Преимущество переключения блоков состоит в том,  что оно позволяет
подключать к компьютеру больше памяти, памяти, которая может стать дос-
тупной  в любой момент.  Все,что требуется сделать для включения блока,
это послать в плату памяти соответствующую команду, сообщающую об изме-
нении адресации блоков.  Переключение занимает столько времени, сколько
требуется для выполнения соответствующей команды - без  какой-либо  за-
держки.
     Вместе с тем, имеются сложности, связанные с использованием памяти
с переключением групп блоков. В отличие от обычной компьютерной памяти,
память с переключением групп блоков требует активного управления, обес-
печивающего доступность нужных участков памяти в соответствующие момен-
ты времени.  Потребность в этом управлении - и стандартный  способ  его
осуществления  -  сдерживала применение переключения блоков до тех пор,
пока  гигант  по  производству  программного  обеспечения,  фирма  "Ло-
тос"(Lotus),  и кудесник в области производства кристаллов микропроцес-
соров, фирма "Интел", не объединились для определения стандартного спо-
соба  работы  с  памятью с переключением групп блоков.  Официально этот
подход к переключению блоков называется "Спецификация расширенной памя-
ти  Лотос/Интел/Микрософт",  однако,  многие  обращаются к ней по имени
специальной платы памяти, разработанной фирмой "Интел" в соответствии с
этой спецификацией: "Верхняя плата" ("Above Board").
     Поясним, как действует  увеличенная  память.  Ее  функционирование
обеспечивается  тремя  компонентами:  одна - аппаратная (плата памяти с
переключением групп блоков) и  две  программные  (программа  управления
увеличенной памятью, ЕММ и прикладная программа, которая использует па-
мять).  Плата памяти с переключением групп блоков (которой  может  быть
"Верхняя  плата" фирмы "Интел" или иная аналогичная плата памяти) обес-
печивает что-то между 64К байтами и 8М байтами  памяти,  подразделяемой
на небольшие страницы по 16К,  которые могут переадресовываться индиви-
дуально посредством переключения блоков.
     Программа управления  увеличенной памятью (ЕММ) активизируется при
первом запуске компьютера и она закладывает фундамент  функционирования

                                     - 8 -
увеличенной памяти. Ключевой частью задачи, возлагаемой на эту програм-
му,  является отыскание неиспользуемой области в памяти PC, которая мо-
жет  использоваться  для отображения в нее памяти с переключением групп
блоков.  Для этой программы требуется полная рабочая область памяти ем-
костью в 64К,  называемая страничным блоком, причем эта рабочая область
может располагаться в любом месте.  На общей схеме распределения памяти
можно легко увидеть,  что блоки D и E памяти являются достойными канди-
датами для этой цели,  однако, ЕММ может помещать страничный блок также
в блок C.  Точное местоположение не имеет значения,  если оно не мешает
какому-либо иному использованию  адресного  пространства.  Кроме  того,
страничный блок не должен размещаться на границе блоков памяти.  Напри-
мер, страничный блок может начинаться с адреса сегмента C400 и занимать
оставшуюся часть блока C и первые 16К блока D.
     Когда программа ЕММ определит, где будет располагаться ее странич-
ный блок (64К),  она делит этот блок на четыре окна по 16К. После этого
ЕММ готова к действию,  готова к поддержке любой прикладной  программы,
которая  знает,  как ее использовать при перекачке данных памяти в окна
по 16К (и из этих окон).
     Для использования увеличенной памяти, прикладная программа сообща-
ет программе ЕММ о том, что она нуждается в применении одного или более
из четырех доступных окон.  Прикладная программа может попросить супер-
визор ЕММ о выделении ей страниц памяти,  а затем сделать эти  страницы
доступными посредством переключения их на область окон.  Когда приклад-
ной программе нужно работать с различными страницами (по  16К)  данных,
она  посылает в ЕММ запрос на соответствующее переключение страниц.

 ____________________________________________________________________
|                                                                    |
|                                                                    |
|        _______________________________________                     |
|       |                                       |                    |
|       |      -------       -------            |                    |
|       |      |     |       |     |            |  РАСШИРЕННАЯ       |
|       |      |     |       |     |            |     ПАМЯТЬ         |
|       |      -------       -------            |                    |
|       |         |   -------   |   -------     |                    |
|       |         |   |     |   |   |     |     |                    |
|       |         |   |     |   |   |     |     |                    |
|       |         |   -------   |   -------     |                    |
|       |         |      |      |      |        |                    |
|       |_______________________________________|                    |
|                 |      |      |      |                             |
|                 |      |      |      |                             |
|                 |      |      |      |                             |
|                \|/    \|/    \|/    \|/                            |
|    ------------------------------------------------------          |
|   |          |      |     |       |     |                |ОСНОВНАЯ |
|   |          |      |     |       |     |                | ПАМЯТЬ  |
|    ------------------------------------------------------          |
|   0    640К   \___________ ____________/                           |
|                           V                                        |
|                                                                    |
|                          ОКНА                                      |
|____________________________________________________________________|


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

     Хотя эта схема очень мощная и весьма быстрая,  она имеет некоторые

                                     - 9 -
очевидные недостатки.  Один из них состоит в том, что она может исполь-
зоваться только для программных данных, но не для кода самой программы.
ДОС  все равно должна отыскивать достаточно места в области обычной па-
мяти для хранения больших программ,  однако, когда эти программы выпол-
няются в обычной памяти,  они могут извлекать пользу от применения уве-
личенной памяти, работая с большим объемом данных, чем можно разместить
в обычной памяти.  Другим очевидным недостатком является то,  что прог-
рамма, использующая увеличенную память, должна знать, как работать сов-
местно  с  програмой ЕММ и как удобно работать с данными,  разбитыми на
страницы по 16К.  Вместе с тем, следует отметить, что в рамках этих ог-
раничений  схема  увеличенной памяти может существенно улучшить возмож-
ности нашего компьютера в части обработки больших объемов данных.
     Эта схема  увеличенной  памяти  может  быть  добавлена  к  любому
обычному  члену семейства PC, включая ветвь AT семейства. Помимо того,
что модели AT могут обладать собственной  расширенной  памятью,  объем
которой  превышает  одномегабайтный  предел PC, они могут использовать
также  увеличенную   память   в   рамках   обычного   одномегабайтного
пространства.

                Карта рапределения памяти DOS

      0000:0000   Таблица векторов перываний.
      0040:0000   Глобалъные переменные BIOS.
      0050:0000   Глобалъные переменные DOS.
      XXXX:0000   IBMBIO.COM - частъ DOS, обеспечивающая
                  взаимодействие с BIOS.
      XXXX:0000   IBMDOS.COM - программы обработки
                  прерываний DOS (включая INT 21).
     Буфера и управляющие таблицы DOS и загружемые драйверы.
      XXXX:0000   Резидентная частъ COMMAND.COM -
                  программы обработки прерываний
                  22 (завершение), 23 (Ctrl-Break),
                  24 (фаталъная ошибка обмена) и
                  программа подзагрузки нерезидентной части.
      XXXX:0000   Нерезидентная команда или программа -
                  (из файла .COM или .EXE)
      XXXX:0000   Стек программы (для .COM)
      XXXX:0000   Нерезидентная частъ COMMAND.COM -
                  интерпретатор команд,
                  нерезидентные команды DOS,
                  интерпретатор командных файлов,
                  загрузчик.

[ Назад | Оглавление | Далее ]


Сайт создан в системе uCoz
Сайт создан в системе uCoz