Где я могу узнать о низкоуровневой работе моего компьютера? - PullRequest
11 голосов
/ 03 января 2011

Я программирую уже 11 лет и использую множество разных языков программирования, от Python до C.

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

  • Как точно составлены стек и куча исполняемых файлов и как они работают

  • Как работает процессор

  • Что такое тактовый цикл

  • Что такое шина данных

  • Как работают север и южный мост на моей материнской плате

  • Низкоуровневая двоичная логика / вычисления

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

Ответы [ 6 ]

4 голосов
/ 03 января 2011
2 голосов
/ 03 января 2011

Звучит как класс, который я посещал в Массачусетском технологическом институте под названием 6.004 - это то, что вы ищете. Класс был своего рода обзор компьютера с нуля. Мы начали с теории информации (что такое информация, как ее можно представить в виде битов и т. Д.), Затем поговорили о транзисторах, а затем объединили транзисторы, чтобы создать базовые логические функции, и объединили эти логические функции, чтобы сделать простой механизм добавления, и т. д. и т. д. вплоть до создания элементарного ЦП с базовой ОС.

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

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

1 голос
/ 03 января 2011

На мой взгляд, лучший способ научиться этому, развлекаясь. Изучать компиляторы, системный дизайн и архитектуру - это очень весело работать с интерфейсом микрообработки. Поэтому я предлагаю начать использовать комплект Atmel AVR или Motorola MSP . Другой отправной точкой является создание микро-симулятора на любом языке по вашему вкусу и моделирование компьютера SRC Simple RISC этот материал , который взят из этой книги .

Это проект Я сделал в классе, используя MSP430, опять же было очень весело.

1 голос
/ 03 января 2011

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

0 голосов
/ 03 января 2011

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

Тем не менее, он на самом деле не охватывал достаточно практической стороны x86 для моего вкуса (мы разработали процессор MIPS и написали для него ассемблерный код и, в конечном счете, компилятор C).

Чтобы заполнить пробелы в различиях между нашим надуманным примером и моей реальной машиной, я предлагаю Windows Internals book . И, возможно, прохождение курса OSR .

Если вы больше разбираетесь в Linux, есть похожие курсы и книги .

0 голосов
/ 03 января 2011

Два предложения.

Некоторые книги:

Внутренние компоненты Windows (хотя, очевидно, не вся информация относится к другим ОС, очевидно)

Написать великий код: Том 1 (и, возможно, последующие тома)

Язык искусства ассемблера (связан со вторым предложением)

Изучение языка ассемблера:

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

...