DOU Books: 5 книжок про функціонування комп’ютерів від Олега Фаренюка, викладача УКУ

Від редакції: у рубриці DOU Books спеціалісти розповідають про 5 своїх улюблених книжок — ті, які змінюють світогляд та корисні читачам-колегам.

[Олег Фаренюк — викладач факультету прикладних наук УКУ, консультант компанії EdPro, провідний інженер Інституту фізики конденсованих систем НАН України]

Усі ми працюємо із комп’ютерними системами. Рано чи пізно з’являється зацікавленість — а як ця магічна коробочка функціонує? Та й користуватися чи програмувати машину, якої не розумієш хоча б в загальному, — небезпечно. Можна. Але небезпечно.

Тому я вирішив запропонувати вашій увазі п’ять книг, які дозволять розібратися у роботі комп’ютера.


Andrew Tanenbaum, Herbert Bos «Modern Operating Systems»

У російському перекладі — Эндрю Таненбаум «Современные операционные системы»

Перший автор окремого представлення не потребує. Він один із живих класиків комп’ютерної літератури, «хресний батько» Лінукса, все таке.

Працюючи із комп’ютером чи пишучи для нього програми, ми майже завжди взаємодіємо із операційною системою (ОС). У цій книзі детально розглядається, що це таке: з чого вона складається, як її компоненти взаємодіють, які ідеї у них закладені та як вдається їх змусити працювати разом. На прикладі популярних ОС показано, як ці ідеї реалізуються на практиці. У останньому на даний момент, четвертому, виданні обрано Windows, Linux, Android. Також описується історія розвитку всієї цієї сфери та дано огляд актуальних досліджень.

Звичайно, вона не навчить вас створювати свої ОС (взагалі для цього у автора є інша книга), але, як на мене, кожен ІТ-шник мав би прочитати хоча б її першу частину.

Детальніший відгук на неї писав у своєму блозі: «Розповіді про операційні системи від Таненбаума».

David Patterson, John Hennessy «Computer Organization and Design: The Hardware/Software Interface», 4th Edition

У російському перекладі — Дэвид Паттерсон, Джон Хеннесси «Архитектура компьютера и проектирование компьютерных систем. Классика Computers Science»

Операційна система працює поверх «заліза». Апаратура комп’ютера багатоманітна, однак одним із найважливіших та, певне, найскладнішим компонентом є центральний процесор, CPU. Звичайно, їх розробники знають, що далеко не всі користувачі будуть просунутими — сяк-так процесор опрацьовуватиме будь-яку програму. Однак, щоб використовувати його ефективно та безпечно (згадайте хоча б недавні баги Meltdown I Spectre!), краще розуміти, як процесори влаштовані і на які трюки йдуть для підвищення ефективності.

Ця книга дає огляд апаратури, із якою мусить взаємодіяти CPU, а потім розповідає читачеві про розробку все більш досконалого процесора. Усі розглянуті архітектури процесорів реалізовують одну і ту ж систему команд, але кожен наступний здатен виконувати її команди якомога ефективніше. Також детально розглянуто підсистему пам’яті, усілякі кеші, предвибірки, NUMA, тощо — критичні для продуктивності програм теми.

Розглядається система команд MIPS. Усе ж Паттерсон — її розробник, але описані принципи стосуватимуться будь-якого сучасного потужного процесора.

Існує також більш ґрунтовна їхня книга, розрахована на професійнішого читача: John Hennessy, David Patterson «Computer Architecture: A Quantitative Approach».

David Harris, Sarah Harris «Digital Design and Computer Architecture»

У російському перекладі — Дэвид М. Харрис, Сара Л. Харрис «Цифровая схемотехника и архитектура компьютера»

Книги Паттерсона і Хеннесі хоча й дають інформацію, необхідну для розробки власного процесора, навряд чи достатні. Прочитавши їх, ви все одно не знатимете, з якого кінця братися, якщо вам раптом захочеться мати свій оригінальний процесор.

А ось ця книга буде значно більш помічною. Вона починає із фізичних принципів, на яких базується цифрова електроніка, переходить до простих логічних елементів та тригерів. Далі розповідає про мови опису апаратури — Verilog, VHDL, способи створення ALU, пам’яті, знайомить із розробкою системи команд та реалізацією її в мікроархітектурі. Подано необхідне теоретичне підґрунтя, практичні відомості та розглянуто, які наслідки ми матимемо, приймаючи конкретні рішення щодо різних аспектів побудови комп’ютера, який проектується. Система команд у цій книзі теж крутиться навколо MIPS — люблять цю архітектуру в академічному середовищі, але як і для попередньої книги — це аж ніяк не заважатиме читачам із інших «домініонів».

Agner Fog «Optimization manuals»

Розробляти свій процесор мені доводиться не часто, а ось намагатися якомога ефективніше використати вже існуючі на базі системи команд x86 — регулярно. Історично так склалося, що саме ці процесори домінують у високопродуктивних обчисленнях. Тут дуже корисним буде п’ятикнижжя Агнера Фога:

  • «Optimizing software in C++: An optimization guide for Windows, Linux and Mac platforms»;
  • «Optimizing subroutines in assembly language: An optimization guide for x86 platforms»;
  • «The microarchitecture of Intel, AMD and VIA CPUs: An optimization guide for assembly programmers and compiler makers»;
  • «Instruction tables: Lists of instruction latencies, throughputs and micro-operation breakdowns for Intel, AMD and VIA CPUs»;
  • «Calling conventions for different C++ compilers and operating systems».

Найсвіжіші варіанти книг завжди доступні на сайті Software optimization resources.

Останніх два томи — довідники, де зібрано та систематизовано інформацію, часто недоступну із інших джерел. Читати їх не дуже цікаво, але консультуватися з їх допомогою — безцінно. Третя книга — опис мікроархітектури всіх основних поколінь x86-сумісних процесорів: який у них конвеєр, як працює предвибірка, перевпорядкування команд та звертання до кешу і т. д. Нарешті перші дві розповідають, як ці знання впливають на практичне написання програм відповідними мовами.

Ці книги менш захопливі, ніж попередні. Інтриги та динаміки менше. Але якщо готові математичні, інженерні, AI/ML тощо бібліотеки вас не влаштовують своєю ефективністю — книги допоможуть написати свої, ефективніші.

Noam Nisan, Shimon Schocken «The Elements of Computing Systems: Building a Modern Computer from First Principles»

При всіх перевагах книги Паттерсона-Хеннесі та Харрісів — достатньо складні. Вони, безумовно, корисні людям, які тісно працюють із мікропроцесорами або планують їх проектувати, але для любителя, який просто хоче розібратися та створити свій аматорський комп’ютер, доступнішою буде ця книга, написана авторами для свого курсу «From Nand to Tetris».

Спочатку виклад іде паралельно з книгою Харрісів — цифрова логіка, система команд та асемблер, але рухається далі — до віртуальних машин, мов високого рівня та компіляторів. При чому ціль — не просто розповісти, познайомити із принципами, а дати можливість читачеві створити свій комп’ютер із (майже) підручних засобів. Як відомо, ви не розумієте того, чого не здатні самостійно відтворити. Тому досвід створення власного комп’ютера може бути безцінним — і як розвага, і для кращого розуміння систем, з якими доводиться працювати.

Похожие статьи:
Длительность: 2,5 месяца Хочешь стать JavaScript разработчиком или прокачать свои знания на новый качественный уровень? Курс «Понятный...
Компания IDC опубликовала свой прогноз по рынку планшетных устройств в 2016 году. По данным аналитиков данной фирмы, в целом рынок...
Все, что я знаю об Ирландии, мама, — это «Jameson», «Guinness» и «Connemara».© Сплин Киллайни, южный пригород Дублина. Здесь находится...
В выпуске: сравнение юникодных String и NSString, Xcode unit tests with ⌘+S, как устроены процессы в Яндексе, подборка хаков...
[Об авторе: Павел Веллер — CTO, Digital Engagement Practice в EPAM Systems. Практически 20 лет опыта в разработке ПО...
Яндекс.Метрика