Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Процессор персонального компьютера. Назначение, функции, классификация процессоров

Содержание:

Введение

Первые компьютеры появились более полувека назад, и до недавнего времени работали с ними только специалисты – программисты, операторы, инженеры. В последние десятилетия же в области вычислительной техники произошли кардинальные изменения. Теперь в роли пользователя может быть любой школьник или домохозяйка, учитель или врач. Компьютеры проникли туда, где до недавнего времени их было сложно представить. Они есть в стиральных машинах, микроволновых печах, детских игрушках. Современные сотовые телефоны, которые еще 20 лет назад были черно-белыми и могли только звонить, сегодня невозможно представить без большого обилия всевозможных функций.

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

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

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

При этом, хотя изначально под персональным компьютером понимались именно компьютеры, стоящие дома, в форм-факторе системного блока, на котором человек мог работать индивидуально (в связи с чем они и получили название «персональных»), в современном мире к ним относят и многие другие форм-факторы – ноутбуки, планшеты, и даже телефоны. Последние, хотя изначально и были предназначены не для общих вычислений, а для конкретной задачи организации связи, в современном мире все больше применяются для более отвлеченных задач, и во многих из них уже вполне могут заменить «взрослый» персональный компьютер.

Кроме этого, следует заметить, что хотя в современных персональных компьютерах можно выделить множество неких чипов, которые с некоторой натяжкой можно назвать «процессорами», начиная от микроконтроллера на клавиатуре, занимающегося отправкой кодов нажатых клавиш до отдельного процессора, расположенного на материнских платах фирмы Intel, и выполняющего код отдельной ОС, и называющегося Intel ME [18], мы будем рассматривать именно основной, центральный процессор, который, как правило, выполняет в персональных компьютерах основной объем работ, связанных с вычислениями.

1 Назначение процессора персонального компьютера

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

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

Поэтому чаще всего, процессор составляет пусть и центральную, но все же часть более общей «микропроцессорной системы», состоящей кроме непосредственно процессора, еще из нескольких устройств. Как правило, микропроцессорную систему можно представить в виде следующей схемы [3, с. 23]:

Рисунок 1 - Структура базовой микропроцессорной системы

Как видно из рисунка, в микропроцессорной системе можно выделить три шины – шину адреса, шину данных и шину управления. С помощью шины управления процессор координирует работу всех устройств цифровой системы. Шина адреса необходима для выбора определенной ячейки памяти, порта ввода или порта вывода. После выбора определенной ячейки, возможен обмен данными с ней по шине данных.

Шина управления может иметь различную разрядность, в зависимости от числа сигналов управления. Шины адреса и данных также могут иметь различное количество разрядов, но, как правило, их разрядность кратна степеням двойки – 4 бита (например, в первом процессоре Intel 4004),
8 бит (в большинстве процессоров 80-х годов, например, MOS Technology 6502 или Zilog Z80), 16, 32 или 64 бит в современных процессорах Intel, AMD или ARM.

ПЗУ и ОЗУ это два вида памяти, которые можно найти почти в любой микропроцессорной системе. ПЗУ — это постоянная память, которая сохраняется даже при выключении компьютера, в то время как ОЗУ это «оперативная» память, которая при выключении компьютера полностью очищается. В ПЗУ, как правило, записана программа инициализации компьютера, загрузки операционной системы, либо сама операционная система, как, например, в [7].

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

Исходя из данного изображения, становится понятно, что процессор является в любом персональном компьютере неким «центральным узлом», ради которого работают все остальные подсистемы. Существует некая память, в которую записывается программа, которую нужно выполнить, а также данные для нее, а также порты для связи с другими устройствами, и (через них) – с внешним миром. Однако все это, в итоге, существует лишь для того, чтобы процессор смог каким-то образом получить данные, преобразовать их, и отдать их обратно, во внешний мир. То есть, процессор – является центральным звеном любого персонального компьютера, который выполняет всю работу по чтению, преобразованию и выводу данных.

2 Основные функции процессора

Исходя из определенной в прошлой главе назначения процессора как основного вычислителя, становится примерно понятно, какие функции он выполняет. Перечислим их ниже:

  1. Выработка управляющих сигналов, для управления остальными устройствами микропроцессорной системы;
  2. Общение с различными видами памяти (ОЗУ, ПЗУ) с целью как получения данных (или программы), так и их сохранения;
  3. Дешифрация кодов команд, полученных из оперативной или постоянной памяти;
  4. Выполнение полученных из памяти команд. Сюда входит:
    1. Произведение необходимых вычислений;
    2. Вычисление необходимых адресов памяти;
    3. Поддержание правильного состояния регистров;
    4. Последовательный переход к следующим командам после выполнения предыдущих, либо мгновенный переход по требуемому адресу, если встречается соответствующая команда;
    5. При возникновении прерывания – переход на программу его обработки.

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

  1. Процессор «смотрит» на значение регистра, указывающего на адрес следующей команды, которую нужно выполнить;
  2. Он формирует запрос к оперативной памяти, и по данному адресу получает код следующей команды, обновляя значение регистра, чтобы он указывал на следующий адрес;
  3. Процессор декодирует команду, определяя, что ему нужно делать, и нужно ли получить какие-либо дополнительные параметры;
  4. Если дополнительные параметры необходимы, то формируются дополнительные запросы к памяти, и соответствующим образом обновляются необходимые регистры;
  5. Если команда подразумевает какое-либо вычисление, то полученные данные вместе с командой попадают в арифметическо-логическое устройство (АЛУ), где происходит вычисление результата;
  6. Если команда предполагает, что результат операции необходимо также сохранить в память, то производится еще один запрос к памяти;
  7. Происходит переход на шаг №1, кроме особой команды «стоп», которая, как правило, останавливает выполнение любой программы процессора;
  8. Кроме данных семи шагов, процессор постоянно опрашивает сигналы на шине управления, с целью определить возникновение сигналов, которые могут вызвать прерывание выполнения текущей программы. Если такие сигналы присутствуют, то процессор выставляет в регистре, указывающем на адрес текущей выполняемой команды адрес обработчика прерывания, и просто начинает выполнение данного алгоритма, начиная с шага №1.

Как можно видеть, сам алгоритм работы процессора довольно просто объяснить. Однако если взглянуть на современные процессоры Intel, AMD или ARM, можно заметить, что их составные части (транзисторы) имеют размеры в несколько нанометров, а их количество исчисляется миллиардами. Такое огромное количество составных частей совсем не сочетается с тем простым алгоритмом, по которому он должен работать.

Так происходит по нескольким причинам, некоторые из которых мы укажем ниже:

Во-первых, уже начиная с восьмидесятых годов прошлого века человечество накопило огромный объем написанных программ, многие из которых активно использовались. И фирмы, производящие процессоры, даже такие огромные, как Intel, стали понимать, что при выпуске новых процессоров необходимо обеспечить их совместимость со старыми, иначе все программы для них придется писать заново, и новые процессоры просто не будут покупать. Поэтому многие абсолютно ненужные в современных процессорах вещи (например, поддержка реального режима работы с памятью, при котором адресовать можно лишь 1 мегабайт памяти, что в 2019 году просто смешно) приходится реализовывать для совместимости с более старыми моделями компьютеров.

Во-вторых, постепенно росли возможности компьютеров. Из 4- и 8-разрядных они давно превратились в 64-разрядные. Однако если сделать все регистры и команды 64-разрядными, это приведет к огромному и абсолютно ненужному расходу памяти и процессорного времени. Например, если нам нужно вывести на экран 10 чисел, мы вполне можем организовать цикл от 1 до 10, используя один байт памяти (который может принимать значения от 0 до 255), а не тратя на это 8 байт (64 бита). Однако есть и другая сторона – в некоторых случаях, наоборот, 64 разрядов мало. Например, если мы выполняем какой-то параллельный алгоритм, скажем, вычисляем сразу же несколько хешей SHA256 для майнинга криптовалюты, то чем большего размера регистры мы будем иметь, тем больше параллельных действий сможем выполнить. Поэтому, хотя современные процессоры имеют лишь 64 линии для обмена с памятью, они могут выполнять 128-, 256-, а скоро смогут выполнять и 512-битные команды. Необходимость поддержки всех этих команд и режимов означает существенное усложнение блока декодирования команд и арифметическо-логического устройства.

И, наконец, в-третьих, по мере уменьшения размеров транзистора, и, соответственно, увеличения скорости их работы, стало понятно, что существуют некоторые фундаментальные ограничения, и тактовой частоты, большей, чем 4-5 ГГц достичь не удастся. В связи с этим, было принято решение перейти от увеличения скорости к наращиванию количества ядер. В многоядерных же системах появились свои проблемы, например, необходимость осуществлять общий доступ к памяти и устройствам ввода-вывода. Все это также привело к существенному усложнению устройства процессора (как из-за всё большего числа ядер, так и из-за необходимости осуществлять межядерное взаимодействие).

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

3 Структура процессора

Для того, чтобы процессор мог выполнять те функции, которые мы описали в предыдущей главе, он должен иметь следующую (упрощенную) структуру:

Рисунок 2 - Структура базового процессора

Основные функции структурных частей процессора следующие:

Схема управления выборкой команд отвечает за получение новых инструкций для процессора из запоминающего устройства (оперативного или постоянного). В ранних процессорах все происходило по очереди, и пока схема управления выборкой команд не выберет адрес, команда не начинала выполняться. Однако в современных процессорах, как правило, выборка и выполнение команд идут параллельно – пока выбирается команда (или даже несколько команд), в это время выполняются предыдущие команды, которые были выбраны ранее. Естественно, для записи всех выбранных, но еще не выполненных команд нужна какая-то память внутри процессора, не очень большого объема.

Такая схема хорошо справляется с программами, в которых инструкции выполняются параллельно. Однако в программах часто встречаются и команды переходов, причем не ясно заранее, произойдет переход или нет. В таких случаях можно, например, попробовать предсказать, произойдет переход или нет (если предсказание окажется неверным, придется очистить очередь команд и начинать набор новой). Например, можно собирать статистику переходов и «не переходов» по каждой инструкции перехода, и в зависимости от того, каких случаев было больше, делать предсказание.

Развитием данной идеи стало использование специальной кэш-памяти, куда записываются результаты выборок команд, и которые затем могут использоваться при их выполнении. Чем больше объем кэш-памяти, тем больше команд могут туда поместиться, и тем быстрее они будут выполнены [4, с 64].

Арифметическо-логическое устройство (АЛУ), собственно, обрабатывает поступившую информацию. Например, оно может выполнять побитовые операции (И, ИЛИ, НЕ, исключающее ИЛИ), математические операции (сложение, вычитание). Именно быстродействие АЛУ, как правило, определяет общую производительность процессора. В современных процессорах может быть несколько АЛУ, работающих параллельно, что приводит к общему ускорению работы. Кроме того, существуют процессоры с уменьшенным набором команд (RISC-процессоры), что позволяет упростить АЛУ, и, тем самым, заставить его работать на более высокой тактовой частоте.

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

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

Существует несколько основных подходов к регистрам процессора. Некоторые разработчики (как, например, Intel), наделяют каждый регистр определенным значением. Например, чтобы вывести данные в порт, необходимо поместить их в специальный регистр, называемый «аккумулятором», а номер порта в регистр EDX. Чтобы скопировать строку в памяти с одного места на другое, нужно указать адрес исходной строки в регистре ESI, а адрес, куда нужно ее скопировать указать в регистре EDI. С одной стороны, это упрощает проектирование процессора и уменьшает время выполнения команд, с другой стороны, программист, который, например, хочет вывести данные в порт, но они у него находятся в другом регистре (не в аккумуляторе), должен будет выполнить еще одну команду – переслать свои данные в аккумулятор. Если же в это время аккумулятор у него будет занят чем-то важным, то могут потребоваться и дополнительные команды – временного сохранения и восстановления значения аккумулятора.

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

Можно поступить и третьим путем, как, например, поступила фирма MOS Technology в своем процессоре 6502. В нем было очень малое число регистров общего назначения (всего 3, называемых A, X, Y), однако программисту были доступны специальные команды для быстрой работы с первыми 256 байтами памяти. Таким образом, программист мог работать с ними практически так же, как с регистрами, и ему «казалось», что регистров у него много. Естественно, работа с памятью была гораздо медленнее, чем с «настоящими» регистрами, поэтому такая архитектура регистров в последнее время не используется.

Как правило, при любом подходе из вышеперечисленных, несколько регистров все же имеют узкую специализацию, и их можно использовать только определенным образом. Это такие регистры, как:

  • Регистр состояния – в нем содержится информация о выполнении предыдущей команды. Например, был ли результатом выполнения предыдущей команды 0, произошло ли переполнение, и так далее. Обычно данный регистр используется для переходов по условию. Например, «если в регистре состояния записано, что результат предыдущей команды равен нулю, то перейти на адрес 401567»;
  • Регистр счетчика команд – в нем хранится адрес текущей выполняемой инструкции в памяти. Изменяется он, как правило, только последовательно, по мере исполнения программы, либо командами перехода, однако в некоторых старых процессорах (например, DEC PDP-11) этим регистром можно было управлять как обычным регистром общего назначения (например, занеся в него определенный адрес можно было добиться перехода на него, если в команде написать, что данные хранятся по адресу данного регистра, то процессор понимал, что в памяти они располагаются сразу после самой команды, и так далее);
  • Регистр указателя стека – в нем хранится адрес текущего положения стека в памяти. При выполнении команд «сохранить в стек» или «восстановить из стека» он указывает, по какому адресу нужно сохранить данные или восстановить их. Как правило, стек настраивается либо в начале каждой программы (как это было, например, в MS-DOS), либо настраивается операционной системой, и программист не заботится о его значении;
  • В различных процессорах могут существовать и дополнительные регистры. Что именно означает каждый из них нужно узнавать в спецификации на каждый конкретный процессор. Например, в новых процессорах фирмы Intel существуют регистры MSR, регистры CR, DR, и множество других. Как правило, они очень специфичны, и используются очень редко.

Схема управления прерываниями обрабатывает поступающие на процессор запросы прерываний. Прерывания это сигналы для процессора, чтобы он выполнил некие действия, которые нужно выполнить немедленно, и они не могут подождать, пока текущая программа завершит свою работу. Например, это нажатие кнопок на клавиатуре, движение мыши, изменение системных часов, некоторые данные, поступающие с какого-то прибора. В этом случае программа, которая в данный момент выполняется, временно приостанавливается, и ее состояние записывается в стек. Схема управления прерываниями, затем, получает адрес программы, которую нужно вызвать для обработки этого «критического события» и вызывает ее. После ее завершения (а программа обработки прерывания должна быть короткой, так как иначе программа будет задержана на очень долгое время, и с компьютером станет невозможно работать), состояние программы восстанавливается, и она продолжает работать, как ни в чем не бывало. Кроме прерываний, поступающих от внешних устройств, существуют также и программные прерывания – прерывания, которые программа запрашивает самостоятельно. Например, она может это сделать для вызова функций операционной системы или программы, находящейся в ПЗУ. Кроме того, иногда прерывания используются для выполнения программы по шагам (отладки), когда прерывание выполняется после каждой выполненной команды, после чего обработчик прерывания (отладчик) выдает текущее состояние программы.

Схема управления прямым доступом к памяти служит для организации режима работы внешних устройств и памяти без участия процессора. В этом случае некоторое устройство может прочитать или изменить какие-либо адреса памяти без необходимости просить это сделать процессор (например, прерыванием). Как правило, это используется для ускорения работы с внешними устройствами и для разгрузки
процессора [1, с. 175].

Логика управления соединяет все узлы процессора воедино, и заставляет работать их слаженно. Она синхронизирует работу процессора со внешними сигналами и шинами.

4 Классификация процессоров

Процессоры можно классифицировать по целому ряду параметров – например по разрядности, тактовой частоте, или даже фирме-производителю. Ниже мы рассмотрим несколько примеров такой классификации:

4.1 Фирма производитель

Когда персональные компьютеры только появились, их выпускало достаточно много фирм, многие из которых в настоящее время не существуют (по крайней мере, как производители процессоров), например, Zilog, Cyrix или VIA. Однако в последнее время, если не принимать во внимание мобильные процессоры, то основных фирм, производящих процессоры осталось две – Intel и AMD.

На первый взгляд, они отличаются довольно слабо – поддерживают практически одинаковую систему команд, являются 64-битными, и могут выполнять одни и те же программы без их переработки под конкретную архитектуру. Однако на самом деле, между ними немало отличий.

Прежде всего, сильно отличаются «глобальные цели» данных компаний – если цель Intel – создать самые мощные, дорогие и производительные процессоры (в том числе и для персональных компьютеров), то цель AMD – создать более дешевые, и хоть и не такие производительные, но достаточные для обычного человека процессоры. Таким образом, они ориентируются на разные сегменты – если Intel ориентирована главным образом, на «геймеров» - игроков в компьютерные игры, которым важно выжать из компьютера все, на что он способен, то AMD лучше подходит для обычного офисного работника, которому нужно писать документы и выходить в Интернет.
К тому же, при этом компьютер будет стоить гораздо дешевле.

Однако все вышенаписанное было правдой вплоть до 2019 года, когда произошло одно довольно знаковое событие – выпуск фирмой AMD нового поколения процессоров Ryzen 2. В этих процессорах было 64 ядра, причем AMD удалось существенно улучшить их взаимодействие друг с другом. В результате, по оценке экспертов [12], процессор работает даже быстрее, чем лучшие процессоры Intel (чего не было уже очень давно), в то время как он все еще остается более дешевым, и имеет более низкую производительность в пересчете на каждое ядро. Исходя из этого будет интересно наблюдать, во что выльется данная ситуация, и поможет ли это фирме AMD упрочить свои позиции на рынке процессоров.

4.2 Техпроцесс

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

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

Очевидно, что во-первых, техпроцесс – это довольно небольшое число (один транзистор в процессоре мы вряд ли сможем увидеть), а во-вторых, что чем меньше техпроцесс, тем больше транзисторов можно разместить в процессоре, тем лучше и быстрее он будет работать, тем больше функций и ядер в него можно добавить, однако тем сложнее и дороже он будет в производстве (так как чем меньше объект, тем сложнее с ним работать).

Достаточно долго (все 70-е и 80-е годы) техпроцесс измерялся в микрометрах. В 1990-х годах он стал меньше одного микрометра, и чтобы не работать с дробными числами, его стали выражать в нанометрах.

К 1997 году (в процессоре Intel Pentium MMX) техпроцесс составлял всего 350 нанометров. С 1997 по 2002 год техпроцесс продолжал быстро сокращаться, и в итоге стал ниже 100 нм.

Затем снижение техпроцесса замедлилось, так как стоимость новых техпроцессов начала очень быстро возрастать. К настоящему времени (2019 год) большинство процессоров Intel выпускаются по техпроцессу 14 нанометров, а AMD уже освоила более новый техпроцесс – 10 нм. Фирма Intel пыталась перейти на новый техпроцесс в течение двух лет (2017-2018), однако так и не смогла, и в итоге заявила, что вместе с AMD будет стремиться освоить сразу же техпроцесс в 7 нанометров [6].

В то же время, все компании (как AMD и Intel, так и производители мобильных процессоров) уже вовсю строят планы по покорению техпроцессов 6, 5, и даже 3 нанометра, однако когда появятся первые процессоры по данной технологии пока неизвестно. Также неизвестно, появится ли когда-нибудь процесс, измеряемый в «пикометрах».

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

4.3 Тактовая частота

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

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

Во-первых, современные процессоры многоядерные, то есть, могут выполнять несколько команд одновременно за один такт. И даже внутри одного ядра команды часто выполняются параллельно – пока одна команда читает данные из памяти, вторая может выполняться в АЛУ, и так далее.

Из-за того, что современные процессоры выполняют несколько команд сразу, возникает проблема предсказания переходов – если процессор, например, встречает команду «перейти, если в регистре EAX ноль», то он не знает, произойдет этот переход или нет – ведь когда он встретил данную команду, еще несколько команд до нее не успели выполниться до конца, и значение регистра EAX пока неизвестно. Здесь существует несколько вариантов – сначала выполнить все команды, полностью очистив конвейер, а затем уже двигаться дальше, попробовать предугадать, произойдет переход или нет (если верно предугадать не получилось, конвейер команд также придется полностью очистить), либо просто выполнять команды и для случая, если переход случится, и для случая, если нет (в итоге, в любом случае придется выбросить половину команд).

В связи с этим становится понятно, что для современных процессоров тактовая частота не является чем-то определяющим скорость процессора, как это было ранее (например, в прошлом, когда тактовая частота процессора увеличилась с 40 МГц (80486) до 100 МГц (80586) – это было очень заметно). В современном мире, как правило, тактовая частота составляет несколько гигагерц, и если и увеличивается, то очень незначительно.

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

Таблица 1. Тактовые частоты процессоров Intel [17]

Предпоследнее поколение (восьмое)

Последнее поколение (девятое)

Модель процессора

Тактовая частота

Модель процессора

Тактовая частота

Core i7 8700K

3,70 ГГц

Core i7 9700K

3,60 ГГц

Core i5 8600K

3,60 ГГц

Core i5 9600K

3,70 ГГц

Core i3 8350K

4,00 ГГц

Core i3 9350K

4,00 ГГц

Исходя из данной таблицы, можно сделать следующие выводы:

  1. Частота процессоров практически не изменяется – она составляет от 3,60 до 4,00 ГГц;
  2. При смене поколения она также не изменяется – лишь увеличивается или уменьшается на незначительную величину – 0,1 ГГц;
  3. Чем больше у процессора ядер (и различных других возможностей) – то есть, чем выше он в таблице, тем меньше у него тактовая частота. Это связано с тем, что для параллельной работы всех этих дополнительных ядер требуются дополнительные ресурсы.

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

4.4 Число ядер

После того, как тактовая частота процессоров подошла к своему теоретическому пределу, внимание разработчиков оказалось приковано к другому способу повышения производительности – увеличению числа ядер процессора.

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

  1. Программы (в том числе операционные системы) нужно специально проектировать для работы с многоядерными процессорами. Они должны создавать несколько процессов/потоков, которые могут выполняться параллельно, а это не всегда возможно – иногда по причине того, что программа довольно старая, а иногда просто по природе задачи;
  2. Для обеспечения одновременной работы нескольких процессоров необходимо предусмотреть какие-то механизмы взаимодействия между ними, хотя бы одновременную работу с одной и той же памятью. Из-за этого скорость работы каждого ядра может упасть, что мы видели в пункте 4.1. В более мощных серверных процессорах Intel, например, процессоре Intel Xeon E7-8890 v4, у которого имеется 24 ядра, базовая тактовая частота составляет всего 2,2 ГГц.

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

До последнего времени по данному критерию лидировала фирма Intel – если не принимать во внимание серверные процессоры, то наиболее «многоядерным» являлся ее процессор Intel Core i9-9980XE, в котором находилось 18 ядер. Однако в прошлом (и этом году) ее конкурент – фирма AMD существенно вырвалась вперед с новой архитектурой процессоров Zen, представив вначале процессор с 32 ядрами, а затем и с 64 [5]. Доля AMD на рынке процессоров сразу же довольно сильно выросла [13].

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

4.5 Разрядность данных процессора

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

Ранее данный параметр имел очень большое значение, так как увеличение разрядности данных в два раза означает существенное увеличение скорости работы. Например, если у нас была разрядность
в 4 бита, а стала 8 бит, это означает что для теперь мы можем передать 8 бит за один цикл обращения с памятью (допустим, один такт), в то время как в первом случае понадобилось бы минимум два такта – это двойное ускорение.

Именно поэтому, в прошлом, разрядность данных процессоров достаточно быстро увеличивалась – например, в первом процессоре
Intel 4004 она составляла 4 бита, в Z80 – уже 8 бит, в Intel 8086 – 16,
в Intel 80586 – 32, а сейчас – в большинстве компьютеров – уже 64. Довольно сложно найти компьютер, выпущенный за последние пять лет, который был бы не 64-разрядным (в части данных).

Однако дальнейшего перехода – с 64-битных процессоров на
128-битные не происходит, и в ближайшее время вряд ли произойдет. Все дело в том, даже при наличии 64-битных данных, программист может адресовать числа от 0 до - очень большого числа, которого хватает в 99,9% случаев. Кроме того, если вдруг чисел такого размера все же не хватит, никто не мешает работать и с большими числами – при этом придется обращаться к памяти больше одного раза, однако учитывая, что нужно это крайне редко – это нормально. С другой стороны, при повсеместном переходе на 128-битные процессоры произойдет их резкое усложнение (в два раза больше проводов с данными), в то время как такой размер чисел практически никому не нужен.

Исходя из этого можно сделать вывод, что современные процессоры по данному параметру сравнивать бесполезно – практически все они 64-битные. Однако для более старых процессоров (которым 10 и более лет) это имеет смысл – на них могут не работать современные программы, рассчитанные как раз на использование 64-битных данных.

4.6 Разрядность адреса процессора

Из предыдущего пункта мы знаем, что у современных процессоров чаще всего 64 линии данных. Кажется логичным, что и линий адресов, позволяющих адресовать память также можно сделать 64 – тогда мы сможем адресовать байт памяти. Однако если перевести это в привычные
нам гигабайты – мы получим гигабайт, или 16 экзабайт. Памяти такого объема нет даже в самых современных и производительных серверах [11], тем более в персональных компьютерах.

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

Таблица 2. Максимальный объем памяти для процессоров Intel [17]

Модель процессора

Год производства

Максимальный объем адресуемой памяти

Intel Core i7-9700K

2018

128 гигабайт ( байт)

Intel Core i7-8700K

2017

128 гигабайт ( байт)

Intel Core i7-7700K

2017

64 гигабайта ( байт)

Intel Core i7-6700K

2015

64 гигабайта ( байт)

Intel Core i7-5700HQ

2015

32 гигабайта ( байт)

Intel Core i7-4700HQ

2013

32 гигабайта ( байт)

Исходя из данной таблицы, можно видеть, что объем доступной адресуемой памяти для процессоров Intel постепенно растет (примерно вдвое каждые 2,5 года), однако даже сейчас, в 2019 году, он составляет байт, что очень далеко от теоретического предела в байт. Это огромный объем, который никто не может себе позволить.

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

4.7 Разрядность регистров процессора

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

С тех пор, как процессоры стали 64-битными, и в 1997 году появились первые 64-битные регистры (в процессорах фирм Intel и AMD они называются регистрами MMX, от MM0 до MM7), произошло еще несколько «увеличений разрядности регистров»:

  1. В 1999 году были предложено расширение системы команд под названием SSE, которое добавляло процессору поддержку 128-битных регистров, под названием XMM0-XMM15;
  2. В 2008 году система команд была снова расширена. Были предложены новые регистры YMM0-YMM15 размером в 256 бит, и оставлена возможность дальнейшего их увеличения до 1024 бит;
  3. В 2013 году система команд была расширена, и введены регистры размером 512 бит. Их стало уже 32 – от ZMM0 до ZMM31. Однако на текущий момент данная система команд поддерживается лишь в особой «X-серии» процессоров Intel, например, в
    процессоре Intel Core i9-9980XE [15].

Исходя из этого можно видеть, что несмотря на то, что современные процессоры могут обмениваться с памятью лишь по 64 бита за раз, система команд позволяет работать с данными по 512 бит. Чтобы загрузить или сохранить подобные данные нужно минимум 8 тактов, что довольно медленно, однако затем с ними можно очень быстро работать – конечно, если задача это позволяет.

Довольно мало задач требует таких огромных чисел (по 512 бит), либо параллельной обработки множества мелких данных одновременно (например, есть команды, которые могут работать с этим регистром в 512 бит как с восемью регистрами по 64 бита одновременно). Например, это может быть расчет хешей, или перебор вариантов какой-либо математической задачи, например, гипотезы Коллаца [10]. Однако, чаще всего, обычному пользователю данные виды команд никогда не пригодятся.

4.8 Система команд процессора

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

  • CISC-процессоры. Это процессоры, внутри которых используется достаточно сложная система команд. Типичными представителями процессоров CISC являются, например, процессоры фирмы Intel (хотя на самом деле, внутри данных процессоров расположено RISC-ядро, и все CISC-команды разбиваются на микрооперации, выполняемые им). Преимуществом данного вида процессоров является то, что с использованием сложных команд можно уместить достаточно сложные действия в небольшое число команд, что приведет к более быстрому выполнению программы. Однако для этого сам процессор должен быть достаточно сложным и комплексным;
  • RISC-процессоры. Это процессоры с упрощенной системой команд. Как правило, все команды имеют фиксированную длину, а процессор имеет большое число регистров. Примерами RISC-процессоров являются процессоры с системами команд MIPS или ARM. Главным преимуществом данной системы является простота процессора.
    Во-первых, из-за одинаковой длины команд нужна гораздо более простая схема управления выборкой и декодированием команд, во-вторых, из-за малого числа команд можно обойтись меньшим числом транзисторов. Все это приводит к маленькому, а, следовательно, более простому и быстрому процессору. Однако программисту сложнее писать для него программы – в отличие от CISC-процессоров, требуется больше команд на выполнение действий;
  • MISC-процессоры. Это процессоры со стековой моделью вычислений и с еще меньшим набором команд (как правило, 20-30).
    MISC-процессоры имеют те же достоинства и недостатки, что и RISC-процессоры, однако они еще более выражены. Например, с использованием этой системы команд выпускают процессоры для работы с языком программирования Forth [9];
  • VLIW-процессоры. Они используют очень длинный код операции, куда заносится сразу несколько одновременно выполняемых операций. Например, если процессор имеет внутри себя четыре АЛУ, два из которых умеют выполнять только сложение и вычитание, один, дополнительно, еще умеет выполнять умножение и деление, а последний используется только для операций с плавающей точкой, то в одном «длинном» коде операции можно задать сразу четыре /
    операции – две сложения, одну деления и одно извлечение квадратного корня. Естественно, операции не должны зависеть друг от друга, то есть, нельзя извлекать квадратный корень из числа, получаемого после первой операции сложения. Большим преимуществом данного вида процессоров является то, что команды выполняются действительно параллельно – то есть, если в коде операции используются все четыре АЛУ, они действительно будут использоваться все четыре (и мы получим четырехкратный выигрыш в производительности). В CISC или RISC-процессорах распределением команд по АЛУ обычно занимается некий встроенный в процессор планировщик, и он может работать не самым эффективным способом. Однако у данного вида процессоров есть и существенный недостаток – кто-то должен поделить инструкции по видам АЛУ. Конечно, это может сделать и человек, однако для современных процессоров (где встречается до 64 ядер и больше) это практически нереально. Кроме того, чаще всего, изначально программист не знает, сколько АЛУ, и каких именно, будет в процессоре, на котором будет выполняться его программа у заказчика. Поэтому данную задачу возлагают на компиляторы языков программирования высокого уровня (например, C). Но, опять же, не факт, что компилятор C выполнит эту работу самым эффективным образом.

Из четырех вышеперечисленных групп в настоящее время используются лишь три – MISC-процессоры в персональных компьютерах не применяются (да и в не-персональных компьютерах встречаются очень редко).

Процессоры с системой команд VLIW также до последнего времени нельзя было назвать персональными, однако в последнее такие процессоры под названием «Эльбрус» стала выпускать российская фирма «МЦСТ» в рамках программы импортозамещения [2]. Хотя компьютеры, построенные на таких процессорах все еще являются достаточно медленными, и дорогими, однако на их основе уже существуют рабочие станции, которые с некоторой натяжкой можно назвать персональными. Например, существует рабочая станция «Эльбрус 401-PC» за 203 тысячи рублей [16]. Может быть, это направление когда-нибудь разовьется, и VLIW-процессоров станет больше, однако пока (на 2019 год) их очень мало.

Домашние компьютеры, и рабочие станции, которые расположены на предприятиях чаще всего используют процессоры с системой команд типа CISC – такие как процессоры Intel и AMD. Это самая частовстречающаяся система команд, характеризующаяся тем, что команд очень много, они довольно сложные, однако позволяют выполнять достаточно сложные операции.

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

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

Однако нельзя сказать, что не предпринимались (и не предпринимаются) попытки создать телефоны, планшеты и ноутбуки на основе процессоров CISC (в частности, фирмы Intel). Существует такой класс процессоров как Intel Atom, специально разработанных для более низкой производительности, и более низкого тепловыделения. В частности, с их использованием, например, работает множество ноутбуков, и даже несколько планшетов, например, Microsoft Surface [8].

4.9 Тепловыделение

Тепловыделение, обычно выражаемое в ваттах, показывает, какую сколько тепла выделяет процессор при своей работе. Например, если процессор имеет показатель тепловыделения (обозначаемый обычно
как TDP) в 95 Ватт, это означает, что для его работы необходим вентилятор (кулер), который в нормальных условиях может отвести от него такой объем тепла, и рассеять его в воздухе.

Как было указано в предыдущем пункте, тепловыделение особенно важно для ноутбуков и мобильных процессоров, так как их достаточно сложно изменить конструктивно, добавив охлаждающих элементов. Поэтому часто бывает так, что скорость процессоров для таких устройств специально занижают (делают ниже максимальной), как раз с целью того, чтобы выделялось меньше тепла. Именно поэтому, как правило, мобильные процессоры (например, фирм Qualcomm или MediaTek) работают на частотах около 2 Гигагерц, а не 4, как обычные процессоры Intel и AMD.

Если сравнивать обычные персональные компьютеры, то процессоры от AMD почти всегда выделяли больше тепла, чем сравнимые с ними процессоры Intel, а значит, требовали более мощного охлаждения. Это верно даже сейчас, хотя и не так явно выражено.

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

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

Заключение

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

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

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

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

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

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

Список использованных источников

Список использованной литературы

1. Жмакин А.П. Архитектура ЭВМ. – СПб.: БХВ-Петербург, 2006. – 320 с.

2. Ким А.К., Перекатов В. И., Ермаков С. Г. Микропроцессоры и вычислительные комплексы семейства «Эльбрус». – СПб.: Питер, 2013.
– 272 с.

3. Кириллов В.В. Архитектура базовой ЭВМ – СПб: СПбГУ ИТМО, 2010. – 144 с.

4. Королев Л.Н. Архитектура электронных вычислительных машин – М., Научный мир, 2005, 272 с.

Список использованных электронных ресурсов

5. AMD показала, на что способен ее флагманский 64-ядерный процессор. URI: https://www.ixbt.com/news/2019/05/27/amd-pokazala-na-chto-sposoben-ejo-flagmanskij-64jadernyj-processor.html (дата обращения 29.07.2019)

6. Разин А. Intel разъяснила, как 7-нм техпроцесс поможет ей выжить. URL: https://3dnews.ru/987258 (дата обращения 29.07.2019).

7. KolibriOS в BIOS (coreboot / SeaBIOS) на G505S – успех! URL: http://board.kolibrios.org/viewtopic.php?t=3446 (дата обращения 29.07.2019)

8. Microsoft Surface 3 64 Gb. URL: http://zoom.cnews.ru/goods_card/character/582472/microsoft-surface-3-64gb (дата обращения 29.07.2019).

9. MISC против RISC против CISC. URL: http://www.enet.ru/win/cherezov/forthcpu/misc.html (дата обращения 29.07.2019).

10. Roosendaal E. On the 3x+1 problem. Introduction and definitions. URL: http://www.ericr.nl/wondrous/#part1 (дата обращения 29.07.2019).

11. Top 500 Supercomputers List, June 2019. URL: https://www.top500.org/lists/2019/06/ (дата обращения 29.07.2019).

12. Двое на одного: 64-ядерный CPU AMD Epyc в тесте C-Ray опередил двухпроцессорную систему Intel. URL: https://www.ixbt.com/news/2018/11/07/64-cpu-amd-epyc-c-ray-intel.html (дата обращения 29.07.2019).

13. Гавринченков И. Доля AMD на процессорном рынке смогла превысить 13%. URL: https://3dnews.ru/987210 (дата обращения 29.07.2019).

14. Проектные нормы в микроэлектронике: где на самом деле 7 нанометров в технологии 7 нм? URL: https://habr.com/ru/post/423575/ (дата обращения 29.07.2019).

15. Процессор Intel Core i9-9980XE Extreme Edition. URL: https://www.intel.ru/content/www/ru/ru/products/processors/core/x-series/i9-9980xe.html (дата обращения 29.07.2019).

16. Рабочая станция «Эльбрус 401-РС» (ТВГИ.466535.149). URL: http://www.ineum.ru/arm-elbrus401 (дата обращения 29.07.2019).

17. Спецификации продукции. Процессоры. URL: https://ark.intel.com/content/www/ru/ru/ark.html#@Processors (дата обращения 29.07.2019)

18. Что такое Intel Management Engine? URL: https://www.intel.ru/content/www/ru/ru/support/articles/000008927/software/chipset-software.html (дата обращения 29.07.2019).