
- •Введение
- •Глава 1
- •§ 1. «Алгоритмические джунгли»
- •§ 2. Исходные данные и результаты. Массовость алгоритма
- •§ 4. Понятность алгоритма
- •§ 5. Рекурсивные определения
- •§ 6. Определенность алгоритма
- •§ 7. Выводы
- •Глава 2 создание алгоритмов
- •§ 1. Роль алгоритмов в науке и технике
- •§ 2. Как возникают алгоритмы
- •§ 3. Алгоритмы в математике
- •§ 4. Алгоритм Евклида
- •§ 5. Решето Эрагосфена
- •§ 6. Алгоритм разложения на простые множители. Определение наименьшего кратного двух чисел
- •§ 7. Распознавание алгебраического тождества
- •§ 8. Задачи на построение алгоритмов
- •Глава 3 кризис математики в начале XX века
- •§ 1. Арифметизация математики
- •§ 2. Теория множеств
- •§ 3. Кардинальные числа
- •§ 4. Антиномии
- •§ 5. Выводы из антиномий
- •Глава 4 логические теории алгоритмов
- •§ 1. Рекурсивные функции
- •§ 2. Машины Тьюринга
- •§ 3. Нормальные алгоритмы Маркова
- •§ 4. Эквивалентность описанных теорий
- •Глава 5
- •§ 1. Массовые проблемы. Неразрешимость проблем
- •§ 2. Экстраалгоритм и три неразрешимые проблемы
- •§ 3, Некоторые замечания
- •Глава 6 электронные вычислительные машины и программирование
- •§ 1. Устройство эвм
- •§ 2. Процессоры эвм. Рабочий цикл
- •§ 3. Что такое программа
- •§ 4. Особенности современных эвм
- •§ 5. Входные языки программирования
- •§ 6. Необходимость содержательной теории алгоритмов. Какой она должна быть
- •Г л а в а 7 формальные языки
- •§ 1. Анализ естественного языка
- •§ 2. Искусственные языки. Формальные языки
- •§ 3. Буквы, связи, оболочки, конструкции
- •§ 4. Формальные грамматики
- •§ 5. Нотация Бекуса. Тезаурусы
- •§ 1. Что такое операция?
- •§ 2. Натуральные операции
- •§ 4. Первичные алгоритмы
- •§ 5. Натуральные алгоритмы
- •§ 6. Ограничения на структуру исходных данных сняты
- •§ 8. Соотношение с алгоритмами в интуитивном смысле
- •§ 10. Исследование тупиков (клинчей)
- •§ 11. Формальная семантика формального языка
- •Глава 9 математическое обеспечение эвм
- •§ 1. Анализ эвм и программ
- •§ 2. Что такое математическое обеспечение эвм
- •§ 3. Функциональная классификация программ математического обеспечения эвм
- •§ 4. Операционные системы
- •И автоматизация процессов
- •§ I. Использование эвм для управления
- •§ 2. Информационные системы
- •§ 3. Алгоритмизация процессов
- •§ 4. Язык алгоритмизации процессов
- •§ 5. Наука и искусство алгоритмизации
- •Заключение
- •§ 1. Может ли машина мыслить? Может ли человек решить алгоритмически неразрешимую проблему?
- •§ 2. Детерминированность машин. Самообучение
- •§ 3. Сознание машин. Алгоритмическое моделирование
§ 2. Процессоры эвм. Рабочий цикл
Из процессоров машины некоторые называются центральными, другие — периферийными. Как правило, к периферийным относят процессоры, предназначенные для ввода или выдачи информации. Общий принцип действия всех процессоров одинаков. Наиболее сложны центральные процессоры. Именно их мы и рассмотрим подробнее.
Все коды, присутствующие в запоминающих устройствах процессора, делятся на команды, управляющие коды и операнды. Как правило, команды характеризуются так называемым форматом. Понятие о формате получим, если укажем, из каких частей состоит команда и сколько символов должно входить в каждую такую часть.
При описании формата мы ограничимся лишь указанием составных частей, входящих в состав команды, оставляя в стороне число символов. Будем считать, что каждая команда имеет формат, приведенный на рис. 2. В действительности форматы команд бывают значительно более сложными и не все команды имеют один и тот же формат (обычно типы команд делятся на группы, каждой из которых соответствует свой формат).
Частями команды в нашем примере являются код операции и три кода адресов (первого, второго и третьего). Кодами адресов (или коротко адресами) обычно называют номера ячеек некоторого ЗУ, в нашем случае — оперативной памяти. Ячейками называются наименьшие части ЗУ, к которым данный процессор имеет отдельный доступ. В оперативной памяти каждая ячейка имеет имя, иначе говоря, номер. Это имя и является ее адресом.
В зависимости от кода операции команда обозначает некоторое действие, которое должно быть выполнено над кодами, находящимися во время выполнения команды в ячейках, имеющих соответствующие номера (в простейшем случае — указанные в первом и втором адресах команды). Результат операции должен быть записан в ячейку, номером которой является третий адрес команды.
Описывая принцип действия процессора, на схеме (рис. 3) укажем лишь принадлежащие ему ЗУ. Устройство управления и операционное устройство показывать не будем. Их функции опишем в тексте, объясняющем работу процессора. На рис. 3 показана лишь одна группа ЗУ связи. Таких групп может быть столько, сколько в состав ЭВМ входит процессоров, контактирующих с данным.
Условимся об одном приеме, удобном при описании функционирования процессора. Имя ячейки будем считать также именем величины, хранящейся в этой ячейке, а содержимое ячейки — значением указанной величины. В формулах, описывающих операции над содержимым ячеек, будем писать имена ячеек. Это будет касаться лишь ячеек, именами которых являются буквы.
Например, x+y=z означает, что содержимое ячейки х, сложенное с содержимым ячейки у, равно содержимому ячейки z. Формула х+1=z означает, что содержимое ячейки х, увеличенное на 1, равно содержимому ячейки z. Запись zi будет означать содержимое ячейки, имя которой содержится среди ячеек z1, z2, ..., zN, причем значение индекса ее содержится в ячейке с именем i.
Примеры приведены для случаев, когда в ячейках памяти записаны числа. Если там записаны другие коды, то операции в формулах должны быть другие, допустимые для хранимых в ячейках кодов.
Приступим теперь к описанию работы центрального процессора, ЗУ которого приведены на рис. 3.
В момент запуска процессора в ячейку l (счетчик команд) должна быть произведена запись некоторого адреса (номера ячейки), в ячейку t—запись числа 1, в ячейку ω — запись числа 0 или числа 1. Эти действия совершает либо оператор (человек) с пульта управления, либо другой процессор (для которого при этом ячейка l, а также ячейки t и ω, должны быть регистрами контакта). После этого работа процессора протекает автоматически следующим образом.
1. Содержимое ячейки t сравнивается с единицей. Если оно совпадает с единицей, то выполняется п. 2, иначе (если оно совпадает с нулем) снова выполняется п. 1.
2. Содержимое ячейки zl переносится из оперативной памяти в регистр команд r. Далее выполняется п. 3.
3. Содержимое ячейки l увеличивается на единицу. Далее см. п. 4.
4. Выполняется операция, которая указана в ячейке 8. Далее см. п. 20.
20. Далее выполняется п. 1.
Приведенное описание работы является самым укрупненным. Способ выполнения операции θ в нем не указан. Пункт 20 включен для удобства дальнейшей детализации. Описание работы процессора можно представить в виде блок-схемы (рис. 4). Пункты, содержащие проверку какого-либо условия, изображают ромбами, расположенными так, что одна из диагоналей их вертикальна. Из каждого ромба исходят 2 стрелки, одна из которых помечена цифрой 0 (соответствует случаю, когда проверка условия дает ответ «нет»), а другая — цифрой 1 (соответствует случаю, когда проверка условия приводит к ответу «да»). Этапы работы процессора, требующие выполнения определенных действий, изображены прямоугольниками, расположенными на чертеже так, что одна из сторон каждого вертикальна. Из каждого прямоугольника может исходить только одна стрелка. Внутри блоков (ромбов и прямоугольников) записаны номера тех пунктов нашего описания, которым они соответствуют.
Приведенное грубое описание работы процессора называют схемой его рабочего цикла. Название это легко понять, рассматривая рис. 4, на котором отчетливо видно, что блоки (пункты описания) образуют замкнутую (циклическую) цепочку.
Схема рабочего цикла процессора должна быть уточнена. Для этого следует развернуть п. 4 рабочего цикла. При этом получим (рис. 5):
4. Если 0 означает некоторую операцию над данными, выполняется п. 5, иначе см. п. 9.
5. Если 9 означает одноместную17 операцию, то см. п. 6, если двухместную, то см. п. 7.
6. Операция, соответствующая 0, выполняется над zi, результат записывается в zh. Далее см. п. 8.
7. Операция, соответствующая 6, выполняется над zi и zj. Результат записывается в zh. Далее см. п. 8.
8. Если результат операции отрицателен, в ячейку ω (логическую) записывается цифра 1, в остальных случаях (если он неотрицателен) — цифра 0. Далее см. п. 20.
9. Если θ означает операцию перехода, то выполняется п. 10, иначе см. п. 14.
10. Если θ означает операцию условного перехода18, то выполняется п. 11, иначе (если — безусловного перехода) выполняется п. 13.
11. Если ω=0, то см. п. 12, иначе (если ω = 1) см. п. 13.
12. В ячейку l записывается код, одинаковый с кодом, находящимся в ячейке i. Далее см. п. 20.
13. В ячейку l заносится код, одинаковый с кодом, находящимся в ячейке j. Далее см. п. 20.
14. Если θ означает операцию останова, то см. п. 15, иначе см. п. 16.
15. Производится запись числа 0 в ячейку t. Далее см. п. 20.
16. Если θ означает операцию контакта, то выполняется п. 17. Иначе (если θ означает операцию обмена) выполняется п. 18.
17. Производится соответствующая θ операция контакта. Далее см. п. 20.
18. Производится соответствующая θ операция обмена. Далее см. п. 20.
Из приведенной детализации п. 4 мы видим, что среди операций, которые может выполнять центральный процессор, содержатся следующие группы: 1) операции над данными; 2) операции перехода (условного и безусловного); 3) операция останова; 4) операции контакта; 5) операции обмена.
Наборы операций в каждой группе могут быть различными. Например, операциями над данными могут быть сложение, вычитание и др. (если данными являются числа); операции контакта заключаются в прочитывании содержимого контактных ячеек и соответствующей реакции на него или в записи кодов в контактные ячейки, т. е. в получении информации от другого процессора или в передаче информации ему.
Операция обмена заключается в переносе кодов из основной памяти процессора (в данном случае — оперативной) в буферную или в переносе данных из буферной памяти в основную.
Для того чтобы получить полное описание работы процессора, необходимо еще более детализировать ряд пунктов, вошедших в детализацию рабочего цикла. Читатель понимает, что (реальное) устройство ЭВМ во много раз сложнее (воображаемого) устройства машин Тьюринга. Поэтому и описание работы ЭВМ очень сложно и громоздко.
Тем не менее мы уже теперь можем сделать вывод, что работа процессора сама имеет характер выполнения некоторого алгоритма (описание работы процессора вполне допустимо считать алгоритмом в интуитивном смысле).
Если соответствующим образом расположенные в оперативной памяти процессора команды назвать программой, введенной в машину, то указанный алгоритм можно назвать алгоритмом выполнения программы, введенной в машину. Но тогда напрашивается истолкование программы, введенной в машину, в качестве алгоритма. Ни одна из логических теорий нам возможности такого истолкования не предоставляет.
В этом параграфе мы подробно остановились на работе центрального процессора. Рассмотрим теперь другие процессоры. Несмотря на все их разнообразие, в общих чертах принцип их действия тот же, что и принцип действия центрального процессора. Основная разница между процессорами заключается в различии их функций, т. е. в наборах операций, которые они выполняют.
Процессор, представляющий собой устройство ввода с перфокарт, имеет свои систему запоминающих устройств, устройство управления и операционное устройство (рис. 6).
Его главным запоминающим устройством является колода перфокарт. Операции, которые выполняет этот процессор,— это операции обмена: перенос информации с перфокарт в ячейки буферной памяти. Кроме ЗУ на перфокартах и буферной памяти, этот процессор имеет ячейку пуска-останова и, которая может хранить в себе 0 или 1, счетчик перенесенных кодов U и счетчик буферной памяти s.
Перед началом работы процессора в ячейку и должна быть записана единица, в ячейку s — нуль, а в ячейку U — число кодов, которые должны быть перенесены с перфокарт в буфер. ЗУ на перфокартах обладает тем свойством, что считывание с него кода, к которому возможен доступ, приводит к тому, что этот код удаляется из ЗУ (перфокарта извлекается из колоды, протягивается через читающую систему и падает в так называемый карман). При этом доступным делается следующий за ним код, а число кодов, хранящихся в ЗУ, уменьшается на единицу.
Работа процессора ввода заключается в следующем.
1. Если значение и равно единице, то см. п. 2, иначе снова выполняется п. 1.
2. Величина s увеличивается на 1, а величина U уменьшается на 1. Далее см. п. 3.
3. Очередной код с перфокарт переносится в ячейку ws . Далее см. п. 4.
4. Если U=0, то выполняется п. 5, иначе выполняется п. 1.
5. В ячейку и производится запись нуля. Далее см. п. 1.
Программа процессора заключается в выполнении одного и того же действия до исчерпания содержимого регистра U. Поэтому нет необходимости хранить программу в виде команд в запоминающих устройствах, как это было в центральном процессоре. После конца работы процессора регистры и и U содержат нули, а в регистре s стоит число, равное максимальному адресу ячейки, хранящей введенную информацию.
Ячейки и, U, s являются контактными с тем процессором, который может получить информацию из буферной памяти.
Пульт управления ЭВМ тоже является процессором. Его главная память состоит из некоторого числа ячеек, которые доступны человеку-оператору либо для записи (различные так называемые тумблерные регистры), либо для чтения (ячейки, связанные с сигнальными лампочками той или иной конструкции). В последнее время в состав пульта управления стали включать электрическую пишущую машинку, объединяющую в себе два запоминающих устройства: входное — ячейку, в которой накапливается текст при печатании его оператором (после заполнения такой ячейки ее содержимое переносится в буферную память), и выходное — рулонная бумага, на которой пишущая машинка автоматически печатает текст, переносимый для этого из буферной памяти. Посредством буферной памяти и ряда контактных ячеек пульт управления связан с другими процессорами.