/** Build and configure a new process */ u16 new_proc( u64 start_time, u32 run_time, u32 code_size, u32 data_size, u32 priority ) { // If the current time is less than the processes start time, don't make it if ( get_time() < start_time ) { return 0; } // Figure out how many blocks it needs u64 size = code_size + data_size; u16 blocks = size >> 22; if ( size & ( ( 1 << 22 ) - 1 ) ) { blocks++; } // A page for the process to live in u16 proc_page = page_alloc( 1 ); printf("NEW PROC: proc_page:\t%llu\n", proc_page); // Allocate space with disk chunks if ( vas_alloc( mem[proc_page]._proc._sbt, blocks ) ) { } else { // There wasn't enough space, free up the pages and exit page_free( proc_page ); return 0; } // A page for the l1 u16 l1_page = page_alloc( 1 ); printf("NEW PROC: l1_page:\t%llu\n", l1_page); // Setup the page time mem[proc_page]._proc._pid = start_time; // Actual start time mem[proc_page]._proc._curtm = get_time( ); // Set id mem[proc_page]._proc._arrid = PROC_POINT; // Setup page table index (l1) mem[proc_page]._proc._pti = l1_page; // Set size of vas blocks mem[proc_page]._proc._vas = blocks; // Setup code size mem[proc_page]._proc._cs = code_size; // Setup data size mem[proc_page]._proc._ds = data_size; // Setup net time mem[proc_page]._proc._nt = run_time; // Original net time mem[proc_page]._proc._ntf = run_time; // Set page fault count mem[proc_page]._proc._fault = 0; // Setup proc priority mem[proc_page]._proc._priority = priority; // Set the mem_man properties for the process page mem_man[proc_page]._pinned = 1; mem_man[proc_page]._l1i = l1_page; // Set the mem_man properties for the l1 page mem_man[l1_page]._proc = proc_page; mem_man[l1_page]._pinned = 1; return proc_page; }
VASCpp::VASCpp (int N) { vas = vas_alloc (N); return; }