# Архитектура компьютера ## Лекция 6 ## Hardware/Software.
Модель вычислений Пенской А.В., 2025 ---- ## План лекции - Аппаратное и программное обеспечение. Hardware и Software - Точки зрения на Hardware и Software - Средства разработки Software. Модели вычислений - Модель-ориентированная инженерия --- ## Программная система
software system
A system made up of software, hardware, and data that provides its primary value by the execution of the software.
— OMG Essence
*Вывод*: в любой программной системе (software intensive system) есть: - software ~ программное обеспечение - hardware ~ аппаратное обеспечение - data ~ какие-то необходимые для работы данные, являющиеся частью системы --- ## Аппаратное обеспечение
Аппаратное обеспечение
электронные и механические части вычислительного устройства, входящие в состав системы или сети, исключая программное обеспечение и данные (информацию, которую вычислительная система хранит и обрабатывает). Аппаратное обеспечение включает: компьютеры и логические устройства, внешние устройства и диагностическую аппаратуру, энергетическое оборудование, батареи и аккумуляторы.
---- ### Программное обеспечение
Программное обеспечение (ПО)
совокупность программ, системы обработки информации и программных документов, необходимых для эксплуатации. Позволяет аппаратному обеспечению вычислительной системы выполнять вычисления или функции управления
Computer program
is a sequence or set of instructions in a programming language for a computer to execute. Computer programs are one component of software, which also includes documentation and other intangible components.
— Wikipedia
Программа это данные (отчуждаемо и передаваемо) ---- ## Что такое Software (и Hardware)? ```text Настал новый год, так что давайте начнем его с чего-то фундаментального, разберемся с тем, что беспокоило меня в течение многих лет. На днях я обедал с подругой, которая не разбирается в компьютерах. Она спросила меня: "Что такое Software?" Казалось бы, это простой вопрос для тех людей, кто зарабатывает на жизнь созданием и разработкой программного обеспечения, но мне пришлось хорошенько подумать, чтобы дать объяснение, которое она смогла бы понять: Software -- это та часть компьютерной системы, которая приспосабливает технику к различным видам использования. Например, на одном и том же компьютере, но с разным программным обеспечением, вы можете играть в игру, рассчитывать налоги, писать письмо или книгу, или получать ответы на вопросы о свиданиях. Затем я объяснил ей, что, к сожалению, в начале истории развития компьютеров этой функции дали название "программное обеспечение (software)", в отличие от "аппаратного обеспечения (hardware)". Ее следовало бы назвать "гибкое программное обеспечение (flexibleware)". К сожалению, термин "soft" многие интерпретировали как "легкий (easy)", что совершенно неверно. Не заблуждайтесь. То, что мы называем "hardware", должно было называться "easyware", а то, что мы называем "software", можно было бы назвать "difficultware". ``` [Gerald M. Weinberg, What is Software?](http://secretsofconsulting.blogspot.com/2017/12/what-is-software.html?m=1) ---- ### Аппаратура и ПО $\neq$ Hardware и Software 1. Программная/аппаратная составляющая слабо связаны с SW/HW - Minix — одна из самых популярных ОС. 2. Часто наименование программной или аппаратной составляющей **зависит от языка**: - Virtual-Computer, -Network, -Volume, etc. - Почему ПЛИС — это аппаратура, так как работает как схема. 3. Разделение на SW/HW зависит в большей степени от **способа использования** элементной базы. - Hardware — то, что тяжело/долго/дорого поменять; - Software — то, что легко/быстро/дешево поменять. 4. **HW совпадает с аппаратной составляющей**, если нет альтернатив: питание, антенны, аналоговые сигналы и т.п. ---- ### Свойства программного обеспечения
1. Быстрый цикл разработки. 1. Легко заменяется прямо у пользователя. 1. Пользователь как Beta-тестер. 1. Возможно удалённое обновление, в том числе без информированного согласия. 1. Сервис — вершина владения компьютерной системой. 1. Процесс создания и внедрения ПО автоматизируется (CI/CD). 1. Высокая сложность программ. *Примечание*: применение "патча", а не разработка.
 
--- ## Типовое HW/SW проектирование
Проектируем аппаратуру: - система команд и вычислительные механизмы - интерфейсы упр. аппаратурой - цифровая схемотехника, система команд
Пишем программу: - прикладная задача - язык и библиотеки - система команд и вычислительные механизмы (вирт. память, прерывания) - интерфейсы упр. аппаратурой

Проблемы:
1. излишне шаблонное проектирование 1. высокие интеграционные риски 1. последовательная разработка (сроки)
---- ### Hardware/Software CoDesign
Мы проектируем систему: 1. Разработка интерфейса HW/SW (системы команд) 1. Разработка моделей HW/SW, для получение обратной связи 1. Разработка HW/SW, верификация моделей. 1. Замена моделей на HW/SW

 ---- ### Hardware/Software CoDesign.
Скорость разработки  --- ## Как выбирать инструменты для разработки Software?
1. от доступного Hardware и инструментальных средств 1. от доступной команды разработки 1. от прикладной задачи: - от области (библиотеки) - от модели вычислений (принципов организации вычислительного процесса: параллелизм, конвейеризация, оптимизации, и т.п.)
---- ## Уровень организации вычислительной платформы
Вычислительная платформа: 
Platform-Based Design: 
На стадии утилизации:  --- ## Модель вычислений
1. MoC предоставляет язык для описания моделей процессов/программ/структур. 1. MoC определяет возможности вычислительной машины. 1. MoC характеризует, как исполняется модель (программа): возможные состояния вычислителя, их последовательность, правила переходов (возможно детерминированное). 1. MoC, обычно, минималистичны относительно реальных вычислителей.
Model of Computation — MoC  [Источник](https://www.researchgate.net/publication/337394921_Pathways_to_cellular_supremacy_in_biocomputing)
--- ### MoC. Последовательные модели
Sequential models
allows describing a sequential process, which process can be represented as a sequence of state transitions: 1. Finite state machines 1. Pushdown automata 1. Turing machines 1. Random Access Machines / von Neumann Machine
 Относительно просто реализуются в виде механизмов.
----
#### Конечные автоматы  
#### Автомат с магазинной памятью  ---------- Достоинства: - Таблица состояний. - Верифицируемость переходов. - Простая реализация в схемотехнике и ПО.
---- #### Машина Тьюринга /1
Машина Тьюринга включает: - неограниченную двустороннюю ленту, разделенную на ячейки - устройство управления (головка записи-чтения), которое может находиться в конечном числе состояний. Управляющее устройство может: - перемещаться по ленте влево и вправо, - читать и записывать в ячейки символы конечного алфавита.

---- #### Машина Тьюринга /2 1. не может быть реализована на практике 1. обладает полнотой по Тьюрингу
(позволяет реализовать любой **известный** алгоритм) 1. проблема остановки 1. данные и управление отделены 1. ориентирована на реализацию (как ни парадоксально) ---- #### Random Access Machine  (современный процессор, с оговорками) --- ### MoC. Функциональные модели
Functional models
представление вычислительного процесса как совокупности символов и правил их преобразований: 1. Арифметика 1. Лямбда исчисление
(полнота по Тьюрингу) 1. Combinatory logic 1. General recursive functions 1. Abstract rewriting systems. - См. [Рефал](https://fprog.ru/2011/issue7/)
 - Программа/данные — математический объект - Возможна Тьюринг неполнота
---- #### Лямбда исчисление
4 вида выражений: 1. переменная: $x$, $y$, and $z$ 1. константа: $a$, $b$, $c$ 1. комбинация (вызов): $s\\;t$ 1. абстракция: $\lambda x.s$ 3 вида редукций/подстановки: 1. переименование переменных: $\lambda u.u\\;v \xrightarrow{\alpha} \lambda w.w\\;v$ 1. применение функции (подстановка аргумента): $(\lambda x.s)\\;t \xrightarrow{\beta} s[t/x]$ 1. сокращение аргумента: $\lambda u.v\\;u \xrightarrow{\eta} v$.
 [Пример дизайна ЯП семейства ML](https://www.cl.cam.ac.uk/teaching/Lectures/funprog-jrh-1996/all.pdf) и факториал на чистом лямбда исчислении.
--- ### MoC. Параллельные модели
Concurrent models
системы включающие несколько взаимодействующих процессов: - Kahn process networks — однонаправленные каналы с неограниченными буферами. - Actor model — отправка сообщений в "почтовые ящики". - Discrete Event — события в заданные моменты времени. - Multi-Thread Model — общая память. - Synchronous Data Flow — синхронизированные потоки данных.
 
---- ### MoC. Примеры распределённых моделей   (1) Open Multi-Processing (OpenMP) (2) IEC 61499   (3) LabVIEW (4) LinguaFranca --- ### MoC. Близкие понятия
Парадигмы программирования
это способ классификации языков программирования на основе их функций. Языки могут относиться к нескольким парадигмам.
Стиль программирования
это набор правил или рекомендаций, используемых при написании исходного кода компьютерной программы.
**Programming languages**, **Architectural style**, **Computational platform** ---- ### MoC. Применение на практике
1. Computer Science. Формальные модели. 1. Дизайн языков программирования. 1. Ограничение творческого порыва. Контроль сложности. 1. Модель-ориентированная инженерия (xtUML, Capella, Switch-технология и т.п.): - для ответственных применений; - для переносимости; - для экспертизы.
 
--- ### Model-Driven Engineering
1. Разработка через моделирование предметной области 1. Автоматическая генерация кода из моделей 1. Повышение уровня абстракции при разработке 1. Сокращение разрыва между требованиями и реализацией 1. Улучшение коммуникации между заинтересованными сторонами 1. Снижение сложности разработки сложных систем

---- ### Executable UML (xtUML). Process   ---- ### xtUML. Models   ---- ### Behavior Driven Development (BDD)


--- ### Предметно-ориентированные языки (Domain Specific Language)  --- ### Другие примеры MDE 1. **Lingua Franca** — язык координации для распределённых параллельных приложений реального времени. 1. **CASE-технология** — набор инструментов и методов программной инженерии для проектирования ПО, обеспечивающих качество, надёжность и поддерживаемость продуктов 1. **JetBrains MPS** — платформа для создания предметно-ориентированных языков с проекционным редактированием 1. **LabVIEW** — графическая среда разработки, ускоряющая создание тестовых систем через интуитивное программирование и поддержку любого измерительного оборудования 1. **IEC 61131** — международный стандарт для языков программирования промышленных логических контроллеров (ПЛК)