Указать номер уровня, который занимает уровень ассемблера в многоуровневой организации компьютера

Обновлено: 21.11.2024

Мы разделим наши микроархитектуры на две взаимодействующие части: путь к данным и элемент управления. Datapath работает со словами данных. Он содержит такие структуры, как память, регистры, АЛУ и мультиплексоры. MIPS — это 32-битная архитектура, поэтому мы будем использовать 32-битный путь данных. Блок управления получает текущую инструкцию от канала данных и сообщает каналу данных, как выполнить эту инструкцию. В частности, блок управления выдает сигналы выбора мультиплексора, включения регистра и записи в память для управления работой тракта данных.

Хороший способ спроектировать сложную систему – начать с аппаратного обеспечения, содержащего элементы состояния. Эти элементы включают в себя память и архитектурное состояние (программный счетчик и регистры). Затем добавьте блоки комбинационной логики между элементами состояния, чтобы вычислить новое состояние на основе текущего состояния. Инструкция читается из части памяти; загружать и сохранять инструкции, а затем читать или записывать данные из другой части памяти. Следовательно, часто бывает удобно разделить общую память на две меньшие по размеру области памяти, одна из которых содержит инструкции, а другая — данные. На рис. 7.1 показана блок-схема с четырьмя элементами состояния: программным счетчиком, регистровым файлом и памятью инструкций и данных.

Рисунок 7.1. Элементы состояния процессора MIPS

На рис. 7.1 жирные линии используются для обозначения 32-битных шин данных. Средние строки используются для обозначения более узких шин, таких как 5-битные адресные шины в файле регистров. Узкие синие линии используются для обозначения управляющих сигналов, таких как разрешение записи в регистровый файл. Мы будем использовать это соглашение на протяжении всей главы, чтобы не загромождать диаграммы шириной шины. Кроме того, элементы состояния обычно имеют вход сброса, чтобы перевести их в известное состояние при запуске. Опять же, чтобы не загромождать, этот сброс не отображается.

счетчик программ – это обычный 32-битный регистр. Его вывод, PC, указывает на текущую инструкцию. Его вход, PC′, указывает адрес следующей инструкции.

Память инструкций имеет один порт чтения. 1 Он принимает входной 32-битный адрес инструкции, A, и считывает 32-битные данные (т. е. инструкцию) с этого адреса в выходные данные чтения, RD.

32-элементный × 32-битный регистровый файл имеет два порта чтения и один порт записи. Порты чтения принимают входные 5-битные адреса, A1 и A2, каждый из которых указывает один из 2 5 = 32 регистров в качестве исходных операндов. Они считывают 32-битные значения регистров в выходные данные чтения RD1 и RD2 соответственно. Порт записи принимает входной 5-битный адрес, A3; 32-битный ввод данных для записи, WD; вход разрешения записи, WE3; и часы. Если разрешение записи равно 1, файл регистров записывает данные в указанный регистр по переднему фронту тактового импульса.

У памяти данных есть один порт чтения/записи. Если разрешение записи, WE, равно 1, он записывает данные WD в адрес A по переднему фронту тактового импульса. Если разрешение записи равно 0, адрес A считывается в RD.

Сброс ПК

По крайней мере, программный счетчик должен иметь сигнал сброса, чтобы инициализировать его значение при включении процессора. Процессоры MIPS инициализируют ПК до 0xBFC00000 при сбросе и начинают выполнение кода для запуска операционной системы (ОС). Затем ОС загружает прикладную программу по адресу 0x00400000 и начинает ее выполнение. Для простоты в этой главе мы сбросим ПК на 0x00000000 и поместим туда наши программы.

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

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

Практический пример: проектирование системы с использованием сердцевины Gumnut

22.1 Обзор Gumnut

22.1.1 Архитектура набора инструкций

Таблица 22.1 приведен полный набор инструкций Gumnut в формате языка ассемблера. В таблице rd и rs — регистры, op2 — регистр ( rs2 ) или непосредственное значение ( immed ), count – это количество позиций, на которые нужно сдвинуть или повернуть, disp – это смещение от адреса следующей инструкции, а addr — целевой адрес перехода.

Таблица 22.1. Набор инструкций Gumnut

< td >jsb addr< tr>

который читает из регистра контроллера ввода-вывода по адресу 156 в r3. Точно так же, если регистр содержит адрес, к которому мы хотим получить доступ, мы можем использовать смещение 0. Опять же, наш ассемблер позволяет нам подразумевать смещение 0 путем пропуска, как в инструкции

Первая из инструкций перехода, jmp, безоговорочно прерывает последовательный поток выполнения, устанавливая ПК на адрес, указанный в инструкции. Вторая инструкция перехода, jsb, позволяет нам вызывать подпрограмму. Она используется в паре с инструкцией ret, возвращающей из подпрограммы к месту вызова. Инструкция jsb помещает увеличенное значение ПК (адрес возврата) во внутренний стек, а затем обновляет ПК адресом подпрограммы, указанным в инструкции. Команда ret извлекает сохраненный адрес возврата из стека на ПК. Стек адресов возврата может содержать до восьми записей. Инструкции jmp и jsb не влияют на значения битов Z и C.

Остальные прочие инструкции относятся к прерываниям.Команда разрешения прерывания ( enai ) позволяет процессору реагировать на события прерывания, а инструкция отключения прерывания ( disi ) предотвращает ответ процессора. Когда процессор отвечает на событие прерывания, он сохраняет увеличенное значение PC и значения кодов условий Z и C в специальных регистрах, запрещает дальнейшие прерывания, а затем передает управление обработчику прерывания по адресу 1. Обработчик прерывания завершает работу с помощью инструкция возврата из прерывания ( reti ), а не инструкция ret. Команда reti восстанавливает сохраненные значения PC и кода состояния и повторно разрешает прерывания. Команда ожидания приостанавливает выполнение до тех пор, пока не произойдет прерывание, а инструкция ожидания переходит в режим ожидания с низким энергопотреблением до тех пор, пока не произойдет прерывание. Разница в том, что ЦП обычно может немедленно реагировать на прерывание при приостановке с помощью инструкции ожидания, тогда как для включения питания из инструкции ожидания может потребоваться некоторое время. Инструкции этой группы, кроме инструкции reti, не влияют на значения битов Z и C.

Все инструкции в Gumnut имеют длину 18 бит и кодируются в нескольких форматах, как показано на рис. 22.1. Крайние левые биты вместе с кодом функции (fn) образуют код операции. Кодирование, используемое для функциональных кодов, показано в таблице 22.2. Команды, в которых указаны номера регистров, имеют числа, закодированные в 3-битной двоичной форме в полях rd, rs и rs2 слова инструкции. . Точно так же инструкции, которые задают немедленные значения, смещения или смещения, имеют эти значения в двоичном коде в самых правых 8 битах командного слова. Заштрихованные части командного слова в каждом формате представляют биты, которые игнорируются.

Интерактивный симулятор процессора на основе Java для использования на вводных занятиях по компьютерной организации

Обзор

CPU Sim — это Java-приложение, которое позволяет пользователям проектировать простые компьютерные ЦП на уровне микрокода и запускать на этих ЦП программы на машинном языке или языке ассемблера посредством моделирования. Его можно использовать для моделирования различных архитектур, включая архитектуры на основе аккумуляторов, RISC или стека (например, JVM). Это полезный инструмент для преподавателей, которые хотят, чтобы их ученики на практике познакомились с различными архитектурами и получили возможность разрабатывать и реализовывать свои собственные архитектуры и писать программы на машинном языке и языке ассемблера для своих архитектур.

Новейшая версия 4 CPU Sim написана с использованием пакета JavaFX. (Версия 3, которая все еще доступна, была написана с использованием пакета Swing.) Версия 4 CPU Sim должна работать на любой платформе, имеющей среду выполнения Java (JRE) версии 1.8.0u66 или более поздней. на нем установлена ​​версия Java 1.8, но не Java 9 или Java 10. Версия 3 CPU Sim должна работать на любой платформе, на которой установлена ​​JRE версии 1.5 или более поздней. Версия 4 обратно совместима с версией 3, поскольку все машины, созданные в версии 3, могут быть загружены и запущены в версии 4.

Возможности обеих версий 3 и 4

  • Инструменты для проектирования ЦП на уровне переноса регистров:
    • Диалоги для указания количества и ширины регистров, массивов регистров и оперативной памяти.
    • Диалоги для указания микроинструкций (например, передачи битов между регистрами), которые используются для реализации машинных инструкций.
    • Диалоговое окно для указания машинных инструкций, включая:
      • количество битов в каждой инструкции
      • значение кода операции и количество бит, которое занимает код операции
      • количество операндов и свойства каждого операнда
      • семантика каждой инструкции (как определено последовательностью микроинструкций)

      Новые функции версии 4

      • Появился новый главный рабочий стол. Регистры и массивы регистров находятся в левой колонке, оперативная память — в правой колонке, а редактор на ассемблере — в центре. Консоль внизу.

      Подробнее о версии 3

      Вот несколько изображений диалоговых окон, окон и меню версии 3. В версии 3 есть версия на китайском языке, которой еще нет в версии 4.

      Загрузки

      CPU Sim предоставляется бесплатно.

      Вы можете загрузить ZIP-файл размером 5 МБ, содержащий версию 4.0.11 пакета CPU Sim. Инструкции по установке Версии 4 объясняют, что находится в zip-файле и как установить и запустить пакет. Руководство пользователя доступно в меню «Справка» программы CPU Sim. Примечание. Вам потребуется установить на компьютер Java Runtime Environment (JRE) версии 1.8.0u66 или более поздней.

      Вы по-прежнему можете загрузить ZIP-файл размером 5 МБ, содержащий версию 3.9.0 пакета CPU Sim. Инструкции по установке версии 3 объясняют, что находится в zip-файле и как установить и запустить пакет. Руководство пользователя доступно в меню «Справка» программы CPU Sim. Примечание. Вам потребуется установить на компьютер Java Runtime Environment (JRE) версии 1.5 или более поздней.

      Также доступно руководство для инструктора, включающее примеры проектов по программированию и их решения. Пожалуйста, свяжитесь со мной по адресу djskrien@colby.edu, если вы заинтересованы в этих дополнительных материалах.

      Если вам интересно посмотреть исходный код, CPU Sim является открытым исходным кодом и доступен для загрузки на GitHub.

      Кроме того, на YouTube есть плейлист, созданный Аншуманом Бхардваджем, в котором показано, как установить и запустить CPU Sim и как создать новый процессор для имитации.

      Предыдущие версии

      Версии 1 и 2 CPU Sim были написаны в начале 1990-х с использованием Macintosh Common Lisp, поэтому они работали только на платформе Macintosh. Версия 2.2 этого программного обеспечения получила награду EDUCOM Higher Education Software and Curriculum Innovation Award 1993 за лучшее инженерное программное обеспечение (информатика). Это был один из 10 победителей из более чем 140 заявок. Версия на основе Macintosh Common Lisp (2.6.5) по-прежнему доступна как для MC680x0, так и для PowerPC. Это единственные версии CPU Sim, работающие в MacOS 9 и более ранних версиях.

      Если вас интересуют более ранние версии, свяжитесь со мной по адресу djskrien@colby.edu.

      Статьи о CPU Sim и его предшественнике

      КЕРРИДЖ Дж. И УИЛЛИС Н. 1980. Симулятор для обучения компьютерной архитектуре. Бюллетень SIGCSE, 12(2), 65-71.
      Этот симулятор является предшественником CPU Sim.

      SKRIEN, D., AND HOSACK, J. 1991. Многоуровневый симулятор на уровне передачи регистров для использования в вводном классе организации машин. Бюллетень SIGCSE (Документы 22-го технического симпозиума ACM/SIGCSE по компьютерному образованию), 23(1), 347-351.
      В этой статье описывается версия 1.0.13 CPU Sim.

      SKRIEN, D. 1994. Симулятор ЦП: компьютерный симулятор для использования на вводном уроке компьютерной организации. Журнал вычислительной техники в высшем образовании, 6(1), 3-13.
      В этой статье описывается версия 2.2 CPU Sim.

      SKRIEN, D. 2001. CPU Sim 3.1: Инструмент для моделирования компьютерных архитектур для классов компьютерной организации. Журнал образовательных ресурсов в области вычислительной техники ACM (JERIC) 1 (4), 46–59. Этот выпуск JERIC — специальный, посвященный симуляторам компьютерной архитектуры.

      Я также представил на выставке SIGCSE 2002 плакат преподавателей о CPU Sim 3.1.

      Мы разделим наши микроархитектуры на две взаимодействующие части: путь к данным и элемент управления. Datapath работает со словами данных. Он содержит такие структуры, как память, регистры, АЛУ и мультиплексоры. MIPS — это 32-битная архитектура, поэтому мы будем использовать 32-битный путь данных. Блок управления получает текущую инструкцию от канала данных и сообщает каналу данных, как выполнить эту инструкцию. В частности, блок управления выдает сигналы выбора мультиплексора, включения регистра и записи в память для управления работой тракта данных.

      Хороший способ спроектировать сложную систему – начать с аппаратного обеспечения, содержащего элементы состояния. Эти элементы включают в себя память и архитектурное состояние (программный счетчик и регистры). Затем добавьте блоки комбинационной логики между элементами состояния, чтобы вычислить новое состояние на основе текущего состояния. Инструкция читается из части памяти; загружать и сохранять инструкции, а затем читать или записывать данные из другой части памяти. Следовательно, часто бывает удобно разделить общую память на две меньшие по размеру области памяти, одна из которых содержит инструкции, а другая — данные. На рис. 7.1 показана блок-схема с четырьмя элементами состояния: программным счетчиком, регистровым файлом и памятью инструкций и данных.

      Рисунок 7.1. Элементы состояния процессора MIPS

      На рис. 7.1 жирные линии используются для обозначения 32-битных шин данных.Средние строки используются для обозначения более узких шин, таких как 5-битные адресные шины в файле регистров. Узкие синие линии используются для обозначения управляющих сигналов, таких как разрешение записи в регистровый файл. Мы будем использовать это соглашение на протяжении всей главы, чтобы не загромождать диаграммы шириной шины. Кроме того, элементы состояния обычно имеют вход сброса, чтобы перевести их в известное состояние при запуске. Опять же, чтобы не загромождать, этот сброс не отображается.

      счетчик программ – это обычный 32-битный регистр. Его вывод, PC, указывает на текущую инструкцию. Его вход, PC′, указывает адрес следующей инструкции.

      Память инструкций имеет один порт чтения. 1 Он принимает входной 32-битный адрес инструкции, A, и считывает 32-битные данные (т. е. инструкцию) с этого адреса в выходные данные чтения, RD.

      32-элементный × 32-битный регистровый файл имеет два порта чтения и один порт записи. Порты чтения принимают входные 5-битные адреса, A1 и A2, каждый из которых указывает один из 2 5 = 32 регистров в качестве исходных операндов. Они считывают 32-битные значения регистров в выходные данные чтения RD1 и RD2 соответственно. Порт записи принимает входной 5-битный адрес, A3; 32-битный ввод данных для записи, WD; вход разрешения записи, WE3; и часы. Если разрешение записи равно 1, файл регистров записывает данные в указанный регистр по переднему фронту тактового импульса.

      У памяти данных есть один порт чтения/записи. Если разрешение записи, WE, равно 1, он записывает данные WD в адрес A по переднему фронту тактового импульса. Если разрешение записи равно 0, адрес A считывается в RD.

      Сброс ПК

      По крайней мере, программный счетчик должен иметь сигнал сброса, чтобы инициализировать его значение при включении процессора. Процессоры MIPS инициализируют ПК до 0xBFC00000 при сбросе и начинают выполнение кода для запуска операционной системы (ОС). Затем ОС загружает прикладную программу по адресу 0x00400000 и начинает ее выполнение. Для простоты в этой главе мы сбросим ПК на 0x00000000 и поместим туда наши программы.

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

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

      Практический пример: проектирование системы с использованием сердцевины Gumnut

      22.1 Обзор Gumnut

      22.1.1 Архитектура набора инструкций

      В таблице 22.1 приведен полный набор инструкций Gumnut в формате языка ассемблера. В таблице rd и rs — регистры, op2 — регистр ( rs2 ) или непосредственное значение ( immed ), count – это количество позиций, на которые нужно сдвинуть или повернуть, disp – это смещение от адреса следующей инструкции, а addr — целевой адрес перехода.

      Таблица 22.1. Набор инструкций Gumnut

Арифметические и логические инструкции
добавить rd, rs, op2 Добавить rs и op2 , в результате получится rd
addc rd, rs, op2 Добавить rs и op2 с переносом, в результате получится rd
sub < em>rd, rs, op2 Вычесть op2 из rs , результатом будет rd
subc rd, rs, op2 Вычесть op2 из rs с переносом, получится rd
и rd, rs, op2 Логическое И rs и op2 , результат rd
или rd, rs, op2 Логическое ИЛИ rs и op2 , результат rd
xor rd, rs, op2 Логическое исключающее ИЛИ < эм>рс< /em> и op2 , результатом будет rd
mask rd, rs, op2 Логическое И rs и НЕ op2 , приводит к rd< /em>
Инструкции по смене
shl rd , rs, count Сдвинуть значение rs влево на count места, результат rd
shr rd, rs, count Сдвинуть значение rs вправо на количество мест, в результате получится rd
rol rd, rs, count Повернуть значение rs влево количество мест, результат rd
ror rd, rs , count Повернуть значение rs вправо на count места, в результате получится rd
Инструкции по работе с памятью и вводом-выводом
ldm rd, (rsсмещение Загрузить в rd из памяти
stm rd, (rsсмещение < /td>Сохранить в памяти из rd
inp rd, (rsсмещение Ввод в rd из регистра контроллера ввода
out rd, (rsсмещение Вывод в регистр выходного контроллера из rd
Инструкции по ответвлениям
bz ± disp Ветвление, если Z установлено
bnz ± disp Ветвление, если Z не установлено
bc ± disp Переход, если C установлен
bnc ± < em>disp Ветвь, если C не установлена
Инструкции перехода
jmp addr Перейти к addr
Перейти к подпрограмме по адресу addr
< em>Разные инструкции
retВозврат из подпрограммы
retiВозврат из прерывания
enaiВключить прерывания
disiОтключить прерывания
waitЖдать прерывания
stbyВходить в режим ожидания с низким энергопотреблением
< td >jsb addr< tr>

который читает из регистра контроллера ввода-вывода по адресу 156 в r3. Точно так же, если регистр содержит адрес, к которому мы хотим получить доступ, мы можем использовать смещение 0. Опять же, наш ассемблер позволяет нам подразумевать смещение 0 путем пропуска, как в инструкции

Первая из инструкций перехода, jmp, безоговорочно прерывает последовательный поток выполнения, устанавливая ПК на адрес, указанный в инструкции. Вторая инструкция перехода, jsb, позволяет нам вызывать подпрограмму. Она используется в паре с инструкцией ret, возвращающей из подпрограммы к месту вызова. Инструкция jsb помещает увеличенное значение ПК (адрес возврата) во внутренний стек, а затем обновляет ПК адресом подпрограммы, указанным в инструкции. Команда ret извлекает сохраненный адрес возврата из стека на ПК. Стек адресов возврата может содержать до восьми записей. Инструкции jmp и jsb не влияют на значения битов Z и C.

Остальные прочие инструкции относятся к прерываниям. Команда разрешения прерывания ( enai ) позволяет процессору реагировать на события прерывания, а инструкция отключения прерывания ( disi ) предотвращает ответ процессора. Когда процессор отвечает на событие прерывания, он сохраняет увеличенное значение PC и значения кодов условий Z и C в специальных регистрах, запрещает дальнейшие прерывания, а затем передает управление обработчику прерывания по адресу 1. Обработчик прерывания завершает работу с помощью инструкция возврата из прерывания ( reti ), а не инструкция ret.Команда reti восстанавливает сохраненные значения PC и кода состояния и повторно разрешает прерывания. Команда ожидания приостанавливает выполнение до тех пор, пока не произойдет прерывание, а инструкция ожидания переходит в режим ожидания с низким энергопотреблением до тех пор, пока не произойдет прерывание. Разница в том, что ЦП обычно может немедленно реагировать на прерывание при приостановке с помощью инструкции ожидания, тогда как для включения питания из инструкции ожидания может потребоваться некоторое время. Инструкции этой группы, кроме инструкции reti, не влияют на значения битов Z и C.

Все инструкции в Gumnut имеют длину 18 бит и кодируются в нескольких форматах, как показано на рис. 22.1. Крайние левые биты вместе с кодом функции (fn) образуют код операции. Кодирование, используемое для функциональных кодов, показано в таблице 22.2. Команды, в которых указаны номера регистров, имеют числа, закодированные в 3-битной двоичной форме в полях rd, rs и rs2 слова инструкции. . Точно так же инструкции, которые задают немедленные значения, смещения или смещения, имеют эти значения в двоичном коде в самых правых 8 битах командного слова. Заштрихованные части командного слова в каждом формате представляют биты, которые игнорируются.

Проблема 2

  1. Сколько страниц находится в виртуальном адресном пространстве?
  2. Каков максимальный размер адресуемой физической памяти в этой системе?
  3. Если средний размер процесса составляет 8 ГБ, вы бы использовали одноуровневую, двухуровневую или трехуровневую таблицу страниц? Почему?
  4. Вычислите средний размер таблицы страниц в ответе на вопрос 3 выше.

    36-битный адрес может адресовать 2 ^ 36 байтов в машине с байтовой адресацией. Поскольку размер страницы составляет 8 КБ (2^13), количество адресуемых страниц равно 2^36 / >2^13 = 2^23

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

Пейджинг 1 уровня
Поскольку у нас есть 2^23 страницы в каждом виртуальном адресном пространстве, и мы используем 4 байта на запись в таблице страниц, размер таблицы страниц будет 2^23 * 2^2 = 2 ^ 25. Это 1/256 собственного пространства памяти процесса, так что это довольно дорого. (32 МБ)

Пейджинг 2 уровня
Адрес будет разделен на 12 | 11 | 13, так как мы хотим, чтобы страницы таблицы страниц умещались на одной странице, и мы также хотим разделить биты примерно поровну.

Поскольку размер процесса составляет 8 ГБ = 2^33 Б, я предполагаю, что это означает, что общий размер всех отдельных страниц, к которым обращается процесс, составляет 2^33 Б. Следовательно, этот процесс обращается к 2^33 / 2^13 = 2^20 страниц. Нижний уровень таблицы страниц содержит 2^20 ссылок. Мы знаем, что размер каждого фрагмента нижнего уровня таблицы страниц составляет 2 ^ 11 записей. Таким образом, нам нужно 2^20 / 2^11 = 2^9 фрагментов нижнего уровня.

Тогда общий размер таблицы страниц равен:

Арифметические и логические инструкции
добавить rd, rs, op2 Добавить rs и op2 , в результате получится rd
addc rd, rs, op2 Добавить rs и op2 с переносом, в результате получится rd
sub < em>rd, rs, op2 Вычесть op2 из rs , результатом будет rd
subc rd, rs, op2 Вычесть op2 из rs с переносом, получится rd
и rd, rs, op2 Логическое И rs и op2 , результат rd
или rd, rs, op2 Логическое ИЛИ rs и op2 , результат rd
xor rd, rs, op2 Логическое исключающее ИЛИ < эм>рс< /em> и op2 , результатом будет rd
mask rd, rs, op2 Логическое И rs и НЕ op2 , приводит к rd< /em>
Инструкции по смене
shl rd , rs, count Сдвинуть значение rs влево на count места, результат rd
shr rd, rs, count Сдвинуть значение rs вправо на количество мест, в результате получится rd
rol rd, rs, count Повернуть значение rs влево количество мест, результат rd
ror rd, rs , count Повернуть значение rs вправо на count места, в результате получится rd
Инструкции по работе с памятью и вводом-выводом
ldm rd, (rsсмещение Загрузить в rd из памяти
stm rd, (rsсмещение < /td>Сохранить в памяти из rd
inp rd, (rsсмещение Ввод в rd из регистра контроллера ввода
out rd, (rsсмещение Вывод в регистр выходного контроллера из rd
Инструкции по ответвлениям
bz ± disp Ветвление, если Z установлено
bnz ± disp Ветвление, если Z не установлено
bc ± disp Переход, если C установлен
bnc ± < em>disp Ветвь, если C не установлена
Инструкции перехода
jmp addr Перейти к addr
Перейти к подпрограмме по адресу addr
< em>Разные инструкции
retВозврат из подпрограммы
retiВозврат из прерывания
enaiВключить прерывания
disiОтключить прерывания
waitЖдать прерывания
stbyВходить в режим ожидания с низким энергопотреблением
//размер внешней таблицы страниц //общий размер внутренних страниц< /td>
1 * 2^12 * 4 + 2^9 * 2^11 * 4 = 2^20 * ( 2^-6 + 4) ~4 МБ

3 уровня пейджинга
Для 3 уровня пейджинга мы можем разделить адрес следующим образом:
8 | 8 | 7 | 13

Опять же, используя те же рассуждения, что и выше, нам нужно 2 ^ 20/2 ^ 7 = 2 ^ 13 фрагментов таблицы страниц уровня 3. Каждый фрагмент таблицы страниц уровня 2 ссылается на 2^8 фрагментов таблицы страниц уровня 3. Итак, нам нужно 2^13/2^8 = 2^5 таблиц уровня 2. И, конечно же, одна таблица уровня 1.

Общий размер таблицы страниц равен:

//размер внешней таблицы страниц //общий размер таблиц уровня 2 //общий размер самых внутренних таблиц
1 * 2^8 * 4 2^5 * 2^8 *4 2^13 * 2^7 * 4 ~4MB
Как легко заметить, двухуровневая и трехуровневая подкачка требуют гораздо меньше места, чем подкачка уровня 1. схема. И поскольку наше адресное пространство недостаточно велико, 3-уровневая подкачка работает не лучше, чем 2-уровневая подкачка. Из-за стоимости доступа к памяти гораздо логичнее выбрать двухуровневую схему подкачки для этого процесса.

Проблема 3

  1. Каков размер страницы в такой системе? Объясните свой ответ (число без обоснования не будет засчитано).

    4К. Последние 12 бит виртуального адреса представляют собой смещение на странице, которое варьируется от 0 до 4095. Таким образом, размер страницы равен 4096, то есть 4 КБ.

Поскольку физические адреса имеют длину 44 бита, а размер страницы — 4 КБ, номер кадра страницы занимает 32 бита. Принимая во внимание 4 защитных бита, каждая запись таблицы страниц уровня 3 занимает (32+4) = 36 бит. Округление для выравнивания записей по байтам (словам) приведет к тому, что каждая запись будет потреблять 40 (64) бит или 5 (8) байтов. Для таблицы из 256 записей нам потребуется 1280 (2048) байт.

Таблица страниц верхнего уровня не должна предполагать, что таблицы страниц 2-го уровня выровнены по страницам. Итак, мы храним там полные физические адреса. К счастью, нам не нужны управляющие биты.Таким образом, каждая запись занимает не менее 44 бит (6 байтов для выравнивания по байтам, 8 байтов для выравнивания по словам). Таким образом, каждая таблица страниц верхнего уровня имеет размер 256*6 = 1536 байт (256 * 8 = 2048 байт).

Попытка воспользоваться выравниванием по 256 элементам для уменьшения размера элемента, вероятно, не стоит усилий. Сделать это было бы сложно; вам нужно будет написать новый распределитель памяти, который гарантирует такое выравнивание. Кроме того, мы не можем полностью уместить таблицу в выровненную область размером 1024 байта (44-10 = 34 бита на адрес, что потребовало бы более 4 байтов на запись), и округление размера до следующей степени двойки не спасло бы использовать любой размер, а не просто хранить указатели и использовать обычный распределитель.

Аналогично каждая запись в таблице страниц 2-го уровня представляет собой 44-битный физический указатель, 6 байтов (8 байтов) при выравнивании по байтам (словам). Таким образом, таблица с 16 элементами занимает 96 (128) байт. Таким образом, требуемое пространство составляет 1536 (2048) байт для таблицы страниц верхнего уровня + 96 (128) байт для одной таблицы страниц второго уровня + 1280 (2048) байт для одной таблицы страниц третьего уровня = 2912 (4224) байт. Поскольку процесс может уместиться ровно на 16 страницах, внутренняя фрагментация не тратит память впустую.

Таким образом, требуемое пространство составляет 1536 (2048) байт для таблицы страниц верхнего уровня + 3 * 96 (3 * 128) байт для 3 таблиц страниц второго уровня + 3 * 1280 (3 * 2048) для 3 таблиц страниц третьего уровня. таблица страниц = 5664 (8576) байт.

Проблема 4

В соответствии с философией проектирования процессоров RISC, заключающейся в перемещении аппаратной функциональности в программное обеспечение, вы видите предложение о том, чтобы разработчики процессоров удаляли MMU (блок управления памятью) из аппаратного обеспечения. Чтобы заменить MMU, компиляторы генерируют так называемый позиционно-независимый код (PIC). PIC может быть загружен и запущен по любому адресу без выполнения какого-либо перемещения. Если предположить, что код PIC работает так же быстро, как код без PIC, в чем будет недостаток этой схемы по сравнению со страничным MMU, используемым в современных микропроцессорах?

Решение:
Нужно решение.

Проблема 5

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

Решение:
Нужно решение.

Проблема 6

Рассмотрите следующий фрагмент кода, который умножает две матрицы. Предположим, что двоичный файл для выполнения этой функции умещается на одной странице, и стек также умещается на одной странице. Предположим далее, что для хранения целого числа требуется 4 байта. Вычислите количество промахов TLB, если размер страницы равен 4096, а TLB имеет 8 записей с замещающей политикой, состоящей из LRU.

Решение:
1024*(2+1024*1024) = 1073743872
Двоичный файл и стек умещаются на одной странице, поэтому каждый занимает одну запись в TLB. Пока функция работает, она постоянно обращается к двоичной странице и странице стека. Таким образом, две записи TLB для этих двух страниц будут все время находиться в TLB, а данные могут занимать только оставшиеся 6 записей TLB.

Мы предполагаем, что две записи уже находятся в TLB, когда функция начинает выполняться. Затем нам нужно рассмотреть только эти страницы данных.

Поскольку для хранения целого числа требуется 4 байта, а размер страницы составляет 4096 байт, для каждого массива требуется 1024 страницы. Предположим, что каждая строка массива хранится на одной странице. Тогда эти страницы можно представить в виде a[0..1023], b[0..1023], c[0..1023]: Страница a[0] содержит элементы a[0][0..1023], страница a[1] содержит элементы a[1][0..1023] и т. д.

Для фиксированного значения i, скажем, 0, функция выполняет цикл по j и k, у нас есть следующая ссылочная строка:

Для ссылочной строки (всего 1024 строки) a[0], c[0] приведут к двум промахам TLB. Поскольку доступ к a[0] и b[0] будет осуществляться через каждые четыре обращения к памяти, эти две страницы не будут заменены алгоритмом LRU. Для каждой страницы в b[0..1023] каждый раз при доступе к ней будет происходить один промах TLB. Таким образом, количество промахов TLB для второго внутреннего цикла равно
2+1024*1024 = 1048578.

Интерактивный симулятор процессора на основе Java для использования на вводных занятиях по компьютерной организации

Обзор

CPU Sim — это Java-приложение, которое позволяет пользователям проектировать простые компьютерные ЦП на уровне микрокода и запускать на этих ЦП программы на машинном языке или языке ассемблера посредством моделирования. Его можно использовать для моделирования различных архитектур, включая архитектуры на основе аккумуляторов, RISC или стека (например, JVM). Это полезный инструмент для преподавателей, которые хотят, чтобы их ученики на практике познакомились с различными архитектурами и получили возможность разрабатывать и реализовывать свои собственные архитектуры и писать программы на машинном языке и языке ассемблера для своих архитектур.

Новейшая версия 4 CPU Sim написана с использованием пакета JavaFX.(Версия 3, которая все еще доступна, была написана с использованием пакета Swing.) Версия 4 CPU Sim должна работать на любой платформе, имеющей среду выполнения Java (JRE) версии 1.8.0u66 или более поздней. на нем установлена ​​версия Java 1.8, но не Java 9 или Java 10. Версия 3 CPU Sim должна работать на любой платформе, на которой установлена ​​JRE версии 1.5 или более поздней. Версия 4 обратно совместима с версией 3, поскольку все машины, созданные в версии 3, могут быть загружены и запущены в версии 4.

Возможности обеих версий 3 и 4

  • Инструменты для проектирования ЦП на уровне переноса регистров:
    • Диалоги для указания количества и ширины регистров, массивов регистров и оперативной памяти.
    • Диалоги для указания микроинструкций (например, передачи битов между регистрами), которые используются для реализации машинных инструкций.
    • Диалоговое окно для указания машинных инструкций, включая:
      • количество битов в каждой инструкции
      • значение кода операции и количество бит, которое занимает код операции
      • количество операндов и свойства каждого операнда
      • семантика каждой инструкции (как определено последовательностью микроинструкций)

      Новые функции версии 4

      • Появился новый главный рабочий стол. Регистры и массивы регистров находятся в левой колонке, оперативная память — в правой колонке, а редактор на ассемблере — в центре. Консоль внизу.

      Подробнее о версии 3

      Вот несколько изображений диалоговых окон, окон и меню версии 3. В версии 3 есть версия на китайском языке, которой еще нет в версии 4.

      Загрузки

      CPU Sim предоставляется бесплатно.

      Вы можете загрузить ZIP-файл размером 5 МБ, содержащий версию 4.0.11 пакета CPU Sim. Инструкции по установке Версии 4 объясняют, что находится в zip-файле и как установить и запустить пакет. Руководство пользователя доступно в меню «Справка» программы CPU Sim. Примечание. Вам потребуется установить на компьютер Java Runtime Environment (JRE) версии 1.8.0u66 или более поздней.

      Вы по-прежнему можете загрузить ZIP-файл размером 5 МБ, содержащий версию 3.9.0 пакета CPU Sim. Инструкции по установке версии 3 объясняют, что находится в zip-файле и как установить и запустить пакет. Руководство пользователя доступно в меню «Справка» программы CPU Sim. Примечание. Вам потребуется установить на компьютер Java Runtime Environment (JRE) версии 1.5 или более поздней.

      Также доступно руководство для инструктора, включающее примеры проектов по программированию и их решения. Пожалуйста, свяжитесь со мной по адресу djskrien@colby.edu, если вы заинтересованы в этих дополнительных материалах.

      Если вам интересно посмотреть исходный код, CPU Sim является открытым исходным кодом и доступен для загрузки на GitHub.

      Кроме того, на YouTube есть плейлист, созданный Аншуманом Бхардваджем, в котором показано, как установить и запустить CPU Sim и как создать новый процессор для имитации.

      Предыдущие версии

      Версии 1 и 2 CPU Sim были написаны в начале 1990-х с использованием Macintosh Common Lisp, поэтому они работали только на платформе Macintosh. Версия 2.2 этого программного обеспечения получила награду EDUCOM Higher Education Software and Curriculum Innovation Award 1993 за лучшее инженерное программное обеспечение (информатика). Это был один из 10 победителей из более чем 140 заявок. Версия на основе Macintosh Common Lisp (2.6.5) по-прежнему доступна как для MC680x0, так и для PowerPC. Это единственные версии CPU Sim, работающие в MacOS 9 и более ранних версиях.

      Если вас интересуют более ранние версии, свяжитесь со мной по адресу djskrien@colby.edu.

      Статьи о CPU Sim и его предшественнике

      КЕРРИДЖ Дж. И УИЛЛИС Н. 1980. Симулятор для обучения компьютерной архитектуре. Бюллетень SIGCSE, 12(2), 65-71.
      Этот симулятор является предшественником CPU Sim.

      SKRIEN, D., AND HOSACK, J. 1991. Многоуровневый симулятор на уровне передачи регистров для использования в вводном классе организации машин.Бюллетень SIGCSE (Документы 22-го технического симпозиума ACM/SIGCSE по компьютерному образованию), 23(1), 347-351.
      В этой статье описывается версия 1.0.13 CPU Sim.

      SKRIEN, D. 1994. Симулятор ЦП: компьютерный симулятор для использования на вводном уроке компьютерной организации. Журнал вычислительной техники в высшем образовании, 6(1), 3-13.
      В этой статье описывается версия 2.2 CPU Sim.

      SKRIEN, D. 2001. CPU Sim 3.1: Инструмент для моделирования компьютерных архитектур для классов компьютерной организации. Журнал образовательных ресурсов в области вычислительной техники ACM (JERIC) 1 (4), 46-59. Этот выпуск JERIC — специальный, посвященный симуляторам компьютерной архитектуры.

      Я также представил на выставке SIGCSE 2002 плакат преподавателей о CPU Sim 3.1.

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