MTK16: A SMALL MULTI TASKING KERNEL FOR DDP516/H316 ==================================================== HONEYWELL X16 16 BIT COMPUTER SOFTWARE MTK16 IS CREATED BY THEO ENGEL (THEO.ENGEL@HETNET.NL) WHEN TESTING THE INTERRUPT MECHANISM OF THE H316 SIMH SIMULATOR WITH A BIT MORE COMPLEX PROGRAM, THE RESULT WAS A SMALL EXECUTIVE: MTK16 (MULTI TASKING KERNEL FOR HONEYWELL SERIES 16 MINICOMPUTERS). MTK16 IS AN EXECUTIVE LIKE THE ONES WHICH WERE VERY POPULAR IN THE LATE SIXTIES FOR MINICOMPUTERS LIKE THE DDP-516. THE 'STANDARD' SOFTWARE DID NOT PROVIDE AN OPERATING SYSTEM (YET), SO FOR MANY APPLICATIONS A KIND OF OS WAS MADE, SOME SPECIALIZED FOR REAL TIME OPERATION, OTHERS JUST FOR MULTITASKING OR FOREGROUND/BACKGROUND OPERATION. MTK16 IS IS A CORE RESIDENT MULTITASKING KERNEL FOR THE EXECUTION OF CORE RESIDENT TASKS, WHICH EXPLOITS SIMPLE ROUND-ROBIN SCHEDULING AND WHICH TAKES ONLY LESS THAN A SECTOR OF CORE SPACE. KERNEL AND TASKS MUST RUN IN THE LOWER 16K OF MEMORY. TO PREVENT CROSS SECTOR LINKS, THE KERNEL HAS TO START AT A SECTOR BOUNDARY. AS DEFAULT IT USES THE HIGHEST SECTOR OF THE LOWEST 16K MEMORY BLOCK. THE KERNEL IS PROVIDED AS A PACKAGE OF SUBROUTINES, WHICH HAVE TO BE LINKED TO THE TASKS TO RUN. THE PROGRAMMING SYSTEM IS STRUCTURED IN 3 RINGS: * RING-0: INTERRUPT HANDLING * RING-1: INTERRUPT INITIATION, SERVICE PRIMITIVES, TASK SCHEDULING * RING-2: PROGRAM TASKS/TESTING PROGRAMS THE RINGS ARE NOT PROTECTED FROM EACHOTHER; RING-0 AND RING-1 ARE THE KERNEL AND THE APPLICATION PROGRAMS (TASKS) RUN IN RING-2. THE CURRENT VERSION OF THE KERNEL SUPPORTS THE FOLLOWING DEVICES: - TTY, FOR KEYBOARD INPUT AND PRINTING; - PTR, HIGH SPEED PAPERTAPE READER; - PTP, HIGH SPEDD PAPERTAPE PUNCHER; - RTC; A 50 HZ REAL TIME CLOCK PERIPHERAL SUPPORT CAN BE EASILY EXTENDED. A TASK IS PRESENTED TO THE SYSTEM BY ITS TASK CONTROL BLOCK (TCB). ALL TCB'S ARE COLLECTED IN THE TASK CONTROL BLOCK TABLE. A TASK USES SERVICE PRIMITIVES PROVIDED BY RING-1. RING-1 ALSO PROVIDES THE SCHEDULER WITH A FEW STANDARD CALLS TO SUPPORT THE CODING OF THE RING-1 SERVICES. THE RING-2 TASKS RUN WITH THE INTERRUPT ENABLED AND USE THE SERVICE PRIMITIVES (RING-1) BY MEANS OF SUBROUTINE CALLS. THE SERVICE PRIMITIVES ARE NOT REENTRANT; RING-1 IS NOT ALLOWED TO CALL RING-1 PRIMITIVES AND, BECAUSE THE INTERRUPT IS ENABLED IN PARTS OF RING-1 AND WHEN RING-1 IS ENTERED, ALSO RING-0 IS NOT ALLOWED TO USE RING-1 PRIMITIVES. (E.G. THE CALL ADDRESS OF A PRIMITIVE COULD BE OVERWRITTEN). THE MAIN CONSEQUENCE OF THIS DESIGN IS THAT RING-0, AFTER HANDLING AN INTERRUPT, IS NOT ALLOWED TO GO TO THE SCHEDULER. AFTER INTERRUPT COMPLETION, RING-0 HAS JUST TO RESUME AT THE LOCATION WERE THE PROCESSING WAS INTERRUPTED (RING-2 OR RING-1). COMMUNICATION BETWEEN RING-1 AND RING-0 IS BY MEANS OF EVENTS. AS AN OPTION, A SIMPLE FORM OF PREEMPTION CAN BE CONFIGURED. IN THAT CASE THE SCHEDULER IS ENTERED AFTER INTERRUPT COMPLETION (E.G. AFTER A CLOCK INTERRUPT) WHEN THE INTERRUPT DID NOT OCCUR WHILE EXECUTING RING-1 CODE. WITH THIS OPTION A TASK NOT USING RING-1 PRIMITIVES CAN BE EXECUTED IN PARALLEL OF THE MULTI TASKING OF OTHER TASKS, ALTHOUGH THE THROUGHPUT OF THOSE TASKS SLOWS DOWN. SHORT OVERVIEW OF THE RING-1 SERVICE PRIMITIVES =============================================== TIMER SERVICE ************* CALLING SEQUENCE: CALL SLEEP OCT (A TICK IS 0.1 SEC) THE TASK SLEEPS FOR THE SPECIFIED TIME AND IS RESTARTED AFTER THE TIMER IS DUE. THE TIMER IS RELEASED THEN. TIMERS ARE DEFINED IN THE TIMER TABLE CTAB. IF A TASK REQUESTS THE TIMER SERVICE, A FREE TIMER IS ALLOCATED AND CONNECTED TO THE TASK. DEVICE MANAGEMENT SERVICES ************************** ATTACH DEVICE(S) CALLING SEQUENCE: CALL ATTW (BLOCKING) DAC TTY ATTENTION HANDLER OR CALL ATTW (BLOCKING) OCT DEV (ONE OR MORE DEVICES) OR CALL ATT (NON BLOCKING) OCT DEV (ONE OR MORE DEVICES) *** *** NO SUCCESS RETURN *** *** SUCCESS RETURN RELEASE DEVICE(S), CALLING SEQUENCE: CALL REL OCT DEV (ONE OR MORE DEVICES) TO SYNCHRONIZE THE USE OF PERIPHERALS BETWEEN TASKS, A TASK HAS TO ATTACH A PERIPHERAL WHEN NEEDED AND RELEASE IT AGAIN WHEN NOT NEEDED ANYMORE. UP TO 8 DEVICES CAN BE MANAGED THIS WAY AND EACH DEVICE IS REPRESENTED BY A BIT IN THE ATTACHMENT STATE WORD: BITS 9-13 FREE BIT 14 PTP BIT 15 PTR BIT 16 TTY THE TTY IS AN EXCEPTION. IT CAN BE ATTACHED TWO TIMES; IN THE NORMAL WAY (BIT16) AND TO A SOCALLED ATTENTION HANDLER. WHEN ATTACHED TO AN ATTENTION HANDLER, AND THE ATTENTION HANDLER IS ACTIVATED (BY PRESSING THE ESC KEY), THE NORMAL ATTACHEMENT IS OVERRULED. THE ATTENTION HANDLER GETS THE TTY (E.G. FOR COMMAND HANDLING) AND THE TTY USAGE OF THE TASK, TO WHICH THE TTY IS ATTACHED IN THE NORMAL WAY, IS STALLED. A RELEASE CALL WITH OCTAL 0, RELEASES THE TTY FROM AN ACTIVATED ATTENTION HANDLER. WITH THIS RELEASE THE ATTENTION HANDLER BECOMES A 'NORMAL' TASK, WHICH CAN ATTACH/RELEASE THE TTY IN THE NORMAL WAY. INPUT/OUTPUT SERVICES ********************* *** ASRI, READ CHAR FROM TTY; CALLING SEQUENCE: CALL ASRI SWITCH TTY INPUT MODE *** *** RETURNS HERE WITH THE NEXT CHAR FROM THE TTY IN A-REG *** ASRO, PRINT CHAR ON TTY; CALLING SEQUENCE: LDA CHAR A = CHAR TO PRINT ON TTY CALL ASRO SETS TTY IN OUTPUT MODE *** *** RETURNS HERE *** PTRI, READ CHARACTER FROM PTR (HIGH SPEED PAPERTAPE READER) CALLING SEQUENCE: CALL PTRI *** *** RETURNS HERE WITH HE NEXT CHAR IN A-REG *** PTPU, PUNCH CHARACTER FROM PTP (HIGH SPEED PAPERTAPE PUNCHER) CALLING SEQUENCE: LDA CHAR A = CHAR TO PUNCH CALL PTPO *** *** RETURNS HERE TASK SYNCHRONISATION SERVICES ***************************** TWO TYPES OF TASK SYNCHRONISATION ARE SUPPORTED: 1) WITH TASK-LINKED EVENTS 2) SOFT-EVENTS, OPERATING AS COUNTING SEMAPHORES TASK-LINKED EVENTS CAN BE USED TO WAIT FOR EXIT OF A SPECIFIC TASK OR ON A SIGNAL FROM A SPECIFIC TASK. WHEN A TASK EXECUTES ANOTHER TASK WITH THE EXEW PRIMITIVE, THE CALLING TASK IS BLOCKED UNTIL THE EXECUTED TASK EXITS, OR PROVIDES A SIGNAL (SIG 0). IF THE TASK IS STARTED WITH THE EXE PRIMITIVE, THE CALLING TASK IS NOT BLOCKED, BUT STILL CAN EXECUTE A WAIT FOR THE EARLIER STARTED TASK. IN CASE THE STARTED TASK DID NOT EXIT YET, THE CALLING TASK IS BLOCKED AND UNBLOCKED BY THE EXIT OF THE STARTED TASK (OR BY A SIG 0 OF THE STARTED TASK). IN THE SAME WAY A TASK CAN WAIT FOR EXIT OR A SIG 0 OF ANY OTHER SPECIFIC TASK. SOFT-EVENTS ARE CONTROLED BY 3 PRIMITIVES: WAIT (SEMEPHORE DOWN), SIGNAL (SEMAPHORE UP) AND RSIG (RESET/INIT THE SIGNAL WITH AN INITIAL COUNT). SOFT-EVENTS ARE IDENTIFIED BY A NUMBER, STARTING WITH NUMBER 1 (EVENT 0 IS THE TASK-LINKED EVENT; EACH TASK HAS ITS OWN EVENT 0). ALLOCATION OF A SOFT-EVENT FOR A SPECIFIC PURPOSE IS TO BE DONE BY THE PROGRAMMER; THE SOFT-EVENTS ARE NOT MANAGED AS RESOURCES BY THE SYSTEM. RSIG 1 INITIALIZES A BINARY SEMAPHORE WHICH CAN BE USED TO CONTROL A CRITICAL SECTION. MAXIMUM NUMBER OF SUPPORTED SOFT-EVENTS IS OCTAL 77; THE MAXIMUM INITIAL VALUE OF A SOFT-EVENT CAN BE OCTAL 77. *** WAIT FOR AN EVENT; CALLING SEQUENCE: 1) WAIT FOR TASK EXIT OR ON A SIG-0 OF A TASK CALL WAIT DAC TCB (TCB ADDRESS OF THE TASK TO WAIT FOR) 2) WAIT FOR A SOFT-EVENT (SEMAPHORE DOWN) CALL WAIT OCT XX (SOFT-EVENT NUMBER, 1-MAX '77) *** SIGNAL AN EVENT; CALLING SEQUENCE: 1) SIGNAL TASK EVENT CALL SIGAL OCT 0 (REFERING TO THE TASK-LINKED EVENT) 2) SIGNAL A SOFT-EVENT CALL SIGNAL OCT XX (SOFT-EVENT NUMBER 1-MAX '77) *** REVENT - RESET SOFT EVENT, SET INITIAL COUNT CALLING SEQUENCE: CALL REVENT OCT XXYY (BITS 5-16) WHERE XX = INITIAL COUNT YY = SOFT EVENT NUMBER TASK MANAGEMENT SERVICES ************************ *** TASK EXECUTION 1) EXEC TASK AND WAIT FOR EXIT; CALLING SEQUENCE: CALL EXEW DAC TCB (TCB ADDRESS OF THE TASK TO START) THE STARTING TASK (='PARENT') IS BLOCKED AND UNBLOCKED AFTER EXIT OF THE STARTED (='CHILD') TASK (OR BY A SIG-0 OF THE STARTED TASK). THE DEVICES ATTACHED TO THE STARTING TASK (='PARENT') ARE ALSO ATTACHED TO THE STARTED TASK (='CHILD') AND NOT RELEASED WHEN THE STARTED TASK EXITS. 2) EXEC TASK; CALLING SEQUENCE: CALL EXE DAC TCB (TCB ADDRESS OF THE TASK TO START) THE CALLING TASK IS NOT BLOCKED (SO REMAINS READY); NO ATTACHED DEVICES OF THE STARTING TASK ARE ATTACHED TO THE STARTED TASK. IF THE TASK TO START IS ALREADY STARTED, THE STARTING TASK IS BLOCKED UNITL THE TASK TO START CAN BE STARTED. 3) EXIT THE CURRENT TASK; CALLING SEQUENCE: CALL EXIT SIGNALS EXIT AND RELEASES (STILL) ATTACHED DEVICES NOT ATTACHED TO THE PARENT TASK, IF THE TASK WAS STARTED BY EXEW. AT KERNEL LEVEL, THE TCB IS NOT CLEARED, SO THE TASK CAN BE RESTARTED WITH EXE OR EXEW (THE TASK MUST THEN OF COURSE BE ABLE TO REINIT ITSELF). 4) KILL ANOTHER TASK; CALLING SEQUENCE: CALL KILL DAC TCB (TCB ADDRESS OF THE TASK TO KILL) INDEPENDENT OF ITS STATE, THE TASK IS KILLED, AN EVENT THE TASK WAS WAITING FOR IS CLEARED, EXIT IS SIGNALLED AND (STILL) ATTACHED DEVICES, NOT ATTACHED TO THE PARENT TASK, IF THE TASK WAS STARTED BY EXEW, ARE RELEASED. AT KERNEL LEVEL, THE TCB IS NOT CLEARED, SO THE TASK CAN BE RESTARTED WITH EXE OR EXEW(THE TASK MUST THEN OF COURSE BE ABLE TO REINIT ITSELF). 5) SUSPEND ANOTHER TASK, CALLING SEQUENCE: CALL PAUSE DAC TCB (TCB ADDRESS OF THE TASK TO SUSPEND) PAUSE SUSPENDS A TASK AND THE TASK'S DEVICES ARE RELEASED FOR USE BY OTHER TASKS. AN ACTIVE ATTENTION HANDLER CAN NOT BE SUSPENDED (A PASSIVE ATTENTION HANDLER, WHICH IS A TASK WAITING FOR AN ATTENTION EVENT, CAN BE SUSPENDED, BUT THE ATTENTION EVENT ACTIVATES THE ATTENTION HANDLER). 6) RESUME A SUSPENDED TASK, CALLING SEQUENCE: CALL RESUME DAC TCB (TCB ADDRESS OF THE TASK TO RESUME= *** NO SUCCESS RETURN ADDRESS (RELEASED DEVICES CAN NOT BE REATTACHED) *** SUCCESS RETURN RESUME REACTIVATES A SUSPENDED TASK AFTER REATTACHMENT OF THE RELEASED DEVICES WITH THE SUSPEND. 7 TASK RESCHEDULING YIELD, LEAVE THE CURRENT TASK, AND SCHEDULE THE NEXT READY TASK CALL YIELD (THE CURRENT TASK REMAINS READY) THE TASK SCHEDULER (RING-1) =========================== THE SCHEDULER IS A SIMPLE ROUND ROBIN SCHEDULER AND RUNS THE TASKS IN RING-2 DEPENDING ON THEIR STATE: - TASK NOT STARTED (STOP) 0000000000000000 - TASK STARTED, NOT WAITING FOR EVENT (READY) 0000000000000001 - TASK STARTED, WAITING FOR EVENT (BLOCKED) 1000000000000001 A TAST IS BLOCKED WHEN WAITING FOR: - IO EVENT (SIGNALLED BY AN INTERRUPT HANDLER) - TASK EVENT (SIGNALLED BY EXIT OR SIG-0 OF THE TASK WAITING FOR) - TIMER EVENT (SIGNALLED BY RTC INTERRUPT HANDLER) - ATTENTION EVENT (SIGNALLED BY TTY INTERRUPT HANDLER) WHEN A TASK IS BLOCKED, THE PWEV ENTRY IN THE TASK'S TCB POINTS TO THE EVENT THE TASK IS WAITING FOR. THE SCHEDULER RUNS AT RING-1 AND HAS THE FOLLOWING ENTRY POINTS FOR RING-1 CODE: SKED - SCHEDULER ENTRY POINT AFTER INITIALIZATION RESH - ENABLE INTERRUPT AND SCHEDULE THE NEXT READY TASK BLOK - SET TASK WAITING FOR AN EVENT, AND SCHEDULE THE NEXT READY TASK BUSY - TASK PENDING FOR A CONDITION, SCHEDULE NEXT READY TASK SAVE - INHIBIT INTERRUPT AND SAVE CPU STATE IN TCB OF CURRENT TASK THESE ENTRY POINTS MUST BE ENTERED WITH A JMP! EACH TASK IN RING-2 IS PRESENTED TO THE SCHEDULER BY A DATA STRUCTUCE: THE TASK CONTROL BLOCK (TCB). THE LOCATION T ALWAYS POINTS TO THE TCB OF THE CURRENT RUNNING TASK. TASK CONTROL BLOCK STRUCTURE STAT EQU 0 TASK STATE LABL EQU 1 ADDRESS WHERE TASK MUST CONTINUE (P) A EQU 2 SAVED A B EQU 3 SAVED B X EQU 4 SAVED X KEYS EQU 5 SAVED KEYS STRT EQU 6 TASK START ADDRESS TEVT EQU 7 TASK EVENT DEV EQU 8 ATTACHED DEVICES PWEV EQU 9 POINTER TO EVENT BLOCKED FOR CONFIGURATION ============= AT LEAST THREE PARTS ARE REQUIRED TO MAKE A RUNNING SYSTEM: 1) THE BASIC KERNEL (MTK16-VX-Y). THIS MODULE PROVIDE SUPPORT FOR THE STANDARD DEVICES: RTC, TTY, PTR AND PTP AND THE RING-1 SERVICE PRIMITIVES. THIS MODULE CAN BE USED AS IS; NO CONFIGURATION MODIFICATIONS ARE REQUIRED. 2) THE CONFIG MODULE (MTK16-CONF), PROVIDING THE INITIALIZATION CODE, TASK CONTROL BLOCK TABLE, TIMER TABLE, SOFT INTERRUPT TABLE, INTERRUPT ENABLE MASK, PREEMPTION FLAG, ADDRESS RANGE USED BY RING-1 CODE, INTERRUPT SKIP CHAIN EXTENSION, WITH THE OPTION TO ADD EXTERNAL INTERRUPT SERVICE ROUTINES. ALL THESE PARTS MAY NEED MODIFICATIONS FOR A SPECIFIC CONFIGURATION. 3) THE PROGRAM TASKS THESE DETERMINE THE APPLICATION AND MUST ALL BE PROVIDED AS A SINGLE OR MULTIPLE MUDOLES. FOR EACH TASK, A TCB MUST BE PROVIDED IN THE TASK CONTROL BLOCK TABLE IN THE CONFIG MODULE. TO GET THE SYSTEM RUNNING, ALL PARTS HAVE TO BE LINKED TOGETHER WITH ONE OF THE STANDRARD LOADERS; THE 1ST ADDRESS OF THE CONFIG MODULE IS THE START ADDRESS OF THE WHOLE SYSTEM. DEMO ==== THE 3 FILES: - MTK16-V1-3 - MTK16-CONF - MTK16-TEST3 TOGETHER CREATE A SMALL DEMO SYSTEM WHICH SHOWS THE OPERATION OF THE MULTI TASKING KERNEL.