220 likes | 392 Views
Module R2. Overview. Process queues. As processes enter the system and transition from state to state, they are stored queues. There may be many different types of queues: Job queue: jobs waiting to be loaded as processes. State queues: queues for each process state.
E N D
Module R2 Overview
Process queues As processes enter the system and transition from state to state, they are stored queues. There may be many different types of queues: • Job queue: jobs waiting to be loaded as processes. • State queues: queues for each process state. • Device queues: processes waiting for access to a particular device.
Executing Processes Process scheduling and dispatching involves: • Creating processes as new jobs are admitted to the system. • Maintaining various queues, and moving processes from one queue to another. • Using some algorithm to select a process from the ready queue, and loading and giving control to the selected process.
R2: Implement the control structures to: • Implement 2 abstract data types • PCBs • Doubly linked queues • Operations • Create, initialize, and destroy PCB’s • Insert and remove PCB’s from queues • It will NOT load and dispatch processes
2 layers to R2 • Internal layer • Defining abstract data types and the operations for objects of those types • These functions will be invoked, by operations implemented at the user interface level • User interface layer • Add new commands to COMHAN to allow the testing of your internal operations
Process Queues • Sample structure Typedef struct queue { PCB *front; PCB *rear; } Queue; • We suggest you implement a separate queue for each possible process state: ready, suspended ready, blocked, and suspended blocked.
Ready queue Process10 Process3 Proess1 Front Previous Previous Previous=Null Next Next = NULL Rear Next Process5 Previous Next Priority=120 Priority = 50 Priority = 50 Priority = 10 Each queue is a doubly linked list!!!!!
We implement the queues as a doubly linked list because: • Occasionally, a process to be terminated will be in the middle of the queue, it is more efficient to locate and “unlink it”, than to use traditional queue operations • Also, the ready queue is maintained in “priority” order, so new processes may be enqueued into the middle of the queue!
Queue Operations • Find PCB: • Searches for a specific PCB by process name. • It will “search” one or more queues • If the process is not found a “NULL” pointer will be returned. • If found the function will return a pointer to the PCB
Insert PCB • Traditional FIFO insertion • For the blocked, suspended blocked, and suspended ready queue, we will implement the traditional FIFO enqueue. • New processes are added at the END of the queue. • Priority insertion • For the READY queue, we will implement a “priority” insertion algorithm • New processes are inserted into the queue IN FRONT of all processes with a lower priority
Process10 Process3 Process1 Previous Previous Previous=Null Next Next = NULL Next Process20 Process5 Previous Previous Next Next Priority = 50 Priority = 50 Ready queue Front Rear Priority=120 Priority = 50 Priority = 10
Remove PCB • Receives a pointer to the PCB • A pointer to a queue • UNLINKS the PCB from the queue May be called after a “find PCB” request remove a specific PCB from a queue. • You may want to also implement a traditional “dequeue” operation.
Process Control Blocks (PCBs) • Suggested structure // PCB structure typedef struct PCB{ struct IOCB iocb; char pname[20]; //Process name at least 8 characters int pclass; //A code identifying the process as an //application process or a system process int priority; // range -128 ~ +127 int state; // Running, Ready, Blocked, Suspended Ready, or // Suspended blocked struct PCB * previous; // pointer of the previous PCB in the queue struct PCB * next; // pointer of the next PCB in the queue unsigned char * stack_base; // Stack pointer to the base unsigned char *stack_p; //stackptr int memory; unsigned char *load; //pointer to where the process is loaded unsigned char *execution; //pointer to execution addr } PCB;
PCB operations • Allocate PCB This operation will dynamically allocate a “new” PCB and return a pointer to it. If the allocation fails, a NULL pointer should be returned
Free PCB Given a pointer to a PCB, this function is responsible for: • Freeing all storage contained in the PCB • Freeing the space associated with the PCB • Setting the incoming pointer to NULL
Setup PCB Initializes the contents of a PCB!!! • Receives a pointer to a PCB • Input parameters for Name, priority, class, and state (always “ready” for R2) • Allocate memory for the stack and initialize the stack pointer (not used in R2) • Allocate a memory area for the process. (this is not used in R2, so the memory size should be set to zero and all related pointers set to NULL!!!!!!)
User Interface operations! • Create_PCB • Allocates and sets-up a new PCB, it receives arguments for name, class and priority • Delete_PCB • Given a process name, this function will “find”, “remove”, and “free” a process! • Block • This function moves a process from the ready queue to the blocked queue (or from one suspended queue to the other.) • It receives the process name as an argument
Unblock • This function moves a process from the blocked queue to the ready queue (or from one suspended queue to the other.) • It receives the process name as an argument • Suspend • This function moves a process from either the “ready” or “blocked” queue to the associated “suspended” queue. • It receives the process name as an argument
Resume • This function moves a process from either of “suspended” queues back to either the “ready” or the “blocked” queues • It receives the process name as an argument Please note: These operations require that we “find” a PCB, “remove” it from one queue and “insert” it into another!
Set Priority • This function is used to change the priority of a specific process. • It must “find” the process • Change the value of it’s priority • Show_PCB • Displays the contents of a single PCB • Receives the process name as an argument.
Show All • This function prints information for ALL PCBs in the system!!!!! Displays the contents of EVERY queue!!! • Need to select an attractive display format!!! • Show Ready • This function displays information for all of the PCB in both the ready queue or the suspended ready queue.
Show blocked • Shows information for all PCBs in either the blocked or suspended blocked queues.