jsos

college code for operating system fundamentals in js

git clone https://9o.is/git/jsos.git

globals.js

(2963B)


      1 /* ------------  
      2    Globals.js
      3 
      4    Global CONSTANTS and _Variables.
      5    (Global over both the OS and Hardware Simulation.)
      6    
      7    This code references page numbers in the text book: 
      8    Operating System Concepts 8th editiion by Silberschatz, Galvin, and Gagne.  ISBN 978-0-470-12872-5
      9    ------------ */
     10 
     11 //
     12 // Global Constants
     13 //
     14 var APP_NAME = "JuliOS";  // 'cause I was at a loss for a better name.
     15 var APP_VERSION = "0.4";
     16 
     17 var CPU_CLOCK_INTERVAL = 100;   // in ms, or milliseconds, so 1000 = 1 second.
     18 
     19 var TIMER_IRQ    = 0;  // Pages 23 (timer), 9 (interrupts), and 561 (interrupt priority). 
     20                        // NOTE: The timer is different from hardware clock pulses. Don't confuse these.
     21 var KEYBOARD_IRQ = 1;
     22 
     23 var SYSCALL_IRQ = 2;  
     24 
     25 
     26 //
     27 // Global Variables
     28 //
     29 var _CPU = null;
     30 
     31 var _OSclock = 0;       // Page 23.
     32 
     33 var _Memory = null;
     34 
     35 var _Disk = null;
     36 
     37 var _Mode = 0;   // 0 = Kernel Mode, 1 = User Mode.  See page 21.
     38 
     39 // TODO: Fix the naming convention for these next five global vars.
     40 var CANVAS = null;              // Initialized in hostInit().
     41 var DRAWING_CONTEXT = null;     // Initialized in hostInit().
     42 var DEFAULT_FONT = "Open Baskerville 0.0.53";      // Ignored, just a place-holder in this version.
     43 var DEFAULT_FONT_SIZE = 13;     
     44 var FONT_HEIGHT_MARGIN = 4;     // Additional space added to font size when advancing a line.
     45 
     46 // dom id's
     47 var CANVAS_ID = "display";
     48 var HALT_BTN = "btnHaltOS";
     49 var RESET_BTN = "btnReset";
     50 var TALOG = "taLog";
     51 var TA_PROGRAM_INPUT = "taProgramInput";
     52 
     53 // Default the OS trace to be on.
     54 var _Trace = true;
     55 
     56 // OS queues
     57 var _KernelInterruptQueue = null;
     58 var _KernelBuffers = null;
     59 var _KernelInputQueue = null;
     60 var _KernelMemoryManager = null;
     61 var _KernelReadyQueue = null;
     62 var _KernelCPUScheduler = null;
     63 
     64 // Standard input and output
     65 var _StdIn  = null;
     66 var _StdOut = null;
     67 
     68 // UI
     69 var _Console = null;
     70 var _OsShell = null;
     71 
     72 // At least this OS is not trying to kill you. (Yet.)
     73 var _SarcasticMode = false;
     74 
     75 //
     76 // Global Device Driver Objects - page 12
     77 //
     78 var krnKeyboardDriver = null;
     79 var krnFilesystemDriver = null;
     80 
     81 // memory size
     82 var TOTAL_PAGES = 3;
     83 var SWAPPABLE = 1;
     84 var MAX_MEMORY_PROGRAM = 256; //bytes
     85 var TOTAL_MEMORY = TOTAL_PAGES * MAX_MEMORY_PROGRAM; //bytes
     86 
     87 // pcb states
     88 var PCB_STATE_RESIDENT = "resident";
     89 var PCB_STATE_READY = "ready";
     90 var PCB_STATE_RUNNING = "running";
     91 var PCB_STATE_TERMINATED = "terminated";
     92 
     93 // error codes
     94 var _ERROR = "ERROR: ";
     95 var _ERROR_INVALID_SYSTEM_CALL = _ERROR+"INVALID SYSTEM CALL";
     96 var _ERROR_INVALID_OPERATOR = _ERROR+"INVALID OPERATOR";
     97 var _ERROR_STACK_OVERFLOW = _ERROR+"STACK OVERFLOW";
     98 var _ERROR_INVALID_BYTE_VALUE = _ERROR+"INVALID BYTE VALUE";
     99 
    100 // cpu scheduling
    101 var CPU_STATE_RR = {name:"Round Robin", abbr:"rr"};
    102 var CPU_STATE_FCFS = {name:"First Come First Serve", abbr:"fcfs"};
    103 var CPU_STATE_PRIORITY = {name:"Non-preemptive Priority",abbr:"priority"};
    104 var CPU_STATE = CPU_STATE_RR.name;
    105 
    106 // Round Robin Quantum
    107 var RR_QUANTUM = 6;