UEA VAX Demand Control System
K.Worvill
May 1990
Version 1.1 Cost £0.00
---------------©University of East Anglia 1990 ---------------
This material may not be used in part or whole for financial gain without prior permission. It may otherwise be freely copied provided that due acknowledgement is given to the Computing Centre, UEA Norwich, and that the wording of this statement of copyright is reproduced.
UEA VAX Demand Control Installation
CPC Note xx
Images
UEA$SYSTEM:SYSLOGIN.EXE ! System wide login
UEA$SYSROOT:[LABCLASS] ! Student class control
UEA$SYSROOT:[JOB_MONITOR] ! JOB_MONITOR system
UEA$SYSROOT:[LOAD_MONITOR] ! LOAD_MONITOR system
UEA$SYSROOT:[BUDGET] ! Budget control
UEA$DISK:[JOBBER]JOBBER.EXE ! General task scheduler
Command Procedures
SYS$MANAGER:RUNJOB.COM ! General purpose runjob
SYS$MANAGER:MONITOR_STARTUP.COM ! Start JOB_MONITOR
SYS$MANAGER:MONITOR_SWITCH.COM ! Switch JOB_MONITOR
SYS$MANAGER:MONITOR_STOP.COM ! Stop JOB_MONITOR
SYS$MANAGER:JOB_MONITOR.COM ! JOB_MONITOR job
SYS$MANAGER:LOAD_MONITOR.COM ! LOAD_MONITOR job
SYS$MANAGER:UEA_JOBBER.COM ! UEA_JOBBER job
UEA$SYSTEM:TIMETABLE.COM ! Timetable display
Global symbol commands
TIM*ETABLE :== @UEA$SYSTEM:TIMETABLE.COM
SYSTARTUP.COM / SYLOGICALS.COM
$ASSIGN/SYSTEM/EXEC/TRAN=(CONCEALED,TERMINAL) 'F$LOG("SYS$SYSDEVICE")'
UEA$DISK
$ASSIGN/SYSTEM/EXEC/TRAN=(CONCEALED,TERMINAL)
'F$LOG("SYS$SYSDEVICE")'[UEASYSTEM.] UEA$SYSROOT
$ASSIGN/SYSTEM UEA$DISK:[UEASYSTEM] UEA$SYSTEM
$
$ASSIGN/SYSTEM "''F$LOG("SYS$ANNOUNCE")'" MON$ANNOUNCE
$ASSIGN/SYSTEM TRUE TEACHING_NODE ! For class counts on SYS$ANNOUNCE
$@SYS$MANAGER:MONITOR_STARTUP.COM ! The Job Monitor
$@SYS$MANAGER:RUNJOB LOAD_MONITOR ! The Load Monitor
$@SYS$MANAGER:RUNJOB UEA_JOBBER ! Task scheduler
Installed images
! Essential to all operations
ADD/OPEN/HEAD/PRIV=(CMEXEC,SYSPRV) UEA$SYSTEM:SYSLOGIN.EXE
! Only needed for unprivileged user access to class scheduling data
ADD/OPEN/HEADER/PRIV=(SYSPRV) UEA$SYSROOT:[LABCLASS]WHATCLASS.EXE
ADD/OPEN/HEADER/PRIV=(SYSPRV) UEA$SYSROOT:[LABCLASS]CLASS_RIGHTS.EXE
! Only needed for Budget/Demand control system
ADD/OPEN/HEADER/PRIV=(SYSPRV) UEA$SYSROOT:[BUDGET]BUDGET_QUERY.EXE
ADD/OPEN/HEADER/PRIV=(SYSPRV) UEA$SYSROOT:[BUDGET]QUOTA_TRANSFER.EXE
ADD/OPEN/HEADER/PRIV=(SYSPRV) UEA$SYSROOT:[BUDGET]CREDIT_TRANSFER.EXE
ADD/OPEN/HEADER/PRIV=(SYSPRV) UEA$SYSROOT:[BUDGET]CREDIT_UPDATE.EXE
ADD/OPEN/HEADER/PRIV=(SYSPRV) UEA$SYSROOT:[BUDGET]CREDIT_REPORT.EXE
ADD/OPEN/HEADER/PRIV=(SYSPRV) UEA$SYSROOT:[BUDGET]SET_QUOTA.EXE
ADD/OPEN/HEADER/PRIV=(SYSPRV) UEA$SYSROOT:[BUDGET]SET_CREDIT.EXE
Command definitions
UEA$SYSROOT:[COMMANDS]
BUDGET.CLD;3 ! Budget control & display
STUDENT.CLD;12 ! Class switch control & display
JSWITCH.CLD;4 ! ON/OFF/TOGGLE JOB_MONITOR function switches
Installation:
0)
Check the compile time configuration parameters at the end of this list are ok , particularly the maximum process count ( MAXPROCS >= SYSGEN MAXPROCESSCNT ) & the maximum UIC group/member value MAXUIC . The UIC is used as an index into the user budget mapped file sections . A higher UIC range means the section files will need to be expanded. Also check that the preset rights identifiers don't clash with any local ones in name or value.
1)
Unpack the save set UEA_DEMAND_CONTROL.BCK to UEA$DISK:[*]
2)
Check global pages available for memory mapped file sections
UEA$SYSROOT:[JOB_MONITOR]LOGINDATA.DAT 12
UEA$SYSROOT:[JOB_MONITOR]PROCDATA.DAT 84
UEA$SYSROOT:[JOB_MONITOR]USER_CREDIT.DAT 512
UEA$SYSROOT:[JOB_MONITOR]USER_DEBIT.DAT 512
UEA$SYSROOT:[JOB_MONITOR]USER_USAGE.DAT 1024
3)
Set up the global section files as above .These are needed even if the budgeting system is switched off.
$ SET DEF UEA$SYSROOT:[JOB_MONITOR]
$ RUN INITSECT_CREDIT
$ RUN INITSECT_DEBIT
$ RUN INITSECT_USAGE
$ RUN INITSECT_PROCDATA ! also installs as permanent
$ RUN INITSECT_LOGINDATA ! " " " "
4)
Check file protections are set as :
Directory UEA$SYSROOT:[JOB_MONITOR]
USER_CREDIT.DAT;1 (RWED,RWED,,)
USER_DEBIT.DAT;1 (RWED,RWED,,)
USER_USAGE.DAT;1 (RWED,RWED,,)
PROCDATA.DAT;1 (RWED,RWED,,)
LOGINDATA.DAT;1 (RWED,RWED,,)
5)
Add the system startup information + installed image list to SYSTARTUP.COM/SYLOGICALS.COM .
Add the following commands to SYSTARTUP.COM to install the permanent global sections UEA_PROCDATA & UEA_LOGINDATA .
$ SET DEF UEA$SYSROOT:[JOB_MONITOR]
$ RUN INSTALL_PROCDATA
$ RUN INSTALL_LOGINDATA
6)
Define the system wide logicals now
7)
Install the images now
8)
Add the commands to your local tables
9)
Set the required JOB_MONITOR switches
SYSANNOUNCE = T for appending extra login info. to SYS$ANNOUNCE & making student login checks
LOGOUT = T to allow JOB_MONITOR forced logouts
BUDGET_LOGOUT = T to allow budget/demand control
TERMINAL_TIMEOUT = T to allow idle terminal timeout
LAB_PRIORITY = T to give student scheduled class priority
For example:
$ JSWITCH ! to read status T=true F=false
$ JSWITCH/ON/BUDGET_LOGOUT
/OFF
/TOGGLE
10)
Define the following rights identifiers + class idents. required.
Class control identifiers:
STUDENT 800A0001
EXAMPLE_CLASS 800A0002
NEXT_CLASS 800A0003
As required in sequence
General purpose JOB_MONITOR recognised identifiers:
NO_SUB_TIMEOUT 800B0028 ! No subprocess timeout
NO_TIMEOUT 800B0029 ! No idle timeout
MULTIPLE_LOGIN 800B0030 ! Allows multiple login
OVERDRAFT 800B0031 ! Allows overdrawn login
ALT_TIMEOUT 800B0032 ! Alternative timeout
eg.
UAF> ADD/IDENT/VALUE=IDENT:%XA0001 STUDENT
Note that VMS adds the high bit to make %X800A0002 to distinguish rights identifiers from UIC's in the rights database. The high word value 800A is used as a key to distinguish student class identifiers from others. The low word value is then used as an index. The index part must be unique in the combined A & B set & can be in the range 1 to MAXRIGHTS ( 64 hex ).
11)
Set up the timetable file UEA$DISK:[JOBBER]LABCLASS.DAT as
!!! Comment lines start !!!
!!! Format of entries is: DAY@HOUR CLASSNAME SWITCH
!!! ( single space between items )
!!! DAY = MON,TUE,WED ...
!!! HOUR = 0000 ... 2300
!!! CLASSNAME is the rights identifier name of the class
!!! or the Username of [n,0] if a UIC group class
!!! SWITCH = ON,OFF,EXCLUDE,INCLUDE to allow class control or
!!! group login exclusion.
!!! Examples:
!!!
MON@1000 SYSFOR ON
MON@1100 SYSFOR OFF
TUE@1400 SYS1B ON
TUE@1500 SYS1B OFF
12)
Arrange to run LABCLASS.COM hourly ( eg. using UEA_JOBBER see HOURLY.COM )
13)
Add a $RUN for SYSLOGIN.EXE at a suitable point in the system wide login
14)
Arrange to switch JOB_MONITOR & LOAD_MONITOR at eg. day intervals ( eg. using UEA_JOBBER see example file DAY.HOUR )
15)
Arrange to do budget updates/reports as required ( eg. using UEA_JOBBER see example file DAY.HOUR )
16)
Start the JOB_MONITOR as from SYSTARTUP.COM
17)
Start the LOAD_MONITOR " " if required for budget/demand control.
LOAD_MONITOR defines a system logical UEA$LOAD which is read by the JOB_MONITOR in FORTRAN I5 format. The demand factor is displayed as UEA$LOAD/10.0 .
18)
Grant the STUDENT identifier + class scheduling identifiers to the appropriate users.
A) Required files list:
UEA$SYSTEM:SYSLOGIN.EXE
UEA$SYSTEM:TIMETABLE.COM
UEA$SYSROOT:[LABCLASS]CLASS_RIGHTS.EXE
UEA$SYSROOT:[LABCLASS]LABCLASS.COM
UEA$SYSROOT:[LABCLASS]LABCLASS.EXE
UEA$SYSROOT:[LABCLASS]SET_CASUAL.EXE
UEA$SYSROOT:[LABCLASS]SET_CLASS.EXE
UEA$SYSROOT:[LABCLASS]WHATCLASS.EXE
UEA$SYSROOT:[LOAD_MONITOR]LOADING.EXE
UEA$SYSROOT:[JOB_MONITOR]CLEARSECT_CREDIT.EXE
UEA$SYSROOT:[JOB_MONITOR]CLEARSECT_DEBIT.EXE
UEA$SYSROOT:[JOB_MONITOR]CLEARSECT_USAGE.EXE
UEA$SYSROOT:[JOB_MONITOR]INITSECT_CREDIT.EXE
UEA$SYSROOT:[JOB_MONITOR]INITSECT_DEBIT.EXE
UEA$SYSROOT:[JOB_MONITOR]INITSECT_USAGE.EXE
UEA$SYSROOT:[JOB_MONITOR]INITSECT_PROCDATA.EXE
UEA$SYSROOT:[JOB_MONITOR]INITSECT_LOGINDATA.EXE
UEA$SYSROOT:[JOB_MONITOR]INSTALL_PROCDATA.EXE
UEA$SYSROOT:[JOB_MONITOR]INSTALL_LOGINDATA.EXE
UEA$SYSROOT:[JOB_MONITOR]DELESECT_PROCDATA.EXE
UEA$SYSROOT:[JOB_MONITOR]DELESECT_LOGINDATA.EXE
UEA$SYSROOT:[JOB_MONITOR]JOB_MONITOR_SWITCHES.EXE
UEA$SYSROOT:[JOB_MONITOR]MONITOR.EXE
Section files created with the INITSECT_ programs.
UEA$SYSROOT:[JOB_MONITOR]LOGINDATA.DAT as permanent section
UEA$SYSROOT:[JOB_MONITOR]PROCDATA.DAT " " "
UEA$SYSROOT:[JOB_MONITOR]USER_CREDIT.DAT as temporary section
UEA$SYSROOT:[JOB_MONITOR]USER_DEBIT.DAT " " "
UEA$SYSROOT:[JOB_MONITOR]USER_USAGE.DAT " " "
SYS$COMMON:[SYSMGR]JOB_MONITOR.COM
SYS$COMMON:[SYSMGR]LOAD_MONITOR.COM
SYS$COMMON:[SYSMGR]UEA_JOBBER.COM
SYS$COMMON:[SYSMGR]RUNJOB.COM
SYS$COMMON:[SYSMGR]MONITOR_STARTUP.COM
SYS$COMMON:[SYSMGR]MONITOR_SWITCH.COM
SYS$COMMON:[SYSMGR]MONITOR_STOP.COM
UEA$DISK:[JOBBER]JOBBER.EXE
UEA$DISK:[JOBBER]HOURLY.COM
UEA$DISK:[JOBBER]LABCLASS.DAT
UEA$DISK:[JOBBER]DAY.HOUR
UEA$DISK:[JOBBER]I_CREDIT_UPDATE.COM
UEA$DISK:[JOBBER]B_CREDIT_UPDATE.COM
UEA$SYSROOT:[BUDGET]BUDGET_CONTROL.HLB
UEA$SYSROOT:[BUDGET]BUDGET_QUERY.EXE
UEA$SYSROOT:[BUDGET]CREDIT_REPORT.EXE
UEA$SYSROOT:[BUDGET]CREDIT_TRANSFER.EXE
UEA$SYSROOT:[BUDGET]CREDIT_UPDATE.EXE
UEA$SYSROOT:[BUDGET]QUOTA_TRANSFER.EXE
UEA$SYSROOT:[BUDGET]SET_CREDIT.EXE
UEA$SYSROOT:[BUDGET]SET_QUOTA.EXE
B) JOB_MONITOR/$BUDGET configuration parameters:
C [UEA_SOFTWARE.MONITOR]MAXPROCS.CMN
C
C Maximum processes & Maximum UIC ( group or member )
INTEGER*4 MAXPROCS,MAXUIC
PARAMETER(MAXPROCS=200,MAXUIC='377'O)
C
C If MAXUIC is changed then the USER_CREDIT.DAT/USER_USAGE.DAT/
C USER_DEBIT.DAT section creation/mapping code system service
C calls will need to be reviewed.
C [UEA_SOFTWARE.MONITOR]UEAPARAMS.CMN
C Idle process timeout/logout parameters ( minutes )
C
C Processes are defined as idle if no CPU,no buffered i/o,
C & no direct i/o in specified interval.
C JOB_MONITOR broadcasts a warning at one minute intervals after
C TWARNING up to TLOGOUT. The broadcasts are in category USER1
C except for the logout pending message in URGENT.
C
C ALT_TWARNING/ALT_TLOGOUT may be used for an alternative interval
C for processes holding the ALT_TIMEOUT rights identifier. This
C also clears the screen on logout.
INTEGER*4 TWARNING,TLOGOUT
INTEGER*4 ALT_TWARNING,ALT_TLOGOUT
PARAMETER(TWARNING=10,TLOGOUT=15)
PARAMETER(ALT_TWARNING=10,ALT_TLOGOUT=15)
C UIC group control parameters ... JOB_MONITOR & $BUDGET utilities
INTEGER*4 MINACT
PARAMETER(MINACT='30'O) ! minimum UIC group for
JOB_MONITOR actions
INTEGER*4 MIN_CHARGED_GROUP
PARAMETER(MIN_CHARGED_GROUP='41'O) ! for JOB_MONITOR charging
INTEGER*4 SYS_REPORT_GROUP
PARAMETER(SYS_REPORT_GROUP='15'O) ! max. group allowed 'system'
reports from $BUDGET/GROUP
INTEGER*4 SYS_UIC
PARAMETER(SYS_UIC='10'O) ! system UIC limit
C Limits on JOB_MONITOR/BUDGET field values
INTEGER*4 QUOTA_LIMIT
PARAMETER(QUOTA_LIMIT=30000) ! UAF 16 bit
INTEGER*4 CREDIT_LIMIT
PARAMETER(CREDIT_LIMIT=-30000) ! Credit section 16 bit
INTEGER*4 DEBIT_LIMIT
PARAMETER (DEBIT_LIMIT=30000) ! Debit section 16 bit
INTEGER*4 USAGE_LIMIT
PARAMETER (USAGE_LIMIT=9999999) ! Usage section 32 bit
INTEGER*4 USER_MAX_CREDIT
PARAMETER(USER_MAX_CREDIT=10000) ! $BUDGET/CREDIT_TRANSFER
C Job cost coefficients
INTEGER*4 C_CPU,C_BUFIO,C_DIRIO,C_PFLTS
PARAMETER(C_CPU=100,C_BUFIO=100,C_DIRIO=100,C_PFLTS=200)
C ie. 1 unit per 200 page faults etc.
C C_CPU may be changed according to processor .
C Rights identifiers
INTEGER*4 MAXRIGHTS
PARAMETER( MAXRIGHTS = 100 ) ! total of type CLASS_ID
INTEGER*4 MAX_USER_RIGHTS
PARAMETER( MAX_USER_RIGHTS = 10 ) ! max held per user proc.
INTEGER*2 CLASS_ID ! Mask on high order word defines
CLASS id
PARAMETER(CLASS_ID='800A'X)
INTEGER*2 MONITOR_ID ! JOB_MONITOR usage id. mask
PARAMETER(MONITOR_ID='800B'X)
INTEGER*4 STUDENT_ID ! Rights id for 'STUDENT' status
PARAMETER(STUDENT_ID='800A0001'X)
INTEGER*4 ALT_TIMEOUT_ID ! Rights id for ALTernative idle
timeout
PARAMETER(ALT_TIMEOUT_ID='800B0032'X)
INTEGER*4 OVERDRAFT_ID ! Rights id for no overdrawn budget
action
PARAMETER(OVERDRAFT_ID='800B0031'X)
INTEGER*4 MULTIPLE_LOGIN_ID ! Rights id to allow multiple logins
PARAMETER(MULTIPLE_LOGIN_ID='800B0030'X)
INTEGER*4 NO_TIMEOUT_ID ! Rights id for no idle timeout (
main or sub process )
PARAMETER(NO_TIMEOUT_ID='800B0029'X)
INTEGER*4 NO_SUB_TIMEOUT_ID ! Rights id for no subprocess timeout
PARAMETER(NO_SUB_TIMEOUT_ID='800B0028'X)
C Demand broadcast control .. USER2 to USER3 switch
REAL*4 MODERATE_DEMAND
PARAMETER(MODERATE_DEMAND=0.5)
C All JOB_MONITOR broadcasts are in USER1 category with the
following exceptions.
C Any broadcast which precedes a forced logout is sent in URGENT.
C The demand factor broadcasts are in USER2 ( demand < 0.5 ) &
C USER3 ( demand > 0.5 ).
C) JOB_MONITOR Broadcast Message texts & location in source.
DISKB:[UEA_SOFTWARE.MONITOR]DEBIT.FOR;1
WRITE(MESS,'(''You have become overdrawn'')')
WRITE(MESS,'(''Demand factor now'',F5.1,'' (change ='',SP,
* F5.1'') your credit'',SS,I6)')
DISKB:[UEA_SOFTWARE.MONITOR]IDLE_TIMEOUT.FOR;1
WRITE(MESS,'(''Inactive image exit forced'')')
WRITE(MESS,'(''Your idle '',A4,'' process '',Z8.8,'' will be logged
out in'',
* I2,'' mins'')')PTYPE,PID_L(J),TLEFT
WRITE(MESS,'(''Your idle '',A4,
* '' process '',Z8.8,'' is being logged out'')')PTYPE,PID_L(J)
DISKB:[UEA_SOFTWARE.MONITOR]MONITOR.FOR;1
WRITE(MESS,'(''Your '',A4,'' process '',Z8.8,
* '' is now at class priority 5'')')PTYPE,PID_L(J)
WRITE(MESS,'(''Your '',A4,'' process '',Z8.8,
* is now at normal priority 4'')')PTYPE,PID_L(J)
WRITE(MESS,'(''You are being logged out'')')
WRITE(MESS,'(''You have been excluded from this node'')')
WRITE(MESS,'(''You will be logged out one minute from now!'')')
DISKB:[UEA_SOFTWARE.MONITOR]STUDENT_CHECK.FOR;1
WRITE(MESS,'(''Warning: You are not in a class & casual use is
restricted'')')
DISKB:[UEA_SOFTWARE.MONITOR]UEALOGIN_CHECK.FOR;1
WRITE(MESS,'('' Your Username/UIC is now in multiple use !'')')
THE END