Skip to content

Module 0: Resource Manager

This module is responsible for allocating and releasing the different resources. Note that the Terminal and Disk devices are freed by the corresponding interrupt handlers.

Function Number Function Name Arguments Return Value
ACQUIRE_BUFFER = 1 Acquire Buffer Buffer Number, PID NIL
RELEASE_BUFFER = 2 Release Buffer Buffer Number, PID 0 or -1
ACQUIRE_DISK = 3 Acquire Disk* PID NIL
ACQUIRE_INODE = 4 Acquire Inode Inodeindex, PID 0 or -1
RELEASE_INODE = 5 Release Inode Inodeindex, PID 0 or -1
ACQUIRE_SEMAPHORE = 6 Acquire Semaphore PID Semaphore Table Index or -1
RELEASE_SEMAPHORE = 7 Release Semaphore Semaphore Table Index, PID 0 or -1
ACQUIRE_TERMINAL = 8 Acquire Terminal PID NIL
RELEASE_TERMINAL = 9 Release Terminal PID 0 or -1

*Release function for the disk is implimented in the disk interrupt handler.

Acquire Buffer

Description: Acquire the buffer corresponding to buffer number given as input. Assumes a valid PID and a valid buffer number are given.


while ( Buffer is locked ){   /* Check the Locking PID field in the Buffer Status Table */
    Set state of the process as ( WAIT_BUFFER , Buffer Number );
    Call the switch_context() function from the Scheduler Module.
}

Lock the Buffer by setting the PID of the current process in the Locking PID field
in the Buffer Status Table ;

return;

Called by BufRead and BufWrite functions in the File Manager.

Release Buffer

Description : Release the buffer corresponding to buffer number given as input. Assumes a valid PID and a valid buffer number are given.


If PID given as input is not equal to the LOCKING PID in the Buffer Status Table, return -1.

Free the lock in the the Buffer Status Table entry corresponding to 
the buffer Number; /* Set Locking PID field to -1 */
loop through the process table{ 
       if (the process state is ( WAIT_BUFFER , Buffer Number ) ){
             Set state of process as (READY , _ )
         } 
}
return 0;

Called by BufRead and BufWrite functions in the File Manager.

Acquire Disk

Description : Locks the disk device. Assumes that a valid PID is given as input.


while ( disk is locked ){  /* Check the Status field in the Disk Status Table. */
    Set state of the process as ( WAIT_DISK , - );
    Call the switch_context() function from the Scheduler Module.
}

Lock the disk by setting PID and the status field in the Disk Status Table.

return;

Called by BufRead and BufWrite functions in the File Manager and the exception handler for swap-in.

Acquire Inode

Description : Locks the Inode entry corresponding to the inodeindex given as input. Assumes a valid PID and a valid inode index are given.


while ( inode is locked ){   /* Check the Lock field in the File Status Table. */
    Set state of the process as ( WAIT_FILE , Inode Index );
    Call the switch_context() function from the Scheduler Module.
} 

If inode becomes invalid, return -1. /* File was deleted by the time the inode was acquired */

Lock the Inode by setting the Lock field in the File Status Table 
to the PID of the current process.;

return 0;

Called by Delete, Read, Write and Seek system calls.

Release Inode

Description : Frees the lock of the inode entry corresponding to the inodeindex given as input. Assumes a valid PID and a valid inode index are given.


If PID given as input is not equal to the LOCKING PID in the File Status Table, return -1.

Free the lock in the File Status Table corresponding to the inode index;       /* Set the Lock field to -1 */

loop through the process table{ 
       if (the process state is ( WAIT_FILE, Inode Index ) ){
             Set state of process as (READY , _ )
         } 
}
return 0;

Called by Read, Write and Seek system calls.

Acquire Semaphore

Description : Acquires a semaphore and returns it's semaphore number. Assumes a valid PID is given as input. Returns -1 upon failure.

 
Find the index of a free entry in Semaphore table. If no free entry, return -1.
/* Free entry is indicated by a Process Count of 0. */ 

Set the PROCESS_COUNT to 1 and LOCKING_PID to -1.

Return the Semaphore table index. /* success */

Called by the Semget system call.

Release Semaphore

Description : Releases a semaphore. Assumes a valid PID and semaphore table index are given as input.


If ( semaphore is locked by the current process) /*Check the Locking PID in the Semaphore table*/
    Set the Locking PID to -1. /* Unlock the semaphore before release */
    loop through the process table{ /*wake up processes blocked by the semaphore */
            if (the process state is ( WAIT_SEMAPHORE, SEMTABLEINDEX ) ){
                Set state of process as (READY , _ )
            } 
    }

Decrement the process count of the semaphore in the semaphore table.
/* When the count becomes 0, the semaphore is free. */

Called by the Semrelease and exit system call.

Acquire Terminal

Description : Locks the Terminal device. Assumes a valid PID is given as input.


while ( Terminal device is locked ){    /* Check the Status field in the Terminal Status Table */
    Set state of the process as ( WAIT_TERMINAL , - );
    Call the switch_context() function from the Scheduler Module.
}

Lock the Terminal device by setting the Status and PID fields in the Terminal Status Table.

return;

Called by the Terminal Read and Terimnal Write functions of the Device Manager Module.

Release Terminal

Description : Frees the Terminal device. Assumes a valid PID is given as input.


If PID given as input is not equal to the LOCKING PID in the Teminal Status Table, return -1.

    Release the lock on the Terminal by updating the Terminal Status Table.;

    loop through the process table{ 
       if (the process state is ( WAIT_TERMINAL , - ) ){
             Set state of process as (READY , _ )
         } 
    }

    Return 0

Called by the Terimnal Write function in the Device Manager Module.

Back to top