• Название:

    Вопросы 32 33


  • Размер: 0.14 Мб
  • Формат: RTF
  • Сообщить о нарушении / Abuse

    Осталось ждать: 20 сек.

Установите безопасный браузер



Предпросмотр документа

32.Процессор: архитектура, основные характеристики(устройства, набор команд)

Центральный процессор (ЦП или центральное процессорное устройство ЦПУ) либо исполнитель машинных инструкций (кода программ), главная часть или программируемого логического контроллера.

Архитектура это принципы построения сложных систем.

Архитектура фон Неймана

Большинство современных процессоров для персональных компьютеров в общем основаны на той или иной версии циклического процесса последовательной обработки данных, изобретённого Джоном фон Нейманом.

Дж. фон Нейман придумал схему постройки компьютера в 1946 году. Отличительной особенностью архитектуры фон Неймана является то, что инструкции и данные хранятся в одной и той же памяти.

В различных архитектурах и для различных команд могут потребоваться дополнительные этапы. Например, для арифметических команд могут потребоваться дополнительные обращения к памяти, во время которых производится считывание операндов и запись результатов.

Этапы цикла выполнения:

1.Процессор выставляет число, хранящееся в регистр счетчика команд на шину адреса и отдаёт памяти команду чтения.

2.Выставленное число является для памяти адресом; память, получив адрес и команду чтения, выставляет содержимое, хранящееся по этому адресу, на шину даных и сообщает о готовности.

3.Процессор получает число с шины данных, интерпретирует его как команду (машинную инструкцию) из своей системы команд и исполняет её.

4.Если последняя команда не является командой перехода, процессор увеличивает на единицу (в предположении, что длина каждой команды равна единице) число, хранящееся в счётчике команд; в результате там образуется адрес следующей команды.

Данный цикл выполняется неизменно, и именно он называется процессом (откуда и произошло название устройства).

Во время процесса процессор считывает последовательность команд, содержащихся в памяти, и исполняет их. Такая последовательность команд называется программой и представляет алгоритм работы процессора. Очерёдность считывания команд изменяется в случае, если процессор считывает команду перехода, тогда адрес следующей команды может оказаться другим. Другим примером изменения процесса может служить случай получения команды остановка или переключение в режим обработки прерывания.

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

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

Конвейерная архитектура

Конвейерная архитектура была введена в центральный процессор с целью повышения быстродействия. Обычно для выполнения каждой команды требуется осуществить некоторое количество однотипных операций, например: выборка команды из ОЗУ, дешифровка команды, адресация операнда в ОЗУ, выборка операнда из ОЗУ, выполнение команды, запись результата в ОЗУ. Каждую из этих операций сопоставляют одной ступени конвейера. Например, конвейер микропроцессора с архитектурой MIPS-I содержит четыре стадии:

получение и декодирование инструкции,

адресация и выборка операнда из ОЗУ,

выполнение арифметических операций,

сохранение результата операции.

После освобождения k-й ступени конвейера она сразу приступает к работе над следующей командой. Если предположить, что каждая ступень конвейера тратит единицу времени на свою работу, то выполнение команды на конвейере длиной в n ступеней займёт n единиц времени, однако в самом оптимистичном случае результат выполнения каждой следующей команды будет получаться через каждую единицу времени.

Действительно, при отсутствии конвейера выполнение команды займёт n единиц времени (так как для выполнения команды по-прежнему необходимо выполнять выборку, дешифровку ит.д.), и для исполнения m команд понадобится единиц времени; при использовании конвейера (в самом оптимистичном случае) для выполнения m команд понадобится всего лишь n + m единиц времени.

Факторы, снижающие эффективность конвейера:

1.Простой конвейера, когда некоторые ступени не используются (напр., адресация и выборка операнда из ОЗУ не нужны, если команда работает с регистрами).

2.Ожидание: если следующая команда использует результат предыдущей, то последняя не может начать выполняться до выполнения первой (это преодолевается при использовании внеочередного выполнения команд out-of-order execution).

3.Очистка конвейера при попадании в него команды перехода (эту проблему удаётся сгладить, используя предсказание переходов).

Некоторые современные процессоры имеют более 30 ступеней в конвейере, что увеличивает производительность процессора, однако приводит к большому времени простоя (например, в случае ошибки в предсказании условного перехода). Не существует единого мнения по поводу оптимальной длины конвейера: различные программы могут иметь существенно различные требования.

Суперскалярная архитектура

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

CISC-процессоры

Complex instruction set computer вычисления со сложным набором команд. Процессорная архитектура, основанная на усложнённом наборе команд. Типичными представителями CISC являются микропроцессоры семейства x86 (хотя уже много лет эти процессоры являются CIS C только по внешней системе команд: в начале процесса исполнения сложные команды разбиваются на более простые микрооперации, исполняемые RISC-ядром).

RISC-процессоры

Reduced instruction set computer вычисления с упрощённым набором команд (в литературе слово «reduced» нередко ошибочно переводят как «сокращённый»). Архитектура процессоров, построенная на основе упрощённого набора команд, характеризуется наличием команд фиксированной длины, большого количества регистров, операций типа регистр-регистр, а также отсутствием косвенной адресации. Концепция RISC разработана Джоном Коком (John Cocke) из IBM Research, название придумано Дэвидом Паттерсоном (David Patterson).

Упрощение набора команд призвано сократить конвейер, что позволяет избежать задержек на операциях условных и безусловных переходов. Однородный набор регистров упрощает работу компилятора при оптимизации исполняемого программного кода. Кроме того, RISC-процессоры отличаются меньшим энергопотреблением и тепловыделением.

Среди первых реализаций этой архитектуры были процессоры MIPS, PowerPC, SPARC, Altha, PA-RISC. В мобильных устройствах широко используются ARM-процессоры.

MISC-процессоры

Minimum instruction set computer вычисления с минимальным набором команд. Дальнейшее развитие идей команды Чака Мура, который полагает, что принцип простоты, изначальный для RISC-процессоров, слишком быстро отошёл на задний план. В пылу борьбы за максимальное быстродействие, RISC догнал и перегнал многие CISC процессоры по сложности. Архитектура MISC строится на стековой вычислительной модели ограниченным числом команд (примерно 20-30 команд).

VLIW-процессоры

Very long instruction word сверхдлинное командное слово. Архитектура процессоров с явно выраженным параллелизмом вычислений, заложенным в систему команд процессора. Являются основой для архитектуры EPIC. Ключевым отличием от суперскалярных CISC-процессоров является то, что для них загрузкой исполнительных устройств занимается часть процессора (планировщик), на что отводится достаточно малое время, в то время как загрузкой вычислительных устройств для VLIW-процессора занимается компилятор, на что отводится существенно больше времени (качество загрузки и, соответственно, производительность теоретически должны быть выше). Примером VLIW-процессора является Intel Itanium.

33.Арифметические и логические операции с целыми и вещественными числами

АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ

Основными арифметическими операциями являются: сложение ('+'), вычитание ('-'), умножение ('*') и деление ('/'). Порядок выполнения операций в выражении соответствует их приоритету. Операции с одинаковым приоритетом в выражении выполняются слева направо.

имеет целочисленный тип, а действительный тип. Следующая таблица демонстрирует результаты деления для различных операндов:

ОперацияРезультат= 7 / 3; = 2 = 7 / 3; = 2.000000 = 7.0 / 3; = 2.333333 = (double)7 / 3; = 2.333333 .

В четвертом примере перед выполнением операции деления происходит преобразование типа делимого из целого в вещественный. Поэтому деление будет производиться без потери точности.

Найти среднее арифметическое двух целых чисел и .

Результатом вычисления выражения (+)/2 может быть действительное число. Поэтому деление должно выполняться с сохранением точности. А для этого один из операндов необходимо преобразовать в действительный тип. Например, результат можно вычислить так: = (+)/2.0. Программа имеет вид:

#include < stdio.h >

int a,b;

double res;

void main(void)

scanf("%d %d",&a,&b);

res = (a + b) / 2.0;

printf("%lf\\n",res);

при делении отрицательного числа на положительное является отрицательным (хотя математически остаток при делении на число должен лежать в промежутке от 0 до 1 включительно).

ОперацияРезультат= 6 % 3 = 0= 8 % 3 = 2= -6 % 3 = 0= -8 % 3 = -2 = + 1 можно писать ++. Если < > некоторая бинарная операция, то вместо = < > можно писать < >= . Примеры сокращений приведены ниже в таблице:

ОперацияСокращениеi = i + 1i++i = i - 1i--i = i + ai += ai = i %a1i %= a Временем будем называть пару : , где обозначает количество часов, а количество минут. Известно, что в 1 : 1 начался дождь, а в 2 : 2 он закончился (0 '3f 1, 2 '3f 23, 0 '3f 1, 2 '3f 59). Необходимо вычислить, сколько времени ( : ) шел дождь. Известно, что дождь продолжался не более 24 часов.

1 : 1 больше чем2 : 2, то дождь начался в один день, а закончился на следющий. Например, если 1 : 1 = 23:50 и 2 : 2 = 13:20, то дождь длился 13 часов и 30 минут.

: соответствует *60 + минут, прошедших с полночи. Тогда можно утверждать, что дождь начался в 1 = 1 * 60 + 1 минут, а закончился в 2 = 2 * 60 + 2 минут. Разность между началом и концом дождя составляет = (2 1 + 24 * 60) % (24 * 60) минут. Выделяем количество часов и минут из и выводим их на экран.

#include < stdio.h >

int h1, h2, m1, m2, time1, time2, timeRes, hres, mres;

void main(void)

h1 = 23; m1 = 50;

h2 = 13; m2 = 20;

time1 = h1 * 60 + m1; time2 = h2 * 60 + m2;

timeRes = (time2 - time1 + 24 * 60) % (24 * 60);

hres = timeRes / 60; mres = timeRes % 60;

printf("%d:%d\\n",hres,mres);

Среди логических операций следует выделить операции 'и' ('and'), 'или' ('or'), отрицание 'не' ('not') и сложение по модулю 2 ('xor'). В языке Си логические операции обозначаются следующим образом:

ОперацияОбозначение в Сиx and yx && yx or yx || ynot x!x xor yx ^ y Таблицы истинности логических операций приведены в следующих таблицах:

andornot xor 0000000100001001110011100101101111111110 == ) эквивалентно !( xor ). Операция называется операцией "сложение по модулю 2", потому что xor = ( + ) mod 2. Логические операции подчиняются правилу Де-Моргана:

not ( and ) = (not ) or (not )

или то же самое

!( && ) = ! || !