Что такое СП? Основные понятия

Systems Software Research is Irrelevant
— Роб Пайк, http://doc.cat-v.org/bell_labs/utah2000

СП

Системное программирование (СП) — это вершина пирамиды изучения программирования. Это вовсе не обучение программированию на Ассемблере, а совокупность знаний о создании больших программных систем, состоящих из взаимодействующих компонентов, которая опирается на:

  • знания об аппаратной архитектуре компьютеров
  • теорию алгоритмов и структур данных
  • теорию языков программирования
  • теорию компьютерных сетей
  • кибернетику

Операционные системы (ОС) являются эталонными примерами для изучения, но принципы СП применимы и используются в любых крупных программных системах: виртуальных машинах (ВМ), СУБД, серверах, системах распределенных вычислений и т.д.

Важные проблемы в теории СП:

  • создание систем из компонентов
  • разделение задач по уровням
  • эффективность обмена информацией
  • одновременная работа с вычислительными ресурсам
  • безопасность

Ключевые понятия, которые будут встречаться на протяжении всего курса:

Платформа и приложение

Платформа — это аппаратная архитектура и/или программная основа, которая позволяет исполняться "пользовательским" программам. Приложение — это собственно программа, которая выполняет какаое-то полезное действие.

Интерфейс

Это внешнее представление, абстракция какого-то информационного объекта. Интерфейс разделяет методы внешнего взаимодействия и внутренней работы. Один объект может иметь несколько интерфейсов для разных "потребителей". Интерфейс — это средства трансляции между сущностями внешней и внутренней для объекта среды. Интерфейс — это форма косвенного взаимодействия. Связанно с концепцией кибернетики "черный ящик".

Протокол

Это набор правил взаимодействия между объектами. Эти правила определяют синтаксис, семантику и синхронизацию взаимодействия. Протокол может существовать в форме конвенции (неформального) или стандарта (формального набора правил).

Вопрос: какая взаимосвязь между протоколом и интерфейсом?

Основные составные части большинства протоколов:

  • "рукопожатие" (установление соединения)
  • "договоренность" про условия коммуникации
  • правила форматирования сообщения (в том числе: начало и окончание)
  • обработка ошибок, возникающих в коммуникационном канале
  • завершение сессии взаимодейтсвия

Протокол и диллема узника

Закон Постела (принцип робастности): будьте консервативны в том, что отправляете, и либеральны в том, что принимаете

Стандарт

Это нормативная спецификация технологиии или методологии.
Открытые стандарты — это стандарты, которые публикуются в открытых источниках и, как правило, имеют одну или несколько (например, W3C требует как минимум двух) эталонных реализаций (reference implementation). Также, как правило, такие стандарты разрабатываются в четко определенном процессе.

Ключевые характеристики изучаемых объектов:

  • простота
  • производительность
  • расширяемость
  • масштабируемость

Вопрос: какие ещё?

"Законы" СП

Особенностью теории СП является то, что это практическая дисциплина, поэтому кроме установленных научным путем фактов она включает также большое количество эвристик и накопленного опыта разработки, которые не является всегда истинными, однако дают важные подсказки и указывают направление развития для тех, кто работает в этой области. Такие законы — как из разряда доказанных фактов, так и просто обобщений — составляют концептальную основу СП.

CAP-теорема Брюера (Brewer's CAP Theorem)

В распределенных системах из 3х качеств: целостность (consistency), доступность (availability) и терпимость к разделению (partition tolerance) одновременно могут быть достигнуты только 2.

Следствие: определенные подходы к разработке распределенных систем и движение NoSQL.

См. Amazon Dynamo

Закон оборачивания софта Завински (Zawinski's Law of Software Envelopment)

Любая программа пытается расшириться до тех пор, пока не научиться читать почту. Те программы, которые не могут так расшириться, заменяются теми, которые могут

Мораль:

  • Важность коммуникации для всех программ
  • Роль SMTP протокола в обмене информацией
  • Важность простых протоколов

Десятое правило программирования Гринспена (Greenspun's Tenth Rule of Programming)

"Любая достаточно сложная программа на C или Fortran содержит ad hoc, неформально специфицированную, переполненную багами, медленную реализацию половину Common Lisp"

Примечание: Common Lisp — динамический ЯП, который имеет наибольшие возможности расширения и абстракции.

Что отличает Lisp? (Питер Норвиг, PAIP, 1992)
  • Встроенная поддержка списков
  • Автоматическое управление памятью
  • Динамическая типизация
  • Функции — первоклассные объекты
  • Единообразный синтаксис
  • Интерактивная среда
  • Расширяемость
  • Итсория

Мораль:

  • Важность расширяемости и динамичности для любой большой программной среды

Синдром системы второго поколения (Second System Effect/Syndrome)

Тенденция вслед за относительно небольшой, элегантной и успешной системой спроектировать систему следующего поколения как слонопотамного, переполненного функциями монстра. (Которого часто так и не удается довести до полноценной реализации) [из книги Фреда Брукса Мифический человеко-месяц]

Мораль:

  • Психология важна
  • Также важно изучать опыт других

Открытая система (понятие из Теории систем)

Принципы:

  • Мобильность (портабельность) — переносимость приложений (на уровнях: программного, байт-, бинарного кода, ...)
  • Интероперабельность — способность отдельных систем обмениваться информацией и использовать ее (открытые стандарты)
  • Масштабируемость — способность системы изменять размеры при сохранении пропорций (как правило, для работы под большей нагрузкой)

Вопрос: Почему важны открытые системы?

Вопрос: в чем разница между масштабруемостью и производительностью?

Масштабируемость бывает вертикальной и горизонтальной. Вертикальная масштабируемость — способность справляться с большей нагрузкой с помощью улучшения внутренних характеристик (например: добавить больше памяти в компьютер). Горизонтальная — путем добавления типичных компонент. У каждого подхода есть свой предел.

Экономический аспект: коммодитизация

Жизнеспособная система (Viable System) — концепция из кибернетики (Стаффорд Бир)

Уровни:

  1. функциональные модули
  2. регуляция и тактическое планирование
  3. аудит, операционное планирование и контроль
  4. развитие
  5. сохранение идентичности

Also available in: HTML TXT