Download presentation
Presentation is loading. Please wait.
Published byLeah Riley Modified over 9 years ago
1
Module R2 Overview
2
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.
3
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.
4
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
5
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
6
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.
7
Each queue is a doubly linked list!!!!! Ready queue Front Rear Process10 Previous Next = NULL Process3 Previous Next Process5 Previous Next Proess1 Previous=Null Next Priority = 50Priority = 10Priority = 50Priority=120
8
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!
9
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
10
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
11
Ready queue Front Rear Process10 Previous Next = NULL Process3 Previous Next Process1 Previous=Null Next Process5 Previous Next Priority = 50 Priority = 10Priority = 50Priority=120 Process20 Previous Next Priority = 50
12
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.
13
Process Control Blocks (PCBs) Suggested structure // PCB structure typedef struct PCB{ struct IOCB iocb; struct IOCB iocb; char pname[20]; //Process name at least 8 characters char pname[20]; //Process name at least 8 characters int pclass; //A code identifying the process as an int pclass; //A code identifying the process as an //application process or a system process //application process or a system process int priority; // range -128 ~ +127 int priority; // range -128 ~ +127 int state; // Running, Ready, Blocked, Suspended Ready, or int state; // Running, Ready, Blocked, Suspended Ready, or // Suspended blocked struct PCB * previous; // pointer of the previous PCB in the queue struct PCB * previous; // pointer of the previous PCB in the queue struct PCB * next; // pointer of the next 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_base; // Stack pointer to the base unsigned char *stack_p; //stackptr unsigned char *stack_p; //stackptr int memory; int memory; unsigned char *load; //pointer to where the process is loaded unsigned char *load; //pointer to where the process is loaded unsigned char *execution; //pointer to execution addr unsigned char *execution; //pointer to execution addr } PCB;
14
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
15
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
16
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!!!!!!)
17
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
18
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
19
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!
20
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.
21
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.
22
Show blocked Shows information for all PCBs in either the blocked or suspended blocked queues.
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.