Лекция 1
Цель данного курса - рассказать об архитектуре компьютера на примере чего-то более простого и понятного, чем x86.
Архитектура процессоров MIPS: - уже немного стала устаревать - будем говорить про MIPS32 - система команд не вызывает затруднений в понимании - на примере данной архитектуры удобно рассказывать о языках ассемблера вообще.
Короче, цель курса - пересказать курс "Архитектуры ЭВМ" без лишних деталей.
К сожалению, придётся выкинуть некоторые части программы из-за нехватки времени; но посмотрим.
Вспомним материал первого семестра первого года обучения.
Что требуется от формального алгоритмически полного вычислителя?
Данные - то, что мы будем обрабатывать Операции - то, как мы будем преобразовывать данные
1. Данные и операции должны как-то храниться в самом вычислителе с возможностью адресации 2. Существует порядок применения операций 3. Data-driven execution (calculation) - выполнение операций, определяемое свойствами данных 3.а 1 или 0 раз 3.б итеративное выполнение Строго говоря, пункты 3а и 3б можно заменить одним пунктом 3б
В архитектуре фон Неймана: 1. двоичное кодирование 2. память для хранения и команд, и данных 3. однородная, линейная, адресуемая память 4. последовательное выполнение команд 5. условный переход (для организации data-driven execution) 6. ввод-вывод данных
Ссылка на ячейку памяти - просто номер этой ячейки
Сам фон Нейман, кстати, эти принципы никогда в такой форме не формулировал.
Архитектура фон Неймана - очевидно, лишь очень частный вариант алгоритмически полного вычислителя. И, разумеется, не единственный возможный.
Многие из принципов фон Неймана диктовались просто элементной базой того времени.
Самое эффективное кодирование - e-ичное
С этой точки зрения троичная система эффективнее
Это нужно иметь в виду в течение всего курса: зачастую некоторое решение воплощается в железе и потом просто дублируется в таком же виде десятилетиями, хотя можно было бы перейти на более современные технологии
Общий принцип развития ЭВМ: 1. появляется задача 2. находятся 1-2 частных решения этой задачи 3. эти решения канонизируются и застывают надолго (legacy)
регистры - просто для ускорения, что не имеет никакого отношения к теоретической вычислимости
память - быстрая и дорогая или медленная и дешёвая
когда мы работаем с ЭВМ, мы хотим, чтобы наши вычисления были быстрыми и дешёвыми, приходится выбирать
быстрая память - хранение - регистры медленная память - обработка - ОЗУ
двухместные операнды - чтобы уменьшить размер команд
В архитектуре MIPS флаги не нужны, потому что в ней нет двухадресных команд
Зачем нужен язык ассемблера? 1. мнемоничность команд (проще понять и запомнить, что происходит) 2. ссылки на объекты становятся символическими - при изменении кода не "едет" адресация везде ниже по коду 3. удобное представление данных 4. Однозначность порождаемого кода
Некоторое время, пока мы не придумаем, как использовать реальный Байкал-Т, мы будем использовать для домашних заданий эмулятор MARS.
Подробнее об особенностях эмулятора см. [[| этот кусочек лекции]].
Начнём, раз осталось время, разговор про MIPS.
MIPS - одна из реализаций архитектуры RISC.
Сначала развитие вычислительной техники шло в сторону усложнения (примерно до 80-ых? пример - строковые команды ассемблера), после чего появился тренд на использование лишь простых, понятных команд, которые можно посчитать и время выполнения которых достоверно небольшое.
Так и появилась архитектура RISC
Как обеспечивать эффективность, если все команды очень маленькие?
Каждая команда состоит из нескольких частей, которые, вообще говоря, можно выполнять параллельно.
Отсюда - идея конвейеризации + RISC-набора команд