Методические указания для практических занятий по дисциплине мдк. 02. 01
Скачать 7.37 Mb.
|
Страничный способ организации памяти. 35 Как уже упоминалось, при страничном способе организации виртуальной памяти все фрагменты программы, на которые она разбивается (за исключением последней ее части), получаются одинаковыми. Одинаковыми полагаются и единицы памяти, которые предоставляются для размещения фрагментов программы. Эти одинаковые части называют страницами и говорят, что оперативная память разбивается на физические страницы, а программа — на виртуальные страницы. Часть виртуальных страниц задачи размещается в оперативной памяти, а часть — во внешней. Обычно место во внешней памяти, в качестве которой в абсолютном большинстве случаев выступают накопители на магнитных дисках (поскольку они относятся к быстродействующим устройствам с прямым доступом), называют файлом подкачки, или страничным файлом (paging file). Иногда этот файл называют swap-файлом, тем самым подчеркивая, что записи этого файла — страницы — замещают друг друга в оперативной памяти. В некоторых операционных системах выгруженные страницы располагаются не в файле, а в специальном разделе дискового пространства8. Разбиение всей оперативной памяти на страницы одинаковой величины, причем кратной степени двойки, приводит к тому, что вместо одномерного адресного пространства памяти можно говорить о двухмерном. Первая координата адресного пространства — это номер страницы, вторая координата — номер ячейки внутри выбранной страницы (его называют индексом). Таким образом, физический адрес определяется парой (Рp, i), а виртуальный адрес — парой (Pv, i), где Pv — номер виртуальной страницы, Рр — номер физической страницы, i — индекс ячейки внутри страницы. Количество битов, отводимое под индекс, определяет размер страницы, а количество битов, отводимое под номер виртуальной страницы, — объем потенциально доступной для программы виртуальной памяти. Отображение, осуществляемое системой во время исполнения, сводится к отображению Pv в Рр и приписыванию к полученному значению битов адреса, задаваемых величиной i. При этом нет необходимости ограничивать число виртуальных страниц числом физических, то есть не поместившиеся страницы можно размещать во внешней памяти, которая в данном случае служит расширением оперативной. Для отображения виртуального адресного пространства задачи на физическую память, как и в случае сегментного способа организации, для каждой задачи необходимо иметь таблицу страниц для трансляции адресных пространств. Для описания каждой страницы диспетчер памяти операционной системы заводит соответствующий дескриптор, который отличается от дескриптора сегмента прежде всего тем, что в нем нет поля длины — ведь все страницы имеют одинаковый размер. По номеру виртуальной страницы в таблице дескрипторов страниц текущей задачи находится соответствующий элемент (дескриптор). Если бит присутствия имеет единичное значение, значит данная страница размещена в оперативной, а не во внешней памяти, и мы в дескрипторе имеем номер физической страницы, отведенной под данную виртуальную. Если же бит присутствия равен нулю, то в дескрипторе мы будем иметь адрес виртуальной страницы, расположенной во внешней памяти. Таким образом и осуществляется трансляция виртуального адресного пространства на физическую память. Этот механизм трансляции иллюстрирует рис. 3.5. Защита страничной памяти, как и в случае сегментного механизма, основана на контроле уровня доступа к каждой странице. Как правило, возможны следующие уровни доступа: - только чтение; - чтение и запись; - только выполнение. Каждая страница снабжается соответствующим кодом уровня доступа. При трансформации логического адреса в физический сравнивается значение кода разрешенного уровня доступа с фактически требуемым. При их несовпадении работа программы прерывается. При обращении к виртуальной странице, не оказавшейся в данный момент в оперативной памяти, возникает прерывание, и управление передается диспетчеру памяти, который должен найти свободное место. Обычно предоставляется первая же свободная страница. Если свободной физической страницы нет, то диспетчер памяти по одной из вышеупомянутых дисциплин замещения (LRU, LFU, FIFO, случайный доступ) определит страницу, подлежащую расформированию или сохранению во внешней памяти. На ее месте он разместит новую 36 виртуальную страницу, к которой было обращение из задачи, но которой не оказалось в оперативной памяти. Как и в случае с сегментным способом организации виртуальной памяти, страничный механизм приводит к тому, что без специальных аппаратных средств он существенно замедляет работу вычислительной системы. Поэтому обычно используется кэширование страничных дескрипторов. Наиболее эффективным механизмом кэширования является ассоциативный кэш. Именно такой ассоциативный кэш и создан в 32-разрядных микропроцессорах i80x86. Начиная с i80386, который поддерживает страничный способ распределения памяти, в этих микропроцессорах имеется кэш на 32 страничных дескриптора. Поскольку размер страницы в этих микропроцессорах равен 4 Кбайт, возможно быстрое обращение к памяти размером 128 Кбайт. Итак, основным достоинством страничного способа распределения памяти является минимальная фрагментация. Поскольку на каждую задачу может приходиться по одной незаполненной странице, очевидно, что память можно использовать достаточно эффективно; этот метод организации виртуальной памяти был бы одним из самых лучших, если бы не два следующих обстоятельства. Первое — это то, что страничная трансляция виртуальной памяти требует существенных накладных расходов. В самом деле, таблицы страниц нужно тоже размещать в памяти. Кроме того, эти таблицы нужно обрабатывать; именно с ними работает диспетчер памяти. Второй существенный недостаток страничной адресации заключается в том, что программы разбиваются на страницы случайно, без учета логических взаимосвязей, имеющихся в коде. Это приводит к тому, что межстраничные переходы, как правило, осуществляются чаще, нежели межсегментные, и к тому, что становится трудно организовать разделение программных модулей между выполняющимися процессами. Для того чтобы избежать второго недостатка, постаравшись сохранить достоинства страничного способа распределения памяти, был предложен еще один способ — сегментно- страничный. Правда, за счет увеличения накладных расходов на его реализацию. щита страничной памяти, как и в случае сегментного механизма, основана на контроле уровня доступа к каждой странице. Как правило, возможны следующие уровни доступа: - только чтение; - чтение и запись; - только выполнение. ждая страница снабжается соответствующим кодом уровня доступа. При трансформации логического адреса в физический сравнивается значение кода разрешенного уровня доступа с фактически требуемым. При их несовпадении работа программы прерывается. и обращении к виртуальной странице, не оказавшейся в данный момент в оперативной памяти, возникает прерывание, и управление передается диспетчеру памяти, который должен найти свободное место. Обычно предоставляется первая же свободная страница. Если свободной физической страницы нет, то диспетчер памяти по одной из вышеупомянутых дисциплин замещения (LRU, LFU, FIFO, случайный доступ) определит страницу, подлежащую расформированию или сохранению во внешней памяти. На ее месте он разместит новую виртуальную страницу, к которой было обращение из задачи, но которой не оказалось в оперативной памяти. к и в случае с сегментным способом организации виртуальной памяти, страничный механизм приводит к тому, что без специальных аппаратных средств он существенно замедляет работу вычислительной системы. Поэтому обычно используется кэширование страничных дескрипторов. Наиболее эффективным механизмом кэширования является ассоциативный кэш. Именно такой ассоциативный кэш и создан в 32-разрядных микропроцессорах i80x86. Начиная с i80386, который поддерживает страничный способ распределения памяти, в этих микропроцессорах имеется кэш на 32 страничных дескриптора. Поскольку размер страницы в этих микропроцессорах равен 4 Кбайт, возможно быстрое обращение к памяти размером 128 Кбайт. ак, основным достоинством страничного способа распределения памяти является 37 минимальная фрагментация. Поскольку на каждую задачу может приходиться по одной незаполненной странице, очевидно, что память можно использовать достаточно эффективно; этот метод организации виртуальной памяти был бы одним из самых лучших, если бы не два следующих обстоятельства. Первое — это то, что страничная трансляция виртуальной памяти требует существенных накладных расходов. В самом деле, таблицы страниц нужно тоже размещать в памяти. Кроме того, эти таблицы нужно обрабатывать; именно с ними работает диспетчер памяти. Второй существенный недостаток страничной адресации заключается в том, что программы разбиваются на страницы случайно, без учета логических взаимосвязей, имеющихся в коде. Это приводит к тому, что межстраничные переходы, как правило, осуществляются чаще, нежели межсегментные, и к тому, что становится трудно организовать разделение программных модулей между выполняющимися процессами. Для того чтобы избежать второго недостатка, постаравшись сохранить достоинства страничного способа распределения памяти, был предложен еще один способ — сегментно- страничный. Правда, за счет увеличения накладных расходов на его реализацию. Сегментно-страничный способ организации памяти. Как и в сегментном способе распределения памяти, программа разбивается на логически законченные части — сегменты — и виртуальный адрес содержит указание на номер соответствующего сегмента. Вторая составляющая виртуального адреса — смещение относительно начала сегмента — в свою очередь может быть представлено состоящим из двух полей: виртуальной страницы и индекса. Другими словами, получается, что виртуальный адрес теперь состоит из трех компонентов: сегмента, страницы и индекса. Этот способ организации виртуальной памяти вносит еще большую задержку доступа к памяти. Необходимо сначала вычислить адрес дескриптора сегмента и прочитать его, затем определить адрес элемента таблицы страниц этого сегмента и извлечь из памяти необходимый элемент и уже только после этого можно к номеру физической страницы приписать номер ячейки в странице (индекс). Задержка доступа к искомой ячейке получается, по крайней мере, в три раза больше, чем при простой прямой адресации. Чтобы избежать этой неприятности, вводится кэширование, причем кэш, как правило, строится по ассоциативному принципу. Другими словами, просмотры двух таблиц в памяти могут быть заменены одним обращением к ассоциативной памяти. Напомним, что принцип действия ассоциативного запоминающего устройства предполагает, что каждой ячейке памяти такого устройства ставится в соответствие ячейка, в которой записывается некий ключ (признак, адрес), позволяющий однозначно идентифицировать содержимое ячейки памяти. Сопутствующую ячейку с информацией, позволяющей идентифицировать основные данные, обычно называют полем тега. Просмотр полей тега всех ячеек ассоциативного устройства памяти осуществляется одновременно, то есть в каждой ячейке тега есть необходимая логика, позволяющая посредством побитовой конъюнкции найти данные по их признаку за одно обращение к памяти (если они там, конечно, присутствуют). Часто поле тегов называют аргументом, а поле с данными — функцией. В данном случае в качестве аргумента при доступе к ассоциативной памяти выступают номер сегмента и номер виртуальной страницы, а в качестве функции от этих аргументов получаем номер физической страницы. Остается приписать номер ячейки в странице к полученному номеру, и мы получаем адрес искомой команды или операнда. Оценим достоинства сегментно-страничного способа. Разбиение программы на сегменты позволяет размещать сегменты в памяти целиком. Сегменты разбиты на страницы, все страницы сегмента загружаются в память. Это позволяет сократить число обращений к отсутствующим страницам, поскольку вероятность выхода за пределы сегмента меньше вероятности выхода за пределы страницы. Страницы исполняемого сегмента находятся в памяти, но при этом они могут находиться не рядом друг с другом, а «россыпью», поскольку диспетчер памяти манипулирует страницами. Наличие сегментов облегчает разделение программных модулей между параллельными процессами. Возможна и динамическая компоновка задачи. А выделение памяти страницами позволяет минимизировать фрагментацию. Однако поскольку этот способ распределения памяти требует очень значительных затрат 38 вычислительных ресурсов и его не так просто реализовать, используется он редко, причем в дорогих мощных вычислительных системах. Возможность реализовать сегментно-страничное распределение памяти заложена и в семейство микропроцессоров i80x86, однако вследствие слабой аппаратной поддержки, трудностей при создании систем программирования и операционной системы практически в персональных компьютерах эта возможность не используется. Практическая часть. Задание 1. Определите, как распределяется оперативная память на компьютере, за которым Вы работаете. Для этого: Откройте <Пуск>/<Настройка>/<Панель управления>/<Система>. Запишите все сведения о системе. Определите, на какой вкладке можно определить состояние системы (запишите эти данные), Рассмотрите свойства файловой системы (какие устройства здесь рассматриваются? Запишите эти данные). Обратите особое внимание на вкладку <Виртуальная память>. Запишите, какие возможности Вы имеете для настройки системы виртуальной памяти. Определить размер файла подкачки. Нажмите комбинацию кнопок Запишите какие задачи решаются в системе. Определите объем страницы для вашей системы. Понаблюдайте с помощью гистограмм и графиков изменение во времени загрузки процессора и использование виртуальной памяти. Задание 2. Дать сравнительную характеристику сегментного и страничного способа организации виртуальной памяти. Перечислить достоинства и недостатки каждого. Данные оформить в виде таблицы. Контрольные вопросы 1. Что такое виртуальная память? 2. Какие существуют методы распределения виртуальной памяти? 3. Почему размер страницы выбирается равным степени двойки? Можно ли принять такое же ограничение для сегмента? 4. На что влияет размер страницы? 5. Каковы преимущества и недостатки большого размера страницы Практическая работа №7. Организация оперативной памяти. Изучение структуры, состава и принципа работы микропроцессорных систем Цель работы: изучить организацию оперативной памяти. И зучить возможности программы-отладчика DEBUG как средства отображения памяти и приобрести практические навыки работы с ней. Теоретическая часть Оперативная память предназначена для хранения программ и данных. Ее можно рассматривать как конечную последовательность ячеек, имеющих размер 1 байт. Номер байта в этой последовательности называется физическим адресом (или просто адресом). Физический адрес используется для получения доступа к конкретной ячейке памяти. Именно эта информация выставляется центральным процессором на шину адреса. Для обеспечения доступа к оперативной памяти в процессоре Intel 8086 и процессорах последующих поколений, работающих в реальном режиме, используется так называемая сегментированная модель памяти. В сегментированной модели вводится понятие "сегмента". Так называется любой участок памяти размером до 64 Кб и с начальным адресом, кратным 16. Физический адрес формируется процессором на основании этого начального адреса и смещения конкретной ячейки памяти относительно начала сегмента. Для хранения начального адреса сегмента применяются сегментные регистры процессора. 39 Процессор обеспечивает доступ к четырем сегментам одновременно. Эти сегменты называются сегментом кода, сегментом данных, сегментом стека и дополнительным сегментом данных. Сегмент кода содержит команды программы. Для доступа к этому сегменту используется сегментный регистр CS. Он содержит адрес сегмента с машинными командами. Сегмент данных содержит обрабатываемые программой данные. Для доступа к этому сегменту служит сегментный регистр DS, который хранит адрес сегмента данных текущей программы. Сегмент стека – этот сегмент представляет собой область памяти, называемую стеком. Работу со стеком микропроцессор организует по следующему принципу: последний записанный в эту область элемент выбирается первым. Для доступа к этому сегменту служит сегментный регистр SS, содержащий адрес сегмента стека. Дополнительный сегмент данных применяется в некоторых командах для организации обмена информации между этим сегментом и сегментом данных. Адрес дополнительного сегмента данных должен содержаться в сегментном регистре ES. С представлением данных в памяти ЭВМ тесно связано понятие типа данных. Понятие типа данных носит двойственный характер. С точки зрения размерности микропроцессор аппаратно поддерживает следующие основные типы данных. 1. Байт – восемь последовательно расположенных битов, пронумерованных от 7 до 0, при этом бит 0 является самым младшим значащим битом. 2. Слово – последовательность из двух байт, имеющих последовательные адреса. Размер слова – 16 бит; биты в слове нумеруются от 15 до 0. Байт, содержащий нулевой бит, называется младшим байтом, а байт, содержащий 15-й бит, – старшим байтом. Процессоры Intel имеют важную особенность – младший байт всегда хранится по меньшему адресу. Адресом слова считается адрес его младшего байта. Адрес старшего байта может быть использован для доступа к старшей половине слова. 3. Двойное слово – последовательность из четырех байт (32 бита), расположенных по последовательным адресам. Нумерация этих бит производится от 31 до 0. Слово, содержащее нулевой бит, называется младшим словом, а слово, содержащее 31-й бит, — старшим словом. Младшее слово хранится по меньшему адресу. Адресом двойного слова считается адрес его младшего слова. Адрес старшего слова может быть использован для доступа к старшей половине двойного слова. Кроме трактовки типов данных с точки зрения их разрядности, процессор на уровне команд поддерживает логическую интерпретацию этих типов. С точки зрения логической интерпретации выделяют следующие типы данных. 1. Целый тип со знаком – двоичное значение со знаком, размером 8, 16 или 32 бита. Знак в этом двоичном числе содержится в 7, 15 или 31-м бите соответственно. Ноль в этих битах в операндах соответствует положительному числу, а единица – отрицательному. Отрицательные числа представляются в дополнительном коде. Числовые диапазоны для этого типа данных следующие: – 8-разрядное целое – от – 128 до 127; – 16-разрядное целое – от – 32 768 до 32 767; – 32-разрядное целое – от – 2 31 до 2 31 – 1. 2. Целый тип без знака – двоичное значение без знака, размером 8, 16 или 32 бита. Числовой диапазон для этого типа следующий: – байт – от 0 до 255; – слово – от 0 до 65 535; – двойное слово – от 0 до 2 32 – 1. 3. Указатель на память (адрес) бывает двух типов. Ближний тип – 16-разрядный логический адрес, представляющий собой относительное смещение в байтах от начала сегмента (короткий адрес). Дальний тип – 32-разрядный логический адрес, состоящий из двух частей: 16-разрядной сегментной части и 16-разрядного смещения (полный адрес). 40 4. Цепочка представляет собой некоторый непрерывный набор байтов, или слов максимальной длиной до 64 Кбайт. 5. Символ – байт, в который записывается код символа – целое от 0 до 255. В ЭВМ используется система кодировки ASCII (American Standard Code for Information Interchange). 6. Строка – последовательность символов, которая размещается в соседних байтах памяти, так, что код первого символа строки записывается в первом байте, код второго символа - во втором байте и т.п. Адресом строки считается адрес ее первого байта. 7. Неупакованный двоично-десятичный тип – байтовое представление десятичной цифры от 0 до 9. Неупакованные десятичные числа хранятся как байтовые значения без знака по одной цифре в каждом байте. Значение цифры определяется младшим полубайтом. 8. Упакованный двоично-десятичный тип представляет собой упакованное представление двух десятичных цифр от 0 до 9 в одном байте. Каждая цифра хранится в своем полубайте. DEBUG – это системная программа, позволяющая выполнять просмотр и изменение состояний процессора и памяти компьютера, побайтное тестирование и побайтную обработку дисковых файлов, что обеспечивает возможность выполнения отлаживаемых программ небольшими порциями. При этом программа выполняется под "наблюдением" отладчика. Таким образом, основное назначение этой программы – отладка программ на уровне машинных кодов и языка ассемблера. Однако возможности, предоставляемые этой программой, делают ее удобным инструментом для изучения организации персональных компьютеров. |