/**
    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;
}
Exemple #2
0
VASCpp::VASCpp (int N)
{
	vas = vas_alloc (N);
	return;
}