Всем известны SB (в девичестве SJ) и XM мониторы
В принципе - основные мониторы в RT.
Ну, если вы счастливый обладатель процессора с поддержкой ID и Supervisor, то неплохо заходит ZM монитор. Так же можно вполне успешно юзать младшие братья (X,Z)M монитора - XB и ZB.
Системные задания - это жалкая пародия на многозадачность (да да - RSX - наше всё в этом плане), но... есть, в принципе, сценарии, где может помочь и такая... хм... многозадачность, но SB, XB и ZB слегка полегче мониторов с её поддержкой, так что чаще всего используются они, а не их... более многоопытные варианты 
Так о чём речь то. А речь об одной интересной возможности в XB-XM-ZB-ZM мониторах, которая позволяет, пусть и тоже - в определённых сценариях, уделать SB монитор
И скорее всего - SJ монитор, который некоторые товарищи считают тру SJ монитором. А не его SB собрата. Типа SB - это просто кастрированный FB монитор. Ну, это их личное мнение, я обычно исхожу из задачи, возможности железа и возможности монитора.
Безусловно, эта возможность - не какое то изотерическое знание, и человек, часто листавший и часто листающий доки по RT, скорее всего о ней осведомлён, но, как показывает практике, когда долго не общался с RT (в целом) или XM семейством (в частности) - про неё легко забыть
Даже у меня она (чаще всего сижу в RSX, ну а если вдруг в RT - то да, SB монитор)... хм... вылетела из головы
Но вот возился с ДП - и подсознание пропихнуло таки инфу о ней на сознательный уровень 
Я использую для проверки PDP2011 и того, чего я там накосячил, два основных инструмента - тесты (зашитые в ПЗУ автором, зашитые мной в ОЗУ, XXDP) и SYSGEN
Последний вариант хорош комплексной проверкой, хотя, как показала практика - легко пропускает некоторые ошибки процессора. Впрочем, это же можно сказать и про саму RT. Тем не менее, для быстрой проверки - более менее. Вот его я и использую.
Демонстрация.
Сценарий 1. SYSGEN под SB
Код:
.IND S
.ini rk:/noq
.time
11:03:25
.$@sysgen.bld
.$@SYSGEN.MON
.ASSIGN RK5 SRC
.ASSIGN RK0 BIN
.ASSIGN RK0 MAP
.ASSIGN RK0 OBJ
.MACRO/OBJ:OBJ:KMSJ SRC:(SJ+SYSGEN.CND+EDTGBL+KMON+KMOVLY)
.MACRO/OBJ:OBJ:RMSJ SRC:(SJ+SYSGEN.CND+EDTGBL+USR+RMONSJ)
.MACRO/OBJ:OBJ:TBSJ SRC:(SJ+SYSGEN.CND+EDTGBL+SYSGEN.TBL)
.MACRO/OBJ:OBJ:BTSJ SRC:(SJ+SYSGEN.CND+EDTGBL+BSTRAP)
.LINK/EXE:BIN:RT11SJ.SYG/BOU:1000/PROMPT/MAP:MAP:RT11SJ OBJ:BTSJ
*OBJ:RMSJ,KMSJ,TBSJ//
Boundary section? OVLY0
.DELETE/NOQ OBJ:(BT,RM,KM,TB)SJ.OBJ
.MACRO/OBJ:OBJ:KMFB SRC:(FB+SYSGEN.CND+EDTGBL+KMON+KMOVLY)
.MACRO/OBJ:OBJ:RMFB SRC:(FB+SYSGEN.CND+EDTGBL+USR+RMONFB)
.MACRO/OBJ:OBJ:TBFB SRC:(FB+SYSGEN.CND+EDTGBL+SYSGEN.TBL)
.MACRO/OBJ:OBJ:BTFB SRC:(FB+SYSGEN.CND+EDTGBL+BSTRAP)
.LINK/EXE:BIN:RT11FB.SYG/BOU:1000/PROMPT/MAP:MAP:RT11FB OBJ:BTFB
*OBJ:RMFB,KMFB,TBFB//
Boundary section? OVLY0
.DELETE/NOQ OBJ:(BT,RM,TB,KM)FB.OBJ
.MACRO/OBJ:OBJ:KMXM SRC:(XM+SYSGEN.CND+EDTGBL+KMON+KMOVLY)
.MACRO/OBJ:OBJ:RMXM SRC:(XM+SYSGEN.CND+EDTGBL+USR+RMONFB)
.MACRO/OBJ:OBJ:SBXM SRC:(XM+SYSGEN.CND+EDTGBL+XMSUBS)
.MACRO/OBJ:OBJ:TBXM SRC:(XM+SYSGEN.CND+EDTGBL+SYSGEN.TBL)
.MACRO/OBJ:OBJ:BTXM SRC:(XM+SYSGEN.CND+EDTGBL+BSTRAP)
.LINK/EXE:BIN:RT11XM.SYG/BOU:1000/PROMPT/MAP:MAP:RT11XM OBJ:BTXM
*OBJ:RMXM,SBXM,KMXM,TBXM//
Boundary section? OVLY0
.DELETE/NOQ OBJ:(BT,RM,SB,KM,TB)XM.OBJ
.$@SYSGEN.DEV
.ASSIGN RK5 SRC
.ASSIGN RK0 BIN
.ASSIGN RK0 OBJ
.MACRO/OBJ:OBJ:TT SRC:(SYSGEN.CND+TT)
.LINK/EXE:BIN:TT.SYG OBJ:TT
.DELETE/NOQ OBJ:TT.OBJ
.MACRO/OBJ:OBJ:LD SRC:(SYSGEN.CND+LD)
.LINK/EXE:BIN:LD.SYG OBJ:LD
.DELETE/NOQ OBJ:LD.OBJ
.MACRO/OBJ:OBJ:LDX SRC:(XM+SYSGEN.CND+LD)
.LINK/EXE:BIN:LDX.SYG OBJ:LDX
.DELETE/NOQ OBJ:LDX.OBJ
.MACRO/OBJ:OBJ:VM SRC:(SYSGEN.CND+VM)
.LINK/EXE:BIN:VM.SYG OBJ:VM
.DELETE/NOQ OBJ:VM.OBJ
.MACRO/OBJ:OBJ:VMX SRC:(XM+SYSGEN.CND+VM)
.LINK/EXE:BIN:VMX.SYG OBJ:VMX
.DELETE/NOQ OBJ:VMX.OBJ
.MACRO/OBJ:OBJ:RK SRC:(SYSGEN.CND+RK)
.LINK/EXE:BIN:RK.SYG OBJ:RK
.DELETE/NOQ OBJ:RK.OBJ
.MACRO/OBJ:OBJ:RKX SRC:(XM+SYSGEN.CND+RK)
.LINK/EXE:BIN:RKX.SYG OBJ:RKX
.DELETE/NOQ OBJ:RKX.OBJ
.MACRO/OBJ:OBJ:NL SRC:(SYSGEN.CND+NL)
.LINK/EXE:BIN:NL.SYG OBJ:NL
.DELETE/NOQ OBJ:NL.OBJ
.MACRO/OBJ:OBJ:NLX SRC:(XM+SYSGEN.CND+NL)
.LINK/EXE:BIN:NLX.SYG OBJ:NLX
.DELETE/NOQ OBJ:NLX.OBJ
.time
11:12:27
Время генерации - c 11:03:25 по 11:12:27 или 00:09:02
Сценарий 1. SYSGEN под XM
Код:
.IND S
.ini rk:/noq
.time
11:13:46
.$@sysgen.bld
.$@SYSGEN.MON
.ASSIGN RK5 SRC
.ASSIGN RK0 BIN
.ASSIGN RK0 MAP
.ASSIGN RK0 OBJ
.MACRO/OBJ:OBJ:KMSJ SRC:(SJ+SYSGEN.CND+EDTGBL+KMON+KMOVLY)
.MACRO/OBJ:OBJ:RMSJ SRC:(SJ+SYSGEN.CND+EDTGBL+USR+RMONSJ)
.MACRO/OBJ:OBJ:TBSJ SRC:(SJ+SYSGEN.CND+EDTGBL+SYSGEN.TBL)
.MACRO/OBJ:OBJ:BTSJ SRC:(SJ+SYSGEN.CND+EDTGBL+BSTRAP)
.LINK/EXE:BIN:RT11SJ.SYG/BOU:1000/PROMPT/MAP:MAP:RT11SJ OBJ:BTSJ
*OBJ:RMSJ,KMSJ,TBSJ//
Boundary section? OVLY0
.DELETE/NOQ OBJ:(BT,RM,KM,TB)SJ.OBJ
.MACRO/OBJ:OBJ:KMFB SRC:(FB+SYSGEN.CND+EDTGBL+KMON+KMOVLY)
.MACRO/OBJ:OBJ:RMFB SRC:(FB+SYSGEN.CND+EDTGBL+USR+RMONFB)
.MACRO/OBJ:OBJ:TBFB SRC:(FB+SYSGEN.CND+EDTGBL+SYSGEN.TBL)
.MACRO/OBJ:OBJ:BTFB SRC:(FB+SYSGEN.CND+EDTGBL+BSTRAP)
.LINK/EXE:BIN:RT11FB.SYG/BOU:1000/PROMPT/MAP:MAP:RT11FB OBJ:BTFB
*OBJ:RMFB,KMFB,TBFB//
Boundary section? OVLY0
.DELETE/NOQ OBJ:(BT,RM,TB,KM)FB.OBJ
.MACRO/OBJ:OBJ:KMXM SRC:(XM+SYSGEN.CND+EDTGBL+KMON+KMOVLY)
.MACRO/OBJ:OBJ:RMXM SRC:(XM+SYSGEN.CND+EDTGBL+USR+RMONFB)
.MACRO/OBJ:OBJ:SBXM SRC:(XM+SYSGEN.CND+EDTGBL+XMSUBS)
.MACRO/OBJ:OBJ:TBXM SRC:(XM+SYSGEN.CND+EDTGBL+SYSGEN.TBL)
.MACRO/OBJ:OBJ:BTXM SRC:(XM+SYSGEN.CND+EDTGBL+BSTRAP)
.LINK/EXE:BIN:RT11XM.SYG/BOU:1000/PROMPT/MAP:MAP:RT11XM OBJ:BTXM
*OBJ:RMXM,SBXM,KMXM,TBXM//
Boundary section? OVLY0
.DELETE/NOQ OBJ:(BT,RM,SB,KM,TB)XM.OBJ
.$@SYSGEN.DEV
.ASSIGN RK5 SRC
.ASSIGN RK0 BIN
.ASSIGN RK0 OBJ
.MACRO/OBJ:OBJ:TT SRC:(SYSGEN.CND+TT)
.LINK/EXE:BIN:TT.SYG OBJ:TT
.DELETE/NOQ OBJ:TT.OBJ
.MACRO/OBJ:OBJ:LD SRC:(SYSGEN.CND+LD)
.LINK/EXE:BIN:LD.SYG OBJ:LD
.DELETE/NOQ OBJ:LD.OBJ
.MACRO/OBJ:OBJ:LDX SRC:(XM+SYSGEN.CND+LD)
.LINK/EXE:BIN:LDX.SYG OBJ:LDX
.DELETE/NOQ OBJ:LDX.OBJ
.MACRO/OBJ:OBJ:VM SRC:(SYSGEN.CND+VM)
.LINK/EXE:BIN:VM.SYG OBJ:VM
.DELETE/NOQ OBJ:VM.OBJ
.MACRO/OBJ:OBJ:VMX SRC:(XM+SYSGEN.CND+VM)
.LINK/EXE:BIN:VMX.SYG OBJ:VMX
.DELETE/NOQ OBJ:VMX.OBJ
.MACRO/OBJ:OBJ:RK SRC:(SYSGEN.CND+RK)
.LINK/EXE:BIN:RK.SYG OBJ:RK
.DELETE/NOQ OBJ:RK.OBJ
.MACRO/OBJ:OBJ:RKX SRC:(XM+SYSGEN.CND+RK)
.LINK/EXE:BIN:RKX.SYG OBJ:RKX
.DELETE/NOQ OBJ:RKX.OBJ
.MACRO/OBJ:OBJ:NL SRC:(SYSGEN.CND+NL)
.LINK/EXE:BIN:NL.SYG OBJ:NL
.DELETE/NOQ OBJ:NL.OBJ
.MACRO/OBJ:OBJ:NLX SRC:(XM+SYSGEN.CND+NL)
.LINK/EXE:BIN:NLX.SYG OBJ:NLX
.DELETE/NOQ OBJ:NLX.OBJ
.time
11:35:17
Время генерации - c 11:13:46 по 11:35:17 или 00:21:31
21-а минута против 9-ти. Почти в 2.5 раза лучше.. тьфу, то есть, хуже... то есть - смотря с чьей стороны посмотреть
Ну, знающие товарищи быстро поймут (или просто знают) - почему??? А вот почему.
SB монитор:
Код:
.SHO MEM
Address Module Words
------- ------ -----
160000 IOPAGE 4096.
157326 RK 149.
135632 RMON 4510.
001000 ..BG.. 23757.
.
XM монитор
Код:
.SHO MEM
------- Extended Memory --------
Address Module Words Type
------- ------ ----- ----
17760000 IOPAGE 4096. PRM HDW BYP
00760000 MEMTOP
00173600 ...... 95296.
00161200 SL 2688. PVT
00160000 MCA 320. PRM
00000000 KERNEL 28672. PRM HDW
------ Low Memory -------
Address Module Words
------- ------ -----
157274 RK 162.
120054 RMON 8008.
106012 USR 2577.
001000 ..BG.. 17669.
.
Свободной памяти в SB мониторе (23757 слов) примерно в полтора раза больше, чем в XM монитора (17669 слов). Ну, на самом деле не совсем правда, так как для файловых операция периодически требуется USR, а она в SB транзитная, а в XM мониторе резидентная, но... Для компиляции исходников (а тексты RT - это серьёзный вызов программе MACRO) - результат налицо.
А теперь обещанная "эзотерика". Во первых - SYSGEN будет запущен на том же самом мониторе с тем же самым количеством доступной памяти:
Код:
.SHO MEM
------- Extended Memory --------
Address Module Words Type
------- ------ ----- ----
17760000 IOPAGE 4096. PRM HDW BYP
00760000 MEMTOP
00173600 ...... 95296.
00161200 SL 2688. PVT
00160000 MCA 320. PRM
00000000 KERNEL 28672. PRM HDW
------ Low Memory -------
Address Module Words
------- ------ -----
157274 RK 162.
120054 RMON 8008.
106012 USR 2577.
001000 ..BG.. 17669.
.
И будет запущен тот же самый SYSGEN:
Код:
.IND S
.ini rk:/noq
.time
11:46:02
.$@sysgen.bld
.$@SYSGEN.MON
.ASSIGN RK5 SRC
.ASSIGN RK0 BIN
.ASSIGN RK0 MAP
.ASSIGN RK0 OBJ
.MACRO/OBJ:OBJ:KMSJ SRC:(SJ+SYSGEN.CND+EDTGBL+KMON+KMOVLY)
.MACRO/OBJ:OBJ:RMSJ SRC:(SJ+SYSGEN.CND+EDTGBL+USR+RMONSJ)
.MACRO/OBJ:OBJ:TBSJ SRC:(SJ+SYSGEN.CND+EDTGBL+SYSGEN.TBL)
.MACRO/OBJ:OBJ:BTSJ SRC:(SJ+SYSGEN.CND+EDTGBL+BSTRAP)
.LINK/EXE:BIN:RT11SJ.SYG/BOU:1000/PROMPT/MAP:MAP:RT11SJ OBJ:BTSJ
*OBJ:RMSJ,KMSJ,TBSJ//
Boundary section? OVLY0
.DELETE/NOQ OBJ:(BT,RM,KM,TB)SJ.OBJ
.MACRO/OBJ:OBJ:KMFB SRC:(FB+SYSGEN.CND+EDTGBL+KMON+KMOVLY)
.MACRO/OBJ:OBJ:RMFB SRC:(FB+SYSGEN.CND+EDTGBL+USR+RMONFB)
.MACRO/OBJ:OBJ:TBFB SRC:(FB+SYSGEN.CND+EDTGBL+SYSGEN.TBL)
.MACRO/OBJ:OBJ:BTFB SRC:(FB+SYSGEN.CND+EDTGBL+BSTRAP)
.LINK/EXE:BIN:RT11FB.SYG/BOU:1000/PROMPT/MAP:MAP:RT11FB OBJ:BTFB
*OBJ:RMFB,KMFB,TBFB//
Boundary section? OVLY0
.DELETE/NOQ OBJ:(BT,RM,TB,KM)FB.OBJ
.MACRO/OBJ:OBJ:KMXM SRC:(XM+SYSGEN.CND+EDTGBL+KMON+KMOVLY)
.MACRO/OBJ:OBJ:RMXM SRC:(XM+SYSGEN.CND+EDTGBL+USR+RMONFB)
.MACRO/OBJ:OBJ:SBXM SRC:(XM+SYSGEN.CND+EDTGBL+XMSUBS)
.MACRO/OBJ:OBJ:TBXM SRC:(XM+SYSGEN.CND+EDTGBL+SYSGEN.TBL)
.MACRO/OBJ:OBJ:BTXM SRC:(XM+SYSGEN.CND+EDTGBL+BSTRAP)
.LINK/EXE:BIN:RT11XM.SYG/BOU:1000/PROMPT/MAP:MAP:RT11XM OBJ:BTXM
*OBJ:RMXM,SBXM,KMXM,TBXM//
Boundary section? OVLY0
.DELETE/NOQ OBJ:(BT,RM,SB,KM,TB)XM.OBJ
.$@SYSGEN.DEV
.ASSIGN RK5 SRC
.ASSIGN RK0 BIN
.ASSIGN RK0 OBJ
.MACRO/OBJ:OBJ:TT SRC:(SYSGEN.CND+TT)
.LINK/EXE:BIN:TT.SYG OBJ:TT
.DELETE/NOQ OBJ:TT.OBJ
.MACRO/OBJ:OBJ:LD SRC:(SYSGEN.CND+LD)
.LINK/EXE:BIN:LD.SYG OBJ:LD
.DELETE/NOQ OBJ:LD.OBJ
.MACRO/OBJ:OBJ:LDX SRC:(XM+SYSGEN.CND+LD)
.LINK/EXE:BIN:LDX.SYG OBJ:LDX
.DELETE/NOQ OBJ:LDX.OBJ
.MACRO/OBJ:OBJ:VM SRC:(SYSGEN.CND+VM)
.LINK/EXE:BIN:VM.SYG OBJ:VM
.DELETE/NOQ OBJ:VM.OBJ
.MACRO/OBJ:OBJ:VMX SRC:(XM+SYSGEN.CND+VM)
.LINK/EXE:BIN:VMX.SYG OBJ:VMX
.DELETE/NOQ OBJ:VMX.OBJ
.MACRO/OBJ:OBJ:RK SRC:(SYSGEN.CND+RK)
.LINK/EXE:BIN:RK.SYG OBJ:RK
.DELETE/NOQ OBJ:RK.OBJ
.MACRO/OBJ:OBJ:RKX SRC:(XM+SYSGEN.CND+RK)
.LINK/EXE:BIN:RKX.SYG OBJ:RKX
.DELETE/NOQ OBJ:RKX.OBJ
.MACRO/OBJ:OBJ:NL SRC:(SYSGEN.CND+NL)
.LINK/EXE:BIN:NL.SYG OBJ:NL
.DELETE/NOQ OBJ:NL.OBJ
.MACRO/OBJ:OBJ:NLX SRC:(XM+SYSGEN.CND+NL)
.LINK/EXE:BIN:NLX.SYG OBJ:NLX
.DELETE/NOQ OBJ:NLX.OBJ
.time
11:53:23
.
Время генерации - c 11:46:02 по 11:53:23 или 00:07:21
00:07:21 против 00:09:02. Да, не в два с половиной раза лучше, но.. XM монитор (даже не его более лёгкий брат XB) более чем ощутимо сделал SB
. Причём использовались вполне себе стандартные программы (MACRO, LINK ну и ещё мелькают IND и PIP), а не специально написанные под XM и не запускающиеся под SB программы
То есть - щастье всем и пусть никто не уйдёт обиженным ((с) почти братья Стругацкие) почти даром
Почти - потому что программа всё таки должна соблюдать определённые правила
Ну или программист при её написании 
И всё, что мне понадобилось - выдать команду SET RUN VBGEXE перед запуском батника 
Ну а дальше - магия ДП и программистов фирмы DEC 
И что же произошло?
Поскольку показать распределение памяти при работе с этой хитрой настройкой не получится, придётся обходным путём увидеть - сколько памяти доступно программе. Поможет программа RESORC.
Программа запущена в "реальной" моде:
Код:
.R RESORC /J
Job Name Console Level State Low High Impure
--- ---- ------- ----- ----- --- ---- ------
0 RESORC 0 0 Run 000000 106010 122206
.
Если посмотреть SHO MEM для XM монитора - видно, что всё ок - RESORC доступна память доя 106010, а с адреса 106012 располагается USR
Программа запущена в "виртуальной" моде:
Код:
.VRUN RESORC /J
Job Name Console Level State Low High Impure
--- ---- ------- ----- ----- --- ---- ------
0 RESORC 0 0 Run 000000 157776 122206
.
RESORC принудительно запущена в виртуальном адресном пространстве - и её доступны уже 56 кб памяти, а не 35, как при запуске в режиме ядра и не 46, как при запуске под SB монитором
Не пытайтесь смотреть распределение памяти в виртуальном адресном пространстве (опция /x) - программа пытается забраться в служебные таблица монитора... которые ей недоступны (как раз тот самый пример несоблюдения правил программой
)
Знайте, а не только любите свой комп и софт под него - и вы сможете выжать из него чуть больше, а остальным это будет казаться тайной магией
Ключевое слово - знайте 
Ну и кстати - это ещё и тест корректности работы ДП