Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Устройство персонального компьютера


Информационный Канал Subscribe.Ru

Устройство персонального компьютера

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

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

Выпуск: #4
 
Особенности работы процессоров. Архитектура
 

Заранее вам сообщаю, что следующий выпуск рассылки не ждите. На период с сегодняшнего дня до двадцатых чисел августа рассылка уходит в отпуск. Знаю, знаю: мы только что открылись - и уже в отпуск. Обстоятельства сложились таким образом? В общем, попрошу не разбредаться, терпеливо подождать пару неделек. Мы обязательно продолжим обсуждение извечных тем компьютерной индустрии.
Сегодняшний выпуск я намеренно сделал несколько больше, чувствуя свою вину и все такое. Пока его и читайте. Да, и если есть какие-то вопросы - обязательно пишите. Я постараюсь ответить (рано или поздно).

Итак, мы остановились на понятии разряда. В любой системе счисления разряд - это одна позиция (символ) для цифры. Пример: 73.86 - двухразрядное число в десятичной системе счисления. Для шестнадцатеричной системы двухразрядные числа выглядят так: 19, AB, 9D и т.п. Вводя понятие разряда, мы упрощаем жизнь себе, однако процессор воспринимает все через наборы нулей и единиц. Но даже если мы и попытаемся вбить ему массив пресловутых чисел двоичной системы счисления, процессор все равно ничего не поймет, потому что архитектура процессорной системы предусматривает работу с данными через обработку конечных выражений небольшой длины. Эти выражения называются словами. В роли слов, понятных процессору, выступают байты. Байты состоят из 8 бит (8 позиций для единиц и нулей). Строго говоря, одна инструкция для процессора не обязательно должна ограничиваться только 8 битами. Системы старого образца работали с блоками единиц и нулей, длина которых варьировалась от 8 до 108 бит. Причем корректную длину каждой отдельной инструкции процессор должен был определить самостоятельно. Но это дело прошлого.
Вернемся к системам счисления. Во втором выпуске я упомянул, как обозначается шестнадцатеричная система счисления. Помимо приведенных способов существует еще один - через выражение 0x. Пример: 0x16, 0x04 и т.п. Для двоичной системы также имеется свой опознавательный знак - буква b, указываемая после двоичного выражения: 00100111b, 000b, 111b и т.п.

Память делят на постоянную и непостоянную. Рассмотрим эти понятия на примере уже известных коробков со спичками. Постоянная память - это такая память, в которую если уж что-то записано, то никакими разумными методами ячейки с данными не опустошить. Положили вы в пустой коробок семь спичек, так там семь спичек лежать и будет, сколько бы вы его не трясли и не рвали. Хотя существует и не очень постоянная память, содержимое которой изменять вполне возможно, правда, соблюдая некоторые условия. К такой памяти относится, например, Flash.
Непостоянная память представлена оперативкой вашего компьютера. Расправа с данными в оперативной памяти общеизвестна: неистово жмем Reset с маниакальным блеском в глазах. А если еще зависшая система предварительно попортила немало нервов безжалостным образом, то ни о каком "резете" и речи быть не может, - бах в Power и никаких проблем. И компьютер выключен, и нервная система потихоньку приходит в порядок. Кнопка Reset на долю секунды отключает питание ячейкам оперативной памяти, в том числе и тем, в которых находится информация о загруженной ОС.
Так, вроде бы с разновидностями памяти определились. Теперь к вопросу о "личных" ячейках памяти самого процессора. Собственная память необходима процессору по той простой причине, что до нее добраться проще всего. Память процессора еще называют КЭШем. Чем больше КЭШ-память процессора, тем большее количество сведений в ней способно храниться без обращения к закромам системной (оперативной) памяти. Это одна из причин, по которой процессоры с внушительным объемом КЭШа, но той же тактовой частоты, что и процессоры с малой КЭШ-памятью, работают быстрее, производительней.

Разберемся с функциями процессоров. Разложим на столе ручку, листок бумаги, часы и телефон. Это наши данные. Процессору предстоит с ними работать. Обработка данных возможна только посредством команд. Причем для каждого типа данных своя команда: ЗАВЕСТИ для часов, ПОЗВОНИТЬ для телефона и НАПИСАТЬ для ручки с бумагой. Для простоты предполагаем, что ячейки процессорной памяти размещаются последовательно друг за другом. Работоспособный алгоритм выглядит так:

  1. ЗАВЕСТИ;
  2. Часы;
  3. ПОЗВОНИТЬ;
  4. Телефон;
  5. НАПИСАТЬ;
  6. Ручка;
  7. Лист бумаги.
Процессор последовательно пробегает через все ячейки. В первой он ожидает узреть какую-либо команду. В последующей - блок данных, над которыми требуется совершить действие, описанное командой предыдущей ячейки. Не спрашивайте, почему так. Однозначно ответить на вопрос я не смогу, так как ход описанного процесса определяется конструкцией конкретной модели и трудами разработчиков системной логики. Если следовать нашей схеме, то указанные последовательности обработки имеющихся данных единственно правильные. Попробуйте переставить местами часы и телефон - возникнет ошибка. Подобные недоразумения возможны в реальной работе процессора, но они вовремя пресекаются. Это требует времени, но как говорится, без труда? Кстати, обратите внимание, что командам ЗАВЕСТИ и ПОЗВОНИТЬ соответствует один блок данных, тогда как команде НАПИСАТЬ - два блока. Еще одна причина, которая влияет на скорость выполнения задач процессором.

Введем понятие инструкции. Инструкцией мы будем называть команду с данными. Пусть нашему процессору известна команда ПРЫЖОК, выполнение которой приводит к изменению направления хода программы. Данные для команды ПРЫЖОК указывают на номер строки, куда следует переместиться. Введем в алгоритм, приведенный выше, следующие поправки:

  1. ЗАВЕСТИ; // даем команду
  2. Часы; // выполняется инструкция
  3. ПОЗВОНИТЬ; // предыдущая инструкция выполнена, приступаем к следующей
  4. Телефон;
  5. ПРЫЖОК;
  6. 3
  7. НАПИСАТЬ;
  8. Ручка;
  9. Лист бумаги.
Процесс выполнения программы будет бесконечен, так как при достижении строки с командой ПРЫЖОК и считывания последующих данных, произойдет возврат к строке 3. Мы зациклили процессор.
Команды процессору передаются также в двоичном виде. Мы же для простоты обозначим команды как-нибудь так: сложить - 15, перемножить - 04 и т.п. Так как на практике принято начинать ряд с 0, то и мы 15 спичек положим в наш нулевой коробок (т.е. в самом первом коробке теперь содержится команда СЛОЖИТЬ, что и требует процессор). В следующие 2 ячейки необходимо поместить данные, над которыми предполагается выполнить операцию сложения:
  1. 15;
  2. 10;
  3. 14.
Процессор читает ячейку под номером 0, в которой по его предположениям содержится команда (неважно какая, главное, что команда). Распознав двоичный код как команду СЛОЖИТЬ, процессор считывает данные из последующих 2-х ячеек, как того требует команда, добавляя в коробок с номером 1 четырнадцать спичек из коробка под номером 2. В коробке 1 теперь 24 спички.
В реальности не все так гладко, как я вам здесь описал. Из-за ошибок в работе программы, допущенных по оплошности программистов, в некоторых ячейках могут содержаться некорректные данные. Например, вместо складываемого числа в ячейке находится следующая команда. Но ведь процессор думает, что там содержатся данные, причем в обязательном порядке, и ему плевать на чьи-то ошибки. Процесс работы в таких случаях усложняется.

Давайте разобьем инструкцию на составляющие, т.е. на команду и данные. Предположим, что мы только что закончили выполнение предыдущей инструкции и должны обратиться к следующей ячейке за командой. Номер этой ячейки известен заранее, потому что процессором специально выделена отдельная ячейка, которая следит за порядком в адресах (номерах) ячеек. После чтения очередной ячейки значение в адресной увеличивается. Представим, что мы с вами и есть ядро процессора, выполняющее команды. Мы располагаем миллиардами коробков, из которых последовательно извлекаем спички, распознавая команды и данные. Поскольку количество коробков очень велико, то часть их находится рядом, до других еще надо дотянуться, а до тех, что с номерами 100 и выше, придется бежать. Наша команда лежит в 120-ой ячейке. Бежим к ней через все 119 ячеек. Некоторые ячейки "тормознутые", поэтому несемся мы, периодически спотыкаясь и затрачивая впустую драгоценное время на реабилитацию. Добравшись до нужного коробка, вынимаем спички и, что есть сил, бежим обратно, продолжая спотыкаться и проклинать неугомонного пользователя. Вернувшись, распознаем команду и опять в путь за данными, безвозвратно теряя уйму времени.
Если бы процесс происходил в точности так, как это описано выше, то ни о каких инженерных вычислениях или игре в жанре 3d action с графикой современного этапа не могло бы идти и речи. Но проблема эта решается и довольно-таки эффектно. Надо только кое-что поменять в архитектуре процессора. Вот мы с вами потихоньку и добрались до понятия конвейер. Суть конвейерной обработки состоит в том, что у ядра теперь появляются помощники. Один бежит с результатами от 30-ой ячейки, другой копошится у 31, а третий ковыляет к 32. Зачем вообще нужно бегать туда-обратно? Внутри ядра процессора также имеются ячейки. Доступ к ним самый быстрый. Ячейки эти называются регистрами. Процессор способен оперировать только значениями в регистрах ядра: складывать, вычитать, перемножать. Таким образом, из внешних ячеек (вне ядра) берутся инструкции, переносятся в регистры, над ними корпит ядро, а затем результаты работы перемещаются обратно во внешние ячейки. Многие регистры специализированы: одни складывают, другие перемножают, третьи яростно мешают первым :) и т.п.

Настало время пояснить различия между процессором и контроллером. В принципе, это одно и то же. Не путайте с центральным процессором, хотя почти всегда его называют просто процессор. Контроллеры - это микросхемы, выполняющие функции по обработке сигналов, которыми обмениваются всевозможные устройства ПК. Контроллер позволяет общаться различным узлам компьютера, играя роль переводчика. Здесь по аналогии с людьми, относящимися к различным языковым группам. Вроде бы у всех мнения достойные, однако, без переводчика к взаимному согласию не прийти. Так и в компьютерах, язык команд видеокарты непонятен центральному процессору или чипсету и наоборот. Контроллер разъясняет обеим сторонам, как следует работать, чтобы достичь желаемого эффекта.
Многие контроллеры уже встроены в системную плату изготовителем. Например, контроллер ввода вывода для таких устройств, как клавиатура и мышь.
Все что мы говорили выше для процессоров справедливо и для контроллеров.
Рассмотрим понятия "адресное пространство контроллера" и "разрядность контроллера". Первое - это не что иное, как количество коробков, находящихся в ведении контроллера. Каждый коробок имеет свой номер - адрес.
С разрядностью контроллера уже сложнее. Максимальное количество спичек в одном коробке где-то в районе шестидесяти. В реальных ячейках процессора (или контроллера) их 255. Процессор ведь оперирует словами - байтами, состоящими из 8 бит. В каждой ячейке слово: 00000000 - по-нашему ноль, 00000001 - по-нашему единица, 00000010 - двойка по-нашему и т.д. Максимальное значение, которое можно закодировать одним словом, 255 (всего 256 значений, включая ноль). Выше мы работали с восемью разрядами, но это удел старых процессоров. Возьмем еще 8 разрядов. Итого: 16. Максимальное кодируемое значение теперь 65535. Получаем, что в один коробок мы можем поместить число от 0 до 255, в два коробка - от 0 до 65535. Выражение "16-разрядный процессор" означает, что процессор оперирует с 2-мя коробками (ячейками) сразу. Регистры у него также шестнадцатиразрядные. Теперь вспомним, какими процессорами обзаводимся мы в нынешнее время. В основном, 32-разрядными. Т.е. такими процессорами, которые способны работать с 4 ячейками одновременно. Но на прилавках магазинов во всю пылятся 64-разрядные системы, оперирующие уже не с 4-мя, а с 8 ячейками. Прогресс налицо. Жаль только, что переход на 64-разрядную платформу довольно болезненный. Но на данный момент не это главное.

Представьте, что сидите вы за компьютером и дуетесь в свой любимый Counter-Strike со знакомым из Австрии, с головой погрузившись в игровой процесс. Тут в самый "горячий" момент вас тревожит кто-нибудь из домочадцев с целью послать в магазин за кочаном капусты. Прерывают на самом интересном месте. Теперь помимо игры вас занимает еще и мысль о представившейся альтернативе: продолжать мочить "ненавистного врага" и потом получить нагоняй или бросить азартное занятие, крепко выругавшись (про себя), и с миром выполнить обязанность. Вы все же не решаетесь спорить и выключаете компьютер. Для вас важнее отношения с близкими, нежели виртуальные развлечения, т.е. приоритет отношений больше приоритета развлечений.
С процессором такая же катавасия. Если к нему приходит более важное прерывание (на прерывании указана степень его важности), то он откладывает свою задачу, предварительно запомнив место остановки программы, и переключается на выполнение другой обязанности.
Но, предположим, задача выполнена. Вы вернулись из магазина и теперь самозабвенно стучите по клавишам, набирая очередную статью для IT журнала. Вдруг оглушительно звонит рядом стоящий телефон. Это ваш приятель Вася с дружеской просьбой. Надо бы распечатать один занимательный материальчик, найденный только что в Интернете, а у него, видите ли, чернила закончились. Назначим вашей проблеме со статьей приоритет пять. Его же задача расценивается вами как нечто, тянущее максимум на двойку. 2<5. Поэтому вы продолжаете марать электронные листы, отослав Васю на потом. Однако после завершения своих дел предстоит еще и распечатать документы товарища. То есть картина следующая: позвонил Вася и выставил ЗАПРОС (просьбу) на прерывание (чтобы вы занялись его проблемами). Он только попросил вас прерваться, а уж выполнять немедленно или не выполнять, оставив до лучших времен его просьбу, решать вам - центральному процессору. Другими словами, прерывание - это представитель куска программы у процессора и насколько этот представитель важный, настолько часто процессор будет обсчитывать соответствующий кусок кода.

Всякий процессор наделен аппаратом, который позволяет им управлять извне или внутри. Для чего? Объясняю на примере. Щелкаете вы по клавишам, на экране формируются строчки текста, параллельно звучит музыка из динамиков. Допустим, десятой ячейке соответствует клавиатура, сотый коробок отвечает за монитор, а ноль - это звук. Процессор начинает работу с нулевой ячейки. Мы непрерывно бьем по "клаве" и тащимся от умопомрачительного рока (звучит гитарное соло). Теперь проследим ситуацию в деталях. Ударили по клавише - в коробке с десятым номером количество спичек изменилось. Надо выводить значение в 10-м коробке (клавиатура) в сотый коробок (монитор), а процессор где-то там ползает. Что же получается? Вы со злостью все стучите и стучите по кнопке, а на мониторе никаких изменений. Да еще в нулевую ячейку звук надо выводить. Можно было бы зациклить процессор на вывод в звуковую ячейку данных из массива других ячеек (например, с 30 по 40), но тогда процессор кроме звука ничем иным заниматься не сможет. А теперь представим, что при нажатии на клавишу на ножку процессора подается напряжение и он, бросая все дела, мчится выполнять клавиатурную команду. Это внешнее прерывание.
Что касается звука. У процессора есть встроенный таймер. При достижении таймером какого-либо значения происходит срабатывание. Заложил программист срабатывание 1000 раз в секунду, процессор 1000 раз в секунду будет подрываться к определенным коробкам, закрепленным за таймером, выполнять код. В примере, описанном выше, будет звучать музыка, в других случаях - происходить еще что-то. Но у нас о звуке и клавиатуре складывается впечатление, что они работают непрерывно. Вот это уже внутренне прерывание (я о звуке).

И напоследок, о передаче данных между контроллерами (процессорами). Как передать, например, байт? Протянуть 8 проводков, если мы хотим перекидываться обычными (не двойными) словами. Давайте передадим число 12. В двоичной системе 12 выглядит так: 00001100. Следовательно, на 3-й и 4-й проводки необходимо подать напряжении, а остальные заземлить. Совокупность таких проводков называют шиной. Помимо умения передавать данные надо еще знать, куда их отсылать. Шины делят на адресные и данных. На шине адреса выставляется номер той ячейки, куда процессор намеревается переместить некоторые данные. На шине данных выставляются непосредственно числа (двоичные коды), которые следует отправить. Разрядность шины определяет количество линий передач, которыми она (шина) располагает. Чем больше разрядность шины адреса, тем большая часть адресного пространства может быть зарезервирована процессором под данные за такт. Разрядность шины данных ограничивает количество данных, передаваемых процессору и от него.

Архитектура современного процессора. Архитектура процессоров линейки x86 компании Intel основана на концепции CISC (Complex Instruction Set Calculation) - расширенной системе команд переменной длины. Помните, мы с вами говорили о процессорах, которым приходилось самостоятельно определять границы команд, длиной от 8 до 108 бит. Эта технология появилась в 1978 г. Тогда процессорные системы были скалярными (т.е. могли в каждый момент времени выполнять только одну команду), конвейерная обработка практически не применялась.
В 1986 году появилась архитектура RISC (Reduced Instruction Set Calculation) - сокращенный набор команд фиксированной длины. Концепция RISC была оптимизирована для суперскалярных (с возможностью выполнения нескольких команд одновременно) конвейерных вычислений.
Линию CISC-процессоров продолжала развивать Intel с целью обеспечения совместимости. Фирма Apple ориентировалась исключительно на архитектуру RISC, что ограничивала ее долю на рынке ПК из-за трудностей исполнения команд для x86 на своих компьютерах. Однако отдельные модификации систем от AMD решили эту проблему совмещением обеих архитектур: ядро процессора работало с RISC-инструкциями, а специальный отдельный блок интерпретировал команды CISC, соблюдая условия совместимости.

В недрах компьютерных лабораторий ведутся разработки по увеличению числа функциональных узлов на кристалле процессора, что позволяет выполнять параллельно больше команд. Современные процессоры не могут выполнять одновременно свыше 4-х команд, а управляющая логика при этом занимает слишком много места.
Усложняет ситуацию последовательная структура кода программ и большое число ветвлений. Чтобы как можно больше извлечь из кода "скрытого параллелизма" управляющие блоки изменяют порядок команд во время исполнения программы, пытаются предсказать направление перехода после очередного ветвления и выполняют команды до вычисления условий ветвления. Если путь ветвления предсказан неверно, процессор должен сбросить промежуточные результаты, очистить конвейеры и загрузить нужные команды. Подобные операции требуют большого числа тактов, поэтому, теоретически выполняя 4 команды за такт, реально процессор выдает менее двух.
Проблема усугубляется недостаточной скоростью работы оперативной памяти, которая не поспевает за тактовой частотой процессора. На заре своего расцвета процессоры линейки x86 извлекали данные из памяти с той же скоростью, что и обрабатывали. Сейчас же приходится тратить уйму тактов на ожидание загрузки, несмотря на емкий и быстрый КЭШ различных уровней. Поэтому увеличение тактовой частоты процессора не означает пропорциональное увеличение производительности системы.

Начиная с модели Intel 80486 в ядро всех без исключения процессоров разных производителей, встроен блок обработки данных с плавающей точкой (FPU - Floating Point Unit). От эффективности этого блока зависит скорость работы со сложными графическими приложениями и мультимедиа. До появления процессора Athlon от AMD пальму первенства в направлении повышения эффективности блока FPU удерживала компания Intel. Сейчас же на многих тестах Athlon опережает продукцию Intel.

Многие компьютерные салоны указывают в своих прайс-листах такие характеристики процессоров, как: MMX, 3DNow!, SSE. Что означают эти аббревиатуры? Дело в том, что некоторые вычислительные операции могут быть оптимизированы на аппаратном уровне. Впервые к решению этой проблеме подошла команда Intel с внедрением технологии MMX (MultiMedia Extensions) - мультимедийные расширения. К немалому набору команд x86 было добавлено еще 57 дополнительных инструкций типа SIMD (Single Instruction - Multiple Data - одна инструкция для многих данных), позволивших распараллелить обработку однотипных дынных. Это был большой шаг вперед в области мультимедийных приложений. Однако у новой технологии имелся один существенный недостаток - неспособность обработки чисел с плавающей точкой. И опять компания AMD обошла своих конкурентов, предложив аналогичную технологию 3DNow!, в которой упомянутый недостаток отсутствовал. Позже и Intel разобралась со своими "демонами", внедрив решение SSE (Streaming SIMD Extension), по многим параметрам превосходящее своего старшего конкурента. Оригинальность SSE заключалась в использовании процессором Pentium III отдельных регистров для типа данных с плавающей точкой. То есть фактически Intel ввела новый режим работы процессора - параллельную обработку FPU и SSE.

Кристалл. Ядро. Конструктив. В производстве процессоров существуют технологические нормы, определяющие различные конструктивные параметры продукта: минимальные расстояния между логическими цепями и управляющими структурами на кристалле. Каждый производитель стремится ужесточить эти нормы и не без оснований. Малые расстояния между логическими элементами и размеры самих узлов снижают рассеяние мощности, позволяют устойчивее работать на необходимых высоких частотах. Да и количество размещаемых элементов увеличивается при неизменных размерах кристаллов.
Раньше считались стандартом 0,35-микронные технологии, затем 0,25 и 0,18, сейчас 0,13-микронные. В настоящее время новые технологические нормы быстрее осваивает компания AMD. Ребятам из Intel следует задуматься, ведь они имеют прекрасную возможность вкладывать миллиарды долларов в изучение перспективных направлений.

Интеловская технология MMX разграничила физическую реализацию блоков на кристалле на так называемое "ядро" (сам по себе процессор) и другие элементы (контроллеры памяти, КЭШ, интерфейс шины и т.п.) путем подачи на них разных напряжений питания. Были введены различные обозначения ядра и процессора в сборе. Например процессоры Celeron выпускались с ядрами Covington, Mendocino и Coppermine. Pentium'ы - с ядрами Klamath и Deshutes. Pentium III основывался на ядре Katmai и Coppermine. И Pentium IV не отстает от своих младших собратьев по разнообразию ядер: Willamette, Northwood и Prescott.
AMD Athlon XP также может строиться на основе нескольких модификаций: Palomino, Thoroughbred и Barton.
У менее известных производителей ситуация складывается аналогичным образом.

Понятие "конструктив" появилось в русском языке и ПК-индустрии благодаря бесконечным стараниям Intel. Оно точно передает суть некоего сооружения, в недрах которого заключен процессор, начиная с серии Pentium II, предназначенный для разъема Slot 1 на материнской плате.
Вообще, вопросы о разъемах под различные модификации процессоров требуют отдельного освещения. Часто его не относят к разряду интерфейсов. Однако разъем - это не просто механическое устройство. Спецификация разъема описывает не только его конструкцию, но и электрические параметры, порядок расположения контактов для данных и питания, особенности взаимодействия с шинами, основной и КЭШ-памятью и другие показатели. Внешняя схожесть разъемов не свидетельствует о их пригодности применения к различным поколениям процессоров и процессорам в рамках одного семейства. Подробным рассмотрением существующих и сошедших со сцены процессорных разъемов, а также предлагаемых на современном рынке процессоров мы и займемся в следующем выпуске. Ждите новую статью недельки через 3-4.

Если имеются какие-то вопросы, предложения или пожелания относительно организации рассылки или поправки, пишите мне по адресу vumalkov@rambler.ru




Copyright © 2004 by Вадим Мальков
Все права защищены.


http://subscribe.ru/
http://subscribe.ru/feedback/
Адрес подписки
Отписаться

В избранное