VAX и Berceley Pascal

РЕФЕРАТ
VAX И BERCELEY PASCAL

Компьютер VAX фирмы DEC (Digital Equipment Corporation)
принадлежит к семейству мини-ЭВМ. Система VAX похожа на любую
другую компьютерную систему. Аппаратное и программное обеспече-
ние, работая вместе, образуют высокоэффективную и высокопроиз-
водительную систему. Обобщенная структура системы VAX-11 пока-
зана на рис.1.
Консоль представляет собой терминал, используемый для на-
чальной загрузки системного программного обеспечения, модифика-
ции его средств и изменения системных параметров. Загрузка сис-
темных программ выполняется посредством подсоединенной к машине
недорогой внешней памяти — накопителя на гибких магнитных дис-
ках. Связь центрального процессора VAX с оперативной памятью и
внешними устройствами (за исключением консоли) осуществляется
через так называемое синхронное межсоединение. Физически оно
представляет собой набор гнезд, в которые могут вставляться мо-
дули на печатных схемах.
В системе VAX используется оперативная память произвольно-
го доступа (RAM — Random Access Memory), как и в персональных
компьютерах. В оперативной памяти находятся данные и программы,
выполняемые центральным процессором. Содержимое этой памяти
постоянно изменяется; она очищается в момент выключения компь-
ютера.
Устройство центрального процессора — это мозг компьютера.
Центральный процессор выполняет команды программ и управляет
другими компонентами системы.В состав центрального процессора
VAX входит логическое устройство, управляющее извлечением ко-
манд из памяти и их выполнение, а также арифметическое и логи-
ческое устройство, реализующее выполнение команд. В состав
центрального процессора входит также ряд регистров. Некоторые
.

из них предоставляются в распоряжение пользователей, а другие
предназначены исключительно для работы центрального процессора.
Пользователи могут работать с 16 регистрами центрального про-
цессора размером 32 двоичных разряда каждый. Двенадцать из них
(R0-R11) являются регистрами общего назначения. С помощью ре-
гистров R0-R11 можно формировать адреса операндов. Оставшимися
четырьмя регистрами VAX могут пользоваться только опытные прог-
раммисты, понимающие особую роль этих регистров в системе.
В состав центрального процессора VAX входит также регистр
из 32 двоичных разрядов, называемый длинным словом состояния
процессора. Его старшие 16 двоичных разрядов содержат информа-
цию о состоянии процессора. Изменение этой информации разрешено
только привилегированным системным программам пользователей.
Младшие 16 двоичных разрядов этого регистра образуют так назы-
ваемое слово состояния программы». В этом слове содержится ин-
формация о текущем состоянии выполняемой программы.
Но что такое компьютер без соответствующего программного
обеспечения ?! Машину без программного обеспечения иногда назы-
вают «голой». Первые машины на самом деле были «голыми». Они
управлялись с помощью набора переключателей. Сложность работы в
этом режиме и вызвала появление операционных систем.
Одной из них и явилась операционная система UNIX. Первая
версия ОС UNIX была разработана в 1969 г. К.Томпсоном и Д.Рит-
чи. А уже потом она стала интенсивно развиваться и адаптиро-
ваться различными фирмами для разных ЭВМ. В частности была
спроектирована ОС UNIX BSD 4.3 для компьютеров серии VAX.
Система UNIX проектировалась в первую очередь как инстру-
ментальная, предназначенная для создания и отладки новых средс-
тв программного обеспечения. И в этом ее создатели весьма пре-
успели. Прежде всего они учли все то лучшее, что имелось в то
.

время в уже существующих операционных системах. Создатели UNIX
смогли реализовать принципиально новую ОС на базе нескольких
новых и плодотворных идей. Положенные в основу системы идеи
позволили применять UNIX на компьютерах с разной архитекту-
рой.Следовательно, применение этой ОС позволяет переносить
программы, работающие под ее управлением, с одного типа машин
на другой с весьма незначительными изменениями или вовсе без
них. Это дает возможность разработчикам создавать программы в
виде законченного продукта, которому гарантирован широкий рынок
сбыта.
Она включает в себя множество средств, удобных для созда-
ния как отдельных программ, так и пакетов прикладных программ
7 0 Иерархическую файловую систему ;
7 0 Совместимые по вводу/выводу файлы, устройства и процессы;
7 0 Асинхронную обработку;
7 0 Интерпретатор командного языка;
7 0 Свыше 100 системных и вспомогательных команд;
7 0 Ряд языков программирования, включая Паскаль,Бейсик и Си.
Следует отметить, что в сравнении с другими операционными
системами UNIX имеет два недостатка. Она очень эффективна в тех
случаях, когда пользователи выполняют различные действия, а при
решении нескольких одинаковых задач ее эффективность падает.
Второй недостаток ОС UNIX — слабая приспособленность к работе в
режиме реального времени. Но не стоит терять из внимания то,
что существует возможность адаптирования UNIX для решения тако-
го рода задач, но следует учитывать, что существуют и другие
ОС, в большей степени приспособленные для решения таких задач.
И наконец указав некоторые начальные сведения о системе, я
попробую описать основные положения при работе с ней.
Работа с системой UNIX начинается с входа в нее, т.е. с
.

процедуры входа. Эта процедура обеспечивает возможность регист-
рировать имена пользователей, время входа, использованное ма-
шинное время, а также идентифицировать владельцев файлов, опре-
делять доступность пользователей, распознавать типы применяемых
терминалов и т.п. Для того чтобы пользователь имел возможность
входа в систему, он должен быть введен ее администратором в
число абонентов. При входе в систему вы получите сообщение «lo-
gin «. Вы должны будете ввести ваше регистрационное имя. Далее
после короткой паузы система потребует ввод пароля. Пароль —
это слово, которое держится в секрете и вводится в качестве
подтверждения идентификатора пользователя. Вводите пароль.
Любая вводимая с клавиатуры терминала информация отобража-
ется на экране. Исключение сделано только для пароля, вводимые
символы которого не отображаются. Ввод пароля требует повышен-
ного внимания, поскольку ошибка при этом приведет к необходи-
мости повторения всей процедуры входа.
Система проверяет введенный пароль, и, если он верен, про-
цедура входа продолжается. По окончании процедуры входа UNIX
выдауе на экран некоторое сообщение. После этого на экран выво-
дится приглашение, свидетельствующее о готовности системы при-
нять команду. Далее приводится синтаксис и описание основных
команд по навигации , работе в файловой системе и некоторых ин-
формационных команд.
.

┌─────────────────────────────────────────┬───────────────────┐
│ КОМАНДА │ ЗНАЧЕНИЕ │
├─────────────────────────────────────────┼───────────────────┤
│ ps │ выводит информацию│
│ │ о текущем состоя-│
│ │ нии сети. │
│ who │ вывод списка рабо-│
│ │ тающих в данный │
│ │ момент пользовате-│
│ │ лей. │
│ echo [набор символов] │ вывод набора сим-│
│ │ волов. │
│ data │ вывод текущей даты│
│ │ и времени. │
│ man [имя команды] │ выводит информацию│
│ │ о указанной коман-│
│ │ де. │
│ pwd │ вывод абсолютного│
│ │ имени текущего ка-│
│ │ талога. │
│ ls │ вывод содержимого│
│ │ текущего каталога.│
│ cd [путьимя директории] │ осуществляет пере-│
│ │ ход в указанную│
│ │ директорию. │
│ сat [путьимя файла] │ вывод содержимого│
│ │ содержимого файла│
│ │ на экран. │
│ mkdir [путьимя директории] │ создание директо-│
.

│ │ рии. │
│ cp [путь1имя файла1] [путь2имя файла1]│ копирование файла1│
│ │ из одной директо-│
│ │ рии в другую│
│ │ (сначала указыва-│
│ │ ется откуда потом│
│ │ куда) │
│ mv [путь1имя файла1] [путь1имя файла2]│ переименовка фай-│
│ │ ла1 в файл2. │
│ mv [путь1имя файла1] [путь2имя файла1]│ перемещение файла1│
│ │ из одной директо-│
│ │ рии в другую (сна-│
│ │ чала указывается│
│ │ откуда потом куда)│
│ rm [путьимя файла] │ удаление файла. │
│ rmdir [путьимя каталога] │ удаление пустого│
│ │ каталога. │
└─────────────────────────────────────────┴───────────────────┘
После работы с системой необходимо обязательно из нее вый-
ти. Выход из системы намного проще, чем вход в нее. Нужно наб-
рать logout и терминал будет отключен от операционной системы,
на этом ваша работа закончится.
В университете Berkeley (штат Колифорния, США) была разра-
ботана система программирования Berkeley Pascal. Система была
написана для ОС UNIX 4.X, разработанная в том же университете.
Программа на языке Паскаль записывается в виде последова-
тельности символов, к числу которых относятся латинские буквы,
арабские цифры, знаки препинания, знаки операций. Для обозначе-
ния исходных данных и результатов вычислений употребляются пе-
ременные, которыми могут быть не только любые буквы — a,b,D,U и
.

т.д., но и, например, последовательности символов вида
a1,b32,word и т.д., которые состоят из букв и цифр и начинаются
с буквы. Соответствующее исходное данное или результат вычисле-
ния называется значением переменной. Числа в программе записы-
ваются в десятичной системе счисления, вместо запятой пишется
точка 0,-1,0.242 и т.д. Количество цифр в числе не может быть
слишком большим;число не должно превышать максимально допусти-
мого в машине числа. Это относится и к количеству букв и цифр в
переменной.
Переменные и числа — простейшие частные случаи выражения.
Более сложные выражения строятся из чисел и переменных с по-
мощью знаков операций сложения, вычитания, умножения и деления.
Эти знаки суть +, -, *,/. Кроме того, в выражении могут быть
использованы круглые скобки и некоторые функции. Знак операции
деления / позволяет записывать в строку выражения, которые тра-
диционно записываются с выходом из строки в паскале пишут a/b,
c/17, (a*x+b)/(c+d) и т.д, Знак операции умножения * нельзя
опускать или заменять точкой. Допустимое для математического
текста выражение 0,5(x+7) 77 0(x+2) 77 0(x-3) в паскале должно быть за-
писано в виде 0,5*(x+7)*(x+2)*(x-3). Знак — (минус) может упот-
ребляться и для изображения величины, противоположной данной
-x, -(a*b+y) и т.д. Нельзя размещать два знака операций рядом;
последовательности символов 3*-2, x1/-x2-это не выражения, вы-
ражениями будут 3*(-2),x1/(-x2).
В выражении могут быть использованы следующие функции
sin(E) — синус Е,
cos(E) — косинус E,
ln(E) — натуральный логарифм Е;
exp(E) — показательная функция Е, т.е. e 5Е 0;
abs(E) — f,cjk.nyfz dtkbxbyf (модуль) Е, т.е. 72 0Е 72 0;
.

sqr(E) — квадрат (вторая степень) Е, т.е _. .Е 52 0;
sqrt(E) — квадратный корень из Е, т.е. 7? 0Е ;
выражение, задающее аргумент, всегда заключается в скобки. Так,
например, мы пишем sqrt(sgr(b)-4*a*c).
В ходе выполнения программы вычисляются значения выраже-
ний. При вычислении действуют обычные правила старшинства опе-
раций старшие операции — умножение и деление, следующие по
старшинству — сложение и вычитание. Из двух операций одинаково-
го старшинства первой выполняется та, знак которой в выражении
встречается раньше. Круглые скобки изменяют этот естественный
порядок значением выражения (x+y)/2 будет половина суммы зна-
чений переменных x и y, в то же время значением выражения x+y/2
будет сумма значения x и половины значения y.
Последовательность букв и цифр, начинающаяся с буквы, на-
зывается идентификатором. Из рассмотренных примеров видно, что
идентификатор не обязательно представляет собой переменную
sin, сos и т.д. — это не переменные, а имена функций. В прог-
раммах встречаются и другие виды идентификаторов.
Отдельные инструкции, входящие в программу, в Паскале при-
нято называть операторами.
Оператор присваивания состоит из имени, идентифицирующего
переменную, символа присваивания и выражения. В области описа-
ния функции должен быть по крайней мере один оператор присваи-
вания, в котором именем, идентифицирующим переменную, является
идентификатор функции.
Выполнение оператора присваивания приводит к вычислению
значения, представляемого выражением, и присваиванию значения
переменной, идентифицированный именем, стоящим слева от символа
присваивания. В случае рассмотренного выше присвоения, происхо-
дящего в области описания функции, осуществляется определение
.

результата функции, т.е. величины, возвращаемой в месте вызова
функции.
Необходимо, чтобы тип выражения и тип переменной соответс-
твовали друг другу. Это соответствие обеспечивается, если пере-
менная и выражение принадлежат к одному типу, а так же в том
случае, когда переменная типа real, а выражение целого типа.
Синтаксис
оператор-присваивания
переменная =выражение
Примеры
i =i+1;
select =true;
Оператор процедуры состоит из идентификатора процедуры,
непосредственно за которым следует заключенный в круглые скобки
список параметров вызова. Оператор процедуры без параметров
состоит только из идентификатора процедуры.
Выполнение оператора процедуры приводит к выполнению дейс-
твий, перечисленных в описании этой процедуры. Прежде всего чем
это произойдет, происходит идентификация переменных, являющихся
параметрами вызова процедуры, и определение значений выражений.
Синтаксис
оператор-процедуры
название-процедуры(список параметров)
название- процедуры
название-процедуры
идентификатор
Примеры
Insert(InputFile)
ColLin(inputstr,col)
Exit
.

Оператор перехода состоит из ключевого слова goto, после
которого следует ссылка на метку.
Выполнение оператора перехода приводит к выполнению после-
довательности операторов, начинающихся с оператора, отмеченного
меткой. Необходимо, чтобы оператор перехода находился в преде-
лах блока, в котором определена метка, указанная в операторе.
Недопустимо, чтобы оператор перехода передавал управление
внутрь сложного оператора или программы.
Синтаксис
оператор-перехода
goto метка
метка
идентификатор
Примеры
goto 345
goto finish
Составной оператор состоит из ключевого слова begin, после
которого идет последовательность операторов и ключевое слово
end. Составной оператор используется там, где синтаксис языка
требует использования одного оператора, а необходимо выполнение
последовательности операторов.
Выполнение составного оператора приводит к выполнению зак-
люченной в нем последовательности операторов.
Синтаксис
составной-оператор
begin последовательность-операторов end
Примеры
begin
i =1;
j =0;
.

end;
begin
Writeln(out);
read(in);
end;
Условный оператор состоит из ключевого слова if, после ко-
торого идет логическое выражение, ключевое слово then и опера-
тор. После оператора может следовать ключевое слово else и сно-
ва оператор.
Выполнение условного оператора заключается в вычислении
значения выражения, а затем, если его результатом будет величи-
на со значением true, в выполнении оператора, идущего после
ключевого слова then. Если результатом будет величина со значе-
нием false, а условный оператор не содержит ключевого слова el-
se, то выполнение оператора заканчивается. Если есть ключевое
слово else, то выполняется следующий после него оператор.
Если оператор, заключенный в условном операторе if, также
является условным, то в нем должно быть ключевое слово else.
Синтаксис
Условный-оператор
if логическое-выражение then оператор;
if логическое-выражение then оператор
else оператор;
Примеры
if a=b then a =5 else a =6;
if a=b then begin
a =6;
b =6
end;
if a=b then
.

if a=5 then
b =6
else
a =1
else
a =10;
Оператор варианта состоит из ключевого слова case,после которо-
го идет индекс варианта, ключевое слово of, список операторов
выбора, каждому из которых предшествует метка выбора, а после
него ключевое слово end.
Список меток выбора состоит из списка констант, после ко-
торого следует двоеточие. Каждая из констант этого списка долж-
на быть одного типа с индексом варианта. Если некоторая часть
списка констант является последовательностью элементов перечис-
ляемого типа, она может заменяться конструкцией
первый..последний
выделяющей первый и последний элементы последовательности.
Вместо меток выбора перед последним оператором выбора может ис-
пользоваться ключевое слово else. После такой «метки» двоеточие
не ставится.
Синтаксис
оператор-варианта
case индекс-варианта of
последовательность-операторов-выбора end
Выполнение оператора выбора заключается в определении зна-
чения индекса варианта и выполнении того оператора, перед кото-
рым стоит метка выбора со значением, равным значению индекса
варианта. Если такого оператора нет, то выполняется оператор
после ключевого слова else, если и такого оператора нет, то вы-
полняется пустой оператор.
.

Примеры
case a=b of
false i =1;
true j =2
end;
case a=b of
false i =1
else j =2
end;
ЦИКЛИЧЕСКИЕ ОПЕРАТОРЫ.
Оператор for состоит из ключевого слова for, за которым
следует идентификатор параметра цикла, символ присваивания, вы-
ражение, определяющее начальное значение параметра цикла, клю-
чевое слово to или downto, ключевое слово do и произвольный
оператор.
Параметр цикла и оба выражения должны быть одинакового пе-
речисляемого типа.
Синтаксис
оператор-for
for переменная =выражение 4a 0 to выражение 4b 0 do оператор
Выполнение оператора for приводит к выполнению содержащегося в
нем оператора для всех значений параметра цикла, которые нахо-
дятся в диапазоне значений выражение 4a 0 и выражение 4b 0.
Примеры
for i =1 to 4 do writeln(i);
Оператор while состоит из ключевого слова while, посте ко-
торого идут логическое выражение, ключевое слово do и любой
оператор.
Синтаксис
оператор-while
.

while выражение do оператор
Оператор while выполняется по следующему алгоритму
1. Определяется значение выражения.
2. Если это значение false, то выполнение оператора считается
оконченным.
3. Если получено значение true, то выполняется оператор, следу-
ющий после ключевого слова do, а потом описанные действия пов-
торяются сначала.
Пример
while i<>0 do begin
i =i-1;
writeln(i)
end;
Оператор repeat состоит из ключевого слова repeat и идущих
за ним произвольного оператора, ключевого слова until и логи-
ческого выражения.
Синтаксис
оператор-repeat
repeat оператор until выражение
Оператор repeat выполняется по следующему алгоритму
1. Выполняются операторы, идущие после ключевого слова repeat.
2. Вычисляется значение выражения после ключевого слова until.
3. Если получено значение true, то выполнение оператора счита-
ется оконченным.
4. Если получено значение false, то описанные действия повторя-
ются сначала.
Пример
i =10;
repeat
writeln(i);
.

i =i-1;
until i=0;
Стандартные типы Паскаля
Понятие тип связано с фиксированным набором данных. Переменная
относится к определенному типу, если ей можно присвоить данные, при-
надлежащие к набору определяющему этот тип. В языке Паскаль необходи-
мое явное определение типа каждой из переменных в программе.
Связь имени переменной с выбранным типом происходит при описании
переменной. Типы переменных делятся на простые и составные. К простым
типам относятся порядковые, вещественные и перечисляемые, к составным
— строковый, массивовый, записной, множественный и файловый. Среди
упомянутых типов можно выделить следующие стандартные типы integer
(целый), byte (байтовый), char (символьный), boolean (логический), re-
al (вещественный). Первые четыре называются порядковыми. Они характер-
ны не только тем, что элементы их упорядочены, они также образуют
счетное множество.
Стандартные скалярные типы определены по умолчанию, т.е. опреде-
лять их не надо. Их неявное определение действительно во всей програм-
ме, за исключением тех фрагментов, в которых они явно переопределяются.
Массивовый тип
Массивовый тип является составным типом данных. Массив состоит из
определенного количества компонентов одинакового типа. Доступ к компо-
нентам (элементам) массива, осуществляется с помощью индексирования.
Индексом может быть произвольное выражение порядкового типа, заключен-
ные в квадратные скобки. Допустимый диапазон индексов определяется в
описании массива.
Описание массивового типа состоит из ключевого слова array, после
которого следует заключенное в квадратные скобки описание типа индек-
сов, ключевое слово of, а после него описание типа элементов.
Синтаксис
.

описание-массива
array[тип-индексов] of тип-элементов
тип-индексов
описание-порядкового-типа
тип-элементов
описание-типа
Пирмеры
type
str = array [1..250] of char;
var
inputstr str;
Множественный тип
Множественный тип является составным типом. Множество —
это переменная, которой может быть присвоено выбранное подмно-
жество множества всех подмножеств. Базовым множеством последне-
го может быть произвольное множество элементов порядкового ти-
па. Каждый элемент рассматриваемого типа является одним из та-
ких элементов.
Два множества равны тогда и только тогда, если они состоят
из одинаковых элементов. Если все элементы одного множества яв-
ляются элементами другого, то говорят, что первое множество со-
держится во втором.
Описание множественного типа состоит из ключевого слова
set, после которого идет ключевое слово of и описание базового
типа. Необходимо, чтобы порядковый тип, выполняющий роль базо-
вого, содержал не более 256 элементов и чтобы результат функции
ord для каждого элемента находился в интервале [0;255].
Синтаксис
описание-множественного-типа
set of базовый-тип
.

основной-тип
порядковый-тип
Примеры
type
Mnojestvo=set of char;
Функции и процедуры языка Паскаль
Функции и процедуры являются объектами, описывающими опре-
деленные фрагменты алгоритма, реализуемого программой, поэтому
они называются подпрограммами.
В отличие от других сложных объектов, например оператора
варианта, подпрограмма выполняется только после её вызова, т.е.
в зависимости от ситуации после использования оператора проце-
дуры или вызова функции. Оператор процедуры может находиться в
любом месте программы, в котором может использоваться, напри-
мер, пустой оператор, а вызов функции может осуществляться
только в выражении в виде обозначения функции.
Подпрограммы, как и переменные, должны быть описаны. Опи-
сание подпрограммы может находиться в декларативной части бло-
ка. Описание подпрограммы, называемое иногда определением, сос-
тоит из заголовка и блока, являющегося телом подпрограммы. За-
головок процедуры состоит из ключевого слова procedure, за ко-
торым следуют имя процедуры, заключенный в круглые скобки пере-
чень параметров и точка с запятой. Заголовок функции состоит из
ключевого слова function, за которым следует заключенный в
круглые скобки перечень параметров функции, двоеточие, опреде-
ление типа результата функции и точка с запятой. Если перечень
параметров под программы пустой, то он опускается вместе со
скобками.
Необходимо, чтобы при выполнении функции был выполнен опе-
ратор присваивания, в котором слева от оператора присваивания
.

находится имя функции, а справа выражение, соответствующее типу
результата функции. Могут измениться некоторые параметры вызова.
Синтаксис
описание-подпрограммы
описание-процедуры
описание-функции
описание-процедуры
procedure имя-процедуры (перечень-параметров);
procedure имя-процедуры;
описание-функции
function имя-процедуры (перечень-параметров)
тип-результата;
function имя-процедуры тип-результата;
имя-процедуры
идентификатор
тип-результата
идентификатор-простого-типа
идентификатор-простого-типа
идентификатор
Элементы перечня параметров подпрограммы разделяются точ-
кой с запятой. Каждый элемент перечня содержит список идентифи-
каторов параметров, за которым следует двоеточие и идентифика-
тор типа параметров данного списка.
При обращении к подпрограмме происходит согласование фор-
мальных параметров подпрограммы с фактическими параметрами её
вызова. Количество фактических параметров должно быть равно ко-
личеству формальных параметров. Значения параметров передаются
в порядке появления их в заголовке подпрограммы и в обращении к
ней.
Связь формальных и фактических параметров может осущест-
.

вляться по значению и по ссылке. В первом случае формальный па-
раметр рассматривается как локальная переменная подпрограммы,
которой в момент её выполнения (для данного вызова подпрограм-
мы) присвоено значение фактического параметра. В втором случае
формальный параметр как бы замещает фактический. Для использо-
вания такого рода связи формальных ифактических параметров пе-
ред списком идентификаторов параметров должно быть ключевое
слово var&
Особым случаем связи по ссылки является связь формального
и фактического параметров, когда последний представляет собой
имя подпрограммы. Одно из ограничений языка Паскаль по отноше-
нию к стандартному Паскалю состоит в том, что такого рода связь
отсутствует.
Синтаксис
элемент-перечня-параметров
список-имён-параметров обозначение-типа
var список-имён-параметров обозначение-типа
var список-имен-параметров
обозначение-типа
идентификатор-типа
идентификатор-типа
идентификатор
имя-параметра
идентификатор
И в заключении отмечу, что Berkeley Pascal имеет в отличие
от стандартного Паскаля свои нестандартные функции и процедуры
(argc integer; возвращает число аргументов в командной строке;
Random(0..1) real; датчик случайных чисел;
argv(integer,string); получение аргумента командной строки по
номеру и т.д.), что значительно облегчает разработку программ и
возможности этого языка.
«