Операционная система PDOS
П. Бекещи, Д. Валович, И. Салаи, Т. Одор, М. Феке
Операционная система PDOS была разработана на предприятии САМАЛК[1] с целью создания переносимой операционной системы для мини- и микро-ЭВМ.
Название PDOS расшифровывается следующим образом:
- PDOS – Pascal DOS, так как центральным языком программирования операционной системы является язык Pascal.
- 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. В нижней части рисунка дана таблица, где указаны характеристики разных уровней.
Уровень | Используемый код | Независимость от консоли | Независимость от внешних устройств | Требуется ли переписывать |
---|---|---|---|---|
- | Р | Нет | Да | Для нового терминала |
1 | Р | Да | Да | Нет |
2 | Ассемблер | Да | Да | Для нового ЦП |
3, 4 | Ассемблер | Да | Нет | SIOS – да, BIOS – для нового ЦП |
В силу послойного построения PDOS переносимость его с одной машины на другую облегчается. Имеются специальные программы PDOS, с помощью которых можно настроить операционную систему на данную ЭВМ с данными внешними устройствами. Сюда относится, например, настройка на данный терминал, настройка на данный диск или гибкий магнитный диск и т. д.
Этапы развития PDOS
Операционная система PDOS имеется в трех версиях:
- PDOS I – близко к Р-2-машине;
- PDOS II – совместно с операционной системой UCSD;
- PDOS III – расширение PDOS с обработкой данных (индексно-последовательная файловая система на основе В-деревьев + интерфейс, подобный DBASE III).
PDOS имеется для следующих ЭВМ: IBM PC (8086/8088), ЯНУС (одноплатный процессор), подобный LSI-11, СМ4, СР/М-машины (Z80).
Литература
- Nori К. V., Ammann U. et al. The Pascal (P) Compiler: Implementation Notes, ETH Zurich Technical Report 10, Dec., 1974.
- UCSD Pascal User's Manual (Revised), Soflech Microsystems, San Diego, CA, Feb., 1980.
Примечания
1. САМАЛК – Венгерское национальное предприятие по использованию и внедрению вычислительной техники.
Статья опубликована в сборнике "Методические материалы и документация по пакетам прикладных программ", выпуск 53, Москва, МЦНТИ, 1987 г., стр. 68.