Амазонка ссылка на книгу.

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

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

Первые главы книги почти такие же, как и в других книгах по «компьютерной организации», они рассказывают нам историю компьютеров, знакомят с двоичными системами и так далее. Однако почти с самого начала эта книга начинается с простой программы на C и показывает, как она компилируется, а затем транслируется в машинный код.

Глава 1 (Обзор компьютерных систем) книги представляет собой регулярное введение в историю компьютеров и их устройства.

Часть I, Структура программы и выполнение

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

Глава 3 (Представление программ на машинном уровне) показывает читателю, как [простая] программа на языке C трансформируется в машинный код. Это одна из интересных глав книги.

Кроме того, Глава 4 (Архитектура процессора) знакомит с тем, как работают ЦП и какие инструкции делают ЦП полноценным. В главе рассматривается семейство процессоров Y86 как некий «общий» способ рассказать о семействе Intel x86 без фактического упоминания Intel, поскольку это будет звучать как реклама.

Глава 5 (Оптимизация производительности программы) - идеальный ресурс для тех программистов, которым интересна фактическая реализация примитивных конструкций, таких как условные операторы и циклы. Приятно узнать, что простого оператора goto вместе с условными инструкциями (jmp s) достаточно для реализации сложного цикла.

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

Часть II, Запуск программ в системе

Глава 7 (Связывание) важна в основном для разработчиков C / C ++. Такие языки, как C # и Java, гибридны с точки зрения компиляции и работы. Перед запуском программы на C ++ должны быть скомпонованы. В этой главе делается все возможное, чтобы описать процесс связывания и загрузки. Обязательно прочтите!

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

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

Часть III, Взаимодействие и коммуникация между программами

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

Глава 11 (Сетевое программирование) знакомит с концепцией сокетов и низкоуровневыми деталями программирования сокетов. Хотя есть отличные книги по сетевому программированию, и одной главы недостаточно, чтобы овладеть сетевым программированием на профессиональном уровне, эта глава могла бы стать отличным введением в тему в целом.

Глава 12 (Параллельное программирование) снова является хорошим введением в параллельное программирование и многопоточность в целом. Если вы хотите углубиться в эту тему, вам нужно купить полную книгу по параллелизму. Однако для большинства программистов этой главы более чем достаточно. Вы должны прочитать ее и ощутить радость, прочитав книгу до конца!

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

Финальный счет

Полезно для программистов: 10/10

Базовые знания: 10/10

Реальные проекты и примеры: 7/10

Подробный и понятный: 9/10

Стоит покупать: 10/10