раздел 32

Системное программирование: Zig, ассемблер, Verilog

Компьютерные системы по Брайанту и О'Халларону, но на Zig вместо C и с Verilog вместо учебного HCL. Сначала минимум Zig: целые любой ширины, пять видов указателей, раскладка структур, ошибки и аллокаторы, comptime и сборка. Дальше машинный уровень x86-64 и чтение дизассемблера своего кода, процессор Y86-64 проводами на Verilog с конвейером и рисками, производительность и CPE, иерархия кэшей, компоновка, процессы и сигналы, виртуальная память и свой аллокатор, системный ввод/вывод, сети с веб-сервером TINY и конкурентность с кэширующим прокси. Программа это байты, которые процессор читает по протоколу.

73 урока73 тем · 12 кластеров

Начать раздел

Раздел открыт для всех. Войди, чтобы отмечать пройденные уроки, вести заметки и решать задачи в редакторе. войти

Уроки раздела

  1. Зачем Zig системщику и путь hello от текста до процессаM~80 мин
  2. Значения, типы и поток управленияM~90 мин
  3. Указатели, срезы и массивыM~70 мин
  4. Структуры, перечисления, объединения и раскладка в памятиM~80 мин
  5. Ошибки, defer и аллокаторыM~90 мин
  6. comptime, сборка, тесты и CMS~110 мин
  7. Биты и целые по-зиговскиM~110 мин
  8. Плавающая точка на уровне битовMS~110 мин
  9. От Zig к машинному кодуMS~110 мин
  10. Операнды, семейство mov и стекMS~150 мин
  11. Арифметика: lea, сдвиги и полное произведениеMS~190 мин
  12. Флаги, переходы и cmovS~170 мин
  13. Циклы и switch на машинном уровнеS~200 мин
  14. Процедуры и стековые кадрыS~170 мин
  15. Массивы, структуры и выравнивание на машинном уровнеS~120 мин
  16. Переполнение буфера и защиты от негоS~55 мин
  17. Числа с плавающей точкой и SIMDS~120 мин
  18. inline-ассемблер и голое железоS~80 мин
  19. JIT: пишем машинный код x86-64L~160 мин
  20. Y86-64: система команд и кодированиеS~120 мин
  21. Ассемблер Y86-64 на ZigS~140 мин
  22. Симулятор Y86-64 на ZigS~140 мин
  23. Вентили и комбинационная логика на VerilogS~80 мин
  24. Verilog: слова, мультиплексоры и ALUS~110 мин
  25. Verilog: такт, регистры и памятьS~90 мин
  26. SEQ: этапы fetch и decodeS~120 мин
  27. SEQ: execute, memory, write back и новый PCS~140 мин
  28. Принципы конвейера: задержка и пропускная способностьS~80 мин
  29. PIPE: риски, продвижение и остановыL~90 мин
  30. PIPE на Verilog и CPIL~140 мин
  31. Границы оптимизирующего компилятора и метрика CPES~130 мин
  32. Инварианты цикла, вызовы и обращения к памятиS~120 мин
  33. Модель современного процессораL~100 мин
  34. Развёртывание циклов и параллелизм на уровне инструкцийL~130 мин
  35. Пределы: регистры, ветвления и памятьL~170 мин
  36. Профилирование и бенчмаркиS~110 мин
  37. Технологии хранения и локальностьS~130 мин
  38. Организация кэшаS~120 мин
  39. Симулятор кэша: cachelab на ZigL~260 мин
  40. Код, дружественный к кэшуL~160 мин
  41. Гора памятиS~100 мин
  42. Объектные файлы, ELF и символыS~290 мин
  43. Разрешение имён и статические библиотекиS~180 мин
  44. Перемещение и загрузкаS~220 мин
  45. Динамическая компоновка, PIC, GOT и PLTL~190 мин
  46. Подмена функций и компоновка на практикеS~170 мин
  47. Исключения и системные вызовыS~330 мин
  48. Процессы: fork, execve, waitpidS~190 мин
  49. СигналыL~300 мин
  50. Ядро на своей машине: таймер, вытеснение и маска прерыванийL~150 мин
  51. Нелокальные переходы и ошибки в ZigS~110 мин
  52. Оболочка с управлением заданиями: shlab на ZigL~230 мин
  53. Виртуальная адресация и страницыS~110 мин
  54. Виртуальная память как менеджер и как защитаS~220 мин
  55. Трансляция адреса и TLBL~120 мин
  56. Отображение в память: mmap, fork, execve и копирование при записиL~270 мин
  57. Как устроен malloc: куча, блоки и неявный списокL~220 мин
  58. Свой аллокатор: malloclab на ZigL~270 мин
  59. Сборка мусора и десять ошибок с памятьюS~240 мин
  60. Unix I/O и короткие счётыS~190 мин
  61. Буферизованный ввод-вывод и метаданные файловS~210 мин
  62. Общие файлы, переадресация и пайпыS~110 мин
  63. Клиент, сервер и устройство сетиS~150 мин
  64. Сокеты: эхо-клиент и эхо-серверS~190 мин
  65. HTTP и веб-контентS~140 мин
  66. Проект: веб-сервер TINYL~240 мин
  67. Проект: песочница как у раннера курсаL~230 мин
  68. Сервер на процессах и мультиплексирование ввода-выводаL~200 мин
  69. ПотокиS~250 мин
  70. Разделяемые переменные и семафорыL~260 мин
  71. Пул потоков и параллельные вычисленияL~300 мин
  72. Потокобезопасность, гонки и взаимоблокировкиL~150 мин
  73. Проект: async в Zig и кэширующий проксиL~260 мин

Темы и кластеры

Zig как инструмент системщика

Биты и числа, минимум

Машинный уровень: x86-64 и ассемблер

Архитектура процессора: Y86-64 на Zig и Verilog

Производительность программ

Иерархия памяти и кэши

Компоновка

Исключения, процессы, сигналы

Виртуальная память и аллокаторы

Системный ввод/вывод

Сети и веб-сервер

Конкурентность и прокси