Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Архитектура компьютера

Книги про архитектуру компьютеров:

  • Паттерсон Д., Хеннесси Дж. Архитектура компьютеров и проектирование компьютерных систем (4-е изд. 2012)
  • Рэндал Э. Брайант.Дэвид Р. О'Халларон. Компьютерные системы:архитектура и программирование (3 изд)
  • Таненбаум Эндрю, Остин Т. Архитектура компьютера (6 изд)

Паттерсон Д., Хеннесси Дж. - Архитектура компьютеров и проектирование компьютерных систем. 4-е изд. 2012

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

Главу 2, скорее всего, можно считать обзорным материалом для тех, кого больше интересует оборудование, но она также является обязательной к прочтению теми, кого больше интересует программное обеспечение, особенно она полезна тем читателям, которые интересуются углубленным изучением ком­пиляторов и объектно-ориентированных языков программирования. В эту главу включен материал из главы 3 третьего издания, поэтому вся архитектура MIPS, за исключением инструкций для работы с числами с плавающей точкой, теперь изложена в одной главе.

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

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

Главу 5 Анализ иерархии памяти

Главу 6 важно прочитать тем, кого больше интересует программное обеспечение, а всем остальным ее нужно прочитать при наличии времени.

Последняя глава, посвященная многоядерности, мультипроцес­сорам и кластерам, должна быть прочитана всеми.


Переход от языка высокого уровня к языку оборудования

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

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

Например, программист мог написать следующее: add A B, а ассемблер мог перевести эту запись в код: 1000110010100000

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

Компилятор позволяет программисту написать следующее выражение на языке высокого уровня:

Программа на языке высокого уровня C:

swap(int v[], int k)
{
    int temp;
    temp = v[k];
    v[k] = v[k+1];
    v[k+1] = temp;
}

Программа на языке ассемблера (для MIPS процессора):

swap:
    muli $2, $5, 4
    add  $2, $4, $2
    lw   $15, 0($2)
    lw   $16, 4($2)
    sw   $16, 0($2)
    sw   $15, 4($2)
    jr   $31

Двоичная программа на машинном языке (для MIPS процессора):

00000000101000010000000000011000
00000000110000010000011000010001
10001100010111100000000000000000
10001100010100000000000000000100
10101100010100000000000000000000
10101100010111100000000000000100
00000011111000000000000000001000

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

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

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

Что скрывается под корпусом компьютера

Как аппаратное, так и программное обеспечение состоит из иерархических уров­ней, и каждый уровень скрывает подробности от вышестоящего уровня. Этот принцип абстракции является способом справиться со сложностью компьютерных систем, как для разработчиков аппаратной части, так и для разработчиков про­граммного обеспечения. Ключевым интерфейсом между уровнями абстракции является архитектура набора инструкций (ISA, Instruction Set Architecture) — интерфейс между аппаратурой и низ­коуровневым программным обеспечением. Этот абстрактный интерфейс позво­ляет многим реализациям, разным по стоимости и производительности, работать с одинаковым программным обеспечением.

ISA скрывает внутреннее устройство процессора от программ.

Программа не знает:

  • сколько именно ядер;
  • какой кэш;
  • какой конвейер;
  • как реализовано выполнение команд внутри.

Она знает только:

  • какие инструкции доступны;
  • как они должны себя вести.

Сочетание основного набора инструкций ISA и интерфейса операционной системы, называ­ется двоичным интерфейсом приложений (ap­plication binary interface, ABI). ABI используют прикладные программи­сты для двоичной переносимости между компьютерами.

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

Технологии создания процессоров и памяти

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

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

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

Наприме, всё это интегральные микросхемы:

  • процессор,
  • память,
  • контроллер USB,
  • Wi-Fi чип

Процессор — это очень сложная интегральная микросхема (Улырабольшая интегральная схема).

Внутри процессора находятся:

  • арифметико-логическое устройство;
  • регистры;
  • кэш;
  • блок управления;
  • конвейеры выполнения инструкций.

Барьер потребляемой мощности

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

Массовые процессоры уперлись примерно в диапазон 3–4 ГГц в середине 2000-х. Дальше повышать частоту стало слишком тяжело из-за нагрева и энергопотребления. Например, у Intel Pentium 4 частоты быстро росли и дошли примерно до 3.8 ГГц, но архитектура стала очень горячей и неэффективной. После этого индустрия перешла к многоядерности: вместо одного ядра на 5–10 ГГц начали делать 2, 4, 8 и больше ядер на умеренных частотах около 2–4 ГГц. Даже современные процессоры обычно держатся примерно в этих пределах, только кратковременно поднимаются выше за счет турбо-режимов.

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

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

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


Рэндал Э. Брайант.Дэвид Р. О'Халларон.Компьютерные системы:архитектура и программирование (3 изд)