FAQs For NOOPs

Что есть материнская плата.

Общее

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

И в первую очередь — тип процессора. Это могут быть «десктопные» процессоры (от Desktop — процессоры для настольных ПК) — Intel Pentium/Celeron/Core, установленные в разъемы Socket 370/478/LGA 775, AMD Athlon/Duron/Sempron — в Socket 462/754/939/AM2. Кроме того, в корпоративном секторе можно встретить двух-, четырех- и даже восьмипроцессорные высокопроизводительные решения.

Socket LGA775

Socket 939

На системной плате также имеются:

  • слоты DIMM для установки модулей памяти типа SDRAM/DDR/DDR2 (разные для каждого типа памяти). Чаще всего их 3-4, хотя на компактных платах можно встретить только 2 таких слота;
  • специализированный разъем типа AGP или PCI-Express х16 для установки видеокарты. Впрочем, в последнее время, с повальным переходом на видеоинтерфейс последнего типа, сплошь и рядом встречаются платы с двумя, а то и с тремя видеоразъемами. Также встречаются и системные платы (из самых дешевых) без видеоразъемов вообще — их чипсеты имеют встроенное графическое ядро, и внешняя графическая карта для них необязательна;
  • рядом со слотами для видеокарт обычно находятся слоты для подключения дополнительных карт расширения стандартов PCI или PCI-Express х1 (раньше встречались еще и слоты ISA, но сейчас такие платы — музейная редкость);
  • следующая достаточно важная группа разъемов — интерфейсы (IDE и/или более современный Serial ATA) для подключения дисковых накопителей — жестких дисков и оптических приводов. Также там до сих пор находится разъем для floppy-дисковода (3,5″ дискеты), хотя все идет к тому, что от него в скором времени окончательно откажутся. Все дисковые накопители подключаются к системной плате с помощью специальных кабелей, в разговорной речи также называемых «шлейфами»;
  • недалеко от процессора располагаются разъемы для подключения питания (чаще всего двух типов — 24-контактный ATX и 4-контактный ATX12V для дополнительной линии +12 В) и двух-, трех- или четырехфазный модуль регулирования напряжения VRM (Voltage Regulation Module), состоящий из силовых транзисторов, дросселей и конденсаторов. Этот модуль преобразует, стабилизирует и фильтрует напряжения, подаваемыее от блока питания;
  • заднюю часть системной платы занимает панель с разъемами для подключения дополнительных внешних устройств — монитора, клавиатуры и мыши, сетевых-, аудио и USB-устройств и т.п.
  • кроме вышеперечисленных слотов и разъемов, на любой системной плате имеется большое количество вспомогательных джамперов (перемычек) и разъемов. Это могут быть и контакты для подключения системного динамика и кнопок и индикаторов на передней панели корпуса, и разъемы для подключения вентиляторов, и контактные колодки для подключения дополнительных аудиоразъемов и разъемов USB и FireWire.

Память

Дополнительное питание

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

Вопрос: Каких размеров бывают системные платы?
Ответ: Материнские платы, помимо функциональности, отличаются друг от друга еще и размерами. Эти размеры стандартизированы и называются форм-факторами (табл.1):

Таблица 1

Форм-фактор

Размеры платы, мм

Примечание

ATX 305 х 244  
eATX 305 х 330  
Mini-ATX 284 х 208 Для малых корпусов
Micro-ATX 244 х 244 Для малых корпусов
Mini-ITX 170 х 170 Для сверхмалых ПК
Nano-ITX 120 х 120 Для сверхмалых ПК

Форм-фактор определяет не только размеры материнской платы, но и места ее крепления к корпусу, расположение интерфейсов шин, портов ввода/вывода, процессорного гнезда и слотов для оперативной памяти, а также тип разъема для подключения блока питания.

В настоящее время наиболее распространен форм-фактор ATX (Advanced Technology eXtended), достаточно большой размер которого позволяет производителям интегрировать на системную плату большое количество функций. Потенциал вариантов ATX уменьшенного размера, конечно, гораздо ниже, однако в настоящее время, когда прогресс в области интегрированных контроллеров различных типов практически сравнял их основные возможности с дискретными решениями (в первую очередь — сетевые и аудио контроллеры, в меньшей степени — видео), большинству непритязательных пользователей типичных офисных (да и не только) систем большего и не нужно. Хотя варианты плат уменьшенного размера и подходят к стандартным корпусам ATX, наиболее целесообразно использовать их в компактных корпусах типа Micro-ATX.

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

Для того, чтобы система могла носить логотип Intel Viiv, она должна в обязательном порядке иметь следующий набор комплектующих:

  • двухъядерный CPU Intel семейства Pentium D, Pentium Extreme Edition, или Intel Core 2 Duo;
  • материнскую плату на базе чипсета Intel 975, 965 или 945, поддерживающего вышеперечисленные процессоры, с соответствующей версией южного моста ICH7DH или ICH8DH (специальные версии для Digital Home);
  • сетевой контроллер Ethernet производства Intel (Pro/1000 PM или Pro/100 VE/VM, наличие модуля беспроводной связи не обязательно);
  • кодек стандарта Intel High Definition Audio и набор соответствующих аудиовыходов — 6 RCA-разъемов или один цифровой SPD/F;
  • жесткие диски SATA с поддержкой NCQ;
  • драйвер Intel Quick Resume Technology, обеспечивающие практически мгновенное включение/выключение ПК (как обычного бытового устройства);
  • операционная система Windows XP Media Center Edition с Update Rollup 2;
  • набор ПО Intel Viiv Media Server, позволяющего осуществлять поиск и каталогизацию медиафайлов в Сети, которое, по задумке самой Intel, способно заметно облегчить жизнь обычному пользователю.

Intel Viiv

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

Вопрос: Платформа AMD Quad FX — что это?
Ответ: Платформа Quad FX (старое название — 4×4) является своеобразным ответом компании AMD на появление четырехъядерных процессоров Intel Kentsfield и позиционируется производителем как решение для пользователей-энтузиастов, стремящихся к достижению максимальной производительности своих систем не взирая на цену.

AMD Quad FX, основанная на архитектуре DSDC (Dual Socket Direct Connect) представляет собой двухпроцессорную материнскую плату, предназначенную для установки в одну систему пары двухъядерных процессоров семейства Athlon 64 FX-7х (90 нм ядро Windsor) в исполнении Socket F, что дает возможность одновременного исполнения четырех вычислительных потоков. В платформе Quad FX используется специализированный чипсет NVIDIA nForce 680a SLI, поддерживающий две графические шины PCI Express x16 и две шины PCI Express x8. Таким образом, в системе может быть установлено до 4 видеокарт NVIDIA в конфигурациях Quad SLI или SLI (в последнем случае свободные слоты могут быть использованы для ускорителей физики).

Дальнейшее развитие идей, заложенных в платформе Quad FX, компания AMD связывает с платформой нового поколения, известной под условным названием FASN8 (от слова «fascinate», что в переводе с английского означает «очаровывать»). В ней, в отличие от Quad FX, будут использоваться компоненты только собственного производства AMD — четырехъядерные процессоры Phenom FX, видеокарты семейства Radeon HD 2ххх и соответствующие чипсеты. Поскольку в такой «очаровательной» системе будет работать сразу два четырехъядерных процессора, то общее число задействованных ядер достигнет восьми.

Чипсеты

Вопрос: Что такое чипсет?
Ответ: Чипсет (ChipSet — набор чипов), или набор системной логики, представляет собой одну или несколько микросхем, специально разработанных для обеспечения взаимодействия CPU со всеми остальными компонентами компьютера. Чипсет определяет, какой процессор может работать на данной материнской плате, тип, организацию и максимальный объем используемой оперативной памяти (разве что современные модели процессоров AMD имеют встроенные контроллеры памяти), сколько и какие внешние устройства можно подключить к компьютеру. Разработкой чипсетов для десктопов занимаются 5 компаний: Intel, NVIDIA, AMD, VIA и SIS.

Чаще всего чипсет состоит из 2 интегральных микросхем, называемых северным и южным мостами. Северный мост (Northbridge или, у Intel, MCH — Memory Controller Hub) обеспечивает взаимосвязь между процессором (по шине FSB — Front Side Bus), оперативной памятью (SDRAM, DDR, DDR2 и, в ближайшей перспективе, DDR3), видеокартой (интерфейсы AGP или PCI Express) и, посредством специальной шины, с южным мостом (Southbridge, или ICH — I/O Controller Hub), в котором расположены большинство контроллеров интерфейсов ввода-вывода. Некоторые северные мосты включают графическое ядро, использующее внутренний интерфейс AGP или PCI Express — такие чипсеты называются интегрированными.

Intel P35

К числу устройств, встроенных в южный мост, относятся контроллеры шин PCI (Peripheral Components Interconnect) и/или PCI Express, дисковых накопителей (IDE и SATA-жестких дисков и оптических приводов), встроенные звуковые, сетевые, USB- и RAID-контроллеры. Южный мост также обеспечивает нормальную работу системных часов (RTC — Real Time Clock) и микросхемы BIOS.

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

Вопрос: Какие чипсеты выпускает Intel для своих процессоров?
Ответ: В настоящее время господствующие позиции в данном сегменте рынка занимает семейство чипсетов Intel 965 Express, официально поддерживающее процессоры Core 2 Duo/Extreme. Подробную информацию об этих чипсетах можно получить в статье «Чипсеты Intel 96x: варианты оправы для бриллианта Core 2 Duo«.

Intel 965 Express

На смену (или в дополнение?) чипсетам Intel 965 Express грядет семейство чипсетов Intel 3x (известное под кодовым обозначением Bearlake). Достаточно полная информация о них содержится в статье «Все о чипсетах Intel 3 Series (Bearlake)».

Bearlake

Bearlake

Вопрос: Какие еще чипсеты бывают для процессоров Intel?
Ответ: Серьезным конкурентом Intel является компания NVIDIA. Актуальной на сегодняшний день является 600-я серия чипсетов NVIDIA nForce, включающая в себя как решения топ класса (nForce 680i SLI и 680i LT SLI), так и среднего (nForce 650i SLI и 650i Ultra).

Более подробно об этих чипсетах, их возможностях по сравнению с основными конкурентами, можно почитать в следующих статьях:

Что касается других участников рынка чипсетов для процессоров Intel, еще совсем недавно игравших на нем весьма заметную роль — компаний VIA и SiS, то сегодня их роль достаточно скромна. После «пира гигантов» Intel и NVIDIA, им остался весьма небольшой сегмент недорогих бюджетных решений.

О чипсетах для процессоров Intel прежних выпусков можно почитать в статье «Современные чипсеты для процессоров Intel«.

Вопрос: Какие чипсеты существуют для процессоров AMD?
Ответ: Если на рынке чипсетов для процессоров Intel царит двоевластие, то с чипсетами для процессоров AMD все гораздо проще — господство продукции NVIDIA в настоящее время здесь неоспоримо.

Высший и средний классы чипсетов NVIDIA представлены как 600-й, так и 500-й серией nForce (nForce 680a SLI, 590 SLI и nForce 570 SLI, 570 LT SLI, 570 Ultra, 560, 550, 520 соответственно), а в нижнем, бюджетном классе, господствуют интегрированные чипсеты 6100/6150 и дискретные nForce 520 LE. Подробнее о них — в статье «Сравнительное тестирование материнских плат для процессоров AMD Socket AM2«.

Компании VIA и SiS, как стало уже привычным в последнее время, вполне довольствуются своим местом «на бюджетных задворках» и не претендуют на сколь-нибудь заметную роль на рынке. Правда, сегодняшняя «застойная» ситуация вполне может измениться — ведь компания AMD, после приобретения ATI, получила в свое распоряжение достаточно серьезное подразделение, занимающееся разработкой системной логики. И хотя все разработки самой ATI в этой области, несмотря на их вполне приличный уровень (в частности — ATI CrossFire Xpress 3200), так и остались не более чем экзотикой, команда AMD прикладывает максимум усилий, что бы выйти в лидеры.

И первым шагом к этой цели стал выпуск достаточно удачного чипсета с интегрированной графикой (видеоядро Radeon X1250 с аппаратной поддержкой DirectX 9.0) AMD 690G/690V, являющегося полными аналогами достаточно популярного мобильного чипсета Radeon Xpress 1150. Уникальной особенностью AMD 690G является поддержка вывода видеосигнала через 2 независимых выхода (HDMI, DVI и VGA), тогда как упрощенный AMD 690V использует только аналоговый видеоинтерфейс VGA. Подробнее об этом чипсете и материнских платах на его основе в статье «Платы от MSI и ECS на чипсете AMD 690G«.

Вопрос: Что такое FirstPacket?
Ответ: Технология приоритезации сетевого трафика FirstPacket используется в сетевых контроллерах чипсетов NVIDIA и обеспечивает минимизацию задержек при передаче пакетов определенного потока сетевого трафика. Эта технология, в некоторой степени, способна компенсировать недостаточную пропускную способность канала связи (что особенно актуально для домашних пользователей) в таких приложениях, как онлайновые игры и IP-телефония.

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

Вопрос: Возможны ли какие-либо преимущества от использования в своей системе чипсета и видеокарты одного производителя?
Ответ: Хотя производители современных чипсетов и видеокарт (на сегодняшний день таких пока только двое — NVIDIA и AMD) пытаются как-то «привязать» покупателей ко всему спектру своей продукции, предлагая уникальные фирменные функции вроде SLI или CrossFire, большинство пользователей, честно говоря, вряд ли когда ими воспользуются. А в стандартной конфигурации «одна видеокарта на системной плате» любой чипсет прекрасно сочетается с любой видеокартой, независимо от их производителей.

Память

Вопрос: Какие ограничения по объему памяти накладывают современные операционные системы семейства Windows?
Ответ: Устаревшие, но кое-где еще встречающиеся, операционные системы Windows 9x/ME умеют работать только с 512 Мб памяти. И хотя конфигурации с большим объемом для них вполне возможны, проблем при этом возникает гораздо больше, чем пользы. Современные 32-разрядные версии Windows 2000/2003/XP и Vista теоретически поддерживают до 4 Гб памяти, но реально доступно для приложений не более 2 Гб. За небольшим исключением — ОС начального уровня Windows XP Starter Edition и Windows Vista Starter способны работать не более чем с 256 Мб и 1 Гб памяти соответственно. Максимальный поддерживаемый объем 64-разрядной Windows Vista зависит от ее версии и составляет:

  • Home Basic — 8 Гб;
  • Home Premium — 16 Гб;
  • Ultimate — Более 128 Гб;
  • Business — Более 128 Гб;
  • Enterprise — Более 128 Гб.

Вопрос: Что такое память DDR SDRAM?
Ответ: Память типа DDR (Double Data Rate — удвоенная скорость передачи данных) обеспечивает передачу данных по шине «память-чипсет» дважды за такт, по обоим фронтам тактирующего сигнала. Таким образом, при работе системной шины и памяти на одной и той же тактовой частоте, пропускная способность шины памяти оказывается вдвое больше, чем у обычной SDRAM.

В обозначении модулей памяти DDR обычно используются два параметра: или рабочую частоту (равную удвоенному значению тактовой частоты) — например, тактовая частота памяти DR-400 равна 200 МГц; или пиковую пропускную способность (в Мб/с). У той же самой DR-400 пропускная способность приблизительно равна 3200 Мб/с, поэтому она может обозначаться как РС3200. В настоящее время память DDR потеряла свою актуальность и в новых системах практически полностью вытеснена более современной DDR2. тем не менее, для поддержания «на плаву» большого количества старых компьютеров, в которые установлена память DDR, выпуск ее все еще продолжается. Наиболее распространены 184-контактные модули DDR стандартов PC3200 и, в меньшей мере, PC2700. DDR SDRAM может иметь Registered и ECC варианты.

Вопрос: Что такое память DDR2?
Ответ: Память DDR2 является наследницей DDR и в настоящее время является доминирующим типом памяти для настольных компьютеров, серверов и рабочих станций. DDR2 рассчитана на работу на более высоких частотах, чем DDR, характеризуется меньшим энергопотреблением, а также набором новых функций (предвыборка 4 бита за такт, встроенная терминация). Кроме того, в отличие от чипов DDR, которые выпускались как в корпусах типа TSOP, так и FBGA, чипы DDR2 выпускаются только в корпусах FBGA (что обеспечивает им большую стабильность работы на высоких частотах). Модули память DDR и DDR2 не совместимы друг с другом не только электрически, но и механически: для DDR2 используются 240-контактные планки, тогда как для DDR — 184-контактные. Сегодня наиболее распространена память, работающая на частоте 333 МГц и 400 МГц, и обозначаемая как DDR2-667 (РС2-5400/5300) и DDR2-800 (РС2-6400) соответственно.

Вопрос: Что такое память DDR3?
Ответ: Память стандарта DDR третьего поколения — DDR3 SDRAM в скором времени должна заменить нынешнюю DDR2. Производительность новой памяти удвоилась по сравнению с предыдущей: теперь каждая операция чтения или записи означает доступ к восьми группам данных DDR3 DRAM, которые, в свою очередь, с помощью двух различных опорных генераторов мультиплексируются по контактам I/O с частотой, в четыре раза превышающей тактовую частоту. Теоретически эффективные частоты DDR3 будут располагаться в диапазоне 800 МГц — 1600 МГц (при тактовых частотах 400 МГц — 800 МГц), таким образом, маркировка DDR3 в зависимости от скорости будет: DDR3-800, DDR3-1066, DDR3-1333, DDR3-1600. Среди основных преимуществ нового стандарта, прежде всего, стоит отметить существенно меньшее энергопотребление (напряжение питания DDR3 — 1,5 В, DDR2 — 1,8 В, DDR — 2,5 В).

Минусом DDR3 против DDR2 (и, тем более, по сравнению с DDR) можно назвать большую латентность. Модули памяти DDR3 DIMM для настольных ПК будут обладать 240-контактной структурой, привычной нам по модулям DDR2; однако физической совместимости между ними не будет (благодаря «зеркальной» цоколевке и различному расположению ключей разъема). Подробнее — см. статью FAQ по DDR3.

Вопрос: Что такое SLI-Ready-память?
Ответ: SLI-Ready-память, иначе — память с EPP (Enhanced Performance Profiles — профили для увеличения производительности), создана силами маркетинговых отделов компаний NVIDIA и Corsair. Профили EPP, в которых, помимо стандартных таймингов памяти, «прописываются» еще и значение оптимального напряжения питания модулей, а также некоторые дополнительные параметры, записываются в микросхему SPD модуля.

Благодаря профилям EPP уменьшается трудоемкость самостоятельной оптимизации работы подсистемы памяти, хотя существенного влияния на производительность системы «дополнительные» тайминги не оказывают. Так что какого-либо значительного выигрыша от использования SLI-Ready-памяти, по сравнению с обычной памятью, оптимизированной вручную, нет.

Вопрос: Что такое ECC-память?
Ответ: ECC (Error Correct Code — выявление и исправление ошибок) служит для исправления случайных ошибок памяти, вызываемых различными внешними факторами, и представляет собой усовершенствованный вариант системы «контроля четности». Физически ECC реализуется в виде дополнительной 8-разрядной микросхемы памяти, установленной рядом с основными. Таким образом, модули с ECC являются 72- разрядным (в отличие от стандартных 64-разрядых модулей). Некоторые типы памяти (Registered, Full Buffered) выпускаются только в ECC варианте.

Вопрос: Что такое Registered-память?
Ответ: Registered (регистровые) модули памяти применяются в основном в серверах, работающих с большими объемами оперативной памяти. Все они имеют ЕСС, т.е. являются 72-битными и, кроме того, содержат дополнительные микросхемы регистров для частичной (или полной — такие модули называются Full Buffered, или FB-DIMM) буферизации данных, за счет чего уменьшается нагрузка на контроллер памяти. Буферизованные DIMM, как правило, несовместимы с не буферизованными.

Вопрос: Можно ли вместо обычной памяти использовать Registered и наоборот?
Ответ: Несмотря на физическую совместимость разъемов, обычная не буферизованная память и Registered-память не совместимы друг с другом и, соответственно, использование Registered-памяти вместо обычной и наоборот невозможно.

Вопрос: Что такое SPD?
Ответ: На любом модуле памяти DIMM присутствует небольшой чип SPD (Serial Presence Detect), в котором производителем записывается информация о рабочих частотах и соответствующих задержках чипов памяти, необходимые для обеспечения нормальной работы модуля. Информация из SPD считывается BIOS на этапе самотестирования компьютера еще до загрузки операционной системы и позволяет автоматически оптимизировать параметры доступа к памяти.

Вопрос: Могут ли совместно работать модули памяти разного частотного номинала?
Ответ: Принципиальных ограничений на работу модулей памяти разного частотного номинала нет. В этом случае (при автоматической настройки памяти по данным из SPD) скорость работы всей подсистемы памяти будет определяться скоростью наиболее медленного модуля.

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

Вопрос: Сколько и какие модули памяти надо установить в системную плату, что бы память заработала в двухканальном режиме?
Ответ: В общем случае для организации работы памяти в двухканальном режиме необходима установка четного числа модулей памяти (2 или 4), причем в парах модули должны быть одинакового объема, и, желательно (хотя и не обязательно) — из одной и той же партии (или, на худой конец, одного и того же производителя). В современных системных платах слоты памяти разных каналов маркируются различными цветами.

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

Вопрос: На память каких производителей стоит обратить внимание в первую очередь?
Ответ: Можно отметить нескольких производителей памяти, достойно зарекомендовавших себя на нашем рынке. Это будут, например, брэнд-модули OCZ, Kingston, Corsair, Patriot, Samsung, Transcend.

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

Компьютерные шины

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

Вопрос: Что такое QPB?
Ответ: 64-битная процессорная шина QPB (Quad-Pumped Bus) обеспечивает связь процессоров Intel с северным мостом чипсета. Характерной ее особенностью является передача четырех блоков данных (и двух адресов) за такт. Таким образом, для частоты FSB, равной 200 МГц, эффективная частота передачи данных будет эквивалентна 800 МГц (4 х 200 МГц).

Вопрос: Что такое HyperTransport?
Ответ: Последовательная двунаправленная шина HyperTransport (НТ) разработана консорциумом компаний во главе с AMD и служит для связи процессоров AMD семейства К8 друг с другом, а также с чипсетом. Кроме того, многие современные чипсеты используют НТ для связи между мостами, нашла она место и в высокопроизводительных сетевых устройствах — маршрутизаторах и коммутаторах. Характерной особенностью шины НТ является ее организация по схеме Peer-to-Peer (точка-точка), обеспечивающая высокую скорость обмена данными при низкой латентности, а также широкие возможности масштабирования — поддерживаются шины шириной от 2 до 32 бит в каждом направлении (каждая линия — из двух проводников), причем «ширина» направлений, в отличие от PCI Express, не обязана быть одинаковой. К примеру, возможно использование двух линии НТ на прием и 32 — на передачу.

«Базовая» тактовая частота шины HT — 200 МГц, все последующие тактовые частоты определяются как кратные данной — 400МГц, 600МГц, 800МГц и 1000 МГц. Тактовые частоты и скорость передачи данных шины HyperTransport версии 1.1 приведены в табл.2:

Таблица 2

Частота, МГц

Скорость передачи данных (в Гб/с) для шин шириной:

2 бита

4 бита

8 бит

16 бит

32 бита

200

0,1

0,2

0,4

0,8

1,6

400

0,2

0,4

0,8

1,6

3,2

600

0,3

0,6

1,2

2,4

4,8

800

0,4

0,8

1,6

3,2

6,4

1000

0,5

1,0

2,0

4,0

8,0

На данный момент консорциумом HyperTransport разработана уже третья версия спецификации НТ, согласно которой шина HyperTransport 3.0 допускает возможность «горячего» подключения и отключения устройств; может работать на частотах вплоть до 2,6 ГГц, что позволяет довести скорость передачи данных до 20800 Мб/с (в случае 32-битной шины) в каждую сторону, являясь на сегодняшний день самой быстрой шиной среди себе подобных.

Вопрос: Что такое PCI?
Ответ: Шина PCI (Peripheral Component Interconnect), несмотря на свой более чем солидный (по компьютерным меркам) возраст, до сих пор является основной шиной для подключения самых разнообразных периферийных устройств к системной плате компьютера. 32-битная шина PCI обеспечивает возможность динамического конфигурирования подключенных устройств, она работает на частоте 33,3 МГц (пиковая пропускная способность 133 Мбит/с).

В серверах используется ее расширенные варианты PCI66 и PCI64 (32 бит/66 МГц и 64 бит/33 МГц соответственно), а также PCI-X — 64-битная шина, ускоренная до 133 МГц.

Другими вариантами шины PCI являются популярная в недавнем прошлом графическая шина AGP и пара интерфейсов для мобильных компьютеров: внутренняя шина mini-PCI и PCMCIA/Card Bus (16/32-разрядные варианты интерфейса внешних устройств, допускающие «горячее» подключение периферии). Несмотря на широкое распространение, время шины PCI (и ее производных) заканчивается — на смену им идет (пусть и не так быстро, как хотелось бы ее разработчикам) современная высокопроизводительная шина PCI-Express.

Вопрос: Что такое PCI-Express?
Ответ: PCI-Express — это последовательный интерфейс, разработанный организацией PCI-SIG во главе Intel и предназначенный для использования в качестве локальной шины вместо PCI. Характерной особенностью PCI-Express является его организация по принципу «точка-точка», что исключает арбитраж шины и, тем самым, перетасовку ресурсов.

Соединение между устройствами PCI-Express называется линками (link) и состоят из одной (называемой 1x) или нескольких (2x, 4x, 8x, 12x, 16x или 32x) двунаправленных последовательных линий (lane). Пропускная способность современной шины PCI-Express версии 1.1 с разным количеством линий приведена в табл.3:

Таблица 3

Число линий PCI Express

Пропускная способность в одном направлении, Гб/с

Суммарная пропускная способность, Гб/с

1

0,25

0,5

2

0,5

1

4

1

2

8

2

4

16

4

8

32

8

16

Однако в текущем году получит распространение новая спецификация PCI-Express 2.0, в которой пропускная способность каждого линка увеличилась до 0,5 Гб/с в каждую сторону (при сохранении совместимости с PCI-Express 1.1). Кроме того, в PCI-Express 2.0 вдвое увеличена подводимая по шине мощность питания — 150 Вт против 75 в первой версии стандарта; а также, как и HT 3.0, обеспечивается потенциальная возможность «горячей» замены интерфейсных карт (провозглашенная, но не реализованная в версии 1.1).

HDD

Вопрос: Почему у меня неправильно определяется реальный объем HDD?
Ответ: Несоответствие объема жесткого диска, заявленного производителем, и объема, который показывается в BIOS или в тестовых/информационных утилитах Windows, связано с тем, что практически все производители жестких дисков указывают их объем в «десятичных» гигабайтах, посчитанных в виде степени числа «10»: 1 Гб = 1000 Mб = 1000000 Кб. Большинство же тестовых утилит (да и сама Windows) оперирует «двоичными» (в виде степени числа «2») гигабайтами: 1 Гб = 1024 Мб = ~1048576 Кб.

Вопрос: Что делать, если в системе под управлением Windows XP не обнаруживается свежеустановленный жесткий диск?
Ответ: Если новый жесткий диск опознается в BIOS и в «Диспетчере устройств», но отсутствует в папке «Мой компьютер», то необходимо создать на нем один или несколько разделов (томов). Делается это с помощью специальных утилит (Norton Partition Magic или Acronis Disk Director/Partition Expert). Кроме них, можно воспользоваться и штатным средством Windows (хотя возможности его на порядок хуже, чем у указанных утилит) — в апплете «Управление компьютером» необходимо выбрать раздел «Управление дисками». Там же можно и отформатировать имеющиеся разделы, а также изменить присвоенный им по умолчанию буквенный индекс.

Вопрос: Зачем нужно разбивать жесткий диск на разделы?
Ответ: Разделение жесткого диска на разделы позволяет навести порядок и упорядочить хранящиеся на нем данные. Так, целесообразно отвести отдельный раздел для операционной системы (или, в случае, если их несколько — по разделу на каждую), выделить разделы для работы с текущими данными и для проведения экспериментов с новым программным обеспечением; отдельный раздел для игр и, наконец, отдельный архив для хранения файлов, фильмов и пр.

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

Вопрос: Как правильно подключить IDE-кабель?
Ответ: При использовании 80-проводного IDE кабеля на его крайний разъем (обычно черного цвета) подключаются устройства, работающие в режиме «Master», на средний (серого цвета) — в режиме «Slave», а второй крайний разъем (синего цвета) подключается к системной плате. Устройства, установленные в режим «Cable Select», можно подключать или к черному, или к серому разъемам.

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

Вопрос: Какие разновидности интерфейса SATA актуальны в настоящее время?
Ответ: Первая версия последовательного интерфейса дисковых накопителей Serial ATA (SATA/150) имела максимальную пропускную способность 150 Мб/с (или 1,2 Гбит/с), что незначительно выше, чем у заменяемых им параллельных интерфейсов АТA100 и ATA133 (100 и 133 Мб/с соответственно).

Второе поколение Serial ATA — SATA/300, работает на частоте 3 ГГц, обеспечивая пропускную способность до 300 Мб/с (2,4 Гбит/с). Также накопители SATA/300 обрели полную поддержку технологии Native Command Queuing (NCQ), оптимизирующей очередность обработки управляющих команд. Другим достаточно любопытным нововведением является то, что к одному SATA/300 каналу через специальные концентраторы можно подключать до 15 жестких дисков (обычный SATA мог работать только в режиме «один разъем — один диск»). Теоретически SATA/150 и SATA/300 устройства должны быть полностью совместимы, однако для некоторых устройств и контроллеров требуется ручное переключение между типами интерфейса (например, с помощью специального джампера).

Для подключения внешних устройств служит интерфейс eSATA (External SATA), в котором реализован режим «горячей замены» (англ. Hot-plug). Для подключения устройств eSATA требуется два кабеля: для шины данных (длиной не более 2 м) и питающий. Максимальная скорость передачи данных по интерфейсу eSATA выше, чем у USB или FireWire, и достигает 2,4 Гбит/с (против 480 Мбит/c у USB и 800 Мбит/с у FireWire). При этом существенно меньше нагружается процессор компьютера.

Вопрос: Что такое RAID и для чего он нужен?
Ответ: Массивы RAID позволяют работать с несколькими физическими накопителями как с единым устройством. Для чего? Что бы повысить надежность хранения данных, а также увеличить скорость работы дисковой подсистемы. Обе эти задачи решают RAID-массивы нескольких типов:

  • RAID 0 (Stripe) — несколько физических дисков (минимум — 2) объединяются в один «виртуальный» диск, обеспечивающий максимальную производительность (за счет рассредоточения данных по всем дискам массива) дисковых операций, но надежность хранения данных при этом не превышает надежности отдельного диска;
  • RAID 1 (Mirror) несколько физических дисков (минимум — 2) работают синхронно на запись, полностью дублируя содержимое друг друга. Самый надежный способ защиты информации от сбоя одного из дисков, но, при этом, и самый «расточительный» — ровно половина объема массива тратится на резервирование данных;
  • RAID 0+1 (иногда называется RAID 10) — комбинация двух первых вариантов, объединяющая высокую производительность RAID 0 и надежность RAID 1, сохраняя, впрочем, и их недостатки. Для создания такого массива необходимо минимум 4 диска;
  • RAID 5 — является своеобразным компромиссом между массивами RAID 0 и RAID 1: использует распределенное хранение данных аналогично RAID 0, но надежность хранения данных повышается за счет включения избыточной информации (коды четности), записываемой на различные диски массива по очереди. Для организации массива RAID 5 необходимо использовать минимум 3 диска;
  • Matrix RAID — технология, реализованная фирмой Intel в последних моделях своих южных мостов (начиная с ICH6R), позволяющая организовать всего на двух физических дисках несколько массивов RAID 0 и RAID 1.

Кроме того, в массивах RAID 0 часто используется режим «Span» (иначе — JBOD), когда все имеющиеся диски просто объединяются в один, без рассредоточения данных по дискам. Такой режим обеспечивает наибольшую эффективную емкость массива, однако скорость работы системы будет относительно невысокой.

Вопрос: Где можно найти «рейдовские» драйвера для SATA HDD, без которых невозможно установить на него систему?
Ответ: Драйвер для SATA RAID должен находиться на компакт-диске, которым комплектуется каждая системная плата. Если же по каким-либо причинам такой диск отсутствует или Вы хотите установить самую последнюю версию драйвера (что, в большинстве случаев, вполне оправданно), тогда можно скачать его на сайте производителя системной платы или, в крайнем случае, того чипсета, который используется в Вашей системной плате.

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

Для системных плат на чипсетах от Intel/NVIDIA это делается путем деактивации пункта меню «SATA RAID» (или чего-то подобного).

Платы на чипсетах VIA при инсталляции системы на SATA диск в любом случае (независимо от наличия или отсутствия RAID-массива) требуют установки дополнительного драйвера.

BIOS

Вопрос: Что такое BIOS и зачем он нужен?
Ответ: BIOS (Basic Input/Output System) — основная система ввода/вывода, зашитая в ПЗУ (отсюда название — ROM BIOS) представляет собой набор программ, необходимых для быстрого тестирования и низкоуровневой настройки компьютерного «железа», а также для организации последующей загрузки операционной системы.

Обычно для каждой модели системной платы разрабатывается своя собственная версия (на компьютерном сленге — прошивка) базового BIOS, разработанного одной из специализированных фирм — Phoenix Technologies (Phoenix Award BIOS) или American Megatrends Inc. (AMI BIOS).

Раньше BIOS зашивался в однократно программируемые ПЗУ (маркировка чипа 27xxxx) либо в ПЗУ с ультрафиолетовым стиранием (имеется прозрачное окно на корпусе микросхемы), поэтому его перепрошивка пользователем была практически невозможна. В настоящее время в основном выпускаются платы с электрически перепрограммируемыми ПЗУ (Flash ROM, маркировка чипа 28xxxx или 29хххх), которые допускают перепрошивку BIOS средствами самой платы, что позволяет оперативно добавлять в систему поддержку новых устройств (или функций), исправлять мелкие огрехи разработчиков, изменять заводские умолчания и пр.

Вопрос: Как получить оптимальные настройки BIOS?
Ответ: Оптимальную производительность при приемлемой стабильности работы компьютера обеспечивает фабричная настройка BIOS. Вызвать ее можно, зайдя в BIOS Setup и выбрав команду «Load Optimized Defaults» (или «Load Optimal Settings», или «Load Setup Defaults» — в разных BIOS по разному). После этого в BIOS вообще лучше ничего не трогать руками, особенно, если Вы не очень уверены в своей квалификации. Разве что можно настроить последовательность загрузочных устройств (в разделе «Advanced BIOS Features»), да отключить неиспользуемые устройства и контроллеры (в разделe «Integrated Peripherals»). Однако бывают ситуации, когда на первый план выходит максимальная стабильность системы (пусть и в ущерб производительности). В этом случае следует выбрать «Load Fail-Safe Defaults» (или что-то ему подобное).

Вопрос: Где можно найти обновление BIOS?
Ответ: Последние версии прошивок для обновления BIOS обычно можно найти в соответствующих разделах (чаще всего — разделы «Download» или «Support») на официальных сайтах компаний — производителей системных плат. Адреса их сайтов всегда можно найти в руководствах на системные платы.

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

Кроме официальных сайтов производителей материнских плат, в Сети существует большое количество специализированных ресурсов, предлагающих своим посетителям драйвера и прошивки для самого разнообразного компьютерного оборудования. Так, большая коллекция прошивок BIOS для различных системных плат имеется на сайте X-Drivers.ru.

Вопрос: При каждой перезагрузке система почему-то запрашивает пароль BIOS. Что нужно сделать, чтобы избавиться от него?
Ответ: Установка пароля пользователя, блокирующего загрузку системы, является одним из самых старых систем защиты компьютера от несанкционированного доступа. И, тем самым, один из самых ненадежных. Ведь большинство системных плат имеют специальный джампер для очистки CMOS (память, в которой хранятся все настройки BIOS, включая пароль пользователя). Обычно этот джампер (или просто два контакта, которые можно замкнуть металлическим предметом) находится около небольшой круглой батарейки на системной плате.

Выключив компьютер, следует на несколько секунд (для гарантии следует подождать секунд 10 — 20) замкнуть этот джампер перемычкой. Потом, удалив перемычку, снова включить компьютер. После этого компьютер загрузится как обычно, за исключением того, что все установки BIOS (включая пароль пользователя) будут сброшены.

В случае, если на Вашем компьютере нет такого джампера (или Вы просто не нашли его) можно поступить так: выключив питание, снять батарейку на те же самые 10 — 20 секунд, и после этого вернуть ее обратно (ни в коем случае не перепутав полярность!). Эффект будет тот же самый.

Вопрос: Обновил BIOS и заметил, что компьютер стал работать с флэшкой гораздо медленнее. Что делать?
Ответ: После прошивки BIOS часто встречается ситуация, когда отключается контроллер USB 2.0 (может обозначаться как «USB EHCI Controller»). При этом контроллер USB начинает работать в режиме USB FullSpeed/USB 1.1 (максимальная скорость не превышает 12 Мбит/с) вместо режима USB HiSpeed/USB 2.0 (480 Мбит/с). Для того, чтобы вернуть максимальную скорость USB, следует в разделе «Integrated Peripherals» найти пункт «USB Configuration» (или что-то подобное) и разрешить режим » USB 2.0 Controller/USB EHCI Controller».

Автор: Виктор Куц


Отдельное спасибо порталу 3DNews

Процессоры

Код и данные: основной принцип работы процессора
Итак, если не пытаться изложить здесь «кратенько» курс информатики для средней школы, то единственное что хотелось бы напомнить — это то, что процессор (за редкими исключениями) исполняет не программы, написанные на каком-нибудь языке программирования (один из которых, вы, возможно, даже знаете), а некий «машинный код». То есть командами для него являются последовательности байтов, находящихся в памяти компьютера. Иногда команда может быть равна одному байту, иногда она занимает несколько байт. Там же, в основной памяти (ОЗУ, RAM) находятся и данные. Они могут находиться в отдельной области, а могут и быть «перемешаны» с кодом. Различие между кодом и данными состоит в том, что данные — это то, над чем процессор производит какие-то операции. А код — это команды, которые ему сообщают, какую именно операцию он должен произвести. Для упрощения, мы можем представить себе программу и ее данные в виде последовательности байтов некой конечной длины, располагающуюся непрерывно (не будем усложнять) в общем массиве памяти. Например, у нас есть массив памяти длиной в 1’000’000 байт, а наша программа (вместе с данными) — это байты с номерами от 1000 до 20’000. Прочие байты — это другие программы или их данные, или просто свободная память, не занятая ничем полезным.

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

Общие принципы взаимодействия
процессора и ОЗУ

Возможно, кого-то удивит, что достаточно большой раздел в FAQ, посвященном x86 CPU, выделен под объяснение особенностей функционирования памяти в современных системах, основанных на данном типе процессоров. Однако факты — упрямая вещь: сами x86-процессоры ныне содержат так много блоков, отвечающих именно за оптимизацию их работы с ОЗУ, что игнорировать эту тесную связь было бы совершенно нелепо. Можно сказать даже так: уж, коль решения, связанные с оптимизацией работы с памятью, стали неотъемлемой частью самих процессоров — то и саму память можно рассматривать в качестве некоего «придатка», функционирование которого оказывает непосредственное влияние на скорость работы CPU. Без понимания особенностей взаимодействия процессора с памятью, невозможно понять, за счёт чего тот или иной процессор (та или иная система) исполняет программы медленнее или быстрее.

Контроллер памяти

Итак, ранее выше мы уже говорили о том, что как команды, так и данные, попадают в процессор из оперативной памяти. На самом деле всё немного сложнее. В большинстве современных x86-систем (то есть компьютеров на базе x86-процессоров), процессор как устройство к памяти обращаться вообще не может, так как не имеет в своем составе соответствующих узлов. Поэтому он обращается к «промежуточному» специализированному устройству, называемому контроллером памяти, а уже тот, в свою очередь — к микросхемам ОЗУ, размещенным на модулях памяти. Модули вы наверняка видели — это такие длинные узкие текстолитовые «планочки» (фактически — небольшие платы) с некоторым количеством микросхем на них, вставляемые в специальные разъемы на системной плате. Роль контроллера ОЗУ, таким образом, проста: он служит своего рода «мостом»* между памятью и использующими ее устройствами (кстати, к ним относится не только процессор, но об этом — чуть позже). Как правило, контроллер памяти входит в состав чипсета — набора микросхем, являющегося основой системной платы. От быстродействия контроллера во многом зависит скорость обмена данными между процессором и памятью, это один из важнейших компонентов, влияющих на общую производительность компьютера.

* — кстати, контроллер памяти физически находится в микросхеме чипсета, традиционно называемой «северным мостом».

Процессорная шина

Любой процессор обязательно оснащён процессорной шиной, которую в среде x86 CPU принято называть FSB (Front Side Bus). Эта шина служит каналом связи между процессором и всеми остальными устройствами в компьютере: памятью, видеокартой, жёстким диском, и так далее. Впрочем, как мы уже знаем из предыдущего раздела, между собственно памятью и процессором находится контроллер памяти. Соответственно: процессор посредством FSB связывается с контроллером памяти, а уже тот, в свою очередь, по специальной шине (назовём её, не мудрствуя лукаво, «шиной памяти») — с модулями ОЗУ на плате. Однако, повторимся: поскольку «внешняя» шина у классического x86 CPU всего одна, она используется не только для работы с памятью, но и для общения процессора со всеми остальными устройствами.

Различия между традиционной для
x86 CPU архитектурой и K8/AMD64

Революционность подхода компании AMD состоит в том, что её процессоры с архитектурой AMD64 (и микроархитектурой, которую условно принято называть «K8») оснащены множеством «внешних» шин. При этом одна или несколько шин HyperTransport служат для связи со всеми устройствами кроме памяти, а отдельная группа из одной или двух (в случае двухканального контроллера) шин — исключительно для работы процессора с памятью. Преимущество интеграции контроллера памяти прямо в процессор, очевидно: «путь от ядра до памяти» становится заметно «короче», что позволяет работать с ОЗУ быстрее. Правда, имеются у данного подхода и недостатки. Так, например, если ранее устройства типа жёсткого диска или видеокарты могли работать с памятью через выделенный, независимый контроллер — то в случае с архитектурой AMD64 они вынуждены работать с ОЗУ через контроллер, размещённый на процессоре. Так как CPU в данной архитектуре является единственным устройством, имеющим прямой доступ к памяти. Де-факто, в противостоянии «внешний контроллер vs. интегрированный», сложился паритет: с одной стороны, на данный момент AMD является единственным производителем десктопных x86-процессоров с интегрированным контроллером памяти, с другой — компания вроде бы вполне довольна этим решением, и не собирается от него отказываться. С третьей — Intel тоже не собирается отказываться от внешнего контроллера, и вполне довольна «классической схемой», проверенной годами.

Оперативная память

Разрядность шины памяти, N-канальные контроллеры памяти

По состоянию на сегодняшний день, вся память, используемая в современных десктопных x86-системах имеет шину шириной 64 бита. Это означает, что за один такт по данной шине одновременно может быть передано количество информации, кратное 8 байтам (8 байт для SDR-шин, 16 байт для DDR-шин). Особняком стоит только память типа RDRAM, применявшаяся в системах на базе процессоров Intel Pentium 4 на заре становления архитектуры NetBurst, но сейчас это направление признано тупиковым для x86-ПК (к слову — руку к этому приложила всё та же компания Intel, которая в своё время активно пропагандировала данный тип памяти). Некоторую неразбериху вносят лишь двухканальные контроллеры, обеспечивающие одновременную работу с двумя отдельными друг от друга 64-битными шинами, благодаря чему некоторые производители заявляют о некой «128-битности». Это, разумеется, чистой воды профанация. Арифметика на уровне 1-го класса в данном случае, увы, не работает: 2×64 вовсе не равно 128. Почему? Да хотя бы потому, что даже самые современные x86 CPU (см. ниже раздел FAQ «64-битные расширения классической x86 (IA32) архитектуры») не могут работать со 128-битной шиной и 128-битной адресацией. Грубо говоря: две независимые параллельно идущие дороги, шириной 2 метра каждая — могут обеспечить одновременный проезд двух автомобилей, шириной 2 метра — но никоим образом не одного, шириной 4 метра. Точно так же, N-канальный контроллер памяти может увеличить скорость работы с данными в N раз (и то больше теоретически, чем практически) — но никак не способен увеличить разрядность этих данных. Ширина шины памяти во всех современных контроллерах, применяемых в x86-системах, равна 64 битам — независимо от того, находится этот контроллер в чипсете, или в самом процессоре. Некоторые контроллеры оснащены двумя независимыми 64-битными каналами, но на разрядность шины памяти это никак не влияет — только на скорость считывания и записи информации.

Скорость чтения и записи

Скорость чтения и записи информации в память теоретически ограничивается исключительно пропускной способностью самой памяти. Так, например, двухканальный контроллер памяти стандарта DDR400 теоретически способен обеспечить скорость чтения и записи информации, равную 8 байт (ширина шины) * 2 (количество каналов) * 2 (протокол DDR, обеспечивающий передачу 2 пакетов данных за 1 такт) * 200’000’000 (фактическая частота работы шины памяти равная 200 МГц, то есть 200’000’000 тактов в секунду). Значения, получаемые в результате практических тестов, как правило, чуть ниже теоретических: сказывается «неидеальность» конструкции контроллера памяти, плюс накладки (задержки), вызванные работой подсистемы кэширования самого процессора (см. ниже раздел про процессорный кэш). Однако основной «подвох» содержится даже не в накладках, связанных с работой контроллера и подсистемы кэширования, а в том, что скорость «линейного» чтения или записи является вовсе не единственной характеристикой, влияющей на фактическую скорость работы процессора с ОЗУ. Для того чтобы понять, из каких составляющих складывается фактическая скорость работы процессора с памятью, нам необходимо кроме линейной скорости считывания или записи учитывать ещё и такую характеристику, как латентность.

Латентность

Латентность является не менее важной характеристикой с точки зрения быстродействия подсистемы памяти, чем скорость «прокачки данных», но совершенно другой, по сути. Большая скорость обмена данными хороша тогда, когда их размер относительно велик, но если нам требуется «понемногу с разных адресов» — то на первый план выходит именно латентность. Что это такое? В общем случае — время, которое требуется для того, чтобы начать считывать информацию с определённого адреса. И действительно: с момента, когда процессор посылает контроллеру памяти команду на считывание (запись), и до момента, когда эта операция осуществляется, проходит определённое количество времени. Причём оно вовсе не равно времени, которое требуется на пересылку данных. Приняв команду на чтение или запись от процессора, контроллер памяти «указывает» ей, с каким адресом он желает работать. Доступ к любому произвольно взятому адресу не может быть осуществлён мгновенно, для этого требуется определённое время. Возникает задержка: адрес указан, но память ещё не готова предоставить к нему доступ. В общем случае, эту задержку и принято называть латентностью. У разных типов памяти она разная. Так, например, память типа DDR2 имеет в среднем гораздо большие задержки, чем DDR (при одинаковой частоте передачи данных). В результате, если данные в программе расположены «хаотично» и «небольшими кусками», скорость их считывания становится намного менее важной, чем скорость доступа к «началу куска», так как задержки при переходе на очередной адрес влияют на быстродействие системы намного сильнее, чем скорость считывания или записи.

«Соревнование» между скоростью чтения (записи) и латентностью — одна из основных головных болей разработчиков современных систем: к сожалению, рост скорости чтения (записи), почти всегда приводит к увеличению латентности. Так, например, память типа SDR (PC66, PC100, PC133) обладает в среднем лучшей (меньшей) латентностью, чем DDR. В свою очередь, у DDR2 латентность ещё выше (то есть хуже), чем у DDR.

Следует понимать, что «общая» латентность подсистемы памяти зависит не только от неё самой, но и от контроллера памяти и места его расположения — все эти факторы тоже влияют на задержку. Именно поэтому компания AMD в процессе разработки архитектуры AMD64 решила «одним махом» решить проблему высокой латентности, интегрировав контроллер прямо в процессор — чтобы максимально «сократить дистанцию» между процессорным ядром и модулями ОЗУ. Затея удалась, но дорогой ценой: теперь система на базе определённого CPU архитектуры AMD64 может работать только с той памятью, на которую рассчитан его контроллер. Наверное, именно поэтому компания Intel до сих пор не решилась на такой кардинальный шаг, предпочитая действовать традиционными методами: усовершенствуя контроллер памяти в чипсете и механизм Prefetch в процессоре (про него см. ниже).

В завершение, заметим, что понятия «скорость чтения / записи» и «латентность», в общем случае, применимы к любому типу памяти — в том числе не только к классической DRAM (SDR, Rambus, DDR, DDR2), но и к кэшу (см. ниже).

Процессор: сведения общего характера

Понятие архитектуры

Архитектура как совместимость с кодом

Наверняка вы часто встречались с термином «x86», или «Intel-совместимый процессор» (или «IBM PC compatible» — но это уже по отношению к компьютеру). Иногда также встречается термин «Pentium-совместимый» (почему именно Pentium — вы поймете сами чуть позже). Что за всеми этими названиями скрывается на самом деле? На данный момент наиболее корректно с точки зрения автора выглядит следующая простая формулировка: современный x86-процессор — это процессор, способный корректно исполнять машинный код архитектуры IA32 (архитектура 32-битных процессоров Intel). В первом приближении это код, исполняемый процессором i80386 (известным в народе как «386-й»), окончательно же основной набор команд IA32 сформировался с выходом процессора Intel Pentium Pro. Что означает «основной набор» и какие есть еще? Для начала ответим на первую часть вопроса. «Основной» в данном случае означает то, что с помощью исключительно этого набора команд, может быть написана любая программа, которая вообще может быть написана для процессора архитектуры x86 (или IA32, если вам так больше нравится).

Кроме того, у архитектуры IA32 существуют «официальные» расширения (дополнительные наборы команд) от разработчика самой архитектуры, компании Intel: MMX, SSE, SSE2 и SSE3. Также существуют «неофициальные» (не от Intel) расширенные наборы команд: EMMX, 3DNow! и Extended 3DNow! — их разработала компания AMD. Впрочем, «официальность» и «неофициальность» в данном случае понятие относительное — де-факто все сводится к тому, что некоторые расширения набора команд Intel как разработчик изначального набора признает, а некоторые — нет, разработчики же программного обеспечения используют то, что им лучше всего подходит. В отношении расширенных наборов команд существует одно простое правило хорошего тона: прежде чем их использовать, программа должна проверить, поддерживает ли их процессор. Иногда отступления от этого правила встречаются (и могут приводить к неправильному функционированию программ), но объективно это является проблемой некорректно написанного программного обеспечения, а не процессора.

Для чего предназначены дополнительные наборы команд? В первую очередь — для увеличения быстродействия при выполнении некоторых операций. Одна команда из дополнительного набора, как правило, выполняет действие, для которого понадобилась бы небольшая программа, состоящая из команд основного набора. Опять-таки, как правило, одна команда выполняется процессором быстрее, чем заменяющая ее последовательность. Однако в 99% случаев, ничего такого, чего нельзя было бы сделать с помощью основных команд, с помощью команд из дополнительного набора сделать нельзя. Таким образом, упомянутая выше проверка программой поддержки дополнительных наборов команд процессором, должна выполнять очень простую функцию: если, например, процессор поддерживает SSE — значит, считать будем быстро и с помощью команд из набора SSE. Если нет — будем считать медленнее, с помощью команд из основного набора. Корректно написанная программа обязана действовать именно так. Впрочем, сейчас практически никто не проверяет у процессора наличие поддержки MMX, так как все CPU, вышедшие за последние 5 лет, этот набор поддерживают гарантированно. Для справки приведем табличку, на которой обобщена информация о поддержке различных расширенных наборов команд различными десктопными (предназначенными для настольных ПК) процессорами.

Процессор

MMX

EMMX

3DNow!

SSE

E3DNow!

SSE2

SSE3

Intel Pentium II

 

+

 

 

 

 

 

 

Intel Celeron до 533 MHz

 

+

 

 

 

 

 

 

Intel Pentium III

 

+

 

 

 

+

 

 

 

Intel Celeron 533—1400 MHz

 

+

 

 

 

+

 

 

 

Intel Pentium 4

 

+

 

 

 

+

 

 

+

 

+/—*

Intel Celeron от 1700 MHz

 

+

 

 

 

+

 

 

+

 

Intel Celeron D

 

+

 

 

 

+

 

 

+

 

+

Intel Pentium 4 eXtreme Edition

 

+

 

 

 

+

 

 

+

 

+/—*

Intel Pentium eXtreme Edition

 

+

 

 

 

+

 

 

+

 

+

Intel Pentium D

 

+

 

 

 

+

 

 

+

 

+

AMD K6

 

+

 

+

 

 

 

 

 

AMD K6-2

 

+

 

+

 

+

 

 

 

 

AMD K6-III

 

+

 

+

 

+

 

 

 

 

AMD Athlon

 

+

 

+

 

+

 

 

+

 

 

AMD Duron до 900 MHz

 

+

 

+

 

+

 

 

+

 

 

AMD Athlon XP

 

+

 

+

 

+

 

+

 

+

 

 

AMD Duron от 1000 MHz

 

+

 

+

 

+

 

+

 

+

 

 

AMD Athlon 64 / Athlon FX

 

+

 

+

 

+

 

+

 

+

 

+

 

+/—*

AMD Sempron

+

+

+

+

+

+/—*

+/—*

AMD Athlon 64 X2

 

+

 

+

 

+

 

+

 

+

 

+

 

+

VIA C3

 

+

 

+

 

+/—*

 

+/—*

 

 

 

* в зависимости от модификации

На данный момент всё популярное десктопное программное обеспечение (операционные системы Windows и Linux, офисные пакеты, компьютерные игры, и прочее) разрабатывается именно для x86-процессоров. Оно выполняется (за исключением «дурно воспитанных» программ) на любом x86-процессоре, независимо от того, кто его произвел. Поэтому вместо ориентированных на разработчика изначальной архитектуры терминов «Intel-совместимый» или «Pentium-совместимый», стали употреблять нейтральное название: «x86-совместимый процессор», «процессор с архитектурой x86». В данном случае под «архитектурой» понимается совместимость с определённым набором команд, то есть, можно сказать, «архитектура процессора с точки зрения программиста». Есть и другая трактовка того же термина.

Архитектура как характеристика семейства процесcоров

«Железячники» — люди, работающие в основном не с программным обеспечением, а с аппаратным, под «архитектурой» понимают несколько другое (правда, более корректно то, что они называют «архитектурой», называется «микроархитектурой», но де-факто приставку «микро» частенько опускают). Для них «архитектура CPU» — это некий набор свойств, присущий целому семейству процессоров, как правило, выпускаемому в течение многих лет (иначе говоря — «внутренняя конструкция», «организация» этих процессоров). Так, например, любой специалист по x86 CPU вам скажет, что процессор с ALU, работающими на удвоенной частоте, QDR-шиной, Trace cache, и, возможно, поддержкой технологии Hyper-Threading — это «процессор архитектуры NetBurst» (не пугайтесь незнакомых терминов — все они будут разъяснены чуть позже). А процессоры Intel Pentium Pro, Pentium II и Pentium III — это «архитектура P6». Таким образом, понятие «архитектуры» применительно к процессорам несколько двойственно: под ним может пониматься как совместимость с неким единым набором команд, так и совокупность аппаратных решений, присущих определённой достаточно широкой группе процессоров. Разумеется, такой дуализм одного из основополагающих понятий не очень удобен, однако так уж сложилось, и вряд ли в ближайшее время что-то поменяется…

64-битные расширения классической x86 (IA32) архитектуры

Не так давно оба ведущих производителя x86 CPU анонсировали две практически идентичных* технологии (впрочем, AMD предпочитает называть это архитектурой), благодаря которым классические x86 (IA32) CPU получили статус 64-битных. В случае с AMD данная технология получила наименование «AMD64» (64-битная архитектура AMD), в случае с Intel — «EM64T» (расширенная 64-битная технология работы с памятью). Также почтенные аксакалы, знакомые с историей вопроса, иногда употребляют наименование «x86-64» — как общее обозначение всех 64-битных расширений архитектуры x86, не привязанное к зарегистрированным торговым маркам какого-либо производителя. Де-факто, употребление одного из трёх, приведенных выше, наименований, зависит больше от личных предпочтений употребляющего, чем от фактических различий — ибо различия между AMD64 и EM64T умещаются на кончике очень тонкой иглы. К тому же, сама AMD ввела «фирменное» наименование «AMD64» лишь незадолго до анонса собственных процессоров на основе данной архитектуры, а до этого совершенно спокойно употребляла в собственных документах более нейтральное «x86-64». Однако так или иначе, всё сводится к одному: некоторые внутренние регистры процессоров стали вместо 32-битных 64-битными, 32-битные команды x86-кода получили свои 64-битные аналоги, кроме того, объём адресуемой памяти (включая не только физическую, но и виртуальную) многократно увеличился (за счёт того, что адрес приобрёл вместо 32-битного 64-битный формат). Количество маркетинговых спекуляций на тему «64-битности» превысило все разумные пределы, поэтому нам следует рассмотреть достоинства данного нововведения особенно пристально. Итак: что же на самом деле изменилось, а что — нет?

* — Доводы о том, что Intel, дескать, «нагло скопировала EM64T с AMD64» не выдерживают никакой критики. И вовсе не потому, что это не так — а потому, что вовсе не «нагло». Есть такое понятие: «кросс-лицензионное соглашение». Если таковое соглашение имеет место быть, это означает, что все разработки одной компании в определённой области, становятся автоматически доступными другой, равно как и разработки другой автоматически становятся доступны первой. Intel воспользовалась кросс-лицензированием для разработки EM64T, взяв за основу AMD64 (чего никто никогда не отрицал). AMD воспользовалась тем же соглашением для введения в свои процессоры поддержки наборов дополнительных инструкций SSE2 и SSE3, разработанных Intel. И ничего в этом постыдного нет: раз договорились «делиться» разработками — значит, надо делиться.

Что не изменилось? В первую очередь — быстродействие процессоров. Вопиющей глупостью будет считать, что один и тот же процессор при переходе из привычного 32-битного в 64-битный режим (а 32-битный режим все нынешние x86 CPU поддерживают в обязательном порядке) станет работать в 2 раза быстрее. Разумеется, в некоторых случаях некое ускорение от использования 64-битной целочисленной арифметики может присутствовать — но количество этих случаев сильно ограничено, и большинства современного пользовательского программного обеспечения они никак не касаются. Кстати: а почему мы употребили термин «64-битная целочисленная арифметика»? А потому, что блоки операций с плавающей точкой (см. ниже) во всех x86-процессорах уже давным-давно не 32-битные. И даже не 64-битные. Классический x87 FPU (см. ниже), окончательно ставший частью CPU ещё во времена старого доброго 32-битного Intel Pentium — уже был 80-битным. Операнды команд SSE и SSE2/3 — и вовсе 128-битные! В этом плане архитектура x86 достаточно парадоксальна: при всём притом, что формально процессоры данной архитектуры достаточно долгое время оставались 32-битными — разрядность тех блоков, где «большая битность» была реально необходима — наращивалась совершенно независимо от остальных. Например, процессоры AMD Athlon XP и Intel Pentium 4 «Northwood» совмещали в себе блоки, работающие с 32-битными, 80-битными, и 128-битными операндами. 32-битными оставались лишь основной набор команд (унаследованный от первого процессора архитектуры IA32 — Intel 386) и адресация памяти (максимум 4 гигабайта, если не считать «извращений» типа Intel PAE).

Таким образом, то, что процессоры AMD и Intel стали «формально 64-битными», на практике принесло нам лишь три усовершенствования: появление команд для работы с 64-битными целыми числами, увеличение количества и/или разрядности регистров, и увеличение максимального объёма адресуемой памяти. Заметим: реальной пользы этих нововведений (особенно третьего!) никто не отрицает. Равно как никто не отрицает заслуг компании AMD в продвижении идеи «осовременивания» (за счёт введения 64-битности) x86-процессоров. Мы лишь хотим предостеречь от чрезмерных ожиданий: не стоит надеяться на то, что компьютер, покупавшийся «в ценовом классе ВАЗа», от установки 64-битного программного обеспечения станет «лихим Мерседесом». Чудес на свете не бывает…

Процессорное ядро

Различия между ядрами одной микроархитектуры

«Процессорное ядро» (как правило, для краткости его называют просто «ядро») — это конкретное воплощение [микро]архитектуры (т.е. «архитектуры в аппаратном смысле этого слова»), являющееся стандартом для целой серии процессоров. Например, NetBurst — это микроархитектура, которая лежит в основе многих сегодняшних процессоров Intel: Celeron, Pentium 4, Xeon. Микроархитектура задает общие принципы: длинный конвейер, использование определенной разновидности кэша кода первого уровня (Trace cache), прочие «глобальные» особенности. Ядро — более конкретное воплощение. Например, процессоры микроархитектуры NetBurst с шиной 400 МГц, кэшем второго уровня 256 килобайт, и без поддержки Hyper-Threading — это более-менее полное описание ядра Willamette. А вот ядро Northwood имеет кэш второго уровня уже 512 килобайт, хотя также основано на NetBurst. Ядро AMD Thunderbird основано на микроархитектуре K7, но не поддерживает набор команд SSE, а вот ядро Palomino — уже поддерживает.

Таким образом, можно сказать что «ядро» – это конкретное воплощение определенной микроархитектуры «в кремнии», обладающее (в отличие от самой микроархитектуры) определенным набором строго обусловленных характеристик. Микроархитектура — аморфна, она описывает общие принципы построения процессора. Ядро — конкретно, это микроархитектура, «обросшая» всевозможными параметрами и характеристиками. Чрезвычайно редки случаи, когда процессоры сменяли микроархитектуру, сохраняя название. И, наоборот, практически любое наименование процессора хотя бы несколько раз за время своего существования «меняло» ядро. Например, общее название серии процессоров AMD — «Athlon XP» — это одна микроархитектура (K7), но целых четыре ядра (Palomino, Thoroughbred, Barton, Thorton). Разные ядра, построенные на одной микроархитектуре, могут иметь, в том числе разное быстродействие.

Ревизии

Ревизия — одна из модификаций ядра, крайне незначительно отличающаяся от предыдущей, почему и не заслуживает звания «нового ядра». Как правило, из выпусков очередной ревизии производители процессоров не делают большого события, это происходит «в рабочем порядке». Так что даже если вы покупаете один и тот же процессор, с полностью аналогичным названием и характеристиками, но с интервалом где-то в полгода — вполне возможно, фактически он будет уже немного другой. Выпуск новой ревизии, как правило, связан с какими-то мелкими усовершенствованиями. Например, удалось чуть-чуть снизить энергопотребление, или понизить напряжение питания, или еще что-то оптимизировать, или была устранена пара мелких ошибок. С точки зрения производительности мы не помним ни одного примера, когда бы одна ревизия ядра отличалась от другой настолько существенно, чтобы об этом имело смысл говорить. Хотя чисто теоретически возможен и такой вариант — например, подвергся оптимизации один из блоков процессора, ответственный за исполнение нескольких команд. Подводя итог, можно сказать что «заморачиваться» ревизиями процессоров чаще всего не стоит: в очень редких случаях изменение ревизии вносит какие-то кардинальные изменения в процессор. Достаточно просто знать, что есть такая штука — исключительно для общего развития.

Частота работы ядра

Как правило, именно этот параметр в просторечии именуют «частотой процессора». Хотя в общем случае определение «частота работы ядра» всё же более корректно, так как совершенно не обязательно все составляющие CPU функционируют на той же частоте, что и ядро (наиболее частым примером обратного являлись старые «слотовые» x86 CPU — Intel Pentium II и Pentium III для Slot 1, AMD Athlon для Slot A — у них L2-кэш функционировал на 1/2, и даже иногда на 1/3 частоты работы ядра). Ещё одним распространённым заблуждением является уверенность в том, что частота работы ядра однозначным образом определяет производительность. На самом деле это дважды не так: во-первых, каждое конкретное процессорное ядро (в зависимости от того, как оно спроектировано, сколько содержит исполняющих блоков различных типов, и т.д. и т.п.) может исполнять различное количество команд за один такт, частота же — это всего лишь количество таких тактов в секунду. Таким образом (приведенное далее сравнение, разумеется, очень сильно упрощено и поэтому весьма условно) процессор, ядро которого исполняет 3 инструкции за такт, может иметь на треть меньшую частоту, чем процессор, исполняющий 2 инструкции за такт — и при этом обладать полностью аналогичным быстродействием.

Во-вторых, даже в рамках одного и того же ядра, увеличение частоты вовсе не всегда приводит к пропорциональному увеличению быстродействия. Здесь вам очень пригодятся знания, которые вы могли почерпнуть из раздела «Общие принципы взаимодействия процессора и ОЗУ». Дело в том, что скорость исполнения команд ядром процессора — это вовсе не единственный показатель, влияющий на скорость выполнения программы. Не менее важна скорость поступления команд и данных на CPU. Представим себе чисто теоретически такую систему: быстродействие процессора — 10’000 команд в секунду, скорость работы памяти — 1000 байт в секунду. Вопрос: даже если принять, что одна команда занимает не более одного байта, а данных у нас нет совсем, с какой скоростью будет исполняться программа в такой системе? Правильно: не более 1000 команд в секунду, и производительность CPU тут совершенно ни при чём: мы будем ограничены не ей, а скоростью поступления команд в процессор. Таким образом, следует понимать: невозможно непрерывно наращивать одну только частоту ядра, не ускоряя одновременно подсистему памяти, так как в этом случае начиная с определённого этапа, увеличение частоты CPU перестанет сказываться на увеличении быстродействия системы в целом.

Особенности образования названий процессоров

Раньше, когда небо было голубее, пиво — вкуснее, а девушки — красивее, процессоры называли просто: имя производителя + название модельного ряда + частота. Например: «AMD K6-2 450 MHz». В настоящее время уже оба основных производителя от этой традиции отошли, и вместо частоты употребляют какие-то непонятные циферки, обозначающие невесть что. Краткому объяснению того, что же на самом деле эти циферки обозначают, и посвящены следующие два раздела.

Рейтинги от AMD

Причина, по которой компания AMD «изъяла» частоту из наименования своих процессоров, и заменила её некой абстрактной цифрой — общеизвестна: после появления процессора Intel Pentium 4, который работает на очень высоких частотах, процессоры AMD рядом с ним стали «плохо выглядеть на витрине» — покупатель не верил, что CPU с частотой, например, 1500 МГц, может обогнать CPU с частотой 2000 МГц. Поэтому частоту в наименовании заменили рейтингом. Формальная («де-юре», так сказать) трактовка этого рейтинга в устах AMD в разные времена звучала немного по-разному, но ни разу не прозвучала в том виде, в каком её воспринимали пользователи: процессор AMD с неким рейтингом, должен быть как минимум не медленнее процессора Intel Pentium 4 с соответствующей данному рейтингу частотой. Между тем, ни для кого не являлось особенным секретом, что именно такая трактовка и являлась конечной целью введения рейтинга. В общем, все всё прекрасно понимали, но AMD старательно делала вид, что она тут ни при чём :). Пенять ей за это не стоит: в конкурентной борьбе применяются совсем другие правила, чем в рыцарских поединках. Тем более что результаты независимых тестов демонстрировали: в целом, рейтинги своим процессорам AMD назначает достаточно справедливые. Собственно, именно до тех пор, пока это так — вряд ли имеет смысл протестовать против использования рейтинга. Правда, остаётся открытым один вопрос: а к чему же (нас интересует, понятное дело, состояние де-факто, а не разъяснения маркетингового отдела) будет привязан рейтинг процессоров AMD чуть позже, когда вместо Pentium 4 Intel начнёт выпускать какой-нибудь другой процессор?

Processor Number от Intel

Что нужно запомнить сразу: Processor Number (далее PN) у процессоров Intel — это не рейтинг. Не рейтинг производительности, и не рейтинг чего-либо другого. Фактически, это просто «артикул», элемент строчки в складской ведомости, единственная задача которого — сделать так, чтобы строчка, обозначающая один процессор, отличалась от строчки, обозначающей другой. В рамках серии (первая цифра PN), две остальные цифры, в принципе, кое о чём могут сказать, но, учитывая наличие таблиц, в которых приведено полное соответствие между PN и реальными параметрами, мы не видим особого смысла в том, чтобы заучивать какие-то промежуточные соответствия. Мотивация, которой руководствовалась Intel, вводя PN (вместо опять-таки указания частоты CPU) — более сложная, чем у AMD. Необходимость введения PN (как её объясняет сама Intel) связана, прежде всего, с тем, что два основных конкурента по-разному подходят к вопросу об уникальности наименования CPU. Например, у AMD название «Athlon 64 3200+» может обозначать сразу четыре процессора с несколько различными техническими характеристиками (но одинаковым «рейтингом»). Intel придерживается мнения, что наименование процессора должно быть уникальным, в связи с чем ранее компании приходилось «изворачиваться», добавляя к значению частоты в наименовании различные буквы, и это приводило к путанице. По идее, PN должен был эту путаницу устранить. Трудно сказать, была ли достигнута поставленная цель: всё равно номенклатура процессоров Intel осталась достаточно сложной. С другой стороны, это неизбежно, так как ассортимент продуктов уж больно велик. Однако независимо от всего прочего, одного эффекта де-факто добиться точно удалось: теперь только разбирающиеся в вопросе специалисты могут по названию процессора быстро и точно «по памяти» сказать, что он собой представляет, и какова будет его производительность в сравнении с другими CPU. Насколько это хорошо? Сложно сказать. Мы предпочтём воздержаться от комментариев.

Измерение скорости «в мегагерцах» — как это возможно?

Никак это невозможно, потому что скорость не измеряется в мегагерцах, как не измеряется расстояние в килограммах. Однако господа маркетологи давно уже поняли, что в словесном поединке между физиком и психологом побеждает всегда последний — причём независимо от того, кто на самом деле прав. Поэтому мы и читаем про «сверхбыструю 1066 MHz FSB», мучительно пытаясь понять, как скорость может измеряться с помощью частоты. На самом деле, раз уж прижилась такая извращённая тенденция, нужно просто чётко представлять себе, что имеется в виду. А имеется в виду следующее: если мы «закрепим» ширину шины на N битах — то её пропускная способность действительно будет зависеть от того, на какой частоте данная шина функционирует, и какое количество данных она способна передавать за такт. По обычной процессорной шине с «одинарной» скоростью (такая шина была, например, у процессора Intel Pentium III) за такт передаётся 64 бита, то есть 8 байт. Соответственно, если рабочая частота шины равна 100 МГц (100’000’000 тактов в секунду) — то скорость передачи данных будет равна 8 байт * 100’000’000 герц ~= 763 мегабайта в секунду (а если считать в «десятичных мегабайтах», в которых принято считать потоки данных, то ещё красивее — 800 мегабайт в секунду). Соответственно, если на тех же 100 мегагерцах работает DDR-шина, способная передавать за один такт удвоенный объём данных — скорость вырастет ровно вдвое. Поэтому, согласно парадоксальной логике господ маркетологов, данную шину следует именовать «200-мегагерцевой». А если это ещё и QDR (Quad Data Rate) шина — то она и вовсе «400-мегагерцевая» получается, так как за один такт передаёт четыре пакета данных. Хотя реальная частота работы у всех трёх вышеописанных шин одинаковая — 100 мегагерц. Вот так «мегагерцы» и стали синонимом скорости.

Таким образом, QDR-шина (с «учетверённой» скоростью), работающая на реальной частоте 266 мегагерц, волшебным образом оказывается у нас «1066-мегагерцевой». Цифра «1066» в данном случае олицетворяет то, что её пропускная способность ровно в 4 раза больше «односкоростной» шины, работающей на той же самой частоте. Вы ещё не запутались?.. Привыкайте! Это вам не какая-нибудь теория относительности, тут всё намного сложней и запущенней… Впрочем, самое главное здесь — выучить наизусть один простой принцип: если уж мы занимаемся таким извращением, как сравнение скорости двух шин между собой «в мегагерцах» — то они обязательно должны быть одинаковой ширины. Иначе получается как в одном форуме, где человек всерьёз доказывал, что пропускная способность AGP2X («133-мегагерцевая», но 32-битная шина) — выше, чем пропускная способность FSB у Pentium III 800 (реальная частота 100 МГц, ширина 64 бита).

Пара слов о некоторых пикантных особенностях DDR и QDR протоколов

Как уже было сказано выше, в режиме DDR по шине за один такт передаётся удвоенный объём информации, а в режиме QDR — учетверённый. Правда, в документах, ориентированных больше на прославление достижений производителей, чем на объективное освещение реалий, почему-то всегда забывают указать одно маленькое «но»: режимы удвоенной и учетверённой скорости включаются только при пакетной передаче данных. То есть, если мы запросили из памяти парочку мегабайтов с адреса X по адрес Y — то да, эти два мегабайта будут переданы с удвоенной/учетверённой скоростью. А вот сам запрос на данные посылается по шине с «одинарной» скоростью — всегда! Соответственно, если запросов у нас много, а размер пересылаемых данных не очень велик, то количество данных, которые «путешествуют» по шине с одинарной скоростью (а запрос — это тоже данные) будет почти равно количеству тех, которые передаются со скоростью удвоенной или учетверённой. Вроде бы нам никто открыто не врал, вроде бы DDR и QDR действительно работают, но… как говорится в одном старом анекдоте: «то ли он у кого-то украл шубу, то ли у него кто-то украл шубу, но что-то там с шубой не то…» 😉

Процессор «крупноблочно»

Кэш

Общее описание и принцип действия

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

Итак, представим, что у нас есть много сравнительно медленной памяти (пусть это будет ОЗУ размером 10’000’000 байт) и относительно мало очень быстрой (пусть это будет кэш размером всего 1024 байта). Как нам с помощью этого несчастного килобайта увеличить скорость работы со всей памятью вообще? А вот здесь следует вспомнить, что данные в процессе работы программы, как правило, не бездумно перекидываются с места на место — они изменяются. Считали из памяти значение какой-то переменной, прибавили к нему какое-то число — записали обратно на то же место. Считали массив, отсортировали по возрастанию — опять-таки записали в память. То есть в один какой-то момент программа работает не со всей памятью целиком, а, как правило, с относительно маленьким её фрагментом. Какое решение напрашивается? Правильно: загрузить этот фрагмент в «быструю» память, обработать его там, а потом уже записать обратно в «медленную» (или просто удалить из кэша, если данные не изменялись). В общем случае, именно так и работает процессорный кэш: любая считываемая из памяти информация попадает не только в процессор, но и в кэш. И если эта же информация (тот же адрес в памяти) нужна снова, сначала процессор проверяет: а нет ли её в кэше? Если есть — информация берётся оттуда, и обращения к памяти не происходит вовсе. Аналогично с записью: информация, если её объём влезает в кэш — пишется именно туда, и только потом, когда процессор закончил операцию записи, и занялся выполнением других команд, данные, записанные в кэш, параллельно с работой процессорного ядра «потихоньку выгружаются» в ОЗУ.

Разумеется, объём данных, прочитанных и записанных за всё время работы программы — намного больше объёма кэша. Поэтому некоторые из них приходится время от времени удалять, чтобы в кэш могли поместиться новые, более актуальные. Самый простой из известных механизмов обеспечения данного процесса — отслеживание времени последнего обращения к данным, находящимся в кэше. Так, если нам необходимо поместить новые данные в кэш, а он уже «забит под завязку», контроллер, управляющий кэшем, смотрит: к какому фрагменту кэша не происходило обращения дольше всего? Именно этот фрагмент и является первым кандидатом на «вылет», а на его место записываются новые данные, с которыми нужно работать сейчас. Вот так, в общих чертах, работает механизм кэширования в процессорах. Разумеется, приведенное выше объяснение весьма примитивно, на самом деле всё ещё сложнее, но, надеемся, общее представление о том, зачем процессору нужен кэш и как он работает, вы получить смогли.

А для того чтобы было понятно, насколько важен кэш, приведем простой пример: скорость обмена данными процессора Pentium 4 со своим кэшам более чем в 10 раз (!) превосходит скорость его работы с памятью. Фактически, в полную силу современные процессоры способны работать только с кэшем: как только они сталкиваются с необходимостью прочитать данные из памяти — все их хваленые мегагерцы начинают просто «греть воздух». Опять-таки, простой пример: выполнение простейшей инструкции процессором происходит за один такт, то есть за секунду он может выполнить такое количество простых инструкций, какова его частота (на самом деле еще больше, но это оставим на потом…). А вот время ожидания данных из памяти может в худшем случае составить более 200 тактов! Что делает процессор, пока он ждет нужных данных? А ничего он не делает. Просто стоит и ждет…

Многоуровневое кэширование

Специфика конструирования современных процессорных ядер привела к тому, что систему кэширования в подавляющем большинстве CPU приходится делать многоуровневой. Кэш первого уровня (самый «близкий» к ядру) традиционно разделяется на две (как правило, равные) половины: кэш инструкций (L1I) и кэш данных (L1D). Это разделение предусматривается так называемой «гарвардской архитектурой» процессора, которая по состоянию на сегодня является самой популярной теоретической разработкой для построения современных CPU. В L1I, соответственно, аккумулируются только команды (с ним работает декодер, см. ниже), а в L1D — только данные (они впоследствии, как правило, попадают во внутренние регистры процессора). «Над L1» стоит кэш второго уровня — L2. Он, как правило, больше по объёму, и является уже «смешанным» — там располагаются и команды, и данные. L3 (кэш третьего уровня), как правило, полностью повторяет структуру L2, и в современных x86 CPU встречается редко. Чаще всего, L3 — это плод компромисса: за счёт использование более медленной и узкой шины, его можно сделать очень большим, но при этом скорость L3 всё равно остаётся более высокой, чем скорость памяти (хотя и не такой высокой, как у L2-кэша). Тем не менее, алгоритм работы с многоуровневым кэшем в общих чертах не отличается от алгоритма работы с одноуровневым, просто добавляются лишние итерации: сначала информация ищется в L1, если её там нет — в L2, потом — в L3, и уже потом, если ни на одном уровне кэша она не найдена — идёт обращение к основной памяти (ОЗУ).

Декодер

На самом деле, исполнительные блоки всех современных десктопных x86-процессоров… вовсе не работают с кодом в стандарте x86. У каждого процессора есть своя, «внутренняя» система команд, не имеющая ничего общего с теми командами (тем самым «кодом»), которые поступают извне. В общем случае, команды, исполняемые ядром — намного проще, «примитивнее», чем команды стандарта x86. Именно для того, чтобы процессор «внешне выглядел» как x86 CPU, и существует такой блок как декодер: он отвечает за преобразование «внешнего» x86-кода во «внутренние» команды, исполняемые ядром (при этом достаточно часто одна команда x86-кода преобразуется в несколько более простых «внутренних»). Декодер является очень важной частью современного процессора: от его быстродействия зависит то, насколько постоянным будет поток команд, поступающих на исполняющие блоки. Ведь они неспособны работать с кодом x86, поэтому то, будут они что-то делать, или простаивать — во многом зависит от скорости работы декодера. Достаточно необычный способ ускорить процесс декодирования команд реализовала в процессорах архитектуры NetBurst компания Intel — см. ниже про Trace cache.

Исполняющие (функциональные) устройства

Пройдя через все уровни кэша и декодер, команды наконец-то попадают на те блоки, ради которых вся эта катавасия и устраивалась: исполняющие устройства. По сути, именно исполняющие устройства и являются единственно необходимым элементом процессора. Можно обойтись без кэша — скорость снизится, но программы работать будут. Можно обойтись без декодера — исполняющие устройства станут сложнее, но работать процессор будет. В конце концов, ранние процессоры архитектуры x86 (i8086, i80186, 286, 386, 486, Am5x86) — как-то без декодера обходились. Без исполняющих устройств обойтись невозможно, ибо именно они исполняют код программы. В самом первом приближении они традиционно делятся на две больших группы: арифметико-логические устройства (ALU) и блок вычислений с плавающей точкой (FPU).

Арифметико-логические устройства

ALU традиционно отвечают за два типа операций: арифметические действия (сложение, вычитание, умножение, деление) с целыми числами, логические операции с опять-таки целыми числами (логическое «и», логическое «или», «исключающее или», и тому подобные). Что, собственно, и следует из их названия. Блоков ALU в современных процессорах, как правило, несколько. Для чего — вы поймёте позже, прочитав раздел «Суперскалярность и внеочередное исполнение команд». Понятно, что ALU может исполнить только те команды, которые предназначены для него. Распределением команд, поступающих с декодера, по различным исполняющим устройствам, занимается специальный блок, но это уже, как говорится, «слишком сложные материи», и их вряд ли имеет смысл разъяснять в материале, который посвящен лишь поверхностному ознакомлению с основными принципами работы современных x86 CPU.

Блок вычислений с плавающей запятой*

FPU занимается выполнением команд, работающих с числами с плавающей запятой, кроме того, традиционно на него «вешают всех собак» в виде всяческих дополнительных наборов команд (MMX, 3DNow!, SSE, SSE2, SSE3…) — независимо от того, работают они с числами с плавающей запятой, или с целыми. Как и в случае с ALU, отдельных блоков в FPU может быть несколько, и они способны работать параллельно.

* — согласно традиций русской математической школы, мы называем FPU «блоком вычислений с плавающей запятой», хотя буквально его название (Floating Point Unit) переводится как «…с плавающей точкой» — согласно американскому стандарту написания таких чисел.

Регистры процессора

Регистры — по сути, те же ячейки памяти, но «территориально» они расположены прямо в процессорном ядре. Разумеется, скорость работы с регистрами во много раз превосходит как скорость работы с ячейками памяти, расположенными в основном ОЗУ (тут вообще на порядки…), так и с кэшами любого уровня. Поэтому большинство команд архитектуры x86 предусматривают осуществление действий именно над содержимым регистров, а не над содержимым памяти. Однако общий объём регистров процессора, как правило, очень мал — он не сравним даже с объёмом кэшей первого уровня. Поэтому де-факто код программы (не на языке высокого уровня, а именно бинарный, «машинный») часто содержит следующую последовательность операций: загрузить в один из регистров процессора информацию из ОЗУ, загрузить в другой регистр другую информацию (тоже из ОЗУ), произвести некое действие над содержимым этих регистров, поместив результат в третий — а потом снова выгрузить результат из регистра в основную память.

Процессор в подробностях

Особенности кэшей

Частота работы кэша и его шина

Во всех современных x86 CPU все уровни кэша работают на той же частоте, что и процессорное ядро, но это вовсе не всегда было так (данный вопрос уже поднимался выше). Однако скорость работы с кэшем зависит не только от частоты, но и от ширины шины, с помощью которой он соединён с процессорным ядром. Как вы (надеемся) помните из ранее прочитанного, скорость передачи данных является, по сути, произведением частоты работы шины (количества тактов в секунду) на количество байт, которые передаются по шине за один такт. Количество передаваемых за такт байтов можно увеличивать за счёт введения DDR и QDR (Double Data Rate и Quad Data Rate) протоколов — или просто за счёт увеличения ширины шины. В случае с кэшем более популярен второй вариант — не в последнюю очередь из-за «пикантных особенностей» DDR/QDR, описанных выше. Разумеется, минимально разумной шириной шины кэша является ширина внешней шины самого процессора, то есть, по состоянию на сегодняшний день — 64 бита. Именно так, в духе здорового минимализма, и поступает компания AMD: в её процессорах ширина шины L1 <—> L2 равна 64 битам, но при этом она двунаправленная, то есть, способна работать одновременно на передачу и приём информации. В духе «здорового гигантизма» в очередной раз поступила компания Intel: в её процессорах, начиная с Pentium III «Coppermine», шина L1 <—> L2 имеет ширину… 256 бит! По принципу «кашу маслом не испортишь», как говорится. Правда, шина эта однонаправленная, то есть в один момент времени работает либо только на передачу, либо только на приём. Споры о том, какой из подходов лучше (двунаправленная шина, но более узкая, или однонаправленная широкая) — продолжаются до сих пор… впрочем, равно как и множество других споров относительно технических решений, применяемых двумя основными конкурентами на рынке x86 CPU.

Эксклюзивный и не эксклюзивный кэш

Концепции эксклюзивного и не эксклюзивного кэширования очень просты: в случае не эксклюзивного кэша, информация на всех уровнях кэширования может дублироваться. Таким образом, L2 может содержать в себе данные, которые уже находятся в L1I и L1D, а L3 (если он есть) может содержать в себе полную копию всего содержимого L2 (и, соответственно, L1I и L1D). Эксклюзивный кэш, в отличие от не эксклюзивного, предусматривает чёткое разграничение: если информация содержится на каком-то уровне кэша — то на всех остальных она отсутствует. Плюс эксклюзивного кэша очевиден: общий размер кэшируемой информации в данном случае равен суммарному объёму кэшей всех уровней — в отличие от не эксклюзивного кэша, где размер кэшируемой информации (в худшем случае) равен объёму самого большого уровня кэша. Минус эксклюзивного кэша менее очевиден, но он есть: необходим специальный механизм, который следит за собственно «эксклюзивностью» (так, например, при удалении информации из L1-кэша, перед этим автоматически инициируется процесс её копирования в L2).

Не эксклюзивный кэш традиционно использует компания Intel, эксклюзивный (с момента появления процессоров Athlon на ядре Thunderbird) — компания AMD. В целом, мы наблюдаем здесь классическое противостояние между объёмом и скоростью: за счёт эксклюзивности, при одинаковых объёмах L1/L2 у AMD общий размер кэшируемой информации получается больше — но за счёт неё же он работает медленней (задержки, вызванные наличием механизма обеспечения эксклюзивности). Следует, наверное, заметить, что недостатки не эксклюзивного кэша компания Intel в последнее время компенсирует просто, тупо, но весомо: наращивая его объёмы. Для топовых процессоров данной компании стал уже почти что нормой L2-кэш объёмом 2 МБ — и AMD с её 128 КБ L1С+L1D и максимум 1 МБ L2 пока «не переплюнуть» эти 2 МБ даже за счёт эксклюзивности.

Кроме того, увеличивать общий объём кэшируемой информации за счёт введения эксклюзивной архитектуры кэша имеет смысл только в том случае, когда выигрыш в объёме получается достаточно большим. Для компании AMD это актуально т.к. у её сегодняшних CPU суммарный объём L1D+L1I равен 128 КБ. Процессорам Intel, у которых объём L1D равен максимум 32 КБ, а L1I иногда имеет совсем другую структуру (см. про Trace cache), введение эксклюзивной архитектуры дало бы намного меньше пользы.

А ещё есть такое распространённое заблуждение, что архитектура кэша у CPU компании Intel «инклюзивная». На самом деле — нет. Именно НЕ эксклюзивная. Инклюзивная архитектура предусматривает, что на «нижнем» уровне кэша не может находиться ничего, чего нет на более «верхнем». Не эксклюзивная архитектура всего лишь допускает дублирование данных на разных уровнях.

Trace cache

Концепция Trace cache, состоит в том, чтобы сохранять в кэше инструкций первого уровня (L1I) не те команды, которые считаны из памяти, а уже декодированные последовательности (см. декодер). Таким образом, если некая x86-команда исполняется повторно, и она всё ещё находится в L1I, декодеру процессора не нужно снова преобразовывать её в последовательность команд «внутреннего кода», так как L1I содержит данную последовательность в уже декодированном виде. Концепция Trace cache очень удачно вписывается в общую концепцию архитектуры Intel NetBurst, ориентированную на создание процессоров с очень высокой частотой работы ядра. Однако полезность Trace cache для [относительно] менее высокочастотных CPU до сих пор находится под вопросом, так как сложность организации Trace cache становится сопоставима с задачей конструирования обычного быстрого декодера. Поэтому, отдавая должное оригинальности идеи, мы всё же сказали бы, что универсальным решением «на все случаи жизни» Trace cache считать нельзя.

Суперскалярность и внеочередное исполнение команд

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

1) A = B + C
2) Z = X + Y
3) K = A + Z

Легко заметить, что команды (1) и (2) совершенно независимы друг от друга — они не пересекаются ни по исходным данным (переменные B и C в первом случае, X и Y во втором), ни по месту размещения результата (переменная A в первом случае и Z во втором). Стало быть, если на данный момент у нас есть свободные исполняющие блоки в количестве более одного, данные команды можно распределить по ним, и выполнить одновременно, а не последовательно*. Таким образом, если принять время исполнения каждой команды равным N тактов процессора, то в классическом случае исполнение всей последовательности заняло бы N*3 тактов, а в случае с параллельным исполнением — всего N*2 тактов (так как команду (3) нельзя выполнить, не дождавшись результата исполнения двух предыдущих).

* — разумеется, степень параллелизма не бесконечна: команды могут быть выполнены параллельно только в том случае, когда на данный момент времени есть в наличии соответствующее количество свободных от работы блоков (ФУ), причём именно таких, которые «понимают» рассматриваемые команды. Самый простой пример: блок, относящийся к ALU, физически неспособен исполнить инструкцию, предназначенную для FPU. Обратное также верно.

На самом деле всё ещё сложнее. Так, если у нас имеется следующая последовательность:

1) A = B + C
2) K = A + M
3) Z = X + Y

То очередь исполнения команд процессором будет изменена! Так как команды (1) и (3) независимы друг от друга (ни по исходным данным, ни по месту размещения результата), они могут быть выполнены параллельно — и будут выполнены параллельно. А вот команда (2) будет выполнена после них (третьей) — поскольку для того, чтобы результат вычислений был корректен, необходимо, чтобы перед этим была выполнена команда (1). Именно поэтому обсуждаемый в данном разделе механизм и называется «внеочередным исполнением команд» (Out-of-Order Execution, или сокращённо «OoO»): в тех случаях, когда очерёдность выполнения никак не может сказаться на результате, команды отправляются на исполнение не в той последовательности, в которой они располагаются в коде программы, а в той, которая позволяет достичь максимального быстродействия.

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

Процессоры, оснащённые механизмом параллельного исполнения нескольких подряд идущих команд, принято называть «суперскалярными». Однако не все суперскалярные процессоры поддерживают внеочередное исполнение. Так, в первом примере нам достаточно «простой суперскалярности» (выполнения двух последовательных команд одновременно) — а вот во втором примере без перестановки команд местами уже не обойтись, если мы хотим получить максимальное быстродействие. Все современные x86 CPU обладают обоими качествами: являются суперскалярными, и поддерживают внеочередное исполнение команд. В то же время, были в истории x86 и «простые суперскаляры», OoO не поддерживающие. Например, классическим десктопным x86-суперскаляром без OoO был Intel Pentium [MMX].

Справедливости ради, стоит заметить, что никаких заслуг в разработке концепций суперскалярности и OoO — нет ни у Intel, ни у AMD, ни у какого-либо иного (в том числе из ныне почивших) производителя x86 CPU. Первый суперскалярный компьютер, поддерживающий OoO, был разработан Сеймуром Креем (Seymour Cray) ещё в 60-х годах XX века. Для сравнения: Intel свой первый суперскалярный процессор (Pentium) выпустила в 1993 году, первый суперскаляр с OoO (Pentium Pro) — в 1995 году; первый суперскаляр с OoO от AMD (K5) увидел свет в 1996 году. Комментарии, как говорится, излишни…

Предварительное (опережающее) декодирование
и кэширование

Предсказание ветвлений

В любой более-менее сложной программе присутствуют команды условного перехода: «Если некое условие истинно — перейти к исполнению одного участка кода, если нет — другого». С точки зрения скорости выполнения кода программы современным процессором, поддерживающим внеочередное исполнение, любая команда условного перехода — воистину бич божий. Ведь до тех пор, пока не станет известно, какой участок кода после условного перехода окажется «актуальным» — его невозможно начать декодировать и исполнять (см. внеочередное исполнение). Для того чтобы как-то примирить концепцию внеочередного исполнения с командами условного перехода, предназначается специальный блок: блок предсказания ветвлений. Как понятно из его названия, занимается он, по сути, «пророчествами»: пытается предсказать, на какой участок кода укажет команда условного перехода, ещё до того, как она будет исполнена. В соответствии с указаниями «штатного внутриядерного пророка», процессором производятся вполне реальные действия: «напророченный» участок кода загружается в кэш (если он там отсутствует), и даже начинается декодирование и выполнение его команд. Причём среди выполняемых команд также могут содержаться инструкции условного перехода, и их результаты тоже предсказываются, что порождает целую цепочку из пока не проверенных предсказаний! Разумеется, если блок предсказания ветвлений ошибся, вся проделанная в соответствии с его предсказаниями работа просто аннулируется.

На самом деле, алгоритмы, по которым работает блок предсказания ветвлений, вовсе не являются шедеврами искусственного интеллекта. Преимущественно они просты… и тупы. Ибо чаще всего команда условного перехода встречается в циклах: некий счётчик принимает значение X, и после каждого прохождения цикла значение счётчика уменьшается на единицу. Соответственно, до тех пор, пока значение счётчика больше нуля — осуществляется переход на начало цикла, а после того, как он становится равным нулю — исполнение продолжается дальше. Блок предсказания ветвлений просто анализирует результат выполнения команды условного перехода, и считает, что если N раз подряд результатом стал переход на определённый адрес — то и в N+1 случае будет осуществлён переход туда же. Однако, несмотря на весь примитивизм, данная схема работает просто замечательно: например, в случае, если счётчик принимает значение 100, а «порог срабатывания» предсказателя ветвлений (N) равен двум переходам подряд на один и тот же адрес — легко заметить, что 97 переходов из 98 будут предсказаны правильно!

Разумеется, несмотря на достаточно высокую эффективность простых алгоритмов, механизмы предсказания ветвлений в современных CPU всё равно постоянно совершенствуются и усложняются — но тут уже речь идёт о борьбе за единицы процентов: например, за то, чтобы повысить эффективность работы блока предсказания ветвлений с 95 процентов до 97, или даже с 97% до 99…

Предвыборка данных

Блок предвыборки данных (Prefetch) очень похож по принципу своего действия на блок предсказания ветвлений — с той только разницей, что в данном случае речь идёт не о коде, а о данных. Общий принцип действия такой же: если встроенная схема анализа доступа к данным в ОЗУ решает, что к некоему участку памяти, ещё не загруженному в кэш, скоро будет осуществлён доступ — она даёт команду на загрузку данного участка памяти в кэш ещё до того, как он понадобится исполняемой программе. «Умно» (результативно) работающий блок предвыборки позволяет существенно сократить время доступа к нужным данным, и, соответственно, повысить скорость исполнения программы. К слову: грамотный Prefetch очень хорошо компенсирует высокую латентность подсистемы памяти, подгружая нужные данные в кэш, и тем самым, нивелируя задержки при доступе к ним, если бы они находились не в кэше, а в основном ОЗУ.

Однако, разумеется, в случае ошибки блока предвыборки данных, неизбежны негативные последствия: загружая де-факто «ненужные» данные в кэш, Prefetch вытесняет из него другие (быть может, как раз нужные). Кроме того, за счёт «предвосхищения» операции считывания, создаётся дополнительная нагрузка на контроллер памяти (де-факто, в случае ошибки — совершенно бесполезная).

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

Заключение

Вполне возможно, те чувства, которые у вас возникли после прочтения данной статьи, можно описать примерно следующим образом: «Вместо того чтобы на пальцах объяснить, какой процессор лучше — взяли и загрузили мне мозги кучей специфической информации, в которой ещё разбираться и разбираться, и конца-края не видно!» Вполне нормальная реакция: поверьте, мы вас хорошо понимаем. Скажем даже больше (и пусть с головы упадёт корона!): если вы думаете, что мы сами можем ответить на этот простецкий вопрос («какой процессор лучше?») — то вы очень сильно заблуждаетесь. Не можем. Для одних задач лучше один, для других — другой, а тут ещё цена разная, доступность, симпатии конкретного пользователя к определённым маркам… Не имеет задача однозначного решения. Если бы имела — наверняка кто-то бы его нашёл, и стал бы самым знаменитым обозревателем за всю историю независимых тестовых лабораторий.

Хотелось бы подчеркнуть ещё раз: даже полностью усвоив и осмыслив всю информацию, изложенную в данном материале — вы по-прежнему не сможете предсказать, какой из двух процессоров будет быстрее в ваших задачах, глядя только на их характеристики. Во-первых — потому, что далеко не все характеристики процессоров здесь рассмотрены. Во-вторых — потому, что есть и такие параметры CPU, которые в числовом виде могут быть представлены только с очень большой «натяжкой». Так для кого же (и для чего) всё это написано? В основном — для тех самых «кроликов», которые непременно желают знать, что происходит внутри тех устройств, которыми они пользуются ежедневно. Зачем? Может, они просто лучше себя чувствуют, когда знают, что вокруг них происходит? 🙂

ixbt.com

Современная терминология 3D графики

Введение

Мир 3D графики, в том числе игровой, наполнен терминами. Терминами, которые не всегда имеют единственно правильное определение. Иногда одни и те же вещи называются по-разному, и наоборот, один и тот же эффект может называться в настройках игры то «HDR», то «Bloom», то «Glow», то «Postprocessing». Большинству людей из похвальбы разработчиков о том, что они встроили в свой графический движок, непонятно, что в реальности имелось в виду.

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

Если что-то в этой статье и в статьях Александра вам не понятно, то есть смысл начать с самого раннего, с «Терминологии 3D-графики» и других теоретических статей из раздела «Видеосистема» нашего сайта. Эти статьи уже несколько устарели, конечно, но основные, самые начальные и важные данные там есть. Мы же с вами поговорим о более «высокоуровневых» терминах. Основные понятия о 3D графике реального времени и устройстве графического конвейера у вас должны быть. С другой стороны, не ждите математических формул, академической точности и примеров кода — статья предназначена совсем не для этого.

Термины

Shader (Шейдер)Шейдером в широком смысле называется программа для визуального определения поверхности объекта. Это может быть описание освещения, текстурирования, постобработки и т.п. Шейдеры выросли из работ Кука (Cook’s shade trees) и Перлина (Perlin’s pixel stream language). Сейчас наиболее известны шейдеры RenderMan Shading Language. Программируемые шейдеры были впервые представлены в RenderMan компании Pixar, там определены несколько типов шейдеров: light source shaders, surface shaders, displacement shaders, volume shaders, imager shaders. Эти шейдеры чаще всего программно выполняются универсальными процессорами и не имеют полной аппаратной реализации. В дальнейшем, многие исследователи описывали похожие на RenderMan языки, но они уже были предназначены для аппаратного ускорения: система PixelFlow (Olano и Lastra), Quake Shader Language (применен id Software в графическом движке игры Quake III, который описывал многопроходный рендеринг), и другие. Peercy сотоварищи разработали технику для того, чтобы программы с циклами и условиями выполнять на традиционных аппаратных архитектурах при помощи нескольких проходов рендеринга. Шейдеры RenderMan разбивались на несколько проходов, которые комбинировались во фреймбуфере. Позднее появились языки, которые мы видим аппаратно ускоренными в DirectX и OpenGL. Так шейдеры были адаптированы для графических приложений реального времени.

Видеочипы раннего времени не были программируемы и исполняли только заранее запрограммированные действия (fixed-function), например, алгоритм освещения был жестко зафиксирован в железе, и нельзя было ничего изменить. Затем, компании-производители видеочипов постепенно ввели в свои чипы элементы программируемости, сначала это были очень слабые возможности (NV10, известный как NVIDIA GeForce 256, уже был способен на некоторые примитивные программы), которые не получили программной поддержки в Microsoft DirectX API, но со временем возможности постоянно расширялись. Следующий шаг был за и NV20 (GeForce 3) и NV2A (видеочип, примененный в игровой консоли Microsoft Xbox), которые стали первыми чипами с аппаратной поддержкой шейдеров DirectX API. Версия Shader Model 1.0/1.1, появившаяся в DirectX 8, была сильно ограничена, каждый шейдер (особенно это относится к пиксельным) мог быть сравнительно малой длины и сочетать весьма ограниченный набор команд. В дальнейшем, Shader Model 1 (SM1 для краткости) была улучшена с пиксельными шейдерами версии 1.4 (ATI R200), которые предлагали большую гибкость, но также имели слишком ограниченные возможности. Шейдеры того времени писались на так называемом assembly shader language, который близок к ассемблеру для универсальных процессоров. Его низкий уровень доставляет определенные сложности для понимания кода и программирования, особенно, когда код программы большой, ведь он далек от элегантности и структурированности современных языков программирования.

Версия Shader Model 2.0 (SM2), появившись в DirectX 9 (что было поддержано видеочипом ATI R300, ставшим первым GPU с поддержкой шейдерной модели версии 2.0), серьезно расширила возможности шейдеров реального времени, предложив более длинные и сложные шейдеры и заметно расширившийся набор команд. Была добавлена возможность расчетов с плавающей запятой в пиксельных шейдерах, что также стало важнейшим улучшением. DirectX 9, в лице возможностей SM2, также привнес и язык шейдеров высокого уровня — high-level shader language (HLSL), весьма похожий на язык Си. И эффективный компилятор, переводящий HLSL программы в низкоуровневый код, «понятный» для аппаратных средств. Причем, доступно несколько профилей, предназначенных для разных аппаратных архитектур. Теперь, разработчик может писать один код HLSL шейдера и компилировать его при помощи DirectX в оптимальную программу, для установленного у пользователя видеочипа. После этого выходили чипы от NVIDIA, NV30 и NV40, которые улучшили возможности аппаратных шейдеров еще на шаг, добавив еще более длинные шейдеры, возможности динамических переходов в вершинных и пиксельных шейдерах, возможность выборки текстур из вершинных шейдеров и др. С тех пор пока качественных изменений не было, они ожидаются ближе к концу 2006 года в DirectX 10…

В целом, шейдеры добавили к графическому конвейеру множество новых возможностей по трансформации и освещению вершин и индивидуальной обработке пикселей так, как этого хотят разработчики каждого конкретного приложения. И все-таки, возможности аппаратных шейдеров до сих пор не раскрыты в приложениях полностью, а ведь с увеличением их возможностей в каждом новом поколении «железа», мы скоро увидим уровень тех самых шейдеров RenderMan, которые когда-то казались недостижимыми для игровых видеоускорителей. Пока в шейдерных моделях реального времени, поддерживаемых на сегодняшний день аппаратными видеоускорителями, определено лишь два типа шейдеров: Vertex Shader и Pixel Shader (в определении DirectX 9 API). В будущем DirectX 10 к ним обещает добавиться еще и Geometry Shader.

Vertex Shader (Вершинный Шейдер)

Вершинные шейдеры — это программы, выполняемые видеочипами, которые производят математические операции с вершинами (vertex, из них состоят 3D объекты в играх), иначе говоря, они предоставляют возможность выполнять программируемые алгоритмы по изменению параметров вершин и их освещению (T&L — Transform & Lighting). Каждая вершина определяется несколькими переменными, например, положение вершины в 3D пространстве определяется координатами: x, y и z. Вершины также могут быть описаны характеристиками цвета, текстурными координатами и т.п. Вершинные шейдеры, в зависимости от алгоритмов, изменяют эти данные в процессе своей работы, например, вычисляя и записывая новые координаты и/или цвет. То есть, входные данные вершинного шейдера — данные об одной вершине геометрической модели, которая в данный момент обрабатывается. Обычно это координаты в пространстве, нормаль, компоненты цвета и текстурные координаты. Результирующие данные выполняемой программы служат входными для дальнейшей части конвейера, растеризатор делает линейную интерполяцию входных данных для поверхности треугольника и для каждого пикселя исполняет соответствующий пиксельный шейдер. Очень простой и грубый (но наглядный, надеюсь) пример: вершинный шейдер позволяет взять 3D объект сферы и вершинным шейдером сделать из него зеленый куб :).

До появления видеочипа NV20 у разработчиков было два пути, либо использовать собственные программы и алгоритмы, изменяющие параметры вершин, но тогда все расчеты делал бы CPU (software T&L), либо полагаться на фиксированные алгоритмы в видеочипах, с поддержкой аппаратной трансформации и освещения (hardware T&L). Первая же шейдерная модель DirectX означала большой шаг вперед от фиксированных функций по трансформации и освещению вершин к полностью программируемым алгоритмам. Стало возможным, например, выполнять алгоритм скининга полностью на видеочипах, а до этого единственной возможностью было их исполнение на универсальных центральных процессорах. Теперь, с сильно улучшенными со времен упомянутого чипа NVIDIA возможностями, с вершинами при помощи вершинных шейдеров можно делать уже очень многое (кроме их создания, разве что)…

Примеры того, как и где применяются вершинные шейдеры:

  • Скининг (skinning). Matrix pallete skinning для скелетной анимации персонажей с большим количеством «костей». Примеры вы видите практически во всех играх. Но приведу один скриншот из Call of Duty 2, над вершинами каждого из персонажей поработал алгоритм скининга. Причем, с шейдерами версии 3.0 сделать скининг стало заметно проще, для шейдеров версии 1.1 нужно было писать несколько шейдеров для каждого вида скининга (с определенным количеством «костей»). Call of Duty 2
  • Деформация объектов. Как самый явный и эффектный пример — создание реалистичных волн в динамике. Примеры подобных решений наблюдаются в играх F.E.A.R. и Pacific Fighters, причем в последнем сделана, пожалуй, самая реалистичная вода реального времени, применяются вершинные шейдеры 3.0 и доступ к текстурам из них, настоящий Displacement Mapping в дополнение к Bump Mapping: F.E.A.R. Pacific Fighters
    Конечно, похожий эффект волн в динамике, как в F.E.A.R., может быть запрограммирован и на пиксельном уровне (Morrowind), но в данном случае речь об изменении реальной геометрии, что всегда реалистичнее выглядит.
  • Анимация объектов. Например, травы и деревьев в одном из первых применений — 3DMark 2001 SE, алгоритм анимации был значительно улучшен в следующем 3DMark 03: 3DMark 2001 SE 3DMark 03
  • Toon shading/Cel shading. Используется в некоторых играх для создания специального эффекта «мультяшного» изображения: TMNT XIII
  • Имитация ткани (Cloth Simulation) — для имитации поведения подобных ткани материалов, которой очень не хватает в большинстве игр. Наиболее просто понять, о чем речь, по такой картинке: Cloth Demo

Pixel Shader (Пиксельный Шейдер)

Пиксельные шейдеры — это программы, выполняемые видеочипом во время растеризации для каждого пикселя изображения, они производят выборку из текстур и/или математические операции над цветом и значением глубины (Z-buffer) пикселей. Все инструкции пиксельного шейдера выполняются попиксельно, после того, как операции с трансформированием и освещением геометрии завершены. Пиксельный шейдер в итоге своей работы выдает конечное значение цвета пикселя и Z-значение для последующего этапа графического конвейера, блендинга. Наиболее простой пример пиксельного шейдера, который можно привести: банальное мультитекстурирование, просто смешение двух текстур (diffuse и lightmap, например) и наложение результата вычисления на пиксель.

До появления видеочипов с аппаратной поддержкой пиксельных шейдеров, у разработчиков были лишь возможности по обычному мультитекстурированию и альфа-блендингу, что существенно ограничивало возможности по многим визуальным эффектам и не позволяло делать многое из того, что сейчас доступно. И если с геометрией еще что-то можно было делать программно, то с пикселями — нет. Ранние версии DirectX (до 7.0 включительно) всегда выполняли все расчеты повершинно и предлагали крайне ограниченную функциональность по попиксельному освещению (вспоминаем EMBM — environment bump mapping и DOT3) в последних версиях. Пиксельные шейдеры сделали возможным освещение любых поверхностей попиксельно, используя запрограммированные разработчиками материалы. Появившиеся в NV20 пиксельные шейдеры версии 1.1 (в понимании DirectX) уже могли не только делать мультитекстурирование, но и многое другое, хотя большинство игр, использующих SM1, просто использовали традиционное мультитекстурирование на большинстве поверхностей, выполняя более сложные пиксельные шейдеры лишь на части поверхностей, для создания разнообразных спецэффектов (все знают, что вода до сих пор является наиболее частым примером использования пиксельных шейдеров в играх). Сейчас, после появления SM3 и поддерживающих их видеочипов, возможности пиксельных шейдеров доросли уже до того, чтобы с их помощью делать даже трассировку лучей (raytracing), пусть пока с некоторыми ограничениями.

Примеры применения пиксельных шейдеров:

Procedural Textures (Процедурные Текстуры)

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

Clouds Clouds Преимущества процедурных текстур также включают в себя неограниченный уровень детализации каждой текстуры, пикселизации просто не будет, текстура как бы всегда генерируется под необходимый для ее отображения размер. Большой интерес представляет и анимированный Normal Mapping, с его помощью можно сделать волны на воде, без применения предпросчитанных анимированных текстур. Еще один плюс таких текстур в том, что чем больше их применяется в продукте, тем меньше работы для художников (правда, больше для программистов) над созданием обычных текстур.К сожалению, процедурные текстуры не получили пока должного применения в играх, в реальных приложениях до сих пор зачастую проще загрузить обычную текстуру, объемы видеопамяти растут не по дням, а по часам, в самых современных ускорителях ставят уже 512 мегабайт выделенной видеопамяти, которую надо чем-то занимать. Более того, до сих пор чаще делают наоборот — для ускорения математики в пиксельных шейдерах используют lookup tables (LUT) — специальные текстуры, содержащие заранее просчитанные значения, получаемые в результате вычислений. Чтобы не считать для каждого пикселя несколько математических команд, просто читают заранее вычисленные значения из текстуры. Но чем дальше, тем сильнее акцент должен смещаться именно в сторону математических вычислений, взять те же видеочипы ATI нового поколения: RV530 и R580, у которых на каждые 4 и 16 текстурных блоков приходится 12 и 48 пиксельных процессоров, соответственно. Тем более, если речь о 3D текстурах, ведь если двухмерные текстуры без проблем можно разместить в локальной памяти ускорителя, то 3D текстуры требуют ее намного больше.

Примеры процедурных текстур:

D3D RightMark Lightwave

Bump Mapping/Specular Bump Mapping

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

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

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

Для продолжения необходимо напомнить о составляющих освещения. Цвет точки поверхности рассчитывается как сумма ambient, diffuse и specular составляющих от всех источников света в сцене (в идеале от всех, зачастую многими пренебрегают). Вклад в это значение от каждого источника света зависит от расстояния между источником света и точкой на поверхности.
Составляющие освещения:

Lighting А теперь добавим к этому бампмаппинг: Bumpmapping Равномерная (ambient) составляющая освещения — аппроксимация глобального освещения, «начальное» освещение для каждой точки сцены, при котором все точки освещаются одинаково и освещенность не зависит от других факторов.
Диффузная (diffuse) составляющая освещения зависит от положения источника освещения и от нормали поверхности. Эта составляющая освещения разная для каждой вершины объекта, что придает им объем. Свет уже не заполняет поверхность одинаковым оттенком.
Бликовая (specular) составляющая освещения проявляется в бликах отражения лучей света от поверхности. Для ее расчета, помимо вектора положения источника света и нормали, используются еще два вектора: вектор направления взгляда и вектор отражения. Specular модель освещения впервые предложил Фонг (Phong Bui-Tong). Эти блики существенно увеличивают реалистичность изображения, ведь редкие реальные поверхности не отражают свет, поэтому specular составляющая очень важна. Особенно в движении, потому что по бликам сразу видно изменение положения камеры или самого объекта. В дальнейшем, исследователи придумывали иные способы вычисления этой составляющей, более сложные (Blinn, Cook-Torrance, Ward), учитывающие распределение энергии света, его поглощение материалами и рассеивания в виде диффузной составляющей.
Итак, Specular Bump Mapping получается таким образом: Bumpmapping И посмотрим то же самое на примере игры, Call of Duty 2:

Call of Duty 2
Первый фрагмент картинки — рендеринг без бампмаппинга (нормалмаппинга) вообще, второй (справа-сверху) — бампмаппинг без бликовой составляющей, третий — с бликовой составляющей нормальной величины, какая используется в игре, и последний, справа-снизу — с максимально возможным значением specular составляющей.Что касается первого аппаратного применения, то некоторые виды бампмаппинга (Emboss Bump Mapping) стали использовать еще во времена видеокарт на базе чипов NVIDIA Riva TNT, однако техники того времени были крайне примитивны и широкого применения не получили. Следующим известным типом стал Environment Mapped Bump Mapping (EMBM), но аппаратной его поддержкой в DirectX в то время обладали только видеокарты Matrox, и опять применение было сильно ограничено. Затем появился Dot3 Bump Mapping и видеочипы того времени (GeForce 256 и GeForce 2) требовали три прохода для того, чтобы полностью выполнить такой математический алгоритм, так как они ограничены двумя одновременно используемыми текстурами. Начиная с NV20 (GeForce3), появилась возможность делать то же самое за один проход при помощи пиксельных шейдеров. Дальше — больше. Стали применять более эффективные техники, такие как Normal Mapping.Примеры применения бампмаппинга в играх:

Evolva RSC

Displacement Mapping

Наложение карт смещения (Displacement Mapping) является методом добавления деталей к трехмерным объектам. В отличие от бампмаппинга и других попиксельных методов, когда картами высот правильно моделируется только освещенность точки, но не изменяется ее положение в пространстве, что дает лишь иллюзию увеличения сложности поверхности, карты смещения позволяют получить настоящие сложные 3D объекты из вершин и полигонов, без ограничений, присущих попиксельным методам. Этот метод изменяет положение вершин треугольников, сдвигая их по нормали на величину, исходя из значений в картах смещения. Карта смещения (displacement map) — это обычно черно-белая текстура, и значения в ней используются для определения высоты каждой точки поверхности объекта (значения могут храниться как 8-битные или 16-битные числа), схоже с bumpmap. Часто карты смещения используются (в этом случае они называются и картами высот) для создания земной поверхности с холмами и впадинами. Так как рельеф местности описывается двухмерной картой смещения, его относительно легко деформировать при необходимости, так как это потребует всего лишь модификации карты смещения и рендеринга на ее основе поверхности в следующем кадре.

Наглядно создание ландшафта при помощи наложения карт смещения представлено на картинке. Исходными были 4 вершины и 2 полигона, в итоге получился полноценный кусок ландшафта.
Displacement Mapping Большим преимуществом наложения карт смещения является не просто возможность добавления деталей к поверхности, а практически полное создание объекта. Берется низкополигональный объект, разбивается (тесселируется) на большее количество вершин и полигонов. Вершины, полученные в результате тесселяции, затем смещаются по нормали, исходя из значения, прочитанного в карте смещения. Получаем в итоге сложный 3D объект из простого, используя соответствующую displacement карту:
Displacement Mapping
Количество треугольников, созданных при тесселяции, должно быть достаточно большим для того, чтобы передать все детали, задаваемые картой смещений. Иногда дополнительные треугольники создаются автоматически, используя N-патчи или другие методы. Карты смещения лучше использовать совместно с бампмаппингом для создания мелких деталей, где достаточно правильного попиксельного освещения.Наложение карт смещения впервые получило поддержку в DirectX 9.0. Это была первая версия данного API, которая поддержала технику Displacement Mapping. В DX9 поддерживается два типа наложения карт смещения, filtered и presampled. Первый метод был поддержан забытым уже видеочипом MATROX Parhelia, а второй — ATI RADEON 9700. Filtered метод отличается тем, что позволяет использовать мип-уровни для карт смещения и применять для них трилинейную фильтрацию. В таком методе мип-уровень карты смещения выбирается для каждой вершины на основе расстояния от вершины до камеры, то есть уровень детализации выбирается автоматически. Таким образом достигается почти равномерное разбиение сцены, когда треугольники имеют примерно одинаковый размер.Наложение карт смещения можно по существу считать методом сжатия геометрии, использование карт смещения снижает объем памяти, требуемый для определенной детализации 3D модели. Громоздкие геометрические данные замещаются простыми двухмерными текстурами смещения, обычно 8-битными или 16-битными. Это снижает требования к объему памяти и пропускной способности, необходимой для доставки геометрических данных к видеочипу, а эти ограничения являются одними из главных для сегодняшних систем. Или же, при равных требованиях к пропускной способности и объему памяти, наложение карт смещения позволяет использовать намного более сложные геометрически 3D модели. Применение моделей значительно меньшей сложности, когда вместо десятков или сотен тысяч треугольников используют единицы тысяч, позволяет еще и ускорить их анимацию. Или же улучшить, применив более сложные комплексные алгоритмы и техники, вроде имитации тканей (cloth simulation).

Другое преимущество в том, что применение карт смещения превращает сложные полигональные трехмерные сетки в несколько двухмерных текстур, которые проще поддаются обработке. Например, для организации Level of Detail можно использовать обычный мип-маппинг для наложения карт смещения. Также, вместо сравнительно сложных алгоритмов сжатия трехмерных сеток можно применять привычные методы сжатия текстур, даже JPEG-подобные. А для процедурного создания 3D объектов можно использовать обычные алгоритмы для двухмерных текстур.

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

В качестве примера из реальных игр приведу игру, в которой используется выборка текстур из вершинного шейдера, возможность, появившаяся в видеочипах NVIDIA NV40 и шейдерной модели 3.0. Вершинное текстурирование можно применить для полностью выполняемого видеочипом простого метода наложения карт смещения, без тесселяции (разбиения на большее количество треугольников). Применение такому алгоритму ограничено, они имеют смысл, только если карты будут динамическими, то есть, будут изменяться в процессе. Например, это рендеринг больших водных поверхностей, что и сделано в игре Pacific Fighters:

DM off DM on

Normal Mapping

Нормалмаппинг — это улучшенная разновидность техники бампмаппинга, описанной ранее, расширенная ее версия. Бампмаппинг был разработан Блинном (Blinn) еще в 1978 году, нормали поверхности при этом методе наложения рельефа изменяются на основе информации из карт высот (bump map). В то время как бампмаппинг всего лишь изменяет существующую нормаль для точек поверхности, нормалмаппинг полностью заменяет нормали при помощи выборки их значений из специально подготовленной карты нормалей (normal map). Эти карты обычно являются текстурами с сохраненными в них заранее просчитанными значениями нормалей, представленными в виде компонент цвета RGB (впрочем, есть и специальные форматы для карт нормалей, в том числе со сжатием), в отличие от 8-битных черно-белых карт высот в бампмаппинге.

В общем, как и бампмаппинг, это тоже «дешевый» метод для добавления детализации к моделям сравнительно низкой геометрической сложности, без использования большего количества реальной геометрии, только более продвинутый. Одно из наиболее интересных применений техники — существенное увеличение детализации низкополигональных моделей при помощи карт нормалей, полученных обработкой такой же модели высокой геометрической сложности. Карты нормалей содержат более подробное описание поверхности, по сравнению с бампмаппингом и позволяют представить более сложные формы. Идеи по получению информации из высокодетализированных объектов были озвучены в середине 90-х годов прошлого века, но тогда речь шла об использовании для Displacement Mapping. Позднее, в 1998 году, были представлены идеи о перенесении деталей в виде карт нормалей от высокополигональных моделей в низкополигональные.

Normal Mapping Карты нормалей предоставляют более эффективный способ для хранения подробных данных о поверхностях, по сравнению с простым использованием большого количества полигонов. Единственное серьезное их ограничение в том, что они не очень хорошо подходят для крупных деталей, ведь нормалмаппинг на самом деле не добавляет полигонов и не изменяет форму объекта, он только создает видимость этого. Это всего лишь симуляция деталей, на основе расчета освещения на пиксельном уровне. На крайних полигонах объекта и больших углах наклона поверхности это очень хорошо заметно. Поэтому наиболее разумный способ применения нормалмаппинга состоит в том, чтобы сделать низкополигональную модель достаточно детализированной для того, чтобы сохранялась основная форма объекта, и использовать карты нормалей для добавления более мелких деталей.Карты нормалей обычно создаются на основе двух версий модели, низко- и высокополигональной. Низкополигональная модель состоит из минимума геометрии, основных форм объекта, а высокополигональная содержит все необходимое для максимальной детализации. Затем, при помощи специальных утилит они сравниваются друг с другом, разница рассчитывается и сохраняется в текстуре, называемой картой нормалей. При ее создании дополнительно можно использовать и bump map для очень мелких деталей, которые даже в высокополигональной модели не смоделировать (поры кожи, другие мелкие углубления).

Карты нормалей изначально были представлены в виде обычных RGB текстур, где компоненты цвета R, G и B (от 0 до 1) интерпретируются как координаты X, Y и Z. Каждый тексель в карте нормалей представлен как нормаль точки поверхности. Карты нормалей могут быть двух видов: с координатами в model space (общей системе координат) или tangent space (термин на русском — «касательное пространство», локальная система координат треугольника). Чаще применяется второй вариант. Когда карты нормалей представлены в model space, то они должны иметь три компоненты, так как могут быть представлены все направления, а когда в локальной системе координат tangent space, то можно обойтись двумя компонентами, а третью получить в пиксельном шейдере.

Bump Maps - Normal Maps Современные приложения реального времени до сих пор сильно проигрывают пререндеренной анимации по качеству изображения, это касается, прежде всего, качества освещения и геометрической сложности сцен. Количество вершин и треугольников, рассчитываемых в реальном времени, ограничено. Поэтому очень важны методы, позволяющие снизить количество геометрии. До нормалмаппинга были разработаны несколько таких методов, но низкополигональные модели даже с бампмаппингом получаются заметно хуже более сложных моделей. Нормалмаппинг хоть и имеет несколько недостатков (самый явный — так как модель остается низкополигональной, это легко видно по ее угловатым границам), но итоговое качество рендеринга заметно улучшается, оставляя геометрическую сложность моделей низкой. В последнее время хорошо видно увеличение популярности данной методики и использование ее во всех популярных игровых движках. «Виной» этому — комбинация отличного результирующего качества и одновременное снижение требований к геометрической сложности моделей. Техника нормалмаппинга сейчас применяется почти повсеместно, все новые игры используют ее максимально широко. Вот лишь краткий список известных ПК игр с использованием нормалмаппинга: Far Cry, Doom 3, Half-Life 2, Call of Duty 2, F.E.A.R., Quake 4. Все они выглядят намного лучше, чем игры прошлого, в том числе из-за применения карт нормалей. Quake 4 UT2007 Есть лишь одно негативное последствие применения этой техники — увеличение объемов текстур. Ведь карта нормалей сильно влияет на то, как будет выглядеть объект, и она должна быть достаточно большого разрешения, поэтому требования к видеопамяти и ее пропускной способности удваиваются (в случае несжатых карт нормалей). Но сейчас уже выпускаются видеокарты с 512 мегабайтами локальной памяти, пропускная способность ее постоянно растет, разработаны методы сжатия специально для карт нормалей, поэтому эти небольшие ограничения не слишком важны, на самом деле. Гораздо больше эффект, который дает нормалмаппинг, позволяя использовать сравнительно низкополигональные модели, снижая требования к памяти для хранения геометрических данных, улучшая производительность и давая весьма достойный визуальный результат.

Parallax Mapping/Offset Mapping

После нормалмаппинга, разработанного еще в 1984 году, последовало рельефное текстурирование (Relief Texture Mapping), представленное Olivera и Bishop в 1999 году. Это метод для наложения текстур, основанный на информации о глубине. Метод не нашел применения в играх, но его идея способствовала продолжению работ над параллаксмаппингом и его улучшении. Kaneko в 2001 представил parallax mapping, который стал первым эффективным методом для попиксельного отображения эффекта параллакса. В 2004 году Welsh продемонстрировал применение параллаксмаппинга на программируемых видеочипах.

У этого метода, пожалуй, больше всего различных названий. Перечислю те, которые встречал: Parallax Mapping, Offset Mapping, Virtual Displacement Mapping, Per-Pixel Displacement Mapping. В статье для краткости применяется первое название.
Параллаксмаппинг — это еще одна альтернатива техникам бампмаппинга и нормалмаппинга, которая дает еще большее представление о деталях поверхности, более натуралистичное отображение 3D поверхностей, также без слишком больших потерь производительности. Это техника похожа одновременно на наложение карт смещения и нормалмаппинг, это нечто среднее между ними. Метод тоже предназначен для отображения большего количества деталей поверхности, чем есть в исходной геометрической модели. Он похож на нормалмаппинг, но отличие в том, что метод искажает наложение текстуры, изменяя текстурные координаты так, что когда вы смотрите на поверхность под разными углами, она выглядит выпуклой, хотя в реальности поверхность плоская и не изменяется. Иными словами, Parallax Mapping — это техника аппроксимации эффекта смещения точек поверхности в зависимости от изменения точки зрения.

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

Parallax Mapping Но использование обычного параллаксмаппинга ограничено картами высот с небольшой разницей значений. «Крутые» неровности обрабатываются алгоритмом некорректно, появляются различные артефакты, «плавание» текстур и пр. Было разработано несколько модифицированных методов для улучшения техники параллаксмаппинга. Несколько исследователей (Yerex, Donnelly, Tatarchuk, Policarpo) описали новые методы, улучшающие начальный алгоритм. Почти все идеи основаны на трассировке лучей в пиксельном шейдере для определения пересечений деталей поверхностей друг другом. Модифицированные методики получили несколько разных названий: Parallax Mapping with Occlusion, Parallax Mapping with Distance Functions, Parallax Occlusion Mapping. Для краткости будем их все называть Parallax Occlusion Mapping.Методы Parallax Occlusion Mapping включают еще и трассировку лучей для определения высот и учета видимости текселей. Ведь при взгляде под углом к поверхности тексели загораживают друг друга, и, учитывая это, можно добавить к эффекту параллакса больше глубины. Получаемое изображение становится реалистичнее и такие улучшенные методы можно применять для более глубокого рельефа, он отлично подходит для изображения кирпичных и каменных стен, мостовой и пр. Нужно особенно отметить, что главное отличие Parallax Mapping от Displacement Mapping в том, что расчеты все попиксельные, а не повершинные. Именно поэтому метод имеет названия вроде Virtual Displacement Mapping и Per-Pixel Displacement Mapping. Посмотрите на картинку, трудно поверить, но камни мостовой тут — всего лишь попиксельный эффект:

Parallax Mapping Метод позволяет эффективно отображать детализированные поверхности без миллионов вершин и треугольников, которые потребовались бы при реализации этого геометрией. При этом сохраняется высокая детализация (кроме силуэтов/граней) и значительно упрощаются расчеты анимации. Такая техника дешевле, чем использование реальной геометрии, используется значительно меньшее количество полигонов, особенно в случаях с очень мелкими деталями. Применений алгоритму множество, а лучше всего он подходит для камней, кирпичей и подобного.Также, дополнительное преимущество в том, что карты высот могут динамически изменяться (поверхность воды с волнами, дырки от пуль в стенах и многое другое). В недостатках метода — отсутствие геометрически правильных силуэтов (краев объекта), ведь алгоритм попиксельный и не является настоящим displacement mapping. Зато он экономит производительность в виде снижения нагрузки на трансформацию, освещение и анимацию геометрии. Экономит видеопамять, необходимую для хранения больших объемов геометрических данных. В плюсах у техники и относительно простая интеграция в существующие приложения и использование в процессе работы привычных утилит, применяемых для нормалмаппинга.

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

F.E.A.R. TES4

Postprocessing (Постобработка)

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

Простой пример из фотографии: вы сфотографировали красивое озеро с зеленью при ясной погоде. Небо получается очень ярким, а деревья — слишком темными. Вы загружаете фотографию в графический редактор и начинаете изменять яркость, контраст и другие параметры для участков изображения или для всей картинки. Но вы уже не имеете возможности изменить настройки фотоаппарата, вы делаете обработку готового изображения. Это и есть постобработка. Или другой пример: выделение заднего плана в портретной фотографии и применение blur фильтра к этой области для эффекта depth of field с большей глубиной. То есть, когда вы изменяете или подправляете кадр в графическом редакторе, вы и делаете постобработку. То же самое может делаться и в игре, в реальном времени.

Существует множество разных возможностей по обработке изображения после его рендеринга. Все видели, наверное, в графических редакторах множество так называемых графических фильтров. Это как раз то, что называется постфильтрами: blur, edge detection, sharpen, noise, smooth, emboss и др. В применении к 3D рендерингу в реальном времени это делается так — вся сцена рендерится в специальную область, render target, и после основного рендеринга это изображение дополнительно обрабатывается при помощи пиксельных шейдеров и только потом выводится на экран. Из эффектов постобработки в играх чаще всего используют Bloom, Motion Blur, Depth Of Field. Существует и множество других постэффектов: noise, flare, distortion, sepia и др.

Вот парочка ярких примеров постобработки в игровых приложениях:

Xpand Rally Silent Hill 2

High Dynamic Range (HDR)

High Dynamic Range (HDR) в применении к 3D графике — это рендеринг в широком динамическом диапазоне. Суть HDR заключается в описании интенсивности и цвета реальными физическими величинами. Привычной моделью описания изображения является RGB, когда все цвета представлены в виде суммы основных цветов: красного, зеленого и синего, с разной интенсивностью в виде возможных целочисленных значений от 0 до 255 для каждого, закодированных восемью битами на цвет. Отношение максимальной интенсивности к минимальной, доступной для отображения конкретной моделью или устройством, называется динамическим диапазоном. Так, динамический диапазон модели RGB составляет 256:1 или 100:1 cd/m2 (два порядка). Эта модель описания цвета и интенсивности общепринято называется Low Dynamic Range (LDR).

Возможных значений LDR для всех случаев явно недостаточно, человек способен видеть гораздо больший диапазон, особенно при малой интенсивности света, а модель RGB слишком ограничена в таких случаях (да и при больших интенсивностях тоже). Динамический диапазон зрения человека от 10-6 до 108 cd/m2, то есть 100000000000000:1 (14 порядков). Одновременно весь диапазон мы видеть не можем, но диапазон, видимый глазом в каждый момент времени, примерно равен 10000:1 (четырем порядкам). Зрение приспосабливается к значениям из другой части диапазона освещенности постепенно, при помощи так называемой адаптации, которую легко описать ситуацией с выключением света в комнате в темное время суток — сначала глаза видят очень мало, но со временем адаптируются к изменившимся условиям освещения и видят уже намного больше. То же самое случается и при обратной смене темной среды на светлую.

Итак, динамического диапазона модели описания RGB недостаточно для представления изображений, которые человек способен видеть в реальности, эта модель значительно уменьшает возможные значения интенсивности света в верхней и нижней части диапазона. Самый распространенный пример, приводимый в материалах по HDR, — изображение затемненного помещения с окном на яркую улицу в солнечный день. С RGB моделью можно получить или нормальное отображение того, что находится за окном, или только того, что внутри помещения. Значения больше 100 cd/m 2 в LDR вообще обрезаются, это является причиной тому, что в 3D рендеринге трудно правильно отображать яркие источники света, направленные прямо в камеру.

Debevec Сами устройства отображения данных пока что серьезно улучшить нельзя, а отказаться от LDR при расчетах имеет смысл, можно использовать реальные физические величины интенсивности и цвета (или линейно пропорциональные), а на монитор выводить максимум того, что он сможет. Суть представления HDR в использовании значений интенсивности и цвета в реальных физических величинах или линейно пропорциональных и в том, чтобы использовать не целые числа, а числа с плавающей точкой с большой точностью (например, 16 или 32 бита). Это снимет ограничения модели RGB, а динамический диапазон изображения серьезно увеличится. Но затем любое HDR изображение можно вывести на любом средстве отображения (том же RGB мониторе), с максимально возможным качеством для него при помощи специальных алгоритмов tone mapping.HDR рендеринг позволяет изменять экспозицию уже после того, как мы отрендерили изображение. Дает возможность имитировать эффект адаптации человеческого зрения (перемещение из ярких открытых пространств в темные помещения и наоборот), позволяет выполнять физически правильное освещение, а также является унифицированным решением для применения эффектов постобработки (glare, flares, bloom, motion blur). Алгоритмы обработки изображения, цветокоррекцию, гамма-коррекцию, motion blur, bloom и другие методы постобработки качественней выполнять в HDR представлении.

HDR Motion Blur В приложениях 3D рендеринга реального времени (играх, в основном) HDR рендеринг начали использовать не так давно, ведь это требует вычислений и поддержки render target в форматах с плавающей точкой, которые впервые стали доступны только на видеочипах с поддержкой DirectX 9. Обычный путь HDR рендеринга в играх таков: рендеринг сцены в буфер формата с плавающей точкой, постобработка изображения в расширенном цветовом диапазоне (изменение контраста и яркости, цветового баланса, эффекты glare и motion blur, lens flare и подобные), применение tone mapping для вывода итоговой HDR картинки на LDR устройство отображения. Иногда используются карты среды (environment maps) в HDR форматах, для статических отражений на объектах, весьма интересны применения HDR в имитации динамических преломлений и отражений, для этого также могут использоваться динамические карты в форматах с плавающей точкой. К этому можно добавить еще лайтмапы (light maps), заранее рассчитанные и сохраненные в HDR формате. Многое из перечисленного сделано, например, в Half-Life 2: Lost Coast. Half-Life 2: Lost Coast HDR рендеринг очень полезен для комплексной постобработки более высокого качества, по сравнению с обычными методами. Тот же bloom будет выглядеть реалистичнее при расчетах в HDR модели представления. Например, как это сделано в игре Far Cry от Crytek, там используются стандартные методы HDR рендеринга: применение bloom фильтров, представленные Kawase и tone mapping оператор Reinhard. Far Cry К сожалению, в некоторых случаях разработчики игр могут скрывать под названием HDR просто фильтр bloom, рассчитываемый в обычном LDR диапазоне. И хотя большая часть в том, что сейчас делают в играх с HDR рендерингом, как раз и есть bloom лучшего качества, выгода от HDR рендеринга не ограничивается одним этим постэффектом, просто его сделать легче всего.Другие примеры применения HDR рендеринга в приложениях реального времени:

The Project 3DMark 06

Tone Mapping

Tone mapping — это процесс преобразования диапазона яркостей HDR к LDR диапазону, отображаемому устройством вывода, например, монитором или принтером, так как вывод HDR изображений на них потребует преобразования динамического диапазона и цветового охвата модели HDR в соответствующий динамический диапазон LDR, чаще всего модель RGB. Ведь диапазон яркости, представленный в HDR, очень широк, это несколько порядков абсолютного динамического диапазона единовременно, в одной сцене. А диапазон, который можно воспроизвести на привычных устройствах вывода (мониторах, телевизорах), составляет лишь около двух порядков динамического диапазона.

Преобразование из HDR в LDR и называется tone mapping, оно выполняется с потерями и имитирует свойства человеческого зрения. Такие алгоритмы принято называть операторами tone mapping. Операторы разделяют все значения яркости изображения на три разных типа: с темной, средней и яркой освещенностью. На основе оценки яркости средних тонов, корректируется общая освещенность, значения яркости пикселей сцены перераспределяются для того, чтобы войти в выходной диапазон, темные пиксели осветляются, а светлые затемняются. Затем, наиболее яркие пиксели изображения приводятся к диапазону устройства вывода или выходной модели представления. На следующей картинке изображено самое простое приведение HDR изображения к LDR диапазону, линейное преобразование, а к фрагменту в центре применен более сложный оператор tone mapping, работающий так, как было описано выше:

Tone Mapping Видно, что только с применением нелинейного tone mapping можно получить максимум деталей в изображении, а если приводить HDR к LDR линейно, то многие мелочи просто теряются. Единственно правильного алгоритма tone mapping нет, существует несколько операторов, дающих хорошие результаты в разных ситуациях. Вот наглядный пример двух разных операторов tone mapping: Tone Mapping Совместно с HDR рендерингом, с недавнего времени tone mapping начали применять в играх. Стало возможным опционально имитировать свойства человеческого зрения: потерю остроты в темных сценах, адаптацию к новым условиям освещения при переходах от очень ярких областей к темным и наоборот, чувствительность к изменению контраста, цвета… Вот так выглядит имитация способности зрения к адаптации в игре Far Cry. Первый скриншот показывает изображение, которое видит игрок, только что повернувшийся от темного помещения к ярко освещенному открытому пространству, а второй — то же изображение через пару секунд, после адаптации. Far Cry Far Cry

Bloom

Bloom — это один из кинематографических эффектов постобработки, при помощи которого наиболее яркие участки изображения делаются еще более яркими. Это эффект очень яркого света, проявляющийся в виде свечения вокруг ярких поверхностей, после применения bloom фильтра такие поверхности не просто получают дополнительную яркость, свет от них (ореол) частично воздействует и на более темные области, соседствующие с яркими поверхностями в кадре. Проще всего показать это на примере:
Most Wanted В 3D графике Bloom фильтр делается при помощи дополнительной постобработки — смешивания смазанного фильтром blur кадра (всего кадра или отдельных ярких его областей, фильтр обычно применяется несколько раз) и исходного кадра. Один из наиболее часто применяемых в играх и других приложениях реального времени алгоритм постфильтра bloom:

  • Сцена рендерится во фреймбуфер, интенсивность свечения (glow) объектов записывается в альфа-канал буфера.
  • Фреймбуфер копируется в специальную текстуру для обработки.
  • Разрешение текстуры уменьшается, например, в 4 раза.
  • К изображению несколько раз применяются фильтры сглаживания (blur), на основе данных об интенсивности, записанных в альфа-канал.
  • Полученное изображение смешивается с оригинальным кадром во фреймбуфере, и результат выводится на экран.

Как и другие виды постобработки, bloom лучше применять при рендеринге в широком динамическом диапазоне (HDR). Дополнительные примеры обработки конечного изображения bloom фильтром из 3D приложений реального времени:

3DMark 05 Splinter Cell

Motion Blur

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

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

Motion Blur По изображению без смазывания нельзя даже сказать, движутся сферы или нет, в то время как motion blur дает четкое представление о скорости и направлении движения объектов. Кстати, отсутствие смазывания при движении служит и причиной того, почему движение в играх при 25-30 кадрах в секунду кажется дерганым, хотя кино и видео при этих же параметрах частоты кадров смотрится прекрасно. Для компенсации отсутствия смазывания в движении желательна или высокая частота кадров (60 кадров в секунду или выше) или использование методов дополнительной обработки изображения, для эмуляции эффекта motion blur. Это применяется и для улучшения плавности анимации и для эффекта фото- и кинореалистичности одновременно.Самый простой алгоритм motion blur для приложений реального времени заключается в использовании для рендеринга текущего кадра данных из предыдущих кадров анимации. Но есть и более эффективные и современные методы motion blur, которые не используют предыдущие кадры, а основываются на векторах движения объектов в кадре, также добавляя лишь еще один шаг постобработки к процессу рендеринга. Эффект смазывания может быть как полноэкранным (обычно делается постобработкой), так и для отдельных, наиболее быстро движущихся объектов.

Возможные применения эффекта motion blur в играх: все гоночные игры (для создания эффекта очень высокой скорости движения и для применения при просмотре ТВ-образных повторов), спортивные игры (те же повторы, а в самой игре смазывание можно применять для очень быстро движущихся объектов, вроде мяча или шайбы), файтинги (быстрые движения холодного оружия, рук и ног), многие другие игры (во время внутриигровых трехмерных роликов на движке). Вот примеры применения постэффекта motion blur из игр:

Most Wanted Republic Commando

Depth Of Field (DOF)

Depth of field (глубина резкости), вкратце, это размывание объектов в зависимости от их положения относительно фокуса камеры. В реальной жизни, на фотографиях и в кино мы видим одинаково четко не все объекты, это связано с особенностью строения глаза и устройства оптики фото- и киноаппаратов. У фото- и кинооптики есть определенное расстояние, объекты, расположенные на таком расстоянии от камеры находятся в фокусе и выглядят на картинке резкими, а более удаленные от камеры или приближенные к ней объекты выглядят, наоборот, размытыми, резкость снижается постепенно при увеличении или снижении расстояния.

Depth of Field Как вы догадались, это фотография, а не рендеринг. В компьютерной же графике каждый объект отрендеренного изображения идеально четкий, так как линзы и оптика не имитируется при расчетах. Поэтому, для достижения фото- и кинореалистичности приходится применять специальные алгоритмы, чтобы сделать для компьютерной графики нечто похожее. Эти техники симулируют эффект разного фокуса для объектов, находящихся на разном расстоянии.Одним из распространенных методов при рендеринге в реальном времени является смешивание оригинального кадра и его смазанной версии (несколько проходов blur фильтра) на основе данных о глубине для пикселей изображения. В играх, для эффекта DOF есть несколько применений, например, это игровые ролики на движке игры, повторы в спортивных и гоночных играх. Примеры depth of field в реальном времени:

The Assassin Silent Hill 3

Level Of Detail (LOD)

Уровень детализации (level of detail) в 3D приложениях — это метод снижения сложности рендеринга кадра, уменьшения общего количества полигонов, текстур и иных ресурсов в сцене, общее снижение её сложности. Простой пример: основная модель персонажа состоит из 10000 полигонов. В тех случаях, когда в обрабатываемой сцене он расположен близко к камере, важно, чтобы использовались все полигоны, но на очень большом расстоянии от камеры в итоговом изображении он будет занимать лишь несколько пикселей, и смысла в обработке всех 10000 полигонов нет никакого. Возможно, в этом случае будет достаточно сотни полигонов, а то и пары штук и специально подготовленной текстуры для примерно такого же отображения модели. Соответственно, на средних расстояниях имеет смысл использовать модель, состоящую из количества треугольников большего, чем у самой простой модели, и меньшего, чем у наиболее сложной.

Метод LOD обычно используется при моделировании и рендеринге трехмерных сцен, с использованием нескольких уровней сложности (геометрической или какой-то иной) для объектов, пропорционально расстоянию от них до камеры. Метод часто используется разработчиками игр для снижения количества полигонов в сцене и для улучшения производительности. При близком расположении к камере используются модели с максимумом деталей (количество треугольников, размер текстур, сложность текстурирования), для максимально возможного качества картинки и наоборот, при удалении моделей от камеры используются модели с меньшим количеством треугольников — для увеличения скорости рендеринга. Изменение сложности, в частности, количества треугольников в модели, может происходить автоматически на основе одной 3D модели максимальной сложности, а может — на основе нескольких заранее подготовленных моделей с разным уровнем детализации. Используя модели с меньшей детализацией для разных расстояний, расчетная сложность рендеринга снижается, почти не ухудшая общую детализацию изображения.

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

Level of Detail Кроме расстояния от камеры, для LOD могут иметь значение и другие факторы — общее количество объектов на экране (когда один-два персонажа в кадре, то используются сложные модели, а когда 10-20, они переключаются на более простые) или количество кадров в секунду (задаются пределы значений FPS, при которых изменяется уровень детализации, например, при FPS ниже 30 снижаем сложность моделей на экране, а при 60, наоборот, повышаем). Другие возможные факторы, влияющие на уровень детализации — скорость перемещения объекта (ракету в движении вы рассмотреть вряд ли успеете, а вот улитку — запросто), важность персонажа с игровой точки зрения (тот же футбол взять — для модели игрока, которым управляете вы, можно использовать более сложную геометрию и текстуры, вы его видите ближе всего и чаще всего). Тут все зависит от желаний и возможностей конкретного разработчика. Главное — не переборщить, частые и заметные изменения уровня детализации раздражают.Напомню, что уровень детализации не обязательно относится только к геометрии, метод может применяться и для экономии других ресурсов: при текстурировании (хотя видеочипы и так используют мипмаппинг, иногда есть смысл менять текстуры на лету на другие, с иной детализацией), техник освещения (близкие объекты освещаются по сложному алгоритму, а дальние — по простому), техник текстурирования (на ближних поверхностях используется сложный параллаксмаппинг, а на дальних — нормалмаппинг) и т.п.

Пример из игры показать не так просто, с одной стороны, в той или мной мере LOD применяется почти в каждой игре, с другой — наглядно показать это не всегда получается, иначе было бы мало смысла в самом LOD.

LFS Но на данном примере все же видно, что ближайшая модель автомобиля имеет максимальную детализацию, следующие две-три машины тоже очень близки к этому уровню, а все дальние имеют видимые упрощения, вот лишь самые значительные: отсутствуют зеркала заднего вида, номерные знаки, стеклоочистители и дополнительная светотехника. А от самой дальней модели нет даже тени на дороге. Это и есть алгоритм level of detail в действии.

Global Illumination

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

Алгоритмы освещения можно разделить на две модели: прямое или локальное освещение и глобальное освещение (direct или local illumination и global illumination). Локальная модель освещения использует расчет прямой освещенности, свет от источников света до первого пересечения света с непрозрачной поверхностью, взаимодействие объектов между собой не учитывается. Хотя такая модель пытается компенсировать это добавлением фонового или равномерного (ambient) освещения, но это самая простая аппроксимация, сильно упрощенное освещение от всех непрямых лучей источников света, которое задает цвет и интенсивность освещения объектов в отсутствии прямых источников света.

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

Local vs global В глобальной модели освещения, global illumination, рассчитывается освещение с учетом влияния объектов друг на друга, учитываются многократные отражения и преломления лучей света от поверхностей объектов, каустика (caustics) и подповерхностное рассеивание (subsurface scattering). Эта модель позволяет получить более реалистичную картинку, но усложняет процесс, требуя заметно больше ресурсов. Существует несколько алгоритмов global illumination, мы вкратце рассмотрим radiosity (расчет непрямого освещения) и photon mapping (расчет глобального освещения на основе карт фотонов, предрассчитанных при помощи трассировки). Есть и упрощенные методы по симуляции непрямого освещения, такие, как изменение общей яркости сцены в зависимости от количества и яркости источников света в ней или использование большого количества точечных источников света, расставленных по сцене для имитации отраженного света, но все же это далеко от настоящего алгоритма GI.Алгоритм radiosity это процесс расчета вторичных отражений лучей света от одних поверхностей к другим, а также, от окружающей среды к объектам. Лучи от источников света трассируются до тех пор, пока сила их не снизится ниже определенного уровня или лучи достигнут определенного числа отражений. Это распространенная техника GI, вычисления обычно выполняются перед визуализацией, а результаты расчета можно использовать для рендеринга в реальном времени. Основные идеи radiosity основаны на физике теплового переноса. Поверхности объектов разбиваются на небольшие участки, называемые патчами, и принимается, что отраженный свет рассеивается равномерно во все стороны. Вместо расчета каждого луча для источников света, используется техника усреднения, разделяющая источники света на патчи, основываясь на уровнях энергии, которые они выдают. Эта энергия распределяется между патчами поверхностей пропорционально.

Еще один метод расчета глобальной освещенности предложен Henrik Wann Jensen, это метод фотонных карт photon mapping. Использование фотонных карт — это другой алгоритм расчета глобального освещения, основанный на трассировке лучей и используемый для имитации взаимодействия лучей света с объектами сцены. Алгоритмом рассчитываются вторичные отражения лучей, преломление света через прозрачные поверхности, рассеянные отражения. Этот метод состоит в расчете освещенности точек поверхности в два прохода. В первом выполняется прямая трассировка лучей света с вторичными отражениями, это предварительный процесс, выполняемый перед основным рендерингом. В этом методе рассчитывается энергия фотонов, идущих от источника света к объектам сцены. Когда фотоны достигают поверхности, точка пересечения, направление и энергия фотона сохраняются в кэш, называемый фотонной картой. Фотонные карты могут сохраняться на диске для последующего использования, чтобы не просчитывать их каждый кадр. Отражения фотонов просчитываются до тех пор, пока работа не останавливается после определенного количества отражений или при достижении определенной энергии. Во втором проходе рендеринга выполняется расчет освещения пикселей сцены прямыми лучами, с учетом данных, сохраненных в фотонных картах, энергия фотонов добавляется к энергии прямого освещения.

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

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

Существуют и приемлемые алгоритмы для имитации глобального освещения в динамике. Например, есть такой простой метод для использования в приложениях реального времени, для расчета непрямого освещения объекта в сцене: упрощенный рендеринг всех объектов с пониженной детализацией (за исключением того, для которого считают освещение), в кубическую карту низкого разрешения (ее также можно использовать для отображения динамических отражений на поверхности объекта), затем фильтрация этой текстуры (несколько проходов blur фильтра), и применение для освещения этого объекта данных из рассчитанной текстуры в качестве дополнения к прямому освещению. В случаях, когда динамический расчет слишком тяжел, можно обойтись статическими radiosity картами. Пример из игры MotoGP 2, на котором хорошо видно благотворное влияние даже такой простой имитации GI:

MotoGP 2 Напоследок еще один пример direct illumination против global illumination рендеринга, чтобы развеять оставшиеся сомнения о полезности вторичного освещения (источник света один, ambient освещение отсутствует): Direct Illumination Global Illumination

 

ixbt.com

Fast Ethernet

Fast Ethernet – спецификация IEЕЕ 802.3 u официально принятая 26 октября 1995 года определяет стандарт протокола канального уровня для сетей работающих при использовании как медного, так и волоконно-оптического кабеля со скоростью 100Мб/с. Новая спецификация является наследницей стандарта Ethernet IEЕЕ 802.3, используя такой же формат кадра, механизм доступа к среде CSMA/CD и топологию звезда. Эволюция коснулась нескольких элементов конфигурации средств физического уровня, что позволило увеличить пропускную способность, включая типы применяемого кабеля, длину сегментов и количество концентраторов.

Структура Fast Ethernet

Чтобы лучше понять работу и разобраться во взаимодействии элементов Fast Ethernet обратимся к рисунку 1.

Рисунок 1. Система Fast Ethernet

 

Подуровень управления логической связью (LLC)

В спецификации IEEE 802.3 u функции канального уровня разбиты на два подуровня: управления логической связью (LLC) и уровня доступа к среде (MAC), который будет рассмотрен ниже. LLC, функции которого определены стандартом IEEE 802.2, фактически обеспечивает взаимосвязь с протоколами более высокого уровня, (например, с IP или IPX), предоставляя различные коммуникационные услуги:

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

На передающей системе данные, переданные вниз от протокола Сетевого уровня, вначале инкапсулируются подуровнем LLC. Стандарт называет их Protocol Data Unit (PDU, протокольный блок данных). Когда PDU передается вниз подуровню MAC, где снова обрамляется заголовком и постинформацией, с этого момента технически его можно назвать кадром. Для пакета Ethernet это означает, что кадр 802.3 помимо данных Сетевого уровня содержит трехбайтовый заголовок LLC. Таким образом, максимально допустимая длина данных в каждом пакете уменьшается с 1500 до 1497 байтов.

Заголовок LLC состоит из трех полей:

  • DSAP (1 байт) Destination Service Access Point — точка доступа к сервису системы – получателя указывает, в каком месте буферов памяти системы-получателя следует разместить данные пакета.
  • SSAP (1 байт) Source Service Access Point — точка доступа к сервису системы — источника выполняет такие же функции для источника данных, размещенных в пакете, на передающей системе.
  • Поле управления (1 или 2 байта) указывает на тип сервиса, необходимого для данных в PDU и функций пакета. В зависимости от того, какой сервис нужно предоставить, поле управления может быть длиной 1 или 2 байта.

<!—*— Значения полей можно прочитать в приложении A.

—> В некоторых случаях кадры LLC играют незначительную роль в процессе сетевого обмена данными. Например, в сети, использующей TCP/IP наряду с другими протоколами, единственная функция LLC может заключаться в предоставлении возможности кадрам 802.3 содержать заголовок SNAP, подобно Ethertype указывающий протокол Сетевого уровня, которому должен быть передан кадр. В этом случае все PDU LLC задействуют ненумерованный информационный формат. Однако другие высокоуровневые протоколы требуют от LLC более расширенного сервиса. Например, сессии NetBIOS и несколько протоколов NetWare используют сервисы LLC с установлением соединения более широко.

Заголовок SNAP

Принимающей системе необходимо определить, какой из протоколов Сетевого уровня должен получить входящие данные. В пакетах 802.3 в рамках PDU LLC применяется еще один протокол, называемый Sub — Network Access Protocol (SNAP, протокол доступа к подсетям).

Заголовок SNAP имеет длину 5 байт и располагается непосредственно после заголовка LLC в поле данных кадра 802.3, как показано на рисунке. Заголовок содержит два поля.

Код организации. Идентификатор организации или производителя — это 3-байтовое поле, которое принимает такое же значение, как первые 3 байта МАС-адреса отправителя в заголовке 802.3.

Локальный код. Локальный код — это поле длиной 2 байта, которое функционально эквивалентно полю Ethertype в заголовке Ethernet II.

Подуровень согласования

Как было сказано ранее Fast Ethernet это эволюционировавший стандарт. MAC рассчитанный на интерфейс AUI, необходимо преобразовать для интерфейса MII, используемого в Fast Ethernet, для чего и предназначен этот подуровень.

Управление доступом к среде (MAC)

Каждый узел в сети Fast Ethernet имеет контроллер доступа к среде (Media AccessController — MAC). MAC имеет ключевое значение в Fast Ethernet и имеет три назначения:

  • определяет, когда узел может передать пакет;
  • пересылает кадры уровню PHY для преобразования в пакеты и передачи в среду;*
  • получает кадры из уровня PHY и передает обрабатывающему их программному обеспечению (протоколам и приложениям).*

Самым важным из трех назначений MAC является первое. Для любой сетевой технологии, которая использует общую среду, правила доступа к среде, определяющие, когда узел может передавать, являются ее основной характеристикой. Разработкой правил доступа к среде занимаются несколько комитетов IЕЕЕ. Комитет 802.3, часто именуемый комитетом Ethernet, определяет стандарты на ЛВС, в которых используются правила под названием CSMA/ CD (Carrier Sense Multiple Access with Collision Detection — множественный доступ с контролем несущей и обнаружением конфликтов).

CSMS/ CD являются правилами доступа к среде как для Ethernet, так и для Fast Ethernet. Именно в этой области две технологии полностью совпадают.

Поскольку все узлы в Fast Ethernet совместно используют одну и ту же среду, передавать они могут лишь тогда, когда наступает их очередь. Определяют эту очередь правила CSMA/ CD.

 

* — пересылка и получение кадров уровнем МАС будет рассмотрено в разделе «Взаимодействие узлов в сети»

CSMA/ CD

Контроллер MAC Fast Ethernet, прежде чем приступить к передаче, прослушивает несущую. Несущая существует лишь тогда, когда другой узел ведет передачу. Уровень PHY определяет наличие несущей и генерирует сообщение для MAC. Наличие несущей говорит о том, что среда занята и слушающий узел (или узлы) должны уступить передающему.

MAC, имеющий кадр для передачи, прежде чем передать его, должен подождать некоторый минимальный промежуток времени после окончания предыдущего кадра. Это время называется межпакетной щелью (IPG, interpacket gap) и продолжается 0,96 микросекунды, то есть десятую часть от времени передачи пакета обычной Ethernet со скоростью 10 Мбит/с (IPG — единственный интервал времени, всегда определяемый в микросекундах, а не во времени бита) рисунок 2.

Рисунок 2. Межпакетная щель

 

После окончания пакета 1 все узлы ЛВС обязаны подождать в течение времени IPG, прежде чем смогут передавать. Временной интервал между пакетами 1 и 2, 2 и 3 на рис. 2 — это время IPG. После завершения передачи пакета 3 ни один узел не имел материала для обработки, поэтому временной интервал между пакетами 3 и 4 длиннее, чем IPG.

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

Именно в этом заключается часть CSMA правил доступа к среде Fast Ethernet. Короче говоря, многие узлы имеют доступ к среде и используют несущую для контроля ее занятости.

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

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

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

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

Метод контроля несущей хорошо сочетать с функцией обнаружения коллизий. Коллизии все еще продолжают происходить, но на производительности сети это не отражается, так как узлы быстро избавляются от них. Группа DIX, разработав правила доступа к среде CSMA/CD для Ethernet, оформила их в виде простого алгоритма – рисунок 3.

Рисунок 3. Алгоритм работы CSMA/CD

 

Устройство физического уровня (PHY)

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

Подуровень кодирования (PCS)

Кодирует/декодирует данные поступающие от/к уровня MAC с использованием алгоритмов 4B/5B или 8B/6T.

Подуровни физического присоединения и зависимости от физической среды (PMА и PMD)

Подуровни РМА и PMD осуществляют связь между подуровнем PSC и интерфейсом MDI, обеспечивая формирование в соответствии с методом физического кодирования: NRZI или MLT-3.

Подуровень автопереговоров (AUTONEG)

Подуровень автопереговоров позволяет двум взаимодействующим портам автоматически выбирать наиболее эффективный режим работы: дуплексный или полудуплексный 10 или 100 Мб/с.

Физический уровень

Стандарт Fast Ethernet определяет три типа среды передачи сигналов Ethernet со скоростью 100 Мбит/с.

  • 100Base-TX — две витые пары проводов. Передача осуществляется в соответствии со стандартом передачи данных в витой физической среде, разработанным ANSI (American National Standards Institute — Американский национальный институт стандартов). Витой кабель для передачи данных может быть экранированным, либо неэкранированным. Использует алгоритм кодирования данных 4В/5В и метод физического кодирования MLT-3.
  • 100Base-FX — две жилы, волоконно-оптического кабеля. Передача также осуществляется в соответствии со стандартом передачи данных в волоконно-оптической среде, которой разработан ANSI. Использует алгоритм кодирования данных 4В/5В и метод физического кодирования NRZI.

Спецификации 100Base-TX и 100Base-FX известны также как 100Base-X

  • 100Base-T4 — это особая спецификация, разработанная комитетом IEEE 802.3u . Согласно этой спецификации, передача данных осуществляется по четырем витым парам телефонного кабеля, который называют кабелем UTP категории 3. Использует алгоритм кодирования данных 8В/6Т и метод физического кодирования NRZI.

Дополнительно стандарт Fast Ethernet включает рекомендации по использованию кабеля экранированной витой пары категории 1, который является стандартным кабелем, традиционно использующимся в сетях Token Ring. Организация поддержки и рекомендации по использованию кабеля STP в сети Fast Ethernet предоставляют способ перехода на Fast Ethernet для покупателей, имеющих кабельную разводку STP.

Спецификация Fast Ethernet включает также механизм автосогласования, позволяющий порту узла автоматически настраиваться на скорость передачи данных — 10 или 100 Мбит/с. Этот механизм основан на обмене рядом пакетов с портом концентратора или переключателя.

Среда 100Base-TX

В качестве среды передачи 100Base-TX применяются две витые пары, причем одна пара используется для передачи данных, а вторая — для их приема. Поскольку спецификация ANSI TP — PMD содержит описания как экранированных, так и неэкранированных витых пар, то спецификация 100Base-TX включает поддержку как неэкранированных, так и экранированных витых пар типа 1 и 7.

Разъем MDI (Medium Dependent Interface)

Интерфейс канала 100Base-TX, зависящий от среды, может быть одного из двух типов. Для кабеля на неэкранированных витых парах в качестве разъема MDI следует использовать восьмиконтактный разъем RJ 45 категории 5. Этот же разъем применяется и в сети 10Base-T, что обеспечивает обратную совместимость с существующими кабельными разводками категории 5. Для экранированных витых пар в качестве разъема MDI необходимо использовать разъем STP IBM типа 1, который является экранированным разъемом DB9. Такой разъем обычно применяется в сетях Token Ring.

Кабель UTP категории 5(e)*

В интерфейсе среды UTP 100Base-TX применяются две пары проводов. Для минимизации перекрестных наводок и возможного искажения сигнала оставшиеся четыре провода не должны использоваться с целью передачи каких-либо сигналов. Сигналы передачи и приема для каждой пары являются поляризованными, причем один провод передает положительный (+), а второй — отрицательный (-) сигнал. Цветовая маркировка проводов кабеля и номера контактов разъема для сети 100Base-TX приведены в табл. 1. Хотя уровень PHY 100Base-TX разрабатывался после принятия стандарта ANSI TP-PMD, однако номера контактов разъема RJ 45 были изменены для согласования со схемой разводки, уже использующейся в стандарте 10Base-T. В стандарте ANSI TP-PMD контакты 7 и 9 применяются для приема данных, в то время как в стандартах 100Base-TX и 10Base-T для этого предназначены контакты 3 и 6. Такая разводка обеспечивает возможность использования адаптеров 100Base-TX вместо адаптеров 10 Base — T и их подключения к тем же кабелям категории 5 без изменений разводки. В разъеме RJ 45 используемые пары проводов подключаются к контактам 1, 2 и 3, 6. Для правильного подключения проводов следует руководствоваться их цветовой маркировкой.

Таблица 1. Назначение контактов разъема MDI кабеля UTP 100Base-TX

Номер контакта Название сигнала Цвет провода
1 Передача + Белый/оранжевый
2 Передача — Оранжевый
3 Прием + Белый/зеленый
4 Не используется Синий
5 Не используется Белый/синий
6 Прием — Зеленый
7 Не используется
8 Не используется

* — Категория 5e была разработана позднее для Gigabit Ethernet (IEEE 802.ab) и отвечает всем требованием категории 5, что делает первую пригодной для Fast Ethernet.

Кабель STP типа 1

Стандарт 100Base-TX также поддерживает кабель на экранированных витых парах с полным сопротивлением 150 Ом. Этот кабель распространен не так широко, как кабель на неэкранированных витых парах, и обычно имеется в зданиях, оборудованных сетью Token Ring. Кабели на экранированных витых парах прокладывают согласно спецификации ANSI TP-PMD для кабеля на экранированных витых парах и используют для них девятиконтактный разъем типа D. В разъеме DB-9 применяются контакты 1, 2 и 5, 9. Если плата NIC не имеет разъема DB-9, то к концам кабеля STP необходимо подключить штекер RJ 45 категории 5 (табл. 2).

 

Таблица 2. Назначение контактов разъема MDI кабеля STP 100Base-TX

Номер контакта Название сигнала Цвет провода
1 Прием + Оранжевый
2 Не используется
3 Не используется
4 Не используется
5 Передача + Красный
6 Прием — Черный
7 Не используется
8 Не используется
9 Передача — Зеленый
10 Земля Оболочка кабеля

Среда 100Base-FX

В сетях стандарта 100Base-FX используется волоконно-оптический, длиной сегмента до 412 метров. Стандарт определяет, что в кабеле имеются две жилы многомодового волокна — одна для передачи, а другая для приема данных. Если NIC рабочей станции функционирует в полнодуплексном режиме, то длина кабеля может составить до 2000 метров. Волоконно-оптические кабели бывают двух категорий: многомодовые и одномодовые.

Многомодовый кабель

В волоконно-оптическом кабеле этого типа используется волокно с сердцевиной диаметром 50, либо 62,5 микрометра и внешней оболочкой толщиной 125 микрометров. Такой кабель называется многомодовым оптическим кабелем с волокнами 50/125 (62,5/125) микрометров. Для передачи светового сигнала по многомодовому кабелю применяется светодиодный приемопередатчик с длиной волны 850 (820) нанометров. Если многомодовый кабель соединяет два порта переключателей, работающих в полнодуплексном режиме, то он может иметь длину до 2000 метров.

Одномодовый кабель

Одномодовый волоконно-оптический кабель имеет меньший, чем у многомодового, диаметр сердцевины — 10 микрометра, и для передачи по одномодовому кабелю используется лазерный приемопередатчик, что в совокупности обеспечивает эффективную передачу на большие дистанции. Длина волны передаваемого светового сигнала близка к диаметру сердцевины, который равен 1300 нанометрам. Это число известно как длина волны нулевой дисперсии. В одномодовом кабеле дисперсия и потери сигнала очень незначительны, что позволяет передавать световые сигналы на большие расстояния, нежели в случае применения многомодового волокна.

Разъем MDI

Для подключения волоконно-оптического кабеля на данный момент созданы разъемы следующих типов:

  • MIC (Media Interface) используется в сетях FDDI. Для того чтобы обеспечить правильное подключение кабелей FDDI, разъемы помечаются буквами А, В, М и S. Буква обозначает, куда подключать штекер: к узлу или к определенному порту концентратора FDDI. Если в качестве разъема MDI 100Base-FX используется MlC FDDI, то спецификация IEЕЕ требует, чтобы этот разъем был маркирован буквой М;
  • ST;
  • SC – дуплексный разъем, единственный рекомендованный комитетом IEEE для употребления в сети 100Base-FX Fast Ethernet;
  • MT-RJ;

Среда 100Base-T4

100Base-T4 является единственным полностью новым стандартом уровня PHY в рамках стандарта 100Base-T, поскольку 100Base-TX и 100Base-FX были разработаны с использованием стандартов ANSI FDDI. Стандарт 100Base-T4 предназначался для организаций, у которых уже проложены кабели UTP категории 3 или 4. Спецификация 100Base-T4 поощряет использование кабелей категории 5 везде, где это возможно. Если в стенах здания проложены кабели UTP категории 3 или 4, то дополнительное использование кабелей категории 5 позволяет улучшить качество сигнала.

Разъем MDI

В сетях 100Base-T4 применяется неэкранированная витая пара категорий 3, 4 или 5. Используются четыре пары проводов, а это означает, что задействованы все восемь контактов разъема RJ45. Одна из четырех пар служит для передачи данных, другая — для приема, а две оставшиеся — для двунаправленной передачи данных. Три из четырех пар используются для одновременной передачи данных, а четвертая — для обнаружения коллизий. Один провод каждой пары передает положительный (+) сигнал, а другой — отрицательный (-) сигнал. Кабель 100Base-T4 не допускает работу в полнодуплексном режиме. Необходимо правильно подключить провода к контактам разъемов и не расплетать пары проводов.

Таблица 3. Назначение контактов разъема МDI кабеля UTP 100Base-T4

Номер контакта Название сигнала Цвет провода
1 TX D1 + Белый/оранжевый
2 TX D1 — Оранжевый
3 RX D2 + Белый/зеленый
4 BI D3 + Синий
5 BI D3 — Белый/синий
6 RX D2- Зеленый
7 BI D4 + Белый/коричневый
8 BI D4 — Коричневый

Ограничения длины кабеля

В сетях 100Base-TX уровень сигнала не так важен по сравнению со временем распространения сигналов. Механизм CSMA/CD в сети Fast Ethernet работает так же, как в сети Ethernet 10 Мбит/с, и пакеты имеют аналогичный размер, но их скорость распространения через среду передачи в десять раз выше. Из-за того, что механизм детектирования коллизий остался тем же, системы все еще должны выявлять возникновение коллизии прежде, чем истечет время состязания (то есть прежде, чем будут переданы 512 байт данных). Таким образом, поскольку трафик распространяется быстрее, временной зазор уменьшается, и максимальная длина сети также должна быть сокращена, чтобы выявление коллизий происходило безошибочно. По этой причине предельная общая длина сети 100Base-TX примерно составляет 210 м. Это значение необходимо соблюдать намного более жестко, чем максимум в 500 м для сети 10Base-T.

Когда планируется сеть, необходимо учитывать тот факт, что требование стандарта Fast Ethernet к максимальной длине сегмента кабеля в 100 м включает в себя всю длину кабеля, соединяющего компьютер с концентратором. Если кабельная разводка внутренняя и заканчивается на стороне компьютера настенной розеткой, а на стороне концентратора — коммутационной панелью, то в длину сегмента необходимо включить коммутационные кабели, соединяющие компьютер с розеткой и коммутационную панель с концентратором. Спецификация рекомендует брать максимальную длину для сегмента кабеля внутренней разводки, равной 90 м, оставляя 10 м для коммутационных кабелей.

Конфигурации концентраторов

Так как предельно допустимая длина для сегмента 100Base-TX составляет те же 100 м, что и для 10Base-T, ограничения на общую длину сети сказываются на конфигурации ретранслирующих концентраторов, используемых для соединения сегментов. Стандарт Fast Ethernet описывает два типа концентраторов для сетей 100Base-TX: класс I и класс II. Каждый концентратор Fast Ethernet должен иметь римскую цифру I или II, идентифицирующую его класс.

Концентраторы класса I предназначены для поддержки сегментов кабеля с различными типами передачи сигналов. 100Base-TX и 100Base-FX используют один и тот же тип передачи сигналов, в то время как 100Base-T4 — отличный от него (поскольку присутствуют две двунаправленные пары). Концентратор класса I содержит схему, которая переводит входящие сигналы 100Base-TX, 100Base-FX и 100Base-T4 в общий цифровой формат, а затем снова осуществляет конверсию в сигнал, соответствующий выходному порту концентратора. Указанные преобразования приводят к тому, что концентратор класса 1 вносит сравнительно большую задержку времени, и поэтому на пути между двумя любыми узлами в сети не должно быть больше одного концентратора этого класса.

Концентраторы класса II могут поддерживать сегменты кабеля только с одинаковыми средами передачи сигналов. Так как преобразований не производится, концентратор немедленно передает входящие данные на выходные порты. Из-за того, что временная задержка короче, между двумя любыми узлами в сети может быть установлено до двух концентраторов класса II, но при этом все сегменты должны использовать идентичную среду передачи сигналов. Это означает, что концентратор класса II может поддерживать либо 100Base-TX и 100Base-FX одновременно, либо отдельно 100Base-T4.

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

 

Таблица 4. Нормативы для многосегментной конфигурации Fast Ethernet

Один концентра­тор класса I Один концентра­тор класса II Два концентра­тора класса II
Все сегменты медные (100Base-TX или 100Base-T4) 200 метров 200 метров 205 метров
Все сегменты оптоволоконные (100Base-FX) 272 метра 320 метров 228 метров
Один сегмент 100Base-T4 и один сегмент 100Base-FX 231 метр Не применяется Не применяется
Один сегмент 100BaseTX и один сегмент 100Base-FX 260,8 метра 308,8 метра 216,2 метра

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

Преодоление ограничений топологии

Одним из наиболее часто критикуемых ограничений Fast Ethernet является диаметр сети, который не должен превышать 205 метров. Такое ограничение затрудняет прямую замену некоторых сетей Ethernet на Fast Ethernet. Поставщики других технологий, в частности Token Ring, 100 VG AnyLAN и FDDI, подчеркивают, что их технологии могут поддерживать сети гораздо большего диаметра. Это действительно так и первоначально ограничивало применение Fast Ethernet сетями рабочих групп и подразделений. Тем не менее такое ограничение топологии может быть легко преодолено путем использования переключателей и полнодуплексных волоконно-оптических связей.

Способом преодоления ограничений топологии является разбиение единой области коллизий на несколько при помощи переключателя. Диаметр сети Fast Ethernet, использующей медный кабель и повторитель Класса I, не может превысить 200 метров. Если мы добавим к этой сети единственный переключатель и установим повторители на различные порты, то максимальный диаметр полной переключаемой ЛВС возрастет до 400 метров.

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

Взаимодействие узлов сети

Узлы взаимодействуют друг с другом путем обмена кадрами (frames). В Fast Ethernet кадр является базовой единицей обмена по сети — любая информация, передаваемая между узлами, помещается в поле данных одного или нескольких кадров. Пересылка кадров от одного узла к другому возможна лишь при наличии способа однозначной идентификации всех узлов сети. Поэтому каждый узел в ЛВС имеет адрес, который называется его МАС-адресом. Этот адрес уникален: никакие два узла локальной сети не могут иметь один и тот же МАС-адрес. Более того, ни в одной из технологий ЛВС (за исключением ARCNet) никакие два узла в мире не могут иметь одинаковый МАС-адрес. Любой кадр содержит, по крайней мере, три основные порции информации: адрес получателя, адрес отправителя и данные. Некоторые кадры имеют и другие поля, но обязательными являются лишь три перечисленные. На рисунке 4 отражена структура кадра Fast Ethernet.

Адрес получателя Адрес отправителя Длина / Тип Данные Контроль­ная сумма кадра

6 байтов

6 байтов

2 байта

от 46 до 1500 байтов

4 байта

Рисунок 4. Структура кадра Fast Ethernet

  • адрес получателя — указывается адрес узла, получающего данные;
  • адрес отправителя — указывается адрес узла, пославшего данные;
  • длина/Тип (L/T — Length/Type) — содержится информация о типе передаваемых данных;
  • контрольная сумма кадра (PCS — Frame Check Sequence) — предназначена для проверки корректности полученного принимающим узлом кадра.

Минимальный объем кадра составляет 64 октета, или 512 битов (термины октет и байт — синонимы). Максимальный объем кадра равен 1518 октетам, или 12144 битам.

Адресация кадров

Каждый узел в сети Fast Ethernet имеет уникальный номер, который называется МАС-адресом (MAC address) или адресом узла. Этот номер состоит из 48 битов (6 байтов), присваивается сетевому интерфейсу во время изготовления устройства и программируется в процессе инициализации. Поэтому сетевые интерфейсы всех ЛВС, за исключением ARCNet, которая использует 8-битовые адреса, присваиваемые сетевым администратором, имеют встроенный уникальный МАС-адрес, отличающийся от всех остальных МАС-адресов на Земле и присваиваемый производителем по согласованию с IEEE.

Чтобы облегчить процесс управления сетевыми интерфейсами, IEEE было предложено разделить 48-битовое поле адреса на четыре части, как показано на рисунке 5. Первые два бита адреса (биты 0 и 1) являются флажками типа адреса. Значение флажков определяет способ интерпретации адресной части (биты 2 — 47).

Рисунок 5. Формат МАС-адреса

 

Бит I/G называется флажком индивидуального/группового адреса и показывает, каким (индивидуальным или групповым) является адрес. Индивидуальный адрес присваивается только одному интерфейсу (или узлу) в сети. Адреса, у которых бит I/G установлен в 0 — это МАС-адреса или адреса узла. Если бит I/O установлен в 1, то адрес относится к групповым и обычно называется многопунктовым адресом (multicast address) или функциональным адресом (functional address). Групповой адрес может быть присвоен одному или нескольким сетевым интерфейсам ЛВС. Кадры, посланные по групповому адресу, получают или копируют все обладающие им сетевые интерфейсы ЛВС. Многопунктовые адреса позволяют послать кадр подмножеству узлов локальной сети. Если бит I/O установлен в 1, то биты от 46 до 0 трактуются как многопунктовый адрес, а не как поля U/ L, OUI и OUA обычного адреса. Бит U/L называется флажком универсального/местного управления и определяет, как был присвоен адрес сетевому интерфейсу. Если оба бита, I/O и U/ L, установлены в 0, то адрес является уникальным 48-битовым идентификатором, описанным ранее.

OUI (organizationally unique identifier — организационно уникальный идентификатор). IEEE присваивает один или несколько OUI каждому производителю сетевых адаптеров и интерфейсов. Каждый производитель отвечает за правильность присвоения OUA (organizationally unique address — организационно уникальный адрес), который должно иметь любое созданное им устройство.

При установке бита U/L адрес является локально управляемым. Это означает, что он задается не производителем сетевого интерфейса. Любая организация может создать свой МАС-адрес сетевого интерфейса путем установки бита U/ L в 1, а битов со 2-го по 47-й в какое-нибудь выбранное значение. Сетевой интерфейс, получив кадр, первым делом декодирует адрес получателя. При установлении в адресе бита I/O уровень MAC получит этот кадр лишь в том случае, если адрес получателя находится в списке, который хранится на узле. Этот прием позволяет одному узлу отправить кадр многим узлам.

Существует специальный многопунктовый адрес, называемый широковещательным адресом. В 48-битовом широковещательном IEEE-адресе все биты установлены в 1. Если кадр передается с широковещательным адресом получателя, то все узлы сети получат и обработают его.

Поле Длина/Тип

Поле L/T (Length/Type — Длина/Тип) применяется в двух различных целях:

  • для определения длины поля данных кадра, исключая любое дополнение пробелами;
  • для обозначения типа данных в поле данных.

Значение поля L/T, находящееся в интервале между 0 и 1500, является длиной поля данных кадра; более высокое значение указывает на тип протокола.

Вообще поле L/T является историческим осадком стандартизации Ethernet в IEEE, породившим ряд проблем с совместимостью оборудования выпущенного до 1983. Сейчас Ethernet и Fast Ethernet никогда не использует поля L/T. Указанное поле служит лишь для согласования с программным обеспечением, обрабатывающим кадры (то есть с протоколами). Но единственным подлинно стандартным предназначением поля L/T является использование его в качестве поля длины — в спецификации 802.3 даже не упоминается о возможном его применении как поля типа данных. Стандарт гласит: «Кадры со значением поля длины, превышающим определенное в пункте 4.4.2, могут быть проигнорированы, отброшены или использованы частным образом. Использование данных кадров выходит за пределы этого стандарта».

Подводя итог сказанному, заметим, что поле L/T является первичным механизмом, по которому определяется тип кадра. Кадры Fast Ethernet и Ethernet, в которых значением поля L/T задается длина (значение L/T < 1500), называются кадрами 802.3, кадры, в которых значением этого же поля устанавливается тип данных (значение L/T > 1500), называются кадрами EthernetII или DIX.

Поле данных

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

Если необходимо переслать данные длиной менее 46 байтов, уровень LLC добавляет в их конец байты с неизвестным значением, называемые незначащими данными (pad data). В результате длина поля становится равной 46 байтам.

Если кадр имеет тип 802.3, то в поле L/T указывается значение объема действительных данных. Например, если пересылается 12-байтовое сообщение, то поле L/T хранит значение 12, а в поле данных находятся и 34 добавочных незначащих байта. Добавление незначащих байтов инициирует уровень LLC Fast Ethernet, и обычно реализуется аппаратно.

Средства уровня MAC не задают содержимое поля L/T — это делает программное обеспечение. Установка значения этого поля почти всегда производится драйвером сетевого интерфейса.

Контрольная сумма кадра

Контрольная сумма кадра (PCS — Frame Check Sequence) позволяет убедиться в том, что полученные кадры не повреждены. При формировании передаваемого кадра на уровне MAC используется специальная математическая формула CRC (Cyclic Redundancy Check — циклический избыточный код), предназначенная для вычисления 32-разрядного значения. Полученное значение помещается в поле FCS кадра. На вход элемента уровня MAC, вычисляющего CRC, подаются значения всех байтов кадра. Поле FCS является первичным и наиболее важным механизмом обнаружения и исправления ошибок в Fast Ethernet. Начиная с первого байта адреса получателя и заканчивая последним байтом поля данных.

Приложение A

Значения полей DSAP и SSAP

Значения DSAP/SSAP Описание
00000000 00000000 0 Null LSAP
01000000 00000010 2 Indiv LLC Sublayer Mgt
11000000 00000011 3 Group LLC Sublayer Mgt
00100000 00000100 4 SNA Path Control
01100000 00000110 6 Reserved (DOD IP)
01110000 00001110 14 PROWAY-LAN
01110010 01001110 78 EIA-RS 511
01111010 01011110 94 ISI IP
01110001 10001110 142 PROWAY-LAN
01010101 10101010 170 SNAP
00000111 11100000 208 IPX (Nowell)
01111111 11111110 254 ISO CLNS IS 8473
11111111 11111111 255 Global DSAP

Поле управления

По значениям префиксных битов выделяют три формата поля контроля:

  • Информационный формат начинается с бита со значением 0.
  • Управляющий формат имеет двухбитовый префикс со значением 1 и 0.
  • Ненумерованный формат начинается с двух битов со значением 1.

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

  • UI (Unnumbered Information, передача данных). Используется сервисом без установления соединения и подтверждения для отправки кадров данных.
  • XID (Exchange Identification, идентификация). Вырабатывается сервисами с установлением соединения и без такового в качестве, как команды, так и ответа.
  • TEST (диагностика). Применяется как команда и как ответ при выполнении теста методом петлевого контроля (loopback test) LLC.
  • FRMR (Frame Reject, отклонение кадра). Выдается как ответ в случае возникновения сбоев в работе протокола.
  • SABME (Set Asynchronous Balanced Mode Extended, запрос на соединение). Посылается как запрос на установление соединения.
  • UA (Unnumbered Acknowledgment, подтверждение). Является положительным ответом на сообщение SABME.
  • DM (Disconnect Mode, задержка соединения и разъединения). Возвращается как отрицательный ответ на сообщение SABME.
  • DISC (Disconnect, разъединение). Передается как запрос на завершение соединения. В качестве ответа ожидается либо UA, либо DM.

Информационные кадры содержат действительные данные, передаваемые как во время сеансов с установлением соединения, так и сессий без установления соединения с подтверждениями, а также сообщения подтверждения приема, возвращаемые принимающей системой. Только два типа сообщений передаются в информационных кадрах: N(S) и N(R) для отправленных и полученных сообщений соответственно. Обе системы отслеживают последовательность номеров пакетов, которыми они обмениваются. Сообщение N(S) информирует получателя о том, какое количество пакетов из последовательности было уже отправлено, а сообщение N(R) позволяет отправителю иметь информацию о том, какой из пакетов ожидается для приема.

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

  • RR (Receiver Ready, готовность приемника). Используется для информирования отправителя о том, что соединение действующее, и получатель готов к приему следующего кадра.
  • RNR (Receiver Not Ready, приемник не готов). Требует от отправителя не передавать пакеты до тех пор, пока получатель не отправит сообщение RR. 1
  • REJ (Frame Reject, данные отброшены). Сообщает передающей системе об ошибке и требует повторной передачи всех кадров, отправленных noj еле определенного момента.

Алгоритм 4B/5B

Выполняет предобразование 4 Bit-to-5 Bit. Полученная избыточность кода позволяет использовать специальные комбинации для управления потоком и проверки подлинности принятой комбинации. Однако применение такого кода увеличивает частоту передаваемого сигнала до 125 МГц.

Таблица комбинации управления потоком

Комбинация Символьное значение Назначение
1100010001 JK Ограничитель начала потока
0110100111 TR Ограничитель завершения потока
11111 I dle Заполнитель между потоками

Таблица кодировки символов

Линейный код Символ
11110 0
01001 1
10100 2
10101 3
01010 4
01011 5
01110 6
01111 7
10010 8
10011 9
10110 A
10111 B
11010 C
11011 D
11100 E
11101 F

Принятые комбинации несоответствующие вышеописанным считаются ошибочными.

Алгоритм 8B/6T

Алгоритм кодирования 8В6Т преобразует восьмибитовый октет данных (8B) в шестибитовый тернарный символ (6T). Кодовые группы 6Т предназначены для передачи параллельно по трем витым парам кабеля, поэтому эффективная скорость передачи данных по каждой витой паре составляет одну треть от 100 Мбит/с, то есть 33,33 Мбит/с. Скорость передачи тернарных символов по каждой витой паре составляет 6/8 от 33,3 Мбит/с, что соответствует тактовой частоте 25 МГц. Именно с такой частотой работает таймер интерфейса МП. В отличие от бинарных сигналов, которые имеют два уровня, тернарные сигналы, передаваемые по каждой паре, могут иметь три уровня.

 

Таблица кодировки символов

Линейный код Символ
-+00-+ 0
0-+-+0 1
0-+0-+ 2
0-++0- 3
-+0+0- 4
+0—+0 5
+0-0-+ 6
+0-+0- 7
-+00+- 8
0-++-0 9
0-+0+- A
0-+-0+ B
-+0-0+ C
+0-+-0 D
+0-0+- E
+0 — 0+ F

Метод кодирования NRZI

NRZI – Non Return to Zero Invertive (инверсное кодирование без возврата к нулю) Этот метод является модифицированным методом Non Return to Zero (NRZ), где для представления 1 и 0 используются потенциалы двух уровней. В коде NRZ I также используется 2 потенциала, но его текущее значение зависит от предыдущего. Если текущее значение бита “1”, то полученный потенциал должен быть инверсией от предыдущего, если значение бита “0” – такой же.

 

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

Метод кодирования MLT-3

MLT-3 Multi Level Transmission – 3 (многоуровневая передача) — немного схож с кодом NRZ, но в отличии от последнего имеет три уровня сигнала.

Единице соответствует переход с одного уровня сигнала на другой, причем изменение уровня сигнала происходит последовательно с учетом предыдущего перехода. При передаче “нуля” сигнал не меняется.

Этот код, так же как и NRZ нуждается в предварительном кодировании.

Составлено по материалам:

  1. Лаем Куин, Ричард Рассел «Fast Ethernet»;
  2. К. Заклер «Компьютерные сети»;
  3. В.Г. и Н.А. Олифер «Компьютерные сети»;

7 комментариев

9 09 2007
Индеец

Я только что понял, что хочу поменяться с Вами ссылками из блогролла =)

3 12 2018
Josephnon

Я не могу знать какой в Вашем городе медицинский центр хороший, но вот Я был тут http://kinezislife.ru/ — Превосходный Медицинский центр “Кинезис Лайф”

Хочу выразить свою благодарность всем сотрудникам медицинского центра КИНЕЗИС. Они в буквальном смысле слова поставили меня на ноги и подарили мне вторую жизнь.

16 03 2010
diabdialserce

Не падай духом где попало.

19 02 2016
spoilerokmi

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

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

даты выхода сериалов

29 08 2017
Tamkehaw

Par quel utile topic
salmon

8 09 2018
sadiewj1

My cool engagement:
http://fred.blogs.telrock.org

17 05 2019
bilousplepe

займ под проценты онлайн на карту: https://citycredits.com.ua/alexcredit/

Ответить на Индеец Отменить ответ