VAX и Berceley Pascal
принадлежит к семейству мини-ЭВМ. Система 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); получение аргумента командной строки по
номеру и т.д.), что значительно облегчает разработку программ и
возможности этого языка.