Распределение памяти в компьютерах
Конечно, для современных компьютеров размеры системного ПЗУ в 64 Кбайта (и даже в 128 Кбайт!) уже недостаточно, поскольку число различных подключаемых к компьютеру устройств велико. Поэтому большинство устройств содержат собственные ПЗУ (BIOS) прямо на самой плате-контроллере, а доступ к нему осуществляется с помощью устройств прямого доступа к памяти (DMA). Задача системного BIOS — переправлять… Читать ещё >
Распределение памяти в компьютерах (реферат, курсовая, диплом, контрольная)
Область ПЗУ Системная область занимает следующие 384 Кбайт адресного пространства. Распределение адресов в этой области в наибольшей степени зависит от фирмы-производителя и модели компьютера. Эта область впервые выделилась в компьютерах на основе процессора 8088. В них эта область содержала видеопамять, BIOS, дополнительный BIOS и, кроме того, содержала внутренний интерпретатор с языка Бейсик. В начале видеопамять 000С:0000 — 000С: FFFFh (размером 64 Кбайт). Затем видеопамять возросла до 128 Кбайт (EGAVGA режимы высокого разрешения), и стала занимать пространства адресов с 000А:00000h до 000B: FFFFh. Соответственно область BIOS сдвинулась в пространстве адресов 000E:0000h — 000 °F:FFFFh. В настоящее время и SVGA-видеокарты в режиме высокого разрешения видеопамять в RAM (системной области оперативной памяти) занимает те же 128 Кбайт, а доступ к остальной части видеопамяти (размер которой может превышать 4 мегабайта), осуществляется постранично. Управление постраничным выделением памяти (по 128 Кбайт каждая страница) осуществляется с помощью ПЗУ на самой видеоплате.
Область памяти с адресами 000С:0000h — 000D: FFFFh занимает либо страница дополнительной (expanded) LIM-памяти, либо дополнительное ПЗУ (BIOS) пользователя. Это ПЗУ позволяет превратить обычный офисныйый компьютер в специализированную ЭВМ. В современных компьютерах эта область содержит ПЗУ USB (Universal Serial Bus), поэтому для дополнительной памяти надо выделять другие адреса.
Уже у компьютеров серии PC/AT системное ПЗУ было расширено до 64 Кбайт, и в частности, за счет исключения интерпретатора с языка Бейсик. Важно отметить, что в последних 16 байтах области системной памяти (которая занимает пространство адресов с 000Е:0000h по 000 °F:FFFFh) находится стартовый адрес микропроцессора при включении питания и который не должен быть переопределен ни в коем случае.
Конечно, для современных компьютеров размеры системного ПЗУ в 64 Кбайта (и даже в 128 Кбайт!) уже недостаточно, поскольку число различных подключаемых к компьютеру устройств велико. Поэтому большинство устройств содержат собственные ПЗУ (BIOS) прямо на самой плате-контроллере, а доступ к нему осуществляется с помощью устройств прямого доступа к памяти (DMA). Задача системного BIOS — переправлять сигналы операционной системы в ПЗУ периферийного устройства на обработку, и корректно возвратить обратно полученный ответ. Именно поэтому разделение системного адресного пространства на области весьма условно.
D.2. Распределение (карта) памяти шиноцентричных Intel-совместимых компьютерах.
В августе 1981 года фирма IBM выпустила свой первый персональный компьютер, основанный на микропроцессоре Intel 8088. Этот процессор способен был адресовать 1 Мбайт оперативной памяти, которой, как тогда казалось, персональным компьютерам хватит надолго. В связи с этим проблеме распределения памяти уделили меньше внимания, чем другим проблемам. С легкой руки компании Microsoft это распределение памяти «укоренилось» в мире и стало стандартом де-факто для всех Intel-совместимых компьютеров.
В памяти Intel-совместимых компьютеров можно выделить три зоны памяти:
Базовая (Conventional) память — первые 640 Кбайт памяти с адресами 0000:0000h — 0009: FFFFh.
Старшая (Upper) память — следующие 384 Кбайта (адреса 000A:0000h — 000 °F:FFFFh).
Расширенная (Extended) — вся остальная память. Она начинается с адреса 0010:0000h. Максимальное значение адреса — FFFF: FFFFh.
Рассмотрим эти три зоны по-подробнее.
Базовая память Со времен микропроцессора 8088 здесь находятся все исполняемые программы, в том числе и операционная система. Эта преемственность сохранилась до сих пор. В самом начале этой области находится:
Таблица векторов прерываний. Она всегда находится в диапазоне адресов 0000:0000h — 0000:0400h (первый килобайт памяти). Таблица определяет адреса прерываний — готовых процедур операционной системы, которые компьютер вызывает для выполнения определенной задачи. Программы прерываний стандартизованы для всех операционных систем фирмы Microsoft.
Файл надстройки над системой BIOS — файл IO.SYS. В этом файле находятся программы-прерывания ввода/вывода, специфичные для операционной системы Microsoft.
Система обработки прерывания (Int 21h) системы MS-DOS — файл MSDOS.SYS.
Примечание: эта часть отсутствует в операционных системах Windows. Она целиком помещается в файле IO.SYS.
Стеки операционной системы MS-DOS. Эти стеки используются исключительно программами — прерываниями операционной системы. Число стеков варьируется в MS-DOS в пределах от 8-ми до 64-х, а их размер — от 32-х до 512-ти байт. Стеки устанавливаются командой STACKS в файле Config.sys.
Системное окружение. Здесь расположены переменные окружения операционной системы (задаваемые командами SET, PATH, Prompt, Lastdrive и некоторыми другими.) Размер системного окружения задается в опциях команды SHELL файла Config.sys.
Буфера ввода/вывода дисковых накопителей. Число буферов ввода/вывода задается командой Buffers файла Config.sys. На каждый буфер выделяется по 532 байта.
Дескрипторы открытых файлов. На каждый дескриптор отводится 64 байта. Число дескрипторов устанавливается командой FILESфайла Config.sys.
Драйверы, запускаемые командой Device файла Config.sys. Среди них могут быть драйверы расширенной памяти Himem. sys, дополнительной памяти Emm386. exe, а также совмещенный драйвер Quemm386.sys.
Резидентные программы, загружаемые в память командой Install файла Config.sys.
Резидентная часть командного процессора Command.com.
Резидентные программы, загружаемые из файла Autoexec. bat и командной строки.
Вся остальная базовая память доступна для программ MS-DOS. Общий объем базовой памяти, занятой системными программами, не должен превышать 256 Кбайт, а рекомендуемый максимальный размер этой области — 128 Кбайт. Только при свободном объеме 512 Кбайт большинство программ DOS будут чувствовать себя комфортно.
Конечно, любой драйвер подключенного к компьютеру устройства, любая запущенная резидентная программа забирает под свои нужды определенную часть памяти, и лимит в 128 Кбайт может быть достигнут очень быстро. Чтобы избежать этого, возможны два сценария:
- (Для MS-DOS версий 5.0 и выше.) Загрузить большинство резидентных программ и драйверов, а также часть основных файлов MS-DOS в верхнюю и старшую память.
- (Для всех операционных систем.) Создать несколько конфигураций из файлов Config. sys и Autoexec. bat (или им подобных), содержащих необходимый минимальный набор драйверов и резидентных программ, и переключаться между конфигурациями путем перезагрузки компьютеров.
Любой из сценариев имеет свои достоинства и недостатки. Поэтому выбор любого сценария либо их комбинации должен решаться индивидуально.
Расширенная память. Зоны в расширенной памяти Не вся область расширенной памяти доступна для выполнения программ. В этой области памяти находится зона теневого BIOS (Shadow RAM) и зона микропроцессора Weitec.
Зона теневого BIOS.
Из-за низкой скорости доступа к блокам ПЗУ процессор должен тратить несколько циклов ожидания на то, чтобы считать данные. При этом общая скорость работы приложения снижается. При использовании теневого BIOS программы из ПЗУ копируются в более быструю оперативную память (RAM) и там выполняются.
При создании теневого BIOS необходимо учитывать следующее: ПЗУ от ОЗУ отличается тем, что его содержимое нельзя изменить. Поэтому, в принципе, содержимое теневого BIOS можно изменить. Чтобы избежать этого, в настройках материнской платы необходимо запретить доступ программ «на запись» к теневому BIOS.
Зона теневого BIOS расположена по адресам памяти 00FE:0000h — 00FF: FFFFh. При этом зона системного BIOS расположена в первых 64 Кбайт этой области. Остальное пространство используется для теневого BIOS плат расширения. Весьма нежелательно, чтобы эта область памяти рагментировалась.
Зона микропроцессора Weitek.
Микропроцессор Abacus фирмы Weitek спроектирован так, что он обменивается данными с центральным процессором через расширенную память. Для обмена данными используется диапазон адресов C000:0000h — C000: FFFFh. Центральный процессор просто пересылает данные в эту область, а затем считывает из нее готовые результаты.
При использовании микропроцессора Abacus часто возникает конфликт между ним и драйверами расширенной и дополнительной памяти. Чтобы избежать его, мало прописать в BIOS использование этого микропроцессора. Необходимо также установит опции поддержки микропроцессора Weitek в драйверах.
Примечание: стандартные драйверы расширенной и дополнительной памяти MS-DOS поддерживают этот микропроцессор начиная с версии DOS 6.0.
Сегментация памяти в защищенном режиме.
В защищенном режиме работы микропроцессоров x86 обеспечивается лучшая защита операционной системы от несанкционированного доступа программ пользователя. Это происходит путем усложнения формирования линейного адреса в микропроцессорах i80386 и выше. Например, сегмент не может быть использован никакой программой, если он не «представлен» ей соответствующим образом. Программа уже не может обращаться по любому адресу, который она может сформировать. При «представлении» сегмента программе она должна запросить не только базовый адрес сегмента, но и уровень привилегий, локализацию сегмента, его длину и разрешающую способность, права доступа к сегменту (чтение, запись и выполнение) и некоторые другие параметры.
При всем этом у системного программиста имеется больше возможностей по управлению сегментацией памяти. Так, уже в микропроцессоре i80386 сняты ограничения на размер сегмента. Он может иметь значение от 1 байта до 4 Гбайт. В нем также сняты ограничения на местоположение границы сегмента. Граница сегмента больше не привязана к границе параграфа, да и само понятие «параграф» к защищенному режиму работы микропроцессора не применяется. Программист в описании сегмента сам определяет уровни привилегий и тип используемого сегмента.
Уровни привилегий назначаются программам с целью не допустить разрушение системных областей некорректными действиями прикладных программ. Некоторые команды выполняются только на нулевом (самом верхнем) уровне привилегий. Выполнение других команд зависит от того, какие уровни привилегий установлены в регистров флагов и при описании сегмента. В любом случае действуют следующие правила вызова сегментов и межсегментных переходов.
- 1. Возможен переход от сегмента к сегменту, имеющих один и тот же уровень привилегий.
- 2. Возможно обращение к сегменту данных, имеющему тот же или более низкий уровень привилегий, чем сегмент кода.
- 3. Если необходимо перейти к сегменту кода, имеющий более высокий уровень привилегий, необходимо использовать вентиль.
Дескрипторные таблицы В системах на базе процессоров x86 допускается создание почти любого числа сегментов — необходимо только наличие соответствующего дескриптора. Все дескрипторы имеют длину 8 байт и хранятся в специальной области ОЗУ, называемой дескрипторной таблицей (descriptor table). Порядок размещения дескрипторов произволен, а максимальное число дескрипторов — 8192. Таким образом максимальный размер дескрипторной таблицы — 64 Кбайт.
Существует три типа дескрипторных таблиц, выбор которых зависит от назначения сегмента. Рассмотрим эти типы по подробнее.
Глобальная дескрипторная таблица (GDT).
Главной общесистемной таблицей дескрипторов является именно эта системная таблица. Таблицу GDT «коллективно используют» все задачи. Для определения начального адреса GDT предназначен специальный регистр микропроцессора — GDTR. Наличие GDT в системе обязательно при работе микропроцессора x86 в защищенном режиме.
Дескрипторная таблица прерываний (IDT).
Общесистемной является также дескрипторная таблица прерываний. Она содержит в себе дескрипторы специальных объектов — шлюзов. Поскольку шлюзы определяют точки входа программ обработки прерываний и особых случаев, они служат заменой таблицы векторов прерываний процессора i8086. Начальный адрес таблицы находится в системном регистре IDTR микропроцессора.
Локальная дескрипторная таблица (LDT).
Для каждой задачи в дополнение к таблице GDT можно построить свою, локальную дескрипторную таблицу. Она определяет сегменты, доступные только этой, конкретной задаче. Эти таблицы не являются обязательными, создаются по мере надобности, и хранятся в сегментах программы, на которых есть ссылка в GDT. Локальные таблицы используют 16-ти битный селектор, что упрощает манипуляцию с сегментами. Локальные дескрипторные таблицы могут участвовать в свопинге памяти, как и обычные сегменты.
Селекторы
Отправной точкой входа в дескриптор является селектор. Полный формат регистра селектора приведен на рисунке 1.
Двухбитное поле RPL привлекается для контроля привилегий в механизме защиты.
Бит индикации таблицы TI показывает. из какой дескрипторной таблицы выбирается дескриптор:
TI=0 — GDT, TI=1 — LDT.
Старшие 13 бит определяют нужный дескриптор в дескрипторной таблице.
Формирование линейного адреса Формирование линейного адреса в микропроцессоре x86 показано на рисунке E.2.
Из рисунка видно, что базовый адрес сегмента и эффективный адрес принимают равноправное участие в формировании линейного адреса.
Формат дескрипторной таблицы Формат дескрипторной таблицы На рисунке E.3. приведен формат дескрипторов в дескрипторных таблицах. Подробнее смотри (Григорьев и Обнинск.) На них обозначены:
Формат локальной дескрипторной таблицы.
Базовый адрес (32-х битный) — базовый адрес сегмента. Именно этот адрес сформирует процессор при нулевом смещении.
Предел (20-битный). Определяет размер сегмента в байтах.
Бит присутствия (P) установлен в состояние 1, когда он находится (присутствует) в физической памяти.
Двухбитное поле привилегий (DPL) определяет уровень привилегий сегмента. Существуют четыре уровня привилегий: от 0 до 3.
Бит S (системный, сегмент) всегда установлен в 1, если этот объект в дескрипторной таблице является сегментом. В случае S=0 данный объект может являться, а может и не являться сегментом памяти.
Бит гранулярности G. При бите гранулярности G = 0 предел сегмента измеряется в байтах, а при G = 1 — в страницах по 4 Кбайт.
Бит D — размер по умолчанию. Он определяет, какая из размерностей для данных (16 или 32 бита) применяется для операндов процессора. При D=0 процессор интерпретирует содержимое сегмента кода как 16-ти битный код процессора i80286, а при D=1 — как 32-х битный код процессора i80486 и старше. Использование бита D — самый простой способ переключения между 16-ти и 32-х битными приложениями.
Бит A — доступа и обращения. Этот бит процессор автоматически устанавливает в состояние 1, когда происходит обращение к сегменту в физической памяти, описываемым данным дескриптором. Он предназначен для предотвращения свопинга сегмента на диск в момент обращения к нему.
Бит X зарезервирован корпорацией Intel для своих будущих разработок. Он должен всегда равняться 0.
Бит U может быть использован программистом для своих целей.
Трехбитное поле ТИП используется для указания целевого использования сегмента. Его значения:
- 000b — сегмент данных, разрешено только считывание.
- 001b — сегмент данных, разрешено считывание и запись.
- 010b — сегмент стека, разрешено только считывание (не используется в практике.)
- 011b — сегмент стека, разрешено чтение и запись.
- 100b — сегмент кода, разрешено только выполнение.
- 101b — сегмент кода, разрешено выполнение и считывание.
- 110b — подчиненный сегмент кода, разрешено только выполнение.
- 111b — подчиненный сегмент кода, разрешено выполнение и считывание.
- 2. Страничная организация памяти. Виртуальная память.
Основное применение страничного преобразования адреса — организация виртуальной памяти. Виртуальная память позволяет использовать программам, больший объем памяти, чем установленный на компьютере физический объем памяти. Остальная информация может быть сброшена на внешний носитель.
Управление страничным разбиением памяти обычно возлагается на специальную микросхему MMU (Memory Managment Unit — устройство управления памятью). В микропроцессоре i80486 и выше это устройство встроено в процессор.
Как и сегментация, страничная организация памяти связана с преобразованием виртуального адреса (в данном случае линейного) в физический. В страничном преобразовании базовым объектом памяти является блок фиксированного размера, называемый страницей (page). Размер страницы — 4 Кбайт.
Структура страниц
При разрешенном страничном преобразовании физическая память компьютера разбивается на страницы. Иногда страницы называют страничными кадрами — page frame, — размером; Кбайт. Поскольку часть страниц находится вне физической памяти, предусмотрен механизм замены страниц по требованию. Это позволяет программам использовать для своих нужд все линейное адресное пространство, не заботясь о том, занята ли физическая память другими процессами.
Границы сегментов и страниц могут не совпадать. Однако желательно, для повышения производительности системы, выравнивать границы сегментов на границы страничного кадра.
В отличие от сегмента, для страниц есть только два уровня привилегий: пользовательский (User) и супервизора (Supervisor). Пользовательский уровень привилегий соответствует уровню 3 для сегмента, а уровень супервизора — уровням привилегий сегмента 0, 1 и 2.
Формирование адреса при страничном преобразовании В процессе страничного преобразования старшие 20 бит 32-х битного линейного адреса заменяются новым значением — номером физической страницы. Младшие же 12 бит линейного адреса определяют положение байта внутри страницы и остаются неизменными.
Для уменьшения размера таблицы страниц в микропроцессорах x86 предусмотрена двухуровневая схема преобразования адреса. Основой страничного преобразования служит регистр управления CR3, содержащий 20-ти битный физический базовый адрес каталога страниц текущей задачи. Предполагается, что каталог выровнен по границе страничного кадра, постоянно находится в памяти и не участвует в свопинге.
Корневая страница, называемая каталогом страниц, содержит 1024 32-х битных дескриптора, называемых элементами каталога страниц PDE (Page Directory Entry). Каждый из них адресует подчиненную таблицу страниц. Каждая из этих таблиц содержит 1024 32-х битных дескриптора, называемая элементами таблицы страниц. PTE (Page Table Entry). Каждый PTE содержит адрес страничного кадра в физической памяти.
Собственно преобразование линейных адресов в физические состоит из следующих действий:
- — Старшие 10 бит 31 — 22 линейного адреса, дополненные двумя младшими нулями, служат индексом PDE.
- — Средние 10 бит 21 — 12 линейного адреса, дополненные двумя младшими нулями, индексируют таблицу страниц PTE. Элемент PTE содержит 20-битный базовый адрес страничного кадра в физической памяти.
Этот базовый адрес из элемента PTE объединяется с младшими 12-ю битами линейного адреса, образуя 32-х битный физический адрес. В элементе таблицы страниц существует бит неприсутствующей страницы. Он означает, что указанной странице нет в памяти и ее необходимо загрузить с внешнего устройства. Также существуют биты, указывающие, происходит ли обращение к страницам. Эти страницы невозможно выгрузить из памяти.