Где я могу узнать о низкоуровневой работе моего компьютера?

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

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

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

  • Как работает ЦПУ

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

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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

Ответ 4

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

Это проект, который я сделал в классе с помощью MSP430, снова было очень весело.

Ответ 5

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

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

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

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

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

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

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

Ответ 6

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

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

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

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