Изучение компьютерной архитектуры как программист [закрыто]

12

Обычно я сталкиваюсь с гуру в SO и других местах (инструкторы, авторы книг и т. Д.), Которые могут что-то сказать по- "This will cause alignment issues"другому или другие лакомые кусочки.

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

Есть ли у вас рекомендации для книг, которые проходят через низкоуровневые материалы, которые имеют отношение к программистам?

Samaursa
источник
4
Вы хотите "книги, которые проходят через вещи низкого уровня", но вы не хотите книги, которые слишком "низкого уровня"? Изучение архитектуры для некоторых программистов может быть чрезвычайно полезным. Аналог веб-разработчика, понимающего стек TCP / IP. Это никогда не будет настолько полезным, пока вы ДЕЙСТВИТЕЛЬНО не нуждаетесь в этом. \
Крис
1
@Chris: То, что я имел в виду, было «низкоуровневым для программистов» ... технически мы можем пойти так далеко, как полноценная CPU-архитектура, и, без сомнения, это будет полезно однажды, но, учитывая, что у всех нас есть ограниченное время, книга это преподает вещи низкого уровня, о которых все программисты должны знать, будет прекрасно.
Самаурса
В этом случае любая вводная книга направит вас в правильном направлении, где вы берете ее после того, как ваш выбор, основанный на необходимости или желании.
Крис
Тот, кто управляет автомобилем с автоматической коробкой передач, извлекает выгоду из знания того, что это такое и как оно работает во время вождения. Я полагаю, что вы стали лучшим программистом, научившись хотя бы немного программировать на ассемблере, точно так же, как я думаю, что вы станете лучшим водителем, когда научитесь «управлять палкой».
Уоррен П

Ответы:

16

Хорошим набором книг именно для этой цели является серия Рэндалла Хайда «Write Great Code» ( Vol.1 Vol. 2 ): подробное описание архитектуры машины с точки зрения того, что вам нужно знать для написания эффективного кода на языках высокого уровня ,

Килиан Фот
источник
К каким языкам высокого уровня это относится? Будет ли это включать Python, JavaScript, C #, Scala, например?
Работа
@Job - я не читал книги, но я бы сказал, что это применимо к любому, что может / может использовать такие преимущества, как многопоточность и 64-битная обработка. Работа с языками, которые вы упомянули, вероятно, сделает эти знания полезными (особенно если вы тоже являетесь администратором сервера или используете эти языки вне веб-среды).
Шона
Хайд - гуру ассемблера, поэтому для него «высокий уровень» в основном означает C. Но его содержание столь же важно для пользователей даже более высоких языков; Строки, вызовы процедур и т. Д. На аппаратном уровне не сильно отличаются друг от друга, независимо от того, объявлены они в C или Python.
Килиан Фот
Я думаю, что любой родной скомпилированный язык (C, C ++, Pascal, Objective-C), который также допускает немного языка ассемблера, выиграет больше всего от этой книги. Тем не менее, люди, которые используют Python и пишут для него расширения на C, или даже люди, которые используют java и вообще не используют нативные методы, могли бы немного больше задуматься о стоимости того, что они делают, и как эффективно выполнять свою работу на платформе, которую они используют.
Уоррен П
Хотя я еще не читал книги, я выберу этот ответ как правильный, основываясь на обзорах / резюме книги.
Самаурса
6

К сожалению, я не знаю современного эквивалента микропроцессоров: взгляд программиста Р. Дьюара. Ближайшее, что я знаю, - это «Организация и дизайн компьютеров», четвертое издание: «Аппаратно-программный интерфейс» Дэвида А. Паттерсона и Джона Л. Хеннесси, но я не уверен, что вы не сочтете его слишком низким; Вы наверняка сделаете это для их другого опуса, компьютерной архитектуры, количественного подхода.

В Интернете этот http://www-uxsup.csx.cam.ac.uk/courses/Architecture/course.pdf , возможно, даст вам то, что вы хотите.

AProgrammer
источник
Ссылка на PDF мертва.
Ajay
5

Для платформ x86 возьмите копию руководств по процессорам Intel IA-32 и Intel 64 . Справочное руководство по оптимизации обсуждает многие из этих проблем с точки зрения низкого уровня для процессоров Intel x86. AMD также имеет аналогичные руководства, которые охватывают те же проблемы.

Большинство других архитектур ЦП имеют аналогичные руководства, в которых обсуждаются проблемы производительности. ( Например, ARM и PowerPC .)

greyfade
источник
3

Я считаю, что «Архитектура компьютера: количественный подход» Хеннеси и Паттерсона ( ссылка Amazon ) является очень сильным и надежным подходом к архитектуре компьютера, и в нем немало примеров, имеющих непосредственное отношение к программированию.

Он используется в различных направлениях на нескольких курсах по архитектуре CS для студентов и аспирантов в США.

Это также получило отличный обзор Ars Technica некоторое время назад.

Bitgarden
источник
1
Хотя мне нравится эта книга - мне принадлежат четыре издания - она ​​предназначена для компьютерных архитекторов, а не программистов.
AProgrammer
3

Это то, что я сейчас использую в своем классе « Компьютерные системы»: «Компьютерные системы: перспектива программиста» (2-е издание), и хотя урок только начался, я посмотрел на него и мне очень понравилось.

Вот описание книги:

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

Jetti
источник
Это удивительная книга!
Армандо
2

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

Я не могу рекомендовать это, если вы не можете посвятить несколько месяцев изучению материала. Это не та вещь, которую вы просто просматриваете и вдруг просветляетесь. Но если ты серьезно, то я очень рекомендую это.

btilly
источник
2

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

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

(Между прочим, эта серия книг «Пиши отличный код», о которой упоминал другой парень, выглядит великолепно, и я отредактировал свой вопрос, чтобы удалить любую пропасть, которую я ранее использовал для обучения из книги, потому что она выглядит великолепно! )

Некоторые вещи, которые действительно хорошо учат компьютерной архитектуре:

  1. Мне нравится выбирать машины 1980-х годов в качестве отправных точек для объяснения и демонстрации чего-либо людям, потому что именно тогда я начал использовать компьютеры. Я использовал справочное руководство программиста Commodore 64, чтобы показать людям место для прыжков, где знание программирования и знание компьютерной архитектуры встречаются друг с другом. С такой книгой и, возможно, эмулятором Командора 64, работающим на вашем ПК, чтобы вы могли попробовать что-то новое, вы узнаете, как на самом деле создаются компьютерные системы в классическом воплощении компьютерной архитектуры 1980-х годов. На мой взгляд, один конкретный пример - лучшее место для начала, чем дюжина теоретических моделей, в которых отсутствуют реальные детали, которые заставляют вещи работать. Если вы знаете, что такое регистр, что такое ALU, что такое шина и что такое часы, и какие системы сигнализации используются в старом проекте 1980-х годов, что даст вам основы, которые вам необходимо знать, чтобы понять что-то недавнее, например, «архитектуру песчаных мостов» от Intel. Исторически оглянемся на оригиналы, например, заглянем в архитектуру "фон Неймана" в википедии.

  2. Двигаясь вперед от моего первого пункта на несколько лет; Узнайте об оригинальной архитектуре IBM PC, языке ассемблера 8086 и шине ISA. Исходя из этого и его ограничений, понимание того, что содержит процессор «Intel COre i7», что делают шины PCI и PCI-e и зачем они вам нужны, может развиваться более естественно. В архитектуре ПК сегодня все еще есть «похмелье» от оригинального дизайна IBM PC. Способ, которым первоначальная загрузка (загрузка) программы (операционной системы) происходит на ПК 2011 года, все еще во многом обязан наследию исходного IBM PC и его ПЗУ BIOS и его настроек CMOS на оригинальном ПК.

  3. Используйте и измените предварительно сконфигурированную сборку Linux, которая работает на некоторых встраиваемых устройствах, отличных от ПК, и вы многое узнаете об архитектуре встраиваемых компьютеров, не только о технической архитектуре, но и о том, почему некоторые функции присутствуют. Хороший пример, который доступен дешево TS-7200, который имеет хороший PC-104 (ISA Bus, как в оригинальном ПК). Компьютеры PC-104 (встроенная 16-битная шина ISA, совместимая по выводам с компьютерами эпохи IBM PC / AT 80286) - отличный способ для разработчика, не являющегося платой, построить встроенную систему, поскольку модули могут наращиваться. Хотите дополнительный IO или периферийные устройства? Просто сложите несколько модулей. TS-7200 имеет ядро ​​не-x86 (процессор ARM9), способное работать с прямым или младшим порядком байтов. Если вы еще не столкнулись с «порядком байтов» в процессе обучения архитектуре, это хорошее место, чтобы с ним познакомиться.

Уоррен П
источник
0

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

TMN
источник