Вирусы и средства борьбы с ними

       

Вычислительная машина с произвольной выборкой


Для моделирования компьютерной среды Ф. Лейтольд отталкивался от вычислительной машины с произвольной выборкой (Random Access Machine, RAM), определение которой представлено ниже.

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

  • Входная лента, представляющая собой последовательность ячеек, содержащих целые числа и доступных только для последовательного чтения - после чтения ячейки считывающая головка автоматически перемещается вправо
  • Выходная лента, представляющая собой последовательность ячеек, доступных только для последовательной записи, по умолчанию эти ячейки пусты
  • Программа - последовательность (возможно индексированная, т.е. с возможностью указать адрес некоторых или любых инструкций) инструкций, не находящаяся в памяти и, соответственно, неизменяемая, по умолчанию выполнение программы начинается с первой инструкции (можно ввести счетчик инструкций, указывающий на следующую к выполнению инструкцию, в этом случае по умолчанию счетчик указывает на первую инструкцию)
  • Память - неограниченная последовательность регистров r0, r1, …, ri, …, способных хранить целые числа, по умолчанию значения регистров пусты, нулевой регистр r0 используется для вычислений и часто называется аккумулятором, доступ к регистрам производится непосредственно по их индексам, откуда и происходит название машины.

Как следует из определения, после того как ячейка была прочитана или записана, она не может быть прочитана или записана еще раз. Неизменяемость программы означает в том числе и то, что программа не может менять себя в процессе выполнения. Фактический набор используемых в программе инструкций большого значения не имеет, поскольку вычислительная сложность алгоритма реализованного в разных (разумных) наборах инструкций асимптотически будет совпадать. Один из возможных вариантов инструкций для вычислительной машины с произвольной выборкой представлен в таблице:

ИнструкцияПараметрОписание
LOADОперандЗагружает в память значение, определяемое операндом
STOREОперандКопирует значение аккумулятора в ячейку памяти (регистр) определяемый операндом
ADDОперандДобавляет к аккумулятору значение, определяемое операндом
SUBОперандВычитает из аккумулятора значение, определяемое операндом
MULTОперандУмножает аккумулятор на значение, определяемое операндом
DIVОперандДелит аккумулятор на значение, определяемое операндом
READОперандСчитывает значение с входящей ленты в регистр, определяемый операндом
WRITEОперандЗаписывает на выходную ленту значение, определяемое операндом
JUMPМеткаПрисваивает счетчику инструкций значение метки
JGTZМеткаПрисваивает счетчику инструкций значение метки, если аккумулятор содержит положительное число
JZEROМеткаПрисваивает счетчику инструкций значение метки, если аккумулятор равен нулю
HALTЗавершает работу машины

Допускается три вида операндов:

  • i - обозначает собственно значение целого числа i
  • [i] - для неотрицательных i обозначает значение регистра ri
  • [[i]] - косвенная адресация, обозначает значение регистра rj, где j - значение регистра ri. Если j<0, машина завершает работу

По умолчанию (см. также определение) значение всех регистров равно нулю, счетчик инструкций указывает на первую инструкцию программы и выходная лента пуста. После выполнения k-й инструкции счетчик либо автоматически увеличивается на единицу и указывает на (k+1)-ю инструкцию, либо, если была выполнена инструкция JUMP или выполнены условия инструкций JGTZ или JZERO, принимает значение метки, либо, если была выполнена инструкция HALT, машина прекращает свою работу.



Содержание раздела