|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 168960 (0x29400) Types: Ada Source Notes: 03_class, FILE, Long Ada Source, R1k_Segment, e3_tag, generic, package V_Interrupts, seg_04f07a
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000 └─ ⟦cfc2e13cd⟧ »Space Info Vol 2« └─⟦this⟧
------------------------------------------------------------------------------- ------------------------------------------------------------------------------- -- -- VERDIX CORPORATION (C) COPYRIGHT 1988, 1992, 1993 -- Proprietary Information -- Not to be Disclosed -- -- FILE: V_VADS_EXEC.A -- -- UNITS: VADS EXEC Package Specifications -- -- PURPOSE: This file contains the user's high level interface to VADS EXEC. -- It contains packages for each of the following services: -- -- Interrupt Handling (package V_INTERRUPTS) -- Tasking Extensions (package V_XTASKING) -- Mutexes/CVs (package V_MUTEXES) -- Semaphores (package V_SEMAPHORES) -- Mailboxes (package V_MAILBOXES) -- Memory Management (package V_MEMORY) -- Stack Operations (package V_STACK) -- Name Services (package V_NAMES) -- -- The specifications for the above packages are contained in -- this file. The bodies are located in the following files also -- found in this directory: -- V_INTERRUPTS v_intr_b.a -- V_XTASKING v_xtask_b.a -- V_MUTEXES v_mutexes_b.a -- V_SEMAPHORES v_semaph_b.a -- V_MAILBOXES v_mbox_b.a -- V_MEMORY v_mem_b.a -- V_STACK v_stack_b.a -- V_NAMES v_name_b.a -- -- These packages are layered upon the Ada Kernel. The Ada Kernel -- provides all the threads and synchronization services needed -- to implement the VADS EXEC services. The interface to the Ada -- Kernel services is definied in the ADA_KRN_I package. Its type -- definitions are provided in the ADA_KRN_DEFS package. Both -- packages may be found in standard. -- -- Do not modify or recompile these packages. -- ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- with Ada_Krn_Defs; with System; package V_Interrupts is pragma Suppress (All_Checks); -- PURPOSE : V_INTERRUPTS provides interrupt processing support -- for the use of user-defined interrupt service -- routines (ISR's), the getting/setting of interrupt status and -- entering/leaving of supervisor state for the current task. -- -- Refer to V_INTERRUPTS's machine dependent body in -- V_INTR_B.A file for an outline of the actions that must -- be performed in an ISR. -- -- -- NOTES ON FLOATING-POINT COPROCESSOR SAVE/RESTORE IN ISR's: -- -- A save/restore of the floating-point coprocessor state is -- necessary if a coprocessor is in use and -- floating-point objects might be used -- during the execution of the interrupt handler. Note -- that VADS_EXEC does not use floating-point -- objects; thus, a coprocessor save/restore is not -- necessary before calling the services. -- -- NOTES ON DATA REFERENCES IN ISR's: -- -- The user-defined interrupt handler must not reference -- non-local stack-relative data (including tasks declared -- within a subprogram). Instead, all references should -- be either to objects declared in library-level -- package specifications/bodies, in the interrupt -- handler itself or in subprograms called by the handler. -- -- NOTES ON EXCEPTION PROPAGATION IN ISR's: -- -- Exceptions raised in an interrupt handler must be -- handled locally. An "others" exception handler should -- be provided to prevent attempting to propogate an -- exception from an interrupt handler. If you don't provide -- a handler for a raised exception (such as NUMERIC_ERROR), -- then, the entire program is abandoned (just like an unhandled -- exception for the main subprogram). -- -- NOTES ON ISR/ADA TASK INTERACTION: -- -- An ISR executes in the context of the task it interrupted. -- Since the ISR does not have its own task state, it must -- not perform any Ada tasking operations which would affect -- the state of the interrupted task: -- -- - task creations -- - accept statements -- - entry calls -- - delay statements -- - abort statements -- - evaluation of an allocator or deallocator -- -- In addition, the ISR cannot invoke any VADS_EXEC service which -- might block: -- -- - WAIT_SEMAPHORE -- - READ_MAILBOX -- - any V_MEMORY allocator or deallocator -- -- If the ISR calls a service that would block, the -- TASKING_ERROR exception is raised. -- -- It may, however, invoke any non-blocking operation, -- including: -- -- - RESUME_TASK or SUSPEND_TASK -- - SIGNAL_SEMAPHORE -- - WRITE_MAILBOX -- -- Floating-point registers do not have to be saved before -- invoking VADS_EXEC services from an ISR. -- -- The tasking and interrupt services support pre-emptive -- task scheduling. If a call to a service from an -- interrupt handler causes a task with a priority higher -- than that of the interrupted task to become ready to run, -- the higher priority task will run immediately upon return -- from the outermost interrupt service routine. -- -- -- EXAMPLE : -- -- package ISR_EXAMPLE is -- end; -- -- with V_INTERRUPTS; -- with SYSTEM; -- package body ISR_EXAMPLE is -- -- INTEGER_CNT: integer := 0; -- FLOAT_CNT: float := 0.0; -- -- procedure INTEGER_HANDLER is -- begin -- -- No floating point operations -- -- INTEGER_CNT := INTEGER_CNT + 1; -- end; -- -- procedure FLOAT_HANDLER is -- begin -- -- Does floating point operations -- -- FLOAT_CNT := FLOAT_CNT + 1.0; -- end; -- -- -- procedure INTEGER_ISR is new -- V_INTERRUPTS.ISR(INTEGER_HANDLER); -- -- An instantiated isr that doesn't perform any floating -- -- point operations. -- -- procedure WRAPPED_FLOAT_HANDLER is new -- V_INTERRUPTS.FLOAT_WRAPPER(FLOAT_HANDLER); -- -- An instantiated subprogram with floating point state -- -- saved and initialized upon entry and then restored -- -- upon return. This wrapped procedure is passed when -- -- the isr is instantiated. -- -- procedure FLOAT_ISR is new -- V_INTERRUPTS.ISR(WRAPPED_FLOAT_HANDLER); -- -- An instantiated isr that performs floating point -- -- operations. -- begin -- declare -- prev_isr: SYSTEM.address; -- begin -- -- Attach above instantiated isr's -- prev_isr := V_INTERRUPTS.ATTACH_ISR(16#80#, -- INTEGER_ISR'address); -- prev_isr := V_INTERRUPTS.ATTACH_ISR(16#81#, -- FLOAT_ISR'address); -- end; -- end ISR_EXAMPLE; -- The following type is used to specify the valid range for -- interrupt vector numbers. type Vector_Id is new Ada_Krn_Defs.Intr_Vector_Id_T; -- The following type is used for interrupt status type Interrupt_Status_T is new Ada_Krn_Defs.Intr_Status_T; -- Machine independent interrupt status constants Enable_Interrupt : constant Interrupt_Status_T := Interrupt_Status_T (Ada_Krn_Defs.Enable_Intr_Status); Disable_Interrupt : constant Interrupt_Status_T := Interrupt_Status_T (Ada_Krn_Defs.Disable_Intr_Status); -- The following exceptions may be raised by interrupt services. Invalid_Interrupt_Vector : exception; -- INVALID_INTERRUPT_VECTOR is raised if the vector number passed to the -- service is not a valid vector number. Vector_In_Use : exception; -- VECTOR_IN_USE is raised if an attempt is made to attach an ISR -- to a vector that is already attached to an ISR. Unexpected_V_Interrupts_Error : exception; -- UNEXPECTED_V_INTERRUPTS_ERROR may be raised if an unexpected -- error occurs in an V_INTERRUPTS routine. generic with procedure Interrupt_Handler; procedure Isr; pragma Share_Code (Isr, False); -- Purpose: ISR provides the wrapper required for all -- interrupt service routines. It may be instantiated -- with a parameterless procedure which provides the -- handler for a particular interrupt. The address -- of the resulting instantiation should be passed to -- ATTACH_ISR to attach the interrupt service routine -- to a particular vector. -- -- Notes: This wrapper doesn't save/restore the floating point -- context. -- -- This generic must be instantiated at the library -- package level. generic with procedure Interrupt_Handler; procedure Fast_Isr; pragma Share_Code (Fast_Isr, False); -- Purpose: Faster version of the above ISR wrapper. Refer -- to V_INTERRUPTS's machine dependent body in -- V_INTR_B.A file for additional restrictions imposed -- on the INTERRUPT_HANDLER procedure. generic with procedure Float_Handler; procedure Float_Wrapper; pragma Share_Code (Float_Wrapper, False); -- Purpose: FLOAT_WRAPPER saves/restores the floating point state. -- Before FLOAT_HANDLER is called, the floating point state -- is reset and float exceptions are enabled according to -- the FLOATING_POINT_CONTROL parameter in the kernel -- program's configuration package (V_KRN_CONF). -- See the body of this generic for further details. -- -- The resultant instantiation is normally used as an input -- procedure parameter to the above ISR generic. function Attach_Isr (Vector : in Vector_Id; Isr : in System.Address) return System.Address; -- Purpose: To attach an interrupt service routine to a given -- interrupt vector. It returns the previously attached -- ISR. -- Where: -- -- vector specifies the interrupt vector number to which -- the interrupt service routine is to be attached. -- The vector number is the number, not address, -- of the interrupt vector. -- -- isr specifies the address of the interrupt service routine. -- -- Exceptions: -- -- INVALID_INTERRUPT_VECTOR is raised if the vector number is -- out-of-range. -- -- VECTOR_IN_USE is raised if an interrupt handler has already been -- assigned to the vector. procedure Attach_Isr (Vector : in Vector_Id; Isr : in System.Address); -- Purpose: Provide backward compatibility by overloading -- ATTACH_ISR with a procedure version that doesn't -- return the previously attached vector. function Detach_Isr (Vector : in Vector_Id) return System.Address; -- Purpose: To detach an interrupt routine from a given -- interrupt vector (the attachment may have been -- performed during VADS kernel initialization if the vector -- was given an initial value in the user's interrupt -- vector table). Returns the previously attached ISR. -- -- Where: -- -- vector specifies the number of the interrupt vector -- which is to be detach. The vector number is -- the number, not address, of the interrupt vector. -- -- Notes: The interrupt service routine V_DEFAULT_ISR -- defined in the V_KRN_CONF package will -- be attached to the vector. -- -- Exceptions: -- -- INVALID_INTERRUPT_VECTOR is raised if the vector number is -- out-of-range. procedure Detach_Isr (Vector : in Vector_Id); -- Purpose: Provide backward compatibility by overloading -- DETACH_ISR with a procedure version that doesn't -- return the previously attached vector. function Get_Isr (Vector : in Vector_Id) return System.Address; -- Purpose: To return the address of the currently attached ISR -- for the given interrupt vector. -- Where: -- -- vector specifies the interrupt vector number of the ISR. -- -- Exceptions: -- -- INVALID_INTERRUPT_VECTOR is raised if the vector number is -- out-of-range. function Get_Ivt return System.Address; -- Purpose: To return the address of the current Interrupt -- Vector Table (IVT). Normally, the IVT is an array -- of ISR addresses. However, the IVT representation -- is CPU dependent (for 386 cross, its the IDT). -- Exceptions: -- -- None. function Current_Interrupt_Status return Interrupt_Status_T; -- Purpose: To get the current CPU interrupt status (mask or priority -- level). function Set_Interrupt_Status (New_Status : in Interrupt_Status_T) return Interrupt_Status_T; -- Purpose: To set the interrupt status (mask or priority) to a -- different setting. The previous interrupt status -- is returned. -- Where: -- -- new_status specifies the new interrupt status setting. function Current_Supervisor_State return Boolean; -- Purpose: To get the supervisor/user state of the current task. -- If the task is in supervisor state, returns TRUE. procedure Enter_Supervisor_State; -- Purpose: To enter supervisor state for the current task. -- This allows subsequent execution of privilege -- instructions. procedure Leave_Supervisor_State; -- Purpose: To leave supervisor state for the current task. -- Subsequent execution of privilege instructions results -- in a CPU exception. function Set_Supervisor_State (New_State : in Boolean) return Boolean; -- Purpose: To set the supervisor/user state for the current task -- to a different setting. The previous state -- is returned. -- -- Where: -- -- new_state TRUE selects supervisor state, FALSE selects user state. end V_Interrupts;
nblk1=a4 nid=2 hdr6=22 [0x00] rec0=16 rec1=00 rec2=01 rec3=01c [0x01] rec0=13 rec1=00 rec2=94 rec3=048 [0x02] rec0=18 rec1=00 rec2=95 rec3=082 [0x03] rec0=13 rec1=00 rec2=96 rec3=024 [0x04] rec0=13 rec1=00 rec2=97 rec3=00a [0x05] rec0=19 rec1=00 rec2=98 rec3=010 [0x06] rec0=19 rec1=00 rec2=99 rec3=010 [0x07] rec0=17 rec1=00 rec2=9a rec3=00c [0x08] rec0=19 rec1=00 rec2=9b rec3=04e [0x09] rec0=1f rec1=00 rec2=9c rec3=046 [0x0a] rec0=17 rec1=00 rec2=9d rec3=002 [0x0b] rec0=17 rec1=00 rec2=9e rec3=012 [0x0c] rec0=18 rec1=00 rec2=9f rec3=078 [0x0d] rec0=18 rec1=00 rec2=a0 rec3=022 [0x0e] rec0=1d rec1=00 rec2=a1 rec3=02c [0x0f] rec0=1e rec1=00 rec2=a2 rec3=07a [0x10] rec0=19 rec1=00 rec2=a3 rec3=000 [0x11] rec0=12 rec1=00 rec2=93 rec3=028 [0x12] rec0=0f rec1=00 rec2=92 rec3=072 [0x13] rec0=17 rec1=00 rec2=91 rec3=002 [0x14] rec0=15 rec1=00 rec2=90 rec3=054 [0x15] rec0=1e rec1=00 rec2=8f rec3=020 [0x16] rec0=1a rec1=00 rec2=8e rec3=020 [0x17] rec0=1b rec1=00 rec2=8d rec3=086 [0x18] rec0=17 rec1=00 rec2=8c rec3=020 [0x19] rec0=24 rec1=00 rec2=8b rec3=00a [0x1a] rec0=1d rec1=00 rec2=8a rec3=026 [0x1b] rec0=1b rec1=00 rec2=89 rec3=024 [0x1c] rec0=18 rec1=00 rec2=88 rec3=01a [0x1d] rec0=19 rec1=00 rec2=87 rec3=058 [0x1e] rec0=1c rec1=00 rec2=86 rec3=04a [0x1f] rec0=1a rec1=00 rec2=85 rec3=06e [0x20] rec0=1b rec1=00 rec2=84 rec3=012 [0x21] rec0=1a rec1=00 rec2=83 rec3=068 [0x22] rec0=1d rec1=00 rec2=82 rec3=016 [0x23] rec0=18 rec1=00 rec2=81 rec3=014 [0x24] rec0=12 rec1=00 rec2=80 rec3=022 [0x25] rec0=12 rec1=00 rec2=7f rec3=082 [0x26] rec0=12 rec1=00 rec2=7e rec3=05e [0x27] rec0=1c rec1=00 rec2=7d rec3=020 [0x28] rec0=19 rec1=00 rec2=7c rec3=07c [0x29] rec0=16 rec1=00 rec2=7b rec3=008 [0x2a] rec0=1d rec1=00 rec2=7a rec3=01c [0x2b] rec0=15 rec1=00 rec2=79 rec3=02e [0x2c] rec0=14 rec1=00 rec2=78 rec3=002 [0x2d] rec0=12 rec1=00 rec2=77 rec3=016 [0x2e] rec0=11 rec1=00 rec2=76 rec3=008 [0x2f] rec0=12 rec1=00 rec2=75 rec3=066 [0x30] rec0=15 rec1=00 rec2=74 rec3=054 [0x31] rec0=0f rec1=00 rec2=73 rec3=014 [0x32] rec0=15 rec1=00 rec2=72 rec3=01c [0x33] rec0=10 rec1=00 rec2=71 rec3=064 [0x34] rec0=16 rec1=00 rec2=70 rec3=05c [0x35] rec0=14 rec1=00 rec2=6f rec3=04c [0x36] rec0=1a rec1=00 rec2=6e rec3=00e [0x37] rec0=18 rec1=00 rec2=6d rec3=032 [0x38] rec0=19 rec1=00 rec2=6c rec3=05e [0x39] rec0=19 rec1=00 rec2=6b rec3=006 [0x3a] rec0=1a rec1=00 rec2=6a rec3=028 [0x3b] rec0=17 rec1=00 rec2=69 rec3=032 [0x3c] rec0=18 rec1=00 rec2=68 rec3=060 [0x3d] rec0=1b rec1=00 rec2=67 rec3=006 [0x3e] rec0=11 rec1=00 rec2=66 rec3=040 [0x3f] rec0=19 rec1=00 rec2=65 rec3=02a [0x40] rec0=1d rec1=00 rec2=64 rec3=036 [0x41] rec0=1f rec1=00 rec2=63 rec3=00c [0x42] rec0=17 rec1=00 rec2=62 rec3=032 [0x43] rec0=19 rec1=00 rec2=61 rec3=05e [0x44] rec0=1a rec1=00 rec2=60 rec3=056 [0x45] rec0=18 rec1=00 rec2=5f rec3=018 [0x46] rec0=18 rec1=00 rec2=5e rec3=004 [0x47] rec0=16 rec1=00 rec2=5d rec3=03e [0x48] rec0=17 rec1=00 rec2=5c rec3=026 [0x49] rec0=14 rec1=00 rec2=5b rec3=032 [0x4a] rec0=1c rec1=00 rec2=5a rec3=050 [0x4b] rec0=1e rec1=00 rec2=59 rec3=006 [0x4c] rec0=18 rec1=00 rec2=58 rec3=082 [0x4d] rec0=15 rec1=00 rec2=57 rec3=03c [0x4e] rec0=1b rec1=00 rec2=56 rec3=06c [0x4f] rec0=16 rec1=00 rec2=55 rec3=016 [0x50] rec0=1e rec1=00 rec2=54 rec3=060 [0x51] rec0=1b rec1=00 rec2=53 rec3=03e [0x52] rec0=21 rec1=00 rec2=52 rec3=020 [0x53] rec0=12 rec1=00 rec2=51 rec3=08c [0x54] rec0=16 rec1=00 rec2=50 rec3=06e [0x55] rec0=16 rec1=00 rec2=4f rec3=068 [0x56] rec0=1c rec1=00 rec2=4e rec3=004 [0x57] rec0=1d rec1=00 rec2=4d rec3=024 [0x58] rec0=16 rec1=00 rec2=4c rec3=06e [0x59] rec0=19 rec1=00 rec2=4b rec3=04e [0x5a] rec0=1d rec1=00 rec2=4a rec3=026 [0x5b] rec0=1d rec1=00 rec2=49 rec3=026 [0x5c] rec0=18 rec1=00 rec2=48 rec3=00c [0x5d] rec0=17 rec1=00 rec2=47 rec3=080 [0x5e] rec0=27 rec1=00 rec2=46 rec3=020 [0x5f] rec0=14 rec1=00 rec2=45 rec3=02c [0x60] rec0=10 rec1=00 rec2=44 rec3=088 [0x61] rec0=1a rec1=00 rec2=43 rec3=01e [0x62] rec0=19 rec1=00 rec2=42 rec3=04a [0x63] rec0=1b rec1=00 rec2=41 rec3=03c tail 0x2175682728773683a5199 0x42a00088462060003 Free Block Chain: 0x2: 0000 00 03 01 c0 80 20 73 75 70 70 6f 72 74 65 64 20 ┆ supported ┆ 0x3: 0000 00 04 03 fc 80 42 20 20 20 20 20 20 20 20 6e 61 ┆ B na┆ 0x4: 0000 00 05 03 fc 00 06 20 20 20 20 2d 2d 06 00 43 20 ┆ -- C ┆ 0x5: 0000 00 06 03 fa 80 15 66 69 6e 64 20 61 6e 20 61 6c ┆ find an al┆ 0x6: 0000 00 07 03 fc 80 1c 6f 72 74 65 64 20 62 79 20 74 ┆ orted by t┆ 0x7: 0000 00 08 03 fc 80 11 70 72 6f 67 72 61 6d 20 70 61 ┆ program pa┆ 0x8: 0000 00 09 03 fc 80 01 2e 01 00 06 20 20 20 20 2d 2d ┆ . --┆ 0x9: 0000 00 0a 03 fc 80 09 78 63 65 70 74 69 6f 6e 3b 09 ┆ xception; ┆ 0xa: 0000 00 0b 03 fc 80 1d 6f 20 73 70 65 63 69 66 79 20 ┆ o specify ┆ 0xb: 0000 00 0c 03 fc 80 17 20 70 72 6f 67 72 61 6d 5f 69 ┆ program_i┆ 0xc: 0000 00 0d 03 fc 80 20 72 61 67 6d 61 20 49 4e 4c 49 ┆ ragma INLI┆ 0xd: 0000 00 0e 03 fc 80 2f 63 65 64 75 72 65 20 69 73 20 ┆ /cedure is ┆ 0xe: 0000 00 0f 03 fc 00 48 20 20 20 20 2d 2d 20 20 20 55 ┆ H -- U┆ 0xf: 0000 00 10 03 f9 80 0e 6f 66 20 70 6f 6f 6c 73 20 77 ┆ of pools w┆ 0x10: 0000 00 11 03 fc 80 0f 74 69 72 65 20 66 6c 65 78 20 ┆ tire flex ┆ 0x11: 0000 00 12 03 fc 80 08 20 6d 65 6d 6f 72 79 2e 08 00 ┆ memory. ┆ 0x12: 0000 00 13 03 fc 80 22 20 74 68 65 20 6d 61 78 69 6d ┆ " the maxim┆ 0x13: 0000 00 14 03 fc 80 22 20 20 20 54 6f 20 64 65 6c 65 ┆ " To dele┆ 0x14: 0000 00 15 03 fc 80 17 65 20 6f 66 20 74 68 65 20 70 ┆ e of the p┆ 0x15: 0000 00 16 03 fc 00 1b 20 20 20 20 74 79 70 65 20 4f ┆ type O┆ 0x16: 0000 00 17 03 fa 80 0c 20 20 20 20 6e 61 74 75 72 61 ┆ natura┆ 0x17: 0000 00 18 03 fc 00 4c 20 20 20 20 2d 2d 20 20 20 20 ┆ L -- ┆ 0x18: 0000 00 19 03 fc 80 10 69 6f 6e 2f 64 65 61 6c 6c 6f ┆ ion/deallo┆ 0x19: 0000 00 1a 03 fc 80 08 6c 6f 63 61 74 65 64 2e 08 00 ┆ located. ┆ 0x1a: 0000 00 1b 03 fc 80 1c 67 65 6d 65 6e 74 20 72 6f 75 ┆ gement rou┆ 0x1b: 0000 00 1c 03 fc 80 0b 69 78 65 64 20 6d 65 6d 6f 72 ┆ ixed memor┆ 0x1c: 0000 00 1d 03 fc 80 06 59 53 54 45 4d 3b 06 00 13 70 ┆ YSTEM; p┆ 0x1d: 0000 00 1e 03 fc 80 29 20 20 20 20 20 20 20 20 20 20 ┆ ) ┆ 0x1e: 0000 00 1f 03 fc 80 3d 50 75 72 70 6f 73 65 3a 20 20 ┆ =Purpose: ┆ 0x1f: 0000 00 20 03 fc 80 22 20 20 20 20 20 20 20 20 20 20 ┆ " ┆ 0x20: 0000 00 21 03 fc 80 15 69 6c 62 6f 78 20 69 73 20 6e ┆ ! ilbox is n┆ 0x21: 0000 00 22 03 fc 80 1f 74 69 6f 6e 20 74 6f 20 62 65 ┆ " tion to be┆ 0x22: 0000 00 23 03 fc 80 24 3a 20 69 6e 20 20 20 20 20 6d ┆ # $: in m┆ 0x23: 0000 00 24 03 fc 80 0f 65 20 57 52 49 54 45 5f 4d 41 ┆ $ e WRITE_MA┆ 0x24: 0000 00 25 03 fc 80 07 46 4f 52 45 56 45 52 07 00 45 ┆ % FOREVER E┆ 0x25: 0000 00 26 03 fc 00 00 00 00 18 20 20 70 72 6f 63 65 ┆ & proce┆ 0x26: 0000 00 27 03 fb 80 1b 20 77 61 69 74 69 6e 67 20 74 ┆ ' waiting t┆ 0x27: 0000 00 28 03 fc 80 0a 68 65 20 63 72 65 61 74 65 2c ┆ ( he create,┆ 0x28: 0000 00 29 03 fc 80 1f 6c 65 20 74 68 65 20 63 75 72 ┆ ) le the cur┆ 0x29: 0000 00 2a 03 fc 80 3b 6e 6f 6e 2d 77 61 69 74 65 64 ┆ * ;non-waited┆ 0x2a: 0000 00 2b 03 fc 80 1f 72 61 69 73 65 64 20 69 66 20 ┆ + raised if ┆ 0x2b: 0000 00 2c 03 fc 80 17 20 20 20 20 20 20 20 20 20 20 ┆ , ┆ 0x2c: 0000 00 2d 03 fc 80 22 62 65 20 72 61 69 73 65 64 20 ┆ - "be raised ┆ 0x2d: 0000 00 2e 03 fc 80 0d 61 69 74 69 6e 67 20 6f 6e 20 ┆ . aiting on ┆ 0x2e: 0000 00 2f 03 fc 80 01 61 01 00 45 2d 2d 20 20 20 20 ┆ / a E-- ┆ 0x2f: 0000 00 30 03 fc 80 0c 20 73 70 65 63 69 66 79 20 68 ┆ 0 specify h┆ 0x30: 0000 00 31 03 fc 80 1b 20 74 79 70 65 20 62 69 6e 61 ┆ 1 type bina┆ 0x31: 0000 00 32 03 fc 80 26 20 20 20 20 20 20 20 20 20 20 ┆ 2 & ┆ 0x32: 0000 00 33 03 fc 80 10 69 6e 20 20 20 20 20 64 75 72 ┆ 3 in dur┆ 0x33: 0000 00 34 03 fc 80 0d 20 61 20 73 65 6d 61 70 68 6f ┆ 4 a semapho┆ 0x34: 0000 00 35 03 fc 80 30 20 20 20 20 20 20 20 20 20 20 ┆ 5 0 ┆ 0x35: 0000 00 36 03 fc 00 49 20 20 20 20 2d 2d 20 20 20 20 ┆ 6 I -- ┆ 0x36: 0000 00 37 03 f9 80 04 48 4f 52 45 04 00 30 20 20 20 ┆ 7 HORE 0 ┆ 0x37: 0000 00 38 03 fc 80 0b 61 70 68 6f 72 65 5f 69 64 29 ┆ 8 aphore_id)┆ 0x38: 0000 00 39 03 fc 80 2e 20 20 52 65 61 64 79 20 61 6c ┆ 9 . Ready al┆ 0x39: 0000 00 3a 03 fc 80 03 69 6c 73 03 00 3c 20 20 20 20 ┆ : ils < ┆ 0x3a: 0000 00 3b 03 fc 80 08 4d 41 50 48 4f 52 45 3a 08 00 ┆ ; MAPHORE: ┆ 0x3b: 0000 00 3c 03 fc 80 24 73 20 74 68 65 20 69 6e 69 74 ┆ < $s the init┆ 0x3c: 0000 00 3d 03 fc 80 3d 20 20 20 20 20 20 20 20 20 20 ┆ = = ┆ 0x3d: 0000 00 3e 03 fc 80 2f 28 69 6e 69 74 69 61 6c 5f 63 ┆ > /(initial_c┆ 0x3e: 0000 00 3f 03 fc 80 19 45 20 20 20 20 20 20 20 20 20 ┆ ? E ┆ 0x3f: 0000 00 40 03 fc 80 43 45 4d 41 50 48 4f 52 45 5f 4e ┆ @ CEMAPHORE_N┆ 0x40: 0000 00 41 03 fc 80 10 20 20 20 20 3a 20 65 78 63 65 ┆ A : exce┆ 0x41: 0000 00 42 03 fc 80 24 6c 79 2c 20 74 68 65 73 65 20 ┆ B $ly, these ┆ 0x42: 0000 00 43 03 fc 80 37 69 6e 67 20 74 79 70 65 20 72 ┆ C 7ing type r┆ 0x43: 0000 00 44 03 fc 00 17 2d 2d 20 20 20 20 20 20 20 20 ┆ D -- ┆ 0x44: 0000 00 45 03 f9 80 33 6c 65 20 28 74 68 65 20 63 6f ┆ E 3le (the co┆ 0x45: 0000 00 46 03 fc 80 33 5f 53 45 4d 41 50 48 4f 52 45 ┆ F 3_SEMAPHORE┆ 0x46: 0000 00 47 03 fc 80 08 6e 73 3a 20 20 74 68 65 08 00 ┆ G ns: the ┆ 0x47: 0000 00 48 03 fc 00 4c 20 20 20 20 2d 2d 20 20 6d 75 ┆ H L -- mu┆ 0x48: 0000 00 49 03 fa 80 29 6e 74 69 66 69 65 73 20 74 68 ┆ I )ntifies th┆ 0x49: 0000 00 4a 03 fc 80 16 20 20 20 20 20 3a 20 69 6e 20 ┆ J : in ┆ 0x4a: 0000 00 4b 03 fc 80 20 73 65 64 20 69 66 20 61 20 74 ┆ K sed if a t┆ 0x4b: 0000 00 4c 03 fc 80 12 20 72 65 74 75 72 6e 73 20 61 ┆ L returns a┆ 0x4c: 0000 00 4d 03 fc 80 04 61 6d 65 2e 04 00 06 20 20 20 ┆ M ame. ┆ 0x4d: 0000 00 4e 03 fc 80 04 20 20 2d 2d 04 00 0d 20 20 20 ┆ N -- ┆ 0x4e: 0000 00 4f 03 fc 80 0f 65 64 75 72 65 20 69 73 20 63 ┆ O edure is c┆ 0x4f: 0000 00 50 03 fc 80 08 45 55 49 4e 47 20 29 3b 08 00 ┆ P EUING ); ┆ 0x50: 0000 00 51 03 fc 80 0a 72 20 70 72 6f 67 72 61 6d 73 ┆ Q r programs┆ 0x51: 0000 00 52 03 fc 80 07 54 45 5f 43 4f 4e 44 07 00 35 ┆ R TE_COND 5┆ 0x52: 0000 00 53 03 fc 80 1e 74 68 65 20 6d 75 74 65 78 20 ┆ S the mutex ┆ 0x53: 0000 00 54 03 fc 80 18 63 65 65 64 2e 20 20 49 66 20 ┆ T ceed. If ┆ 0x54: 0000 00 55 03 fc 80 02 65 2e 02 00 00 00 00 19 20 20 ┆ U e. ┆ 0x55: 0000 00 56 03 fc 00 06 20 20 20 20 2d 2d 06 00 44 20 ┆ V -- D ┆ 0x56: 0000 00 57 03 f9 80 27 5f 4e 4f 54 5f 57 41 49 54 20 ┆ W '_NOT_WAIT ┆ 0x57: 0000 00 58 03 fc 00 4c 20 20 20 20 2d 2d 20 20 20 20 ┆ X L -- ┆ 0x58: 0000 00 59 03 fb 80 3a 20 2d 2d 20 20 20 20 42 49 4e ┆ Y : -- BIN┆ 0x59: 0000 00 5a 03 fc 80 04 61 73 6b 2e 04 00 00 00 00 00 ┆ Z ask. ┆ 0x5a: 0000 00 5b 03 fc 80 30 73 20 74 68 65 20 61 74 74 72 ┆ [ 0s the attr┆ 0x5b: 0000 00 5c 03 fc 80 2c 43 72 65 61 74 65 73 20 61 20 ┆ \ ,Creates a ┆ 0x5c: 0000 00 5d 03 fc 80 23 6e 20 20 20 20 41 44 41 5f 4b ┆ ] #n ADA_K┆ 0x5d: 0000 00 5e 03 fc 80 33 2d 2d 20 4e 4f 54 5f 41 5f 43 ┆ ^ 3-- NOT_A_C┆ 0x5e: 0000 00 5f 03 fc 80 1e 41 4c 52 45 41 44 59 5f 42 4f ┆ _ ALREADY_BO┆ 0x5f: 0000 00 60 03 fc 80 1e 5f 43 4f 4e 44 20 69 66 20 61 ┆ ` _COND if a┆ 0x60: 0000 00 61 03 fc 80 0c 53 4f 4c 56 45 5f 4d 55 54 45 ┆ a SOLVE_MUTE┆ 0x61: 0000 00 62 03 fc 80 32 78 20 69 73 20 6c 6f 63 6b 65 ┆ b 2x is locke┆ 0x62: 0000 00 63 03 fc 80 38 49 4d 45 44 5f 57 41 49 54 5f ┆ c 8IMED_WAIT_┆ 0x63: 0000 00 64 03 fc 80 03 41 4d 45 03 00 26 2d 2d 20 20 ┆ d AME &-- ┆ 0x64: 0000 00 65 03 fc 80 23 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ┆ e #==========┆ 0x65: 0000 00 66 03 fc 80 23 76 61 6c 69 64 20 75 6e 6c 6f ┆ f #valid unlo┆ 0x66: 0000 00 67 03 fc 80 42 20 20 20 20 20 20 20 20 20 20 ┆ g B ┆ 0x67: 0000 00 68 03 fc 80 1a 20 66 6f 72 20 74 68 65 20 63 ┆ h for the c┆ 0x68: 0000 00 69 03 fc 80 2e 6b 20 66 72 6f 6d 20 62 65 69 ┆ i .k from bei┆ 0x69: 0000 00 6a 03 fc 80 2c 20 20 54 6f 20 61 6c 6c 6f 77 ┆ j , To allow┆ 0x6a: 0000 00 6b 03 fc 80 03 20 2d 2d 03 00 49 20 20 20 20 ┆ k -- I ┆ 0x6b: 0000 00 6c 03 fc 80 1a 66 6f 72 20 74 68 65 20 56 41 ┆ l for the VA┆ 0x6c: 0000 00 6d 03 fc 80 30 70 72 6f 76 69 64 65 64 20 61 ┆ m 0provided a┆ 0x6d: 0000 00 6e 03 fc 80 25 61 20 49 4e 4c 49 4e 45 5f 4f ┆ n %a INLINE_O┆ 0x6e: 0000 00 6f 03 fc 80 1b 73 6b 5f 6e 61 6d 65 20 20 20 ┆ o sk_name ┆ 0x6f: 0000 00 70 03 fc 80 1c 6e 74 65 67 65 72 29 3b 20 20 ┆ p nteger); ┆ 0x70: 0000 00 71 03 fc 80 1b 20 64 69 66 66 65 72 65 6e 74 ┆ q different┆ 0x71: 0000 00 72 03 fc 80 3e 20 20 20 20 20 20 20 20 70 72 ┆ r > pr┆ 0x72: 0000 00 73 03 fc 80 3b 20 20 20 20 20 20 20 20 20 20 ┆ s ; ┆ 0x73: 0000 00 74 03 fc 80 1e 20 74 68 65 20 75 73 65 72 20 ┆ t the user ┆ 0x74: 0000 00 75 03 fc 80 16 74 68 65 20 56 41 44 53 5f 4d ┆ u the VADS_M┆ 0x75: 0000 00 76 03 fc 80 41 2d 2d 20 20 20 20 20 20 20 20 ┆ v A-- ┆ 0x76: 0000 00 77 03 fc 80 40 20 20 20 20 20 20 20 20 20 49 ┆ w @ I┆ 0x77: 0000 00 78 03 fc 80 44 20 20 20 2d 2d 20 20 20 20 20 ┆ x D -- ┆ 0x78: 0000 00 79 03 fc 80 07 41 4d 5f 43 41 4c 4c 07 00 3f ┆ y AM_CALL ?┆ 0x79: 0000 00 7a 03 fc 80 37 20 20 20 20 20 20 73 65 72 76 ┆ z 7 serv┆ 0x7a: 0000 00 7b 03 fc 80 02 2d 2d 02 00 49 20 20 20 20 2d ┆ { -- I -┆ 0x7b: 0000 00 7c 03 fc 80 0d 64 2e 20 4f 74 68 65 72 77 69 ┆ | d. Otherwi┆ 0x7c: 0000 00 7d 03 fc 80 3f 52 4f 47 52 41 4d 28 74 61 73 ┆ } ?ROGRAM(tas┆ 0x7d: 0000 00 7e 03 fc 80 1a 70 72 6f 63 20 6d 75 73 74 20 ┆ ~ proc must ┆ 0x7e: 0000 00 7f 03 fc 80 08 74 61 72 67 65 74 73 2c 08 00 ┆ targets, ┆ 0x7f: 0000 00 80 03 fc 80 2e 20 20 20 74 68 65 20 4f 53 27 ┆ . the OS'┆ 0x80: 0000 00 81 03 fc 80 3c 20 20 20 20 20 20 20 20 20 20 ┆ < ┆ 0x81: 0000 00 82 03 fc 80 0c 72 65 64 20 52 75 6e 74 69 6d ┆ red Runtim┆ 0x82: 0000 00 83 03 fc 80 10 20 74 68 65 20 74 68 65 20 74 ┆ the the t┆ 0x83: 0000 00 84 03 fc 80 3a 20 20 20 20 20 20 20 20 20 20 ┆ : ┆ 0x84: 0000 00 85 03 fc 80 04 61 73 6b 2e 04 00 06 20 20 20 ┆ ask. ┆ 0x85: 0000 00 86 03 fc 80 0d 20 61 20 6e 65 77 20 76 61 6c ┆ a new val┆ 0x86: 0000 00 87 03 fc 80 08 6e 74 20 74 61 73 6b 2e 08 00 ┆ nt task. ┆ 0x87: 0000 00 88 03 fc 80 38 65 3a 20 20 20 20 20 54 68 69 ┆ 8e: Thi┆ 0x88: 0000 00 89 03 fc 80 3b 55 53 50 45 4e 44 20 69 73 20 ┆ ;USPEND is ┆ 0x89: 0000 00 8a 03 fc 80 04 69 6d 65 3a 04 00 06 20 20 20 ┆ ime: ┆ 0x8a: 0000 00 8b 03 fc 80 1e 67 6d 61 20 49 4e 4c 49 4e 45 ┆ gma INLINE┆ 0x8b: 0000 00 8c 03 fc 80 0b 4f 4e 4c 59 28 56 5f 49 44 29 ┆ ONLY(V_ID)┆ 0x8c: 0000 00 8d 03 fc 80 02 68 65 02 00 4a 20 20 20 20 2d ┆ he J -┆ 0x8d: 0000 00 8e 03 fc 80 3b 20 20 54 6f 20 72 65 74 75 72 ┆ ; To retur┆ 0x8e: 0000 00 8f 03 fc 80 1d 20 20 20 20 20 20 20 20 20 20 ┆ ┆ 0x8f: 0000 00 90 03 fc 00 00 00 00 38 20 20 74 79 70 65 20 ┆ 8 type ┆ 0x90: 0000 00 91 03 fa 80 44 20 2d 2d 20 54 79 70 65 20 6f ┆ D -- Type o┆ 0x91: 0000 00 92 03 fc 80 01 72 01 00 48 2d 2d 20 20 20 20 ┆ r H-- ┆ 0x92: 0000 00 93 03 fc 80 34 72 65 61 64 27 73 20 74 61 73 ┆ 4read's tas┆ 0x93: 0000 00 a4 03 fc 80 18 69 6e 20 61 20 72 65 61 64 79 ┆ in a ready┆ 0xa4: 0000 00 00 0e 80 20 01 01 a0 03 f0 54 34 00 7c 07 04 ┆ T4 | ┆