/* Simulator Project for COP4600 Original Design: Dr. David Workman, 1990 Revised (1993) Tim Hughey Mark Stephens EXTERNS.H This file contains the external data & functions defined in simulator.c */ extern int OBJECTIVE; extern FILE *simout, *scriptfp, *logonfp, *PROGM_FILE[]; extern int CPU_SW; /* control switch for the CPU */ extern int SCHED_SW; /* control switch for the scheduler */ extern int AGENT; extern int EVENT; extern char *opidtab[]; extern char *eventidtab[]; extern char *pgmidtab[]; extern int DEVSIZE; extern int TRMSIZE; extern int SCHED; extern int NJOBS; /* total jobs processed */ extern int MAXSCRIPT; /* max of ten programs */ extern int MAXSEGMENTS; /* max. no. program segments*/ extern int MEMSIZE; /* memory size */ extern unsigned long ONEOVRBETA; /* expected service time */ extern unsigned long LOGON_T; /* external time units for events */ extern double RHO; /* SJN Smoothing factor */ extern struct simtime CLOCK; /* System Hardware Clock */ extern struct timer_type TIMER; /* System Interval Timer */ extern struct cpu_type CPU; /* Central Processor */ extern struct state_type OldState; /* Old State of Interrupt */ extern struct state_type NewState; /* New State of Interrupt */ extern struct instr_type *MEM; /* Memory Storage Array */ extern struct addr_type MAR; /* Memory Address Register */ extern struct segment_type *MEMMAP; /* Memory Address Map Array */ extern struct device_type *devtable; /* Device table */ extern struct pcb_type **termtable; /* terminal table (pcb pointers) */ extern struct event_type *new_events; /* event list pointer */ extern struct instr_type *prog_buff; /* loader instruction buffer */ extern struct seg_list *FreeMem; /* list of free memory segments */ extern unsigned int TotalFree; /* Total Free Memory */ extern struct simtime TOTLOGON; /* total job processing time */ extern struct simtime TOTWAIT; /* total job wait time */ extern struct simtime TOTBLKED ; /* total job blocked time */ extern struct simtime TOTRUN ; /* total job execution time */ extern struct simtime AVERUN ; /* Average user execution time */ extern struct simtime AVEWAIT ; /* Average user wait time */ extern struct simtime AVEBLKED ; /* Average user blocked time */ extern struct simtime AVELOGON ; /* Average user logon time */ extern char Lname[9] ; /* last name of programmer */ extern char Outfile[14]; /* Name of output file */ /* Debugging flags. Use them! */ extern int DEBUG_MEM; /* flag that controls MEMORY DEBUG OUTPUT */ extern int DEBUG_EVTQ; /* flag that controls EVENT_Q DEBUG OUTPUT */ extern int DEBUG_PCB; /* flag that controls PCB DEBUG OUTPUT */ extern int DEBUG_RBLIST; /* flag that controls RBLIST DEBUG OUTPUT */ extern int DEBUG_RBQ; /* flag that controls RB_Q DEBUG OUTPUT */ extern int DEBUG_CPUQ; /* flag that controls CPUQ DEBUG OUTPUT */ /* given functions */ extern int Interrupt_Handler(void); extern void Init(void); extern void Wrapup(void); extern void Write_stats(void); extern void Open_output(char *); extern void Event_hdr(void); extern void Convrt_time(struct simtime*, unsigned long); extern int Cmpr_time(struct simtime *, struct simtime *); extern void Add_time(struct simtime *, struct simtime *); extern void Diff_time(struct simtime*, struct simtime *); extern double Divd_time(struct simtime *, struct simtime *); extern void Ave_time(struct simtime *, struct simtime *, int); extern void Burst_time(struct simtime *, unsigned long); //extern void strlwr(char *); //extern void strupr(char *); /* debug functions */ extern void Dump_rblist(); extern void Dump_devq(); extern void Dump_cpuq(); extern void Dump_eventq(); extern void pcbdump(); extern void Dump_mem(struct segment_type *segtab); /* Objective 1 functions */ extern void Add_event(struct simtime *, int, int); extern void Load_events(void); extern void Write_event(int, int, struct simtime *); extern void Interrupt(void); /* Objective 2 functions */ extern void Cpu(void); extern int Mu(void); extern void XPGM(struct state_type *addr); extern int Fetch(struct instr_type *instr); extern int Read (struct instr_type *instr); extern int Write(struct instr_type *instr); extern void Boot(void); extern void Get_Instr(int pgmid, struct instr_type *instr); extern void Display_pgm( struct segment_type *segtab, int numseg, struct pcb_type *pcb); extern void SetMAR(struct addr_type *addr); /* Objective 3 functions */ extern void Get_Script( struct pcb_type * ); extern void Logon_Service(void); extern int Next_pgm(struct pcb_type *); extern void Get_memory( struct pcb_type *); extern int Alloc_Seg(int); extern void Loader(struct pcb_type *); extern void Dealloc_pgm(struct pcb_type *); extern void Dealloc_seg( int base, int len ); extern void Merge_seg(void); extern void End_Service(void); extern void Abend_Service(void); /* Objective 4 functions */ extern void Add_cpuq(struct pcb_type *); extern struct pcb_type *Scheduler(void); extern void Sio_Service(void); extern void Start_IO(int); extern void Add_devq(int, struct rb_type *); extern void Add_rblist(struct pcb_type *, struct rb_type *); extern void Wio_Service(void); extern struct rb_type *Find_rb(struct pcb_type *, struct addr_type *); extern void Delete_rb(struct rb_type *, struct pcb_type *); extern void Eio_Service(void); extern void Purge_rb(struct pcb_type *); extern void LoadMap(struct segment_type *, int); extern void Dispatcher(void); /* Objective 5 functions */ extern void Calc_stats(void); /* Objective 6 functions */ extern void Compact_mem(void); double SimTimeToDouble();