История развития программного обеспечения

Операционная система PDOS

Операционная система PDOS была разработана на предприятии САМАЛК[1] с целью создания переносимой операционной системы для мини- и микро-ЭВМ.

Название PDOS расшифровывается следующим образом:

  1. PDOS – Pascal DOS, так как центральным языком программирования операционной системы является язык Pascal.
  2. PDOS – Р-код DOS, так как переносимость операционной системы осуществляется на уровне "виртуального языка" Р.

Переносимость PDOS обеспечивается следующими свойствами:

  • программы выполняются на виртуальной машине Р. Свойства Р-машины определены так, что программы, написанные на языке высокого уровня, "удобно" транслируются в Р-код;
  • перенос на другую машину осуществляется не только переносом собственно языка высокого уровня, но и переносом полного его окружения;
  • структура операционной системы построена так, чтобы минимизировалась зависимость от конкретной ЭВМ.

Таким образом:

  • прикладные программы, написанные в PDOS, переносятся без всякой перекомпиляции;
  • не только прикладные программы, но и почти целиком PDOS является переносимым.

Как уже было отмечено, ключом переносимости является Р-машина. Р-код представляет собой "язык ассемблера" этой виртуальной машины. Подавляющая часть PDOS состоит из Р-кода. Перенос осуществляется путем написания эмулятора Р-кода для конкретной ЭВМ. Эмулятор Р-машины часто называют Р-интерпретатором. С помощью этого эмулятора эмулируется Р-машина на данной конкретной ЭВМ, программы выполняются в их Р-код представлении. Необходимо еще решить проблему, связанную с разными механизмами операций ввода-вывода. По мере возможности программы ввода-вывода включены в Р-кодовую часть PDOS. Параметры этих программ регулируются на уровне Р-код. На языке ассемблера данной ЭВМ мы должны написать только часть ввода-вывода (драйверы терминалов, печатающих устройств, дисков). Это занимает приблизительно несколько часов.

Р-машина как модификация и развитие стека типа LIFO

Р-машина является развитием псевдомашины Р-2, которая была разработана в университете г. Цюрих (Zurich Technical University). P-2-машина представляет собой стек типа LIFO (last-in first-out). Этот стек предназначен для хранения первичных данных. Он содержит параметры процедур, значения функций, описание подпрограмм и операнды команд Р-машины. В этот стек записываются также коды сегментов, которые представляют собой тело программы выполняемого Р-кода. Сегменты динамически загружаются в стек, а после их выполнения место освобождается. Таким образом осуществляется динамический оверлейный механизм выполнения программ. Это очень удобно, так как пользователи имеют возможность написать большие программы на микроЭВМ. Для хранения динамических данных в Р-машине используется куча. Обычно программы содержат два класса данных: динамические и статические данные. Статические данные хранятся в "памяти" (в стеке). Для хранения статических данных сегмента место резервируется в стеке перед загрузкой сегмента. Динамические данные загружаются в кучу при выполнении программы. Кроме стека и кучи Р-машина имеет внешние и внутренние регистры, описывающие состояние Р-машины (рис. 1).

Р-машина имеет богатый набор команд. Команда содержит код команды и от нуля до четырех операндов. Длина кода команды – обычно 1 байт, но некоторые имеют длину 2 байта. Р-машина представляет собой 16-разрядную машину. Стек и куча строятся из двух байтов. Операнд команды, если он имеется, определяет 16-разрядные данные. Иногда операнд команды имеет длину 1 байт. В этом случае он загружается в 16-разрядный регистр. Р-машина PDOS построена так, чтобы часто выполняемые команды занимали меньше "памяти". Часто выполняемые команды имеют меньшую длину (1–2 байта).

Команды и типы данных Р-машины

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

  • целые;
  • действительные;
  • логические;
  • множества;
  • массивы из байтов (вектор фиксированной длины);
  • строки (вектор переменной длины);
  • записи;
  • многомерные массивы.

Команды делятся на семь подгрупп:

  • перемещение данных (локальные, глобальные);
  • арифметические (целые, действительные);
  • логические;
  • операции над строками (сравнение, поиск и т. д.);
  • команды работы с массивами;
  • команды вызова подпрограмм и возвращения из подпрограмм;
  • переходы.

На рис. 2 приводится пример программы, написанной в Р-коде. Там же приведена программа, написанная на языке ассемблера для мини-ЭВМ семейства PDP-11.

Эффективность Р-машины

При использовании Р-машины теряется эффективность по времени, так как выполняется Р-код, а не машинный код данного процессора. Но зато мы получаем переносимость и более компактную Р-код программу. Обычно Р-код данной программы занимает меньше памяти, чем описание тех же действий на языке ассемблера данной ЭВМ (см. рис. 2). Поэтому при больших программах в конце концов Р-код выполняется быстрее, чем программа, написанная на языке ассемблера, так как благодаря своей компактности он требует меньшего оверлея. Поскольку имеются трансляторы с Р-кода на разные языки ассемблера, можно применить смешанную стратегию. Для достижения эффективности часть программы можно оптимизировать на скорость, а другую часть – на занимаемое место. Те части программы, которые являются критическими, при выполнении по времени можно транслировать с Р-кода на язык ассемблера данной ЭВМ.

OFFSET MNEMONIC OPERANDS HEX CODE
3: SLDC 0 00
  STL 2 A402
6: LDCI 9999 810F27
  STL 5 A40S
11: SLDL 2 21
  SLDL 5 24
  LEQI   B2
  FJP 30 D40E
16: LAO 6 8606
  SLDL 2 21
  IXA 1 D701
  SLDC 1 01
  STO   C4
23: SLDL 2 21
  SLDC 1 01
  AD1   A2
  STL 2 A402
28: UJP 11 8AED
30: SLDC 0 00
  STL 3 A403
33: SLDC 1 01
  STL 2 A402
36: SLDL 8 27
  STL 5 A405
39: SLDL 2 21
  SLDL 5 24
  LEQI   B2
  FJP 107 D43F
44: SLDC 1 01
  STL 1 A401
47: SLDL 2 21
  SLDC 1 01
  SBI   A3
  STL 6 A406

 

Final PDP-11 code

for segment: 1 PASCALT   .RADIX 10
procedure: 2 PC .EQU R7
Source Object [  6461] SP .EQU R6
P-Code N-Code   MP .EQU R5
(Dec. Offsets)   BASE .EQU R3
  0 000276 000007 .WORD   190,7
  4        
3: 0 250 :p-code NAT  
  1 234 :p-code NOP  
  2 005065 000012   CLR 10(MP)
6: 6 012765 023417 000020   MOV #9999, 16(MP)
11: 12 026565 000012 000020 L2: CMP 10(MP), 16(MP)
  18 003015   BCT L1
16: 20 016501 000012   MOV 10(MP), R1
  24 006301   ASL Rl
  26 060301   ADD BASE, Rl
  28 012761 000001 000022   MOV #1, 18(R1)
23: 34 016504 000012   MOV 10(MP), R4
  38 005204   INC R4
  40 010465 000012   MOV R4, 10(MP)
28: 44 000757   BR L2
30: 46 005065 000014 L1: CLR 12(MP)
33: 50 012765 000001 000012   MOV #1, 10(MP)
36: 56 016565 000026 000020   MOV 22(MP), 16(MP)
39: 62 026565 000012 000020 L6: CMP 10(MP), 16(MP)
  68 003071   BCT L3
44: 70 012765 000001 000010   MOV #1, 8(MP)
47: 76 016504 000012   MOV 10(MP), R4
  80 005304   DEC R4
  82 010465 000022   MOV R4, 18(MP)

 

Построение PDOS по слоям

Операционную систему PDOS можно разделить на четыре части.

Самый верхний, машинно-независимый уровень написан на языке Pascal. Эта часть операционной системы является выполняемой для Р-машины. Первый уровень содержит:

  • ядро операционной системы;
  • трансляторы (Pascal, Basic, Fortran-77);
  • файловую систему;
  • текстовые редакторы, связывающий загрузчик и т. д.

Второй уровень представляет собой эмулятор Р-машины, который написан на языке ассемблера данной ЭВМ. Эта часть зависит от типа процессора, но независима от внешних устройств.

На третьем уровне реализуется система ввода-вывода. BIOS (Basic Input-Output System) содержит программы ввода-вывода, которые вызываются эмулятором Р-машины. Эти программы написаны на языке ассемблера данной ЭВМ. Но здесь находятся только те программы, которые являются общими для всех типов внешних устройств.

Четвертый уровень – SIOS (Simplified I/O System). Здесь на самом низком уровне находятся программы, которые зависят не только от данного процессора, но и от данного внешнего устройства.

На рис. 3 приведены уровни PDOS. В нижней части рисунка дана таблица, где указаны характеристики разных уровней.

PDOS
Уровень Используемый код Независимость от консоли Независимость от внешних устройств Требуется ли переписывать
- Р Нет Да Для нового терминала
1 Р Да Да Нет
2 Ассемблер Да Да Для нового ЦП
3, 4 Ассемблер Да Нет SIOS – да, BIOS – для нового ЦП

 

В силу послойного построения PDOS переносимость его с одной машины на другую облегчается. Имеются специальные программы PDOS, с помощью которых можно настроить операционную систему на данную ЭВМ с данными внешними устройствами. Сюда относится, например, настройка на данный терминал, настройка на данный диск или гибкий магнитный диск и т. д.

Этапы развития PDOS

Операционная система PDOS имеется в трех версиях:

  1. PDOS I – близко к Р-2-машине;
  2. PDOS II – совместно с операционной системой UCSD;
  3. PDOS III – расширение PDOS с обработкой данных (индексно-последовательная файловая система на основе В-деревьев + интерфейс, подобный DBASE III).

PDOS имеется для следующих ЭВМ: IBM PC (8086/8088), ЯНУС (одноплатный процессор), подобный LSI-11, СМ4, СР/М-машины (Z80).

Литература

  1. Nori К. V., Ammann U. et al. The Pascal (P) Compiler: Implementation Notes, ETH Zurich Technical Report 10, Dec., 1974.
  2. UCSD Pascal User's Manual (Revised), Soflech Microsystems, San Diego, CA, Feb., 1980.

Примечания

1. САМАЛК – Венгерское национальное предприятие по использованию и внедрению вычислительной техники.

Статья опубликована в сборнике "Методические материалы и документация по пакетам прикладных программ", выпуск 53, Москва, МЦНТИ, 1987 г., стр. 68.