3 лаб (акс). Лабораторная работа 3. Организация памяти в компьютерах типа ibm pc
Скачать 89 Kb.
|
Лабораторная работа №3 . Организация памяти в компьютерах типа IBM PC Цель pаботы: Ознакомиться с распределением адресного пространства памяти. Исследовать обмен данными процессора с памятью. Порядок выполнения работы : Повторить теоретический материал. Распределение адресного пространства памяти Все адресное пространство памяти компьютера разделяется на несколько областей, что связано, в первую очередь, с необходимостью обеспечения совместимости с первыми компьютерами семейства. В компьютере IBM PC XT на процессоре i8088 процессор мог адресовать 1 Мбайт памяти (20 адресных разрядов). Но все программные и аппаратные средства строились исходя из предположения, что доступное адресное пространство — только младшие 640 Кбайт (тогда это казалось вполне достаточным). Данная область памяти получила название стандартной памяти (Conventional memory). Именно в пределах этих 640 Кбайт (адреса 0…9FFFF) работает операционная система MS DOS и все ее прикладные программы. Первые 1024 байта (адреса 0…3FF) хранят таблицу векторов прерывания (Interrupt Vectors) объемом 256 двойных слов, формируемую на этапе начальной загрузки. Однако если процессор работает в защищенном режиме, таблица векторов может располагаться в любом другом месте памяти. Адреса 400…4FF отводятся под область переменных BIOS (BIOS Data Area). Подробнее о BIOS будет рассказано в следующем разделе. Адреса 500…9FFFF включают в себя область операционной системы DOS (DOS Area) и память пользователя (User RAM). Оставшиеся от 1 Мбайта памяти 384 Кбайта (адреса A0000…FFFFF), зарезервированные под другие системные нужды, называются UMA (Upper Memory Area) — область верхней памяти или UMB (Upper Memory Blocks) — блоки верхней памяти или High DOS Memory. Пространство видеопамяти (адреса A0000…BFFFF) содержит области для хранения текстовой и графической информации видеоадаптера. Пространство памяти с адресами E0000…FFFFF отведено под системную постоянную память компьютера ROM BIOS. В этой же области выделено окно размером в 64 Кбайта (page frame) с адресами D0000…DFFFF, через которое программы могли получать доступ к дополнительной (отображаемой) памяти (Expanded memory) объемом до 32 Мбайт, оставаясь в пределах того же 1 Мбайта адресуемой памяти. Это достигается путем поочередного отображения четырех страниц по 16 Кбайт из дополнительной памяти в выделенное окно. При этом положение страниц в дополнительной памяти можно изменять программным путем. Понятно, что работать с дополнительной памятью менее удобно, чем с основной, так как в каждый момент компьютер «видит» только окно в 64 Кбайт. Поэтому сейчас она применяется довольно редко. В настоящее время область памяти с адресами C0000…DFFFF чаще используется для оперативной и постоянной памяти , входящей в состав различных адаптеров и плат расширения компьютера. В результате логическая организация адресного пространства в пределах 1 Мбайт получилась довольно сложной ( рис.1). И такую же организацию должны поддерживать все персональные компьютеры семейства IBM PC для обеспечения совместимости с предшествующими моделями. Рис. 1. Распределение адресного пространства памяти. При дальнейшем расширении адресуемого пространства памяти в последующих моделях компьютеров вся память объемом свыше 1 Мбайт получила название расширенной памяти (Extended memory). Для доступа к ней микропроцессор должен переходить из реального режима в защищенный и обратно. Общий объем памяти персонального компьютера (верхняя граница расширенной памяти) может доходить до 16 Мбайт (24 разряда адреса) или до 4 Гбайт (32 разряда адреса). Особого упоминания заслуживает так называемая теневая память (Shadow RAM), представляющая собой часть оперативной памяти , в которую при запуске компьютера переписывается содержание постоянной памяти , и заменяющая эту постоянную память на время работы компьютера. Необходимость данной процедуры вызвана тем, что даже сравнительно медленная динамическая оперативная память оказывается все-таки быстрее, чем постоянная память . Постоянная память часто заметно сдерживает быстродействие компьютера. Поэтому было предложено выделять часть оперативной памяти для исполнения обязанностей как системной постоянной памяти ROM BIOS, так и постоянной памяти , входящей в состав дополнительных адаптеров, которые подключаются к компьютеру. Переписывание информации обычно предусмотрено в программе начального пуска. В связи с особенностями работы динамической памяти для сокращения времени доступа к ней применяются специальные режимы работы оперативной памяти : режим расслоения (интерливинг) и страничный режим. Использование режима интерливинга предполагает не совсем обычное разбиение памяти на банки (части). Если при обычном разбиении ( последовательной адресации) адреса следующего банка начинаются после окончания адресов предыдущего, то при интерливинге адреса банков чередуются. То есть, например, после первого адреса первого банка следует первый адрес второго банка, затем второй адрес первого банка и второй адрес второго банка и т.д. Получается, что в одном банке четные слова, а в другом — нечетные. Таких чередующихся банков может быть не только два, а четыре, восемь, шестнадцать. Объемы банков при этом должны быть одинаковыми. В результате такого подхода появляется возможность начинать обращение к следующему слову еще до окончания процесса доступа к предыдущему. Страничный режим предполагает постраничную работу микросхем памяти, когда выбор страницы производится один раз на всю страницу, а выбор ячейки внутри страницы может происходить гораздо быстрее. Для поддержки обоих режимов применяются специальные технологические решения. Здесь же отметим, что при замене памяти компьютера или при установке дополнительных банков памяти надо строго следовать рекомендациям изготовителей системных плат, так как порядок заполнения банков может быть далеко не очевиден. Практическая часть работы Как процессор обменивается данными с памятью1. Краткие сведения об устройстве памяти Каждому, кто изучал хотя бы минимальный курс информатики, известно, что все данные и программы их обработки хранятся в компьютере в дискретном двоичном виде. Согласно классическим принципам, минимальной допустимой информацией является 1 бит и именно бит служит основой компьютерной памяти, ее минимальным конструктивным элементом. В настоящее время благодаря успехам в технологии производства миниатюрных электронных схем сформулированный тезис не имеет столь очевидных (в прямом смысле этого слова!) доказательств, но, тем не менее, своей актуальности не утратил. Бит слишком маленькая единица информации, чтобы быть достаточной для представления практически полезных данных. Известно, например, что для сохранения одного символа требуется 8 бит, стандартного целого числа – 16, а разрядность целочисленных данных в современных процессорах достигла 32 бит. Следовательно, обеспечивать доступ к каждому отдельному биту памяти едва ли нецелесообразно. Начиная с третьего поколения, в ЭВМ фактически сложился стандарт организации памяти, при котором минимальной считываемой порцией информации является 1 байт. Кроме того, для работы с более крупными данными современные процессоры способны одновременно считывать несколько байт, начиная с заданного (как правило, два или четыре). Итак, минимальной единицей обмена информацией с памятью в современных компьютерах является 1 байт. Каждый байт имеет свой идентификационный номер, по которому к нему можно обращаться – его принято называть адресом. Адреса соседних байтов отличаются на единицу, зато для двух 32-разрядных чисел, хранящихся в памяти «друг за другом», эта разница по понятным причинам равняется четырем. Практически при обращении к памяти задается адрес начального байта и их требуемое количество (см. 3.3 и 3.2 соответственно). 2. Задание размера данных в командеВ семействе процессоров Intel количество считываемых или записываемых байт определяется кодом машинной инструкции. Учитывая, что первые представители этого семейства имели разрядность 16, и лишь начиная с модели 80386 перешли к 32 разрядам, система задания требуемого количества байт выглядит немного запутано. Так, коды команд обращения к байту или слову (вполне естественным образом) отличаются одним битом. Например, байтовая команда MOV AL,1 имеет код B0 01, а двухбайтовая MOV AX,1 кодируется B8 01 00 (длина команды увеличилась из-за размера константы!); легко убедиться, что коды операций B0 и B8 действительно имеют отличие в единственном бите. Что касается четырехбайтовой команды MOV EAX,1, то код ее операции абсолютно такой же, как и у двухбайтовой команды (только константа 1 еще «длиннее» – 4 байта). Оказывается, что две эти одинаковые по кодам команды процессор различает по установленному режиму: при обработке 32-разрядного участка памяти константа заносится в полный регистр EAX, а 16-разрядного – в его младшую половину AX. Для изменения «режима по умолчанию» служит специальный префиксный код (так называемый префикс переключения разрядности слова, равный 66h), который для следующей за ним инструкции изменяет стандартный режим на противоположный. В результате при работе в 16-разрядном сегменте код 66 B8 01 00 00 00 реализует именно 32-разрядную операцию записи в EAX единицы. Примечание. Не пытайтесь проверить данное утверждение путем ввода в Debug команды MOV EAX,1 – к сожалению, отладчик «не понимает» мнемоник, содержащих расширенные регистры! Таким образом, мы видим, что разрядность команды определяется ее кодом (и, может быть, некоторыми «внешними» по отношению к программе факторами). Полученный вывод позволяет нам в дальнейшем ограничиться рассмотрением методов адресации для данных какой-либо фиксированной длины: для остальных достаточно будет просто написать другой код операции. 3. Задание адреса данных в командеВ предыдущем разделе было показано, что для понимания методов адресации достаточно рассмотреть способы задания начального адреса при фиксированной длине данных. Поэтому в дальнейшем мы везде будем полагать, что данные имеют двухбайтовый размер. Для упрощения понимания идей адресации в большинстве примеров ограничимся также одной (самой простой!) инструкцией переписи данных, которая имеет мнемоническое обозначение MOV. Подчеркнем, что принятые допущения нисколько не ограничат общности наших знаний по описываемому вопросу. Итак, перейдем к рассмотрению основных принципов обращения к данным, принятых в компьютерах семейства IBM PC на базе процессоров фирмы Intel. 3.1. Адресация простых данныхПод простыми данными принято понимать такие, которые хранят в себе только одно значение, например, целое число. Сложные данные, напротив, включают в себя несколько значений, причем даже не обязательно одного типа; простейшим примером «однородных» сложных данных является массив, о котором мы будем говорить позднее. Не следует путать сложные структуры, состоящие из нескольких более простых значений, в частности из набора целых чисел, с простыми данными, занимающими в памяти нескольких байт, например, с отдельно взятым 32-разрядным целым числом. Будем пока рассматривать адресацию простых данных. Как выбрано выше, это будут целые 16-разрядные числа. Простейшие и очень часто используемые инструкции обработки данных, которые выполняются в регистрах микропроцессора, настолько естественны, что легко понимаются на интуитивном уровне. В частности, речь идет о случаях, когда в регистр заносится копия содержимого другого регистра (MOV AX,BX) или константа (MOV AX,30). Тем не менее, с теоретической точки зрения это уже простейшие методы адресации данных, которые для процессоров семейства Intel принято называть регистровой и непосредственной адресацией соответственно. Чуть более сложным является случай, когда данные извлекаются из конкретной ячейки памяти, например, MOV AX,[30]; такой метод получил название прямой адресации. Приведенная в качестве примера команда считывает из памяти два байта начиная с адреса 30 и помещает их в 16-разрядный регистр AX. Обязательно обратите внимание на наличие в записи квадратных скобок, которые всегда появляются при ссылке на содержимое памяти. Подобно тому, как заключение в квадратные скобки константы приводит нас к появлению прямой адресации, аналогичный прием для регистра (например, MOV AX,[BX]) также порождает новый (и очень важный!) метод адресации – косвенный регистровый. Его суть заключается в том, что содержимое регистра рассматривается не как данные, а как адрес памяти, где эти данные расположены. Для понимания сущности косвенной адресации можно рассмотреть следующую аналогию: при подготовке к экзамену ученик открывает свой конспект по требуемой теме, а там вместо текста для ответа видит запись: «материал по этому вопросу прочитать в § 25». Иными словами, вместо готовой информации дается ссылка на нее. Или еще одна аналогия из книги: «косвенная адресация похожа на операцию "для передачи (кому-то)", выполняемую почтовой службой США, когда указанный адрес не является реальным адресом получателя, а является адресом друга или родственника». Чтобы закрепить четыре изученных метода адресации, рассмотрим несложный пример, который складывает два целых числа с адресами 200 и 204. Его выполнение зафиксировано в протоколе 1 и состоит из нескольких действий: ввод программы (команда a) и ее вывод для контроля набора (u); ввод (e200) и вывод чисел (d200); контроль состояния регистров до выполнения программы (r); пошаговое выполнение четырех команд с выводом значений регистров после каждого шага (t4). Протокол 1
Примечание. В очередной раз напоминаем, что по принятому в IBM PC соглашению байты данных хранятся в памяти «задом наперед», т.е. байты 05 00 следует расшифровывать как 0005. ЗаданиеСоставить и реализовать в Debug свою программу (аналогичную протоколу 1) в соответствии с вариантом таблицы 1. Таблица 1 |