ОСНОВНЫЕ ФАКТОРЫ, ВЛИЯЮЩИЕ НА БЫСТРОДЕЙСТВИЕ ПРОЦЕССОРА. РЕГИСТРЫ ПРОЦЕССОРА
Как уже упоминалось, внутренние регистры процессора представляют собой сверхоперативную память небольшого размера, которая предназначена для временного хранения служебной информации или данных. Количество регистров в разных процессорах может быть от 6-8 до нескольких десятков. Регистры могут быть универсальными и специализированными. Специализированные регистры, которые присутствуют в большинстве процессоров, — это регистр-счетчик команд, регистр состояния (PSW), регистр указателя стека. Остальные регистры процессора могут быть как универсальными, так и специализированными.
Например, в 16-разрядном процессоре Т-11 фирмы DEC было 8 регистров общего назначения (РОН) и один регистр состояния. Все регистры имели по 16 разрядов. Из регистров общего назначения один отводился под счетчик команд, другой — под указатель стека. Все остальные регистры общего назначения полностью взаимозаменяемы, то есть имеют универсальное назначение, могут хранить как данные, так и адреса (указатели), индексы и т.д. Максимально допустимый объем памяти для данного процессора составлял 64 Кбайт (адрес памяти 16-разрядный).
В 16-разрядном процессоре MC68000 фирмы Motorola было 19 регистров: 16-разрядный регистр состояния, 32-разрядный регистр счетчика команд, 9 регистров адреса (32-разрядных) и 8 регистров данных (32-разрядных). Два регистра адреса отведены под указатели стека. Максимально допустимый объем адресуемой памяти — 16 Мбайт (внешняя шина адреса 24-разрядная). Все 8 регистров данных взаимозаменяемы. 7 регистров адреса — тоже взаимозаменяемы.
В 16-разрядном процессоре Intel 8086, который стал базовым в линии процессоров, используемых в персональных компьютерах, реализован принципиально другой подход. Каждый регистр этого процессора имеет свое особое назначение, и заменять друг друга регистры могут только частично или же не могут вообще. Остановимся на особенностях этого процессора подробнее.
Процессор 8086 имеет 14 регистров разрядностью по 16 бит. Из них четыре регистра (AX, BX, CX, DX) — это регистры данных, каждый из которых помимо хранения операндов и результатов операций имеет еще и свое специфическое назначение:
- — регистр AX — умножение, деление, обмен с устройствами ввода / вывода (команды ввода и вывода);
- — регистр BX — базовый регистр в вычислениях адреса;
- — регистр CX — счетчик циклов;
- — регистр DX — определение адреса ввода / вывода.
Для регистров данных существует возможность раздельного использования обоих байтов (например, для регистра AX они имеют обозначения AL — младший байт и AH — старший байт). Следующие четыре внутренних регистра процессора — это сегментные регистры, каждый из которых определяет положение одного из рабочих сегментов (Рисунок 3.10):
- — регистр CS (Code Segment) соответствует сегменту команд, исполняемых в данный момент;
- — регистр DS (Data Segment) соответствует сегменту данных, с которыми работает процессор;
- — регистр ES (Extra Segment) соответствует дополнительному сегменту данных;
- — регистр SS (Stack Segment) соответствует сегменту стека.
Рисунок 3.10 — Сегменты команд, данных и стека в памяти
В принципе, все эти сегменты могут и перекрываться для оптимального использования пространства памяти. Например, если программа занимает только часть сегмента, то сегмент данных может начинаться сразу после завершения работы программы (с точностью 16 байт), а не после окончания всего сегмента программы.
Следующие пять регистров процессора (SP — Stack Pointer, BP — Base Pointer, SI — Source Index, DI — Destination Index, IP — Instruction Pointer) служат указателями (то есть определяют смещение в пределах сегмента). Например, счетчик команд процессора образуется парой регистров CS и IP, а указатель стека — парой регистров SP и SS. Регистры SI, DI используются в строковых операциях, то есть при последовательной обработке нескольких ячеек памяти одной командой.
Последний регистр FLAGS — это регистр состояния процессора (PSW). Из его 16 разрядов используются только девять (Рисунок 3.11): CF (Carry Flag) — флаг переноса при арифметических операциях, PF (Parity Flag) — флаг четности результата, AF (Auxiliary Flag) — флаг дополнительного переноса, ZF (Zero Flag) — флаг нулевого результата, SF (Sign Flag) — флаг знака (совпадает со старшим битом результата), TF (Trap Flag) — флаг пошагового режима (используется при отладке), IF (Interrupt-enable Flag) — флаг разрешения аппаратных прерываний, DF (Direction Flag) — флаг направления при строковых операциях, OF (Overflow Flag) — флаг переполнения.
Рисунок 3.11 — Регистр состояния процессора 8086
Биты регистра состояния устанавливаются или очищаются в зависимости от результата исполнения предыдущей команды и используются некоторыми командами процессора. Биты регистра состояния могут также устанавливаться и очищаться специальными командами процессора (о системе команд процессора будет рассказано в следующем разделе).
Во многих процессорах выделяется специальный регистр, называемый аккумулятором (то есть накопителем). При этом, как правило, только этот регистр-аккумулятор может участвовать во всех операциях, только через него может производиться взаимодействие с устройствами ввода / вывода. Иногда в него же помещается результат любой выполненной команды (в этом случае говорят даже об «аккумуляторной» архитектуре процессора). Например, в процессоре 8086 регистр данных АХ можно считать своеобразным аккумулятором, так как именно он обязательно участвует в командах умножения и деления, а также только через него можно пересылать данные в устройство ввода / вывода и из устройства ввода / вывода. Выделение специального регистра-аккумулятора упрощает структуру процессора и ускоряет пересылки кодов внутри процессора, но в некоторых случаях замедляет работу системы в целом, так как весь поток информации должен пройти через один регистр-аккумулятор. В случае, когда несколько регистров процессора полностью взаимозаменяемы, таких проблем не возникает.
Быстродействие процессора — это одна из важнейших его характеристик, определяющая эффективность работы всей микропроцессорной системы в целом. Быстродействие процессора зависит от множества факторов, что затрудняет сравнение быстродействия даже разных процессоров внутри одного семейства, не говоря уже о процессорах разных фирм и разного назначения.
Выделим важнейшие факторы, влияющие на быстродействие процессора.
Прежде всего, быстродействие зависит от тактовой частоты процессора. Все операции внутри процессора выполняются синхронно, тактируются единым тактовым сигналом. Понятно, что чем больше тактовая частота, тем быстрее работает процессор, причем, например, двукратное увеличение тактовой частоты какого-то процессора снижает вдвое время выполнения команд этим процессором.
Однако надо учитывать, что разные процессоры выполняют одинаковые команды за разное количество тактов, причем количество тактов, затрачиваемых на команду, может изменяться от одного такта до десятков или даже сотен. В некоторых процессорах за счет распараллеливания микроопераций на команду тратится даже меньше одного такта.
Количество тактов, затрачиваемых на выполнение команды, зависит от сложности этой команды и от методов адресации операндов. Например, быстрее всего (за меньшее число тактов) выполняются команды пересылки данных между внутренними регистрами процессора. Медленнее всего (за большое число тактов) выполняются сложные арифметические команды с плавающей запятой, операнды которых хранятся в памяти.
Первоначально для количественной оценки производительности процессоров применялась единица измерения MIPS (Mega Instruction Per Second), соответствовавшая количеству миллионов выполняемых инструкций (команд) за секунду. Естественно, изготовители микропроцессоров старались ориентироваться на самые быстрые команды. Понятно, что подобный показатель не слишком удачен. Для измерения производительности при выполнении вычислений с плавающей запятой (точкой) чуть позже была предложена единица FLOPS (Floating point Operations Per Second), но она по определению узкоспециальная, так как в некоторых системах операции с плавающей запятой просто не используются.
Другой аналогичный показатель быстродействия процессора — время выполнения коротких (быстрых) операций. Для примера в таблице 3.1 представлены показатели быстродействия нескольких 8-разрядных и 16-разрядных процессоров. В настоящее время этот показатель практически не используется, как и MIPS.
Время выполнения команд — важный, но далеко не единственный фактор, определяющий быстродействие. Большое значение имеет также структура системы команд процессора. Например, некоторым процессорам для выполнения какой-то операции понадобится одна команда, а другим процессорам — несколько команд. Какие-то процессоры имеют систему команд, позволяющую быстро решать задачи одного типа, а какие-то — задачи другого типа. Важны и методы адресации, разрешенные в данном процессоре, и наличие сегментирования памяти, и способы взаимодействия процессора с устройствами ввода / вывода и т.д.
Существенно влияет на быстродействие системы в целом и то, как процессор «общается» с памятью команд и памятью данных, применяется ли совмещение выборки команд из памяти с выполнением ранее выбранных команд
Быстродействие системы в целом определяется также и разрядностью процессора. Например, 8-разрядный процессор будет медленнее пересылать и обрабатывать большие массивы данных, чем 16-разрядный процессор. Точно так же 16-разрядный процессор будет значительно медленнее работать с большими числами (большими, чем 65536), чем 32-разрядный процессор.
При высокой сложности решаемых задач быстродействие системы зависит и от общего объема системной памяти. Ведь если системной памяти мало, системе приходится сохранять данные во внешней памяти (например, на магнитном диске), а это очень сильно (на несколько порядков) замедляет работу. Так что разрядность шины адреса процессора тоже важна.
Поэтому количественные показатели производительности процессоров очень условны, они лишь косвенно характеризуют быстродействие системы на базе этого процессора. Тем не менее, некоторые производители предлагают количественные показатели для своих процессоров, которые характеризуют время выполнения специально составленных тестовых программ, содержащих самые различные команды в тех или иных соотношениях.
Так, для сравнения производительности 32-разрядных процессоров фирма Intel, производящая процессоры для персональных компьютеров, в 1992 году предложила свою единицу измерения iCOMP Index (Intel COmparative Microprocessor Performance). Для вычисления этого показателя используется смесь 16- и 32-битных целочисленных команд, команд с плавающей точкой, команд обработки графики и видео. В качестве базового взят процессор i486SX-25, чей индекс принят равным 100. В Таблице 3.2 приведены индексы iCOMP для некоторых процессоров фирмы Intel. Как видно из таблицы, за счет более развитой архитектуры процессоры семейства 486 всегда быстрее процессоров семейства 386, а любой Pentium быстрее любого процессора из семейства 486. Тактовая частота (указана в таблице через черточку) определяет производительность только в пределах одного семейства. В 1996 году разработчиками Intel был предложен другой показатель — iCOMP Index 2.0, для вычисления которого не используются 16-разрядные команды, зато введен мультимедийный тест, а за базу взят Pentium-120, чей индекс принят равным 100. В таблице 3.3 представлены эти показатели для некоторых типов процессоров Intel.
При этом надо учитывать, что измерения проводятся в составе системы, настроенной на максимальное быстродействие именно данных процессоров, и только самой фирмой Intel.
Ценность этих показателей и всех им подобных не слишком велика. Для конкретного компьютера и разных процессоров величина показателя может предоставить вполне объективные данные, позволяющие оценить, например, целесообразность замены процессора на более мощный. Но усредненность показателей iCOMP не позволяет точно сказать, как будет себя вести процессор в различных задачах, которые ориентированы на преимущественное использование разных типов команд.
Точная оценка быстродействия процессора возможна только в составе конкретной системы при решении определенной задачи. Но все перечисленные здесь факторы можно и нужно учитывать при выборе процессора. А количественные показатели помогают сделать выбор.
Что хранится в регистре состояния процессора
Значения селекторов могут быть загружены при исполнении программы и являются специфичными для задачи. Это значит, что регистры сегментов в защищенном режиме перезагружаются автоматически при переключении микропроцессора на другую задачу. В то же время, использование сегментных регистров зависит от того, какая модель адресного пространства используется. При использовании сплошной модели в сегментные регистры загружается один и тот же селектор сегмента с базой 0 и пределом 0FFFFFFFFh, обеспечивая доступ ко всему линейному адресному пространству. При использовании сегментированной модели значения селекторов в сегментных регистрах независимы, так что программа может одновременно обращаться к шести сегментам.
Не все сегментные регистры равнозначны. Регистр CS хранит селектор сегмента кода. Процессор извлекает очередную инструкцию для исполнения, формируя логический адрес из селектора в CS и смещения в регистре EIP. Значение этого регистра нельзя изменить непосредственно, оно меняется в командах межсегментного перехода (FAR JMP), межсегментного вызова (FAR CALL), при вызове обработчика прерывания (INT) и при возврате из дальней процедуры (RETF) или обработчика прерывания (IRET).
Регистр SS хранит селектор сегмента стека. Стек используется для передачи параметров подпрограммам и для сохранения адреса возврата при вызове подпрограммы или обработчика прерывания. Вершиной стека считается байт, логический адрес которого образуется из селектора в регистре SS и смещения в регистре ESP. Программа может непосредственно изменить значение SS, что дает ей возможность переключаться между несколькими стеками. Причем на время выполнения команды MOV SS,xxxx и одной команды следующей за ней (обычно это MOV ESP,xxxx) запрещаются маскируемые и блокируются немаскируемые прерывания.
Регистры DS, ES, FS и GS хранят селекторы сегментов данных. Если инструкция обращается к памяти, но содержит только смещение, то считается, что она обращается к данным в сегменте DS. Сегмент ES может использоваться без явного указания в цепочечных командах. Сегменты FS и GS используются при обращении к памяти только при явном использовании в инструкции префиксов этих сегментов.
Указатель команд
Указатель команд (EIP) является 32-разрядным регистром. Он содержит смещение следующей команды, подлежащей выполнению. Относительный адрес отсчитывается от начала сегмента исполняемой задачи. Указатель команд непосредственно недоступен программисту, но он управляется явно командами управления потоком, прерываниями и исключениями (JMP, CALL, RET, IRET, команды условного перехода). Получить текущее значение EIP можно, если выполнить команду CALL, а затем прочитать слово на вершине стека.
Младшие 16 бит регистра EIP обозначаются IP и могут быть использованы процессором независимо при исполнении 16-битного кода.
Регистр системных флагов
Регистр EFLAGS содержит группу флагов состояния, управления и системных флагов. Младшие 16 бит регистра представляют собой 16-разрядный регистр флагов и состояния МП 8086, называемый FLAGS, который наиболее полезен при исполнении программ для МП 8086 и 80286. Структура регистра флагов показана на рисунке. Неопределенные биты зарезервированы, то есть на данный момент они не имеют значения, однако могут быть использованы для специальных целей в последующих версиях микропроцессора. Далее термин «установлен» означает значение 1, а термин «сброшен» — значение 0.
- LAHF/SAHF — загрузка/сохранение младших 8 битов регистра флагов в регистре AH;
- PUSHF/POPF — помещение/извлечение из стека младших 16 битов регистра флагов;
- PUSHFD/POPFD — помещение/извлечение из стека 32-битного регистра EFLAGS.
- CF — флаг переноса (Carry Flag). Установлен, если операция привела к переносу из старшего бита при сложении или к займу для старшего бита при вычитании, иначе сброшен. Для 8-, 16-, 32-разрядных операций этот бит устанавливается при переносе из битов 7, 15 и 31 соответственно. Для беззнаковых операций флаг сигнализирует о переполнении. Значение этого флага может быть изменено непосредственно при помощи инструкций: CLC — сбросить CF в 0, STC — установить CF в 1, CMC — инвертировать CF. Также используется в операциях сдвига.
- PF — флаг четности (Parity Flag). Установлен, если младшие восемь бит операнда содержат четное число единиц (проверка на четность) иначе сброшен. На этот флаг влияют только младшие восемь бит независимо от длины операнда.
- AF — флаг вспомогательного переноса (Adjust Flag). Используется для упрощения сложения и вычитания упакованных двоично-десятичных чисел. Независимо от длины операнда (8, 16 или 32 бит) флаг AF установлен, если операция привела к займу из бита 3 при вычитании или переносу из бита 3 при сложении, иначе он сброшен.
- ZF — флаг нуля (Zero Flag). Установлен, если все биты результата равны нулю, иначе сброшен.
- SF — флаг знака (Sign Flag). Установлен, если установлен старший бит результата, иначе он сброшен. Для 8-, 16- и 32-разрядных операций этот флаг отражает состояние 7, 15 и 31 бита соответственно. Для знаковых чисел старший бит отражает знак числа: 0 — неотрицательное, 1 — отрицательное.
- OF — флаг переполнения (Overflow Flag). Флаг установлен, если операция привела к переносу (займу) в знаковый (самый старший) бит результата, но не привела к переносу (займу) из самого старшего бита, или наоборот. Для операций над числами со знаком сигнализирует о переполнении.
DF — флаг направления (Direction Flag) управляет поведением цепочечных инструкций (MOVS, CMPS, SCAS, LODS, STOS). Когда флаг сброшен, при выполнении цепочечной команды происходит автоинкремент адресов источника и приемника. Когда флаг установлен — автодекремент. Флаг можно непосредственно установить при помощи инструкции STD и сбросить при помощи CLD.
- TF — флаг ловушки (Trap Flag). Установка флага TF переводит МП в пошаговый режим для отладки. Процессор автоматически генерирует исключение #1 после каждой команды, что позволяет проверить программу на исполнение каждой команды. Когда флаг TF сброшен, то ловушка по исключению #1 возникает в точках адресов останова, загружаемых в регистры отладки DR0-DR3.
- IF — флаг разрешения прерываний (Interrupt enable Flag). Установка флага IF позволяет МП воспринимать запросы внешних маскируемых прерываний. Очистка этого бита запрещает такие прерывания. Флаг не влияет на обработку, как немаскируемых внешних прерываний, так и исключений.
- IOPL — уровень привилегий ввода-вывода (I/O Privilege Level field, 286+). Это двухбитное поле используется в защищенном режиме. Биты IOPL показывают наивысшее значение текущего уровня привилегий (CPL), позволяющее выполнять команды ввода-вывода, не приводя к исключению #13 или обращению к битовой карте разрешения ввода-вывода. Это поле показывает также наивысшее значение CPL, которое позволяет изменять бит IF с помощью команд STI или CLI, а также при выборке нового значения из стека в регистр EFLAGS. Это поле может быть изменено инструкциями POPF или IRET только, если текущий уровень привилегий задачи равен 0.
- NT — флаг вложенной задачи (Nested Task flag, 286+). Если при переключении задач происходит вложение задач, то этот флаг устанавливается в 1. Совместно с полем «Связь TSS» в сегменте состояния задачи обеспечивает корректное вложение задач.
- RF — флаг возобновления (Resume Flag, 386+). Временно приостанавливает обработку исключений отладки (т.е. возвращает к нормальному исполнению программы) так, что исполнение команды может быть повторено после обработки исключения для отладки, не вызывая немедленно обработку другого исключения для отладки.
- VM — режим виртуального МП 8086 (Virtual-8086 Mode flag, 386+). Бит обеспечивает для задачи функционирование в режиме виртуального МП 8086. Бит VM может быть установлен только двумя способами: при восстановлении флагов из стека по инструкции IRET на нулевом уровне привилегий и переключением на задачу, в TSS которой в образе EFLAGS бит VM выставлен.
- AC — флаг контроля выравнивания (Alignment Check flag, 486+). Разрешает контроль выравнивания для текущей задачи. Контроль выравнивания производится, если CR0.AM=1 и EFLAGS.AC=1 и CR0.PE=1 и CPL=3. Контроль выравнивания тебует, чтобы при обращениях к памяти двойное слово обязательно должно начинаться с адреса, кратного 4, а 16-битное слово — с адреса, кратного 2, иначе генерируется нарушение контроля выравнивания (исключение #17).
- VIF — виртуальный флаг прерывания (Virtual Interrupt Flag, Pentium+). Виртуальный образ флага IF, используется совместно с флагом VIP. Процессор распознает VIF, если CR4.VME=1 или CR4.PVI=1 (разрешено расширение виртуального режима) и IOPL
- VIP — виртуальный флаг задержки прерывания (Virtual Interrupt Pending flag, Pentium+). Системное ПО устанавливает этот флаг, если требуется отложить обработку прерывания. Используется совместно с VIF. Процессор читает этот флаг, но никогда не изменяет его. Флаг распознается, если CR4.VME=1 или CR4.PVI=1 (разрешено расширение виртуального режима) и IOPL
- ID — флаг поддержки CPUID (Identification flag). Если программа может изменить этот флаг (т.е. процессор хранит то значение, которое программа запишет в этот флаг), то процессор поддерживает инструкцию CPUID. Инструкцию CPUID поддерживают не только Pentium и P6, но и некоторые модели i486.
Регистры управления сегментированной памятью
Эти регистры также известны как регистры системных адресов. Четыре регистра указывают на структуры данных, которые управляют механизмом сегментированной памяти. Они определены для ссылок на таблицы или сегменты, поддерживаемые моделью защиты микропроцессора.
Регистр глобальной дескрипторной таблицы (GDTR). Содержит 32-разрядный линейный адрес и 16-разрядную границу глобальной дескрипторной таблицы. Значение этого регистра можно загрузить/сохранить при помощи привилегированных инструкций LGDT/SGDT. В реальном режиме этот регистр не используется. Перед переходом в защищенный режим в этот регистр следует загрузить корректные значения.
Регистр локальной дескрипторной таблицы (LDTR). Содержит 16-разрядный селектор локальной дескрипторной таблицы. С регистром связан программно-недоступный кэш дескриптора для хранения базового адреса, предела и атрибутов соответствующей дескрипторной таблицы. Значение этого регистра можно загрузить/сохранить при помощи привилегированных инструкций LLDT/SLDT. В реальном режиме этот регистр не используется и попытка обращения к нему генерирует особый случай «недействительный код операции» (исключение #6). С каждой задачей в защищенном режиме может быть связана своя локальная дескрипторная таблица, поэтому селектор LDT хранится в TSS и автоматически загружается при переключении задач.
Регистр таблицы дескрипторов прерываний (IDTR). Указывает на таблицу точек входа в программы обработки прерываний. Регистр содержит 32-разрядный линейный базовый адрес и 16-разрядный предел таблицы. Значение этого регистра можно загрузить/сохранить при помощи привилегированных инструкций LIDT/SIDT. При инициализации процессора базовый адрес IDT устанавливается в 0, а предел — 0FFFFh. В реальном режиме эта таблица хранит 4-байтные вектора прерываний, а в защищенном — дескритпоры шлюзов обработчиков прерываний и исключений. Это единственный регистр среди перечисленных, который используется в реальном режиме.
Функции процессора
Процессор обычно представляет собой отдельную микросхему или же часть микросхемы (в случае микроконтроллера). В прежние годы процессор иногда выполнялся на комплектах из нескольких микросхем, но сейчас от такого подхода уже практически отказались. Микросхема процессора обязательно имеет выводы трех шин: шины адреса, шины данных и шины управления. Иногда некоторые сигналы и шины мультиплексируются, чтобы уменьшить количество выводов микросхемы процессора.
Важнейшие характеристики процессора — это количество разрядов его шины данных, количество разрядов его шины адреса и количество управляющих сигналов в шине управления. Разрядность шины данных определяет скорость работы системы. Разрядность шины адреса определяет допустимую сложность системы. Количество линий управления определяет разнообразие режимов обмена и эффективность обмена процессора с другими устройствами системы.
Кроме выводов для сигналов трех основных шин процессор всегда имеет вывод (или два вывода) для подключения внешнего тактового сигнала или кварцевого резонатора (CLK), так как процессор всегда представляет собой тактируемое устройство. Чем больше тактовая частота процессора, тем он быстрее работает, то есть тем быстрее выполняет команды. Впрочем, быстродействие процессора определяется не только тактовой частотой, но и особенностями его структуры. Современные процессоры выполняют большинство команд за один такт и имеют средства для параллельного выполнения нескольких команд. Тактовая частота процессора не связана прямо и жестко со скоростью обмена по магистрали, так как скорость обмена по магистрали ограничена задержками распространения сигналов и искажениями сигналов на магистрали. То есть тактовая частота процессора определяет только его внутреннее быстродействие, а не внешнее. Иногда тактовая частота процессора имеет нижний и верхний пределы. При превышении верхнего предела частоты возможно перегревание процессора, а также сбои, причем, что самое неприятное, возникающие не всегда и нерегулярно. Так что с изменением этой частоты надо быть очень осторожным.
Схема включения процессора:
Еще один важный сигнал, который имеется в каждом процессоре, — это сигнал начального сброса RESET. При включении питания, при аварийной ситуации или зависании процессора подача этого сигнала приводит к инициализации процессора, заставляет его приступить к выполнению программы начального запуска. Аварийная ситуация может быть вызвана помехами по цепям питания и «земли», сбоями в работе памяти, внешними ионизирующими излучениями и еще множеством причин. В результате процессор может потерять контроль над выполняемой программой и остановиться в каком-то адресе. Для выхода из этого состояния как раз и используется сигнал начального сброса. Этот же вход начального сброса может использоваться для оповещения процессора о том, что напряжение питания стало ниже установленного предела. В таком случае процессор переходит к выполнению программы сохранения важных данных. По сути, этот вход представляет собой особую разновидность радиального прерывания. Иногда у микросхемы процессора имеется еще один-два входа радиальных прерываний для обработки особых ситуаций (например, для прерывания от внешнего таймера).
Шина питания современного процессора обычно имеет одно напряжение питания (+5В или +3,3В) и общий провод («землю»). Первые процессоры нередко требовали нескольких напряжений питания. В некоторых процессорах предусмотрен режим пониженного энергопотребления. Вообще, современные микросхемы процессоров, особенно с высокими тактовыми частотами, потребляют довольно большую мощность. В результате для поддержания нормальной рабочей температуры корпуса на них нередко приходится устанавливать радиаторы, вентиляторы или даже специальные микрохолодильники.
Для подключения процессора к магистрали используются буферные микросхемы, обеспечивающие, если необходимо, демультиплексирование сигналов и электрическое буферирование сигналов магистрали. Иногда протоколы обмена по системной магистрали и по шинам процессора не совпадают между собой, тогда буферные микросхемы еще и согласуют эти протоколы друг с другом. Иногда в микропроцессорной системе используется несколько магистралей (системных и локальных), тогда для каждой из магистралей применяется свой буферный узел. Такая структура характерна, например, для персональных компьютеров.
После включения питания процессор переходит в первый адрес программы начального пуска и выполняет эту программу. Данная программа предварительно записана в постоянную (энергонезависимую) память. После завершения программы начального пуска процессор начинает выполнять основную программу, находящуюся в постоянной или оперативной памяти, для чего выбирает по очереди все команды. От этой программы процессор могут отвлекать внешние прерывания или запросы на ПДП. Команды из памяти процессор выбирает с помощью циклов чтения по магистрали. При необходимости процессор записывает данные в память или в устройства ввода/вывода с помощью циклов записи или же читает данные из памяти или из устройств ввода/вывода с помощью циклов чтения. Таким образом, основные функции любого процессора следующие:
- выборка (чтение) выполняемых команд; - ввод (чтение) данных из памяти или устройства ввода/вывода; - вывод (запись) данных в память или в устройства ввода/вывода; - обработка данных (операндов), в том числе арифметические операции над ними; - адресация памяти, то есть задание адреса памяти, с которым будет производиться обмен; - обработка прерываний и режима прямого доступа.
Упрощенно структуру микропроцессора можно представить в следующем виде:
Основные функции показанных узлов следующие.
Схема управления выборкой команд выполняет чтение команд из памяти и их дешифрацию. В первых микропроцессорах было невозможно одновременное выполнение предыдущей команды и выборка следующей команды, так как процессор не мог совмещать эти операции. Но уже в 16-разрядных процессорах появляется так называемый конвейер (очередь) команд, позволяющий выбирать несколько следующих команд, пока выполняется предыдущая. Два процесса идут параллельно, что ускоряет работу процессора. Конвейер представляет собой небольшую внутреннюю память процессора, в которую при малейшей возможности (при освобождении внешней шины) записывается несколько команд, следующих за исполняемой. Читаются эти команды процессором в том же порядке, что и записываются в конвейер (это память типа FIFO, First In — First Out, первый вошел — первый вышел). Правда, если выполняемая команда предполагает переход не на следующую ячейку памяти, а на удаленную (с меньшим или большим адресом), конвейер не помогает, и его приходится сбрасывать. Но такие команды встречаются в программах сравнительно редко. Развитием идеи конвейера стало использование внутренней кэш-памяти процессора, которая заполняется командами, пока процессор занят выполнением предыдущих команд. Чем больше объем кэш-памяти, тем меньше вероятность того, что ее содержимое придется сбросить при команде перехода. Понятно, что обрабатывать команды, находящиеся во внутренней памяти, процессор может гораздо быстрее, чем те, которые расположены во внешней памяти. В кэш-памяти могут храниться и данные, которые обрабатываются в данный момент, это также ускоряет работу. Для большего ускорения выборки команд в современных процессорах применяют совмещение выборки и дешифрации, одновременную дешифрацию нескольких команд, несколько параллельных конвейеров команд, предсказание команд переходов и некоторые другие методы.
Арифметико-логическое устройство (или АЛУ, ALU ) предназначено для обработки информации в соответствии с полученной процессором командой. Примерами обработки могут служить логические операции (типа логического «И», «ИЛИ», «Исключающего ИЛИ» и т.д.) то есть побитные операции над операндами, а также арифметические операции (типа сложения, вычитания, умножения, деления и т.д.). Над какими кодами производится операция, куда помещается ее результат — определяется выполняемой командой. Если команда сводится всего лишь к пересылке данных без их обработки, то АЛУ не участвует в ее выполнении. Быстродействие АЛУ во многом определяет производительность процессора. Причем важна не только частота тактового сигнала, которым тактируется АЛУ, но и количество тактов, необходимое для выполнения той или иной команды. Для повышения производительности разработчики стремятся довести время выполнения команды до одного такта, а также обеспечить работу АЛУ на возможно более высокой частоте. Один из путей решения этой задачи состоит в уменьшении количества выполняемых АЛУ команд, создание процессоров с уменьшенным набором команд (так называемые RISC-процессоры). Другой путь повышения производительности процессора — использование нескольких параллельно работающих АЛУ. Что касается операций над числами с плавающей точкой и других специальных сложных операций, то в системах на базе первых процессоров их реализовали последовательностью более простых команд, специальными подпрограммами, однако затем были разработаны специальные вычислители — математические сопроцессоры, которые заменяли основной процессор на время выполнения таких команд. В современных микропроцессорах математические сопроцессоры входят в структуру как составная часть.
Регистры процессора представляют собой по сути ячейки очень быстрой памяти и служат для временного хранения различных кодов: данных, адресов, служебных кодов. Операции с этими кодами выполняются предельно быстро, поэтому, в общем случае, чем больше внутренних регистров, тем лучше. Кроме того, на быстродействие процессора сильно влияет разрядность регистров. Именно разрядность регистров и АЛУ называется внутренней разрядностью процессора, которая может не совпадать с внешней разрядностью.
Регистр признаков ( регистр состояния) занимает особое место, хотя он также является внутренним регистром процессора. Содержащаяся в нем информация — это не данные, не адрес, а слово состояния процессора (ССП, PSW — Processor Status Word). Каждый бит этого слова (флаг) содержит информацию о результате предыдущей команды. Например, есть бит нулевого результата, который устанавливается в том случае, когда результат выполнения предыдущей команды — нуль, и очищается в том случае, когда результат выполнения команды отличен от нуля. Эти биты (флаги) используются командами условных переходов, например, командой перехода в случае нулевого результата. В этом же регистре иногда содержатся флаги управления, определяющие режим выполнения некоторых команд.
Схема управления прерываниями обрабатывает поступающий на процессор запрос прерывания, определяет адрес начала программы обработки прерывания (адрес вектора прерывания), обеспечивает переход к этой программе после выполнения текущей команды и сохранения в памяти (в стеке ) текущего состояния регистров процессора. По окончании программы обработки прерывания процессор возвращается к прерванной программе с восстановленными из памяти (из стека ) значениями внутренних регистров. Подробнее о стеке будет рассказано в следующем разделе.
Схема управления прямым доступом к памяти служит для временного отключения процессора от внешних шин и приостановки работы процессора на время предоставления прямого доступа запросившему его устройству.
Логика управления организует взаимодействие всех узлов процессора, перенаправляет данные, синхронизирует работу процессора с внешними сигналами, а также реализует процедуры ввода и вывода информации.
Внутренние регистры любого микропроцессора обязательно выполняют две служебные функции:
- определяют адрес в памяти, где находится выполняемая в данный момент команда (функция счетчика команд или указателя команд ); - определяют текущий адрес стека (функция указателя стека ).
В разных процессорах для каждой из этих функций может отводиться один или два внутренних регистра. Эти два указателя отличаются от других не только своим специфическим, служебным, системным назначением, но и особым способом изменения содержимого. Их содержимое программы могут менять только в случае крайней необходимости, так как любая ошибка при этом грозит нарушением работы компьютера, зависанием и порчей содержимого памяти.
домашнее задание
Процессор – это блок, предназначенный для автоматического считывания команд программы, их расшифровки и выполнения.
Название «процессор» происходит от английского глагола «to process» – обрабатывать. Иными словами, процессор – это блок компьютера, который автоматически обрабатывает информацию по заданной программе.
Процессор, изготовленный в виде большой или сверхбольшой интегральной схемы (БИС, СБИС), называется микропроцессором.
Любой процессор обязательно включает в себя две важные части, каждая из которых решает свои задачи:
- арифметико-логическое устройство (АЛУ), выполняющее обработку данных,
- устройство управления (УУ) , которое управляет выполнением программы и обеспечивает согласованную работу всех узлов компьютера.
Арифметико-логическое устройство
АЛУ не только выполняет вычисления, но и анализирует полученный результат. Обычно проверяется два свойства: равенство нулю (совпадение всех разрядов сумматора с нулем) и отрицательность результата . Результаты этого анализа заносятся в определенные биты регистра состояния процессора. Используя эти значения, можно сделать вывод об истинности или ложности условий R = 0, R ≠ 0, R > 0, R < 0, R ≥ 0, R ≤ 0, где R обозначает результат операции. Это позволяет организовать ветвления в программе, например, для неотрицательного числа вычислять квадратный корень, а иначе – выдать сообщение об ошибке.
Как правило, АЛУ работает только с целыми числами. Операции с вещественными числами выполняются в математическом сопроцессоре, который встроен внутрь современных микропроцессоров.
Устройство управления
- извлечение из памяти очередной команды;
- расшифровка команды, определение необходимых действий;
- определение адресов ячеек памяти, где находятся исходные данные;
- занесение в АЛУ исходных данных; управление выполнением операции;
- сохранение результата.
Регистры процессора
Кроме регистров АЛУ и УУ, в микропроцессоре есть много других регистров. Большинство из них – внутренние, они недоступны программисту. Однако есть несколько регистров, специально предназначенных для использования программным обеспечением. Их часто называют регистрами общего назначения (РОН), подчеркивая тем самым уни версальность их функций. В РОН могут храниться не только сами данные (числа, коды символов и т.д.), но и адреса ячеек памяти, где эти данные находятся.
Основные характеристики процессора
Как вы уже знаете, для организации выполнения команд в компьютере есть генера тор импульсов, каждый из которых «запускает» очередной такт машинной команды. Очеdblyj, что чем чаще следуют импульсы от генератора, тем быстрее будет выполняться операция. Следовательно, тактовая частота, измеряемая количеством тактовых импульсов в секунду, может быть характеристикой быстродействия процессора.
Тактовая частота – количество тактовых импульсов за одну секунду.
В настоящее время тактовая частота измеряется в гигагерцах, т.е. в миллиардах (109) импульсов за секунду. Эту частоту нельзя установить сколь угодно высокой, поскольку процессор может просто не успеть выполнить действие очередного такта до прихода следующего импульса.
Другая характеристика, позволяющая судить о производительности процессора, – это его разрядность.
Разрядность – это максимальное количество двоичных разрядов, которые процессор способен обрабатывать за одну команду.
Чаще всего разрядность определяют как размер регистров процессора в битах. Однако, важны также разрядности шины данных и шины адреса, которые поддерживает процессор. Разрядность шины данных – это максимальное количество бит, которое может быть считано за одно обращение к памяти. Разрядность шины адреса – это количество адресных линий; она определяет максимальный объем памяти, который способен поддерживать процессор. Этот объем памяти часто называют величиной адресного пространства, он вычисляется по формуле 2R , где R – количество разрядов шины адреса.
Все три разрядности могут не совпадать. Так, у процессора Pentium II были 32- разрядные регистры, разрядность шины данных – 64 бита, а шины адреса – 36 бит.
Система команд процессора
- команды передачи (копирования) данных;
- арифметические операции;
- логические операции, например, «НЕ», «И», «ИЛИ», «исключающее ИЛИ»;
- команды ввода и вывода;
- команды переходов.
- процессоры с полным набором команд (англ.CISC=Complex Instruction Set Comput- er);
- процессоры с сокращенным набором команд (англ. RISC = Reduced Instruction Set Computer).
- код операции 81C обозначает сложению регистра с константой;
- первый операнд 2 – это условное обозначение регистра DX;
- константа 0101, которая добавляется к регистру.