Действительно ли программные системы имеют больше состояний, чем аппаратные?

#theory

#теория

Вопрос:

В «Нет серебряной пули» Фред Брукс утверждает, что «Программные системы имеют на порядки больше состояний, чем компьютеры», что усложняет их проектирование и тестирование (а чипы и так довольно сложно тестировать!).

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

Подразумевает ли Брукс какое-то конкретное значение, которое я упускаю? Или у компьютера действительно меньше потенциальных состояний, чем у программных систем, которые он может запускать?

Комментарии:

1. машина Тьюринга….

Ответ №1:

Что ж, давайте сначала подумаем о машинах Тьюринга.

Машина Тьюринга состоит из неограниченной ленты, содержащей символы, головки и небольшого блока управления, представляющего собой конечный автомат, который управляет тем, как машина считывает, перемещает и изменяет символы на ленте.

Факт: существуют универсальные машины Тьюринга, то есть машины, которые считывают с ленты описание другой машины Тьюринга и выполняют его на некотором заданном входе. Другими словами: даже при ограниченном числе состояний в блоке управления такие машины могут имитировать все возможные другие машины Тьюринга.

Чтение описания машины Тьюринга — это то же самое, что чтение программы, хранящейся в памяти.

В этом смысле, если считать за количество состояний аппаратного обеспечения количество состояний в блоке управления, и если программное обеспечение является описанием машины Тьюринга, записанным на ленте, то да, конечное аппаратное обеспечение может имитировать бесконечное программное обеспечение, но программное обеспечение наверняка содержит машины Тьюринга с большим количеством состояний, чем то, которое его имитирует.

Однако, если вы рассматриваете как состояние все состояние вычисления, т. е. включая состояние ленты, то вы правы: каждое моделирование соответствует определенным возможным состояниям в этом смысле, и есть много состояний, которые недействительны или недоступны.

Точно так же современные компьютеры состоят из набора аппаратных средств, которые реализуют этот блок управления, а затем памяти, которая является нашей лентой. Если вы не рассматриваете состояние памяти как часть состояния аппаратного обеспечения, то применимо то же самое: конечный компьютер, при наличии достаточного объема памяти, мог бы выполнять все возможные программы на всех возможных входных данных, однако его управляющие части ограничены.


При этом я бы не стал воспринимать такие утверждения слишком буквально или слишком серьезно… Суть проста: количество состояний в программных системах растет чрезвычайно быстро.