CSE OS Lab Manual BCS303 2023
CSE OS Lab Manual BCS303 2023
Manual
Course Title: Operating Systems
Course Code: BCS303 CIE Marks 50
Course Type Integrated
SEE Marks 50
(Theory/Practical
Total Marks100
/Integrated)
Teaching Hours/Week 3:0:2
(L:T:P: S) Exam Hours 3+2
Total Hours of Pedagogy 40 hours Credits 04
Course Objectives:
CLO 1. To Demonstrate the need for OS and different types of OS
CLO 2. To discuss suitable techniques for management of different resources
CLO 3. To demonstrate different APIs/Commands related to processor,
memory, storage and file system management.
Teaching-Learning Process (General Instructions)
Teachers can use the following strategies to accelerate the attainment of the various course
outcomes.
1. Lecturer methods (L) need not to be only traditional lecture method, but alternative
effective teaching methods could be adopted to attain the outcomes.
2. Use of Video/Animation to explain functioning of various concepts.
3. Encourage collaborative (Group Learning) Learning in the class.
4. Adopt Problem Based Learning (PBL), which fosters students’ Analytical skills, develop
design thinking skills such as the ability to design, evaluate, generalize, and analyze
information rather than simply recall it.
5. Role play for process scheduling.
6. Demonstrate the installation of any one Linux OS on VMware/Virtual Box
Module-1 (8 Hours of Pedagogy)
Introduction to operating systems, System structures: What operating systems do;
Computer System organization; Computer System architecture; Operating System structure;
Operating System operations; Process management; Memory management; Storage
management; Protection and Security; Distributed system; Special-purpose systems;
Computing environments.
Operating System Services: User - Operating System interface; System calls; Types of
system calls; System programs; Operating system design and implementation; Operating
System structure; Virtual machines; Operating System debugging, Operating System
generation; System boot.
Textbook 1: Chapter – 1 (1.1-1.12), 2 (2.2-2.11)
Teaching- Chalk and talk method/Power Point Presentation/ Web Content:
Learning Process 1. https://youtu.be/mXw9ruZaxzQ
2. https://youtu.be/vBURTt97EkA
Module-2 (8 Hours of Pedagogy)
Process Management: Process concept; Process scheduling; Operations on processes; Inter process
communication
Multi-threaded Programming: Overview; Multithreading models; Thread Libraries; Threading issues.
Process Scheduling: Basic concepts; Scheduling Criteria; Scheduling Algorithms; Thread scheduling;
Multiple-processor scheduling,
Textbook 1: Chapter – 3 (3.1-3.4), 4 (4.1-4.4), 5 (5.1 -5.5)
Teaching- Chalk and talk method/ Power Point Presentation
Learning Process
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 1 of 53
Module-3 (8 Hours of Pedagogy)
Process Synchronization: Synchronization: The critical section problem; Peterson’s solution;
Synchronization hardware; Semaphores; Classical problems of synchronization;
Deadlocks: System model; Deadlock characterization; Methods for handling deadlocks; Deadlock
prevention; Deadlock avoidance; Deadlock detection and recovery from deadlock.
Textbook 1: Chapter – 6 (6.1-6.6), 7 (7.1 -7.7)
Teaching-Learning Chalk and talk method/ Power Point Presentation
Process
Module-4 (8 Hours of Pedagogy)
Memory Management: Memory management strategies: Background; Swapping; Contiguous memory
allocation; Paging; Structure of page table; Segmentation.
Virtual Memory Management: Background; Demand paging; Copy-on-write; Page replacement;
Allocation of frames; Thrashing.
Textbook 1: Chapter -8 (8.1-8.6), 9 (9.1-9.6)
Teaching-Learning Chalk and talk method/Power Point Presentation
Process
Module-5 (8 Hours of Pedagogy)
File System, Implementation of File System: File system: File concept; Access methods; Directory and
Disk structure; File system mounting; File sharing; Implementing File system: File system structure; File
system implementation; Directory implementation; Allocation methods; Free space management.
Secondary Storage Structure, Protection: Mass storage structures; Disk structure; Disk attachment; Disk
scheduling; Disk management; Protection: Goals of protection, Principles of protection, Domain of
protection, Access matrix.
Textbook 1: Chapter – 10 (10.1-10.5) ,11 (11.1-11.5),12 (12.1-12.5), 14 (14.1-14.4)
Teaching-Learning Chalk and talk method/Power Point Presentation
Process
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 2 of 53
Programming Assignments
1. Develop a C program to implement the Process System calls (fork(), exec(), wait(),
create process, terminate process.
2. Simulate the following CPU scheduling algorithms to find turnaround time and waiting
time:
a. FCFS b. SJF c. Round Robin d. Priority
3. Develop a C program to simulate producer-consumer problem using semaphores.
4. Develop a C program which demonstrates interprocess communication between a
reader process and a writer process. Use mkfifo, open, read, write and close APIs in
your program.
The theory portion of the IPCC shall be for both CIE and SEE, whereas the practical portion will
have a CIE component only. Questions mentioned in the SEE paper may include questions from
the practical component.
COURSE OUTCOMES: At the end of the course the student will be able to
CO1 Explain the structure and functionality of operating system
CO2 Apply appropriate CPU scheduling algorithms for the given problem.
CO3 Analyse the various techniques for process synchronization and deadlock handling.
CO4 Apply the various techniques for memory management
CO5 Explain file and secondary storage management strategies.
CO6 Describe the need for information protection mechanisms
CO-PO&PSO Matrix
COURSE
OUTCOMES PO1 PO2 PO3 PO4 PO5 PO6 PO7 PO8 PO9 PO10 PO11 PO12 PSO1 PSO2
BCS303.1 3 2 1 1 1 2 3 3
BCS303.2 2 3 3 2 1 1 2 2 3
BCS303.3 3 3 3 3 1 2 3 3
BCS303.4 3 3 3 2 2 3 2
BCS303.5 2 2 1 1 1 1 1 1 2
BCS303.6 2 1 1 1 2 1 1 1
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 4 of 53
LAB ASSESSMENT RUBRICS FOR CIE
1. Maximum CIE: 25 Marks
a. Continuous Evaluation of Experiments:15 Marks
b. Internal Test: 10 Marks
2. Rubrics for Continuous Evaluation of Experiments
Continuous Evaluation for 15 marks Marks Allotted
A Observation Write up and Attendance 4
B Conduction of Experiments and output 3
C Viva Voce 4
D Record Write up 4
Total 15
3. Rubrics for Test Evaluation: The Laboratory shall be conducted for 50 marks and scaled
down to 10 marks
Test Evaluation for 15 marks Marks Allotted
A Program Write up 15
B Conduction of Experiments and output 20
C Viva Voce 15
Total 50
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 5 of 53
Introduction to Principles of Programming Using C
Problem Solving Techniques: The process of working through details of a problem to reach a
solution.
There are three approaches to problem solving:
Algorithm
Flowchart
Pseudo Code
Algorithm: The algorithm is a step-by-step procedure to be followed in solving a problem. It
provides a scheme to solve a particular problem in finite number of unambiguous steps. It helps in
implementing the solution of a problem using any of the programming languages.
In order to qualify as an algorithm, a sequence of instructions must possess the following
characteristics:
Definiteness: Each instruction must be clear, well defined and precise. There should not be any
ambiguity.
Finiteness: It should be a sequence of finite instructions. That is, it should end after a fixed time. It
should not enter into an infinite loop.
Effectiveness: This means that operations must be simple and are carried out in a finite time at one
or more levels of complexity. It should be effective whenever traced manually for the results.
Key features of an algorithm: Any algorithm has a finite number of steps and some steps may
involve decision making, repetition. Broadly speaking, an algorithm exhibits three key features that
can be given as:
Sequence: Sequence means that each step of the algorithm is executed in the specified order.
Decision: Decision statements are used when the outcome of the process depends on some
condition.
Repetition: Repetition which involves executing one or more steps for a number of times can be
implemented using constructs like the while, do-while and for loops. These loops executed one or
more steps until some condition is true.
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 6 of 53
C PROGRAMMING WITH Ubuntu
Step1: Open the terminal window:
As we are programming with C, the extension will be “.c”. This is how a Gedit text editor of file
name 'example.c' would look.
Type the program in the Gedit text editor save it and then close the text editor.
NOTE: When using the 'math.h' header file in the C program, use the following command to
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 7 of 53
compile. Syntax: gcc -lm filename.
PROGRAM-1
Develop a C program to implement the Process System calls (fork(), exec(), wait(),
create process and terminate process)
AIM:
To write a program for implementing process management using the following system calls of UNIX
operating system: fork, exec, getpid, exit, wait, close.
ALGORITHM:
1. Start the program.
2. Read the input from the command line.
3. Use fork() system call to create process, getppid() system call used to get the parent process
ID and getpid() system call used to get the current process ID
4. execvp() system call used to execute that command given on that command line argument
5. execlp() system call used to execute specified command.
6. Open the directory at specified in command line input.
7. Display the directory contents.
8. Stop the program.
PROGRAM
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
void main()
{
pid_t pid = 0;
int status;
pid = fork();
if (pid == 0)
{
printf("I am the child.");
execl("/bin/ls", "ls", "-l", "/home/ubuntu/", (char *) 0);
perror("In exec(): ");
}
if (pid > 0)
{
printf("I am the parent %d, and the child is %d.\n", getppid(), pid);
pid = wait(&status);
printf("End of process %d: ", pid);
if (WIFEXITED(status))
{
printf("The process ended with exit(%d).\n", WEXITSTATUS(status));
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 8 of 53
}
if (WIFSIGNALED(status))
{
printf("The process ended with kill -%d.\n", WTERMSIG(status));
}
}
if (pid < 0)
{
perror("In fork():");
}
exit(0);
}
VIVA QUESTIONS:
1. What is the purpose of system calls?
2. What system calls have to be executed by a command interpreter or shell in order to start a new process?
3. When a process creates a new process using the fork() operation, which of the following state is shared
between the parent process and the child process?
4. What is the use of exec system call?
5. What system call is used for closing a file?
6. What is the value return by close system call?
7. What is the system call is used for writing to a file.
8, what are system calls used for creating and removing directories?
OUTPUT
I am the parent 223, and the child is 228.
ls: cannot access '/home/ubuntu/': No such file or directory
End of process 228: The process ended with exit(2).
Rubrics for Continuous Evaluation (15 Marks)
Continuous Evaluation for15marks Marks Marks
Allotted Obtained
A Observation Writeup and Attendance 4
B Conduction of Experiment and Output 3
C Viva Voice 4
D Record Writeup 4
Total 15
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 9 of 53
PROGRAM-2
Simulate the following Scheduling algorithms to find Turnaround Time and Waiting Time
AIM
To write a C program to implement First Come First Serve scheduling algorithm.
DESRIPTION:
For FCFS scheduling algorithm, read the number of processes/jobs in the system, their CPU burst
times. The scheduling is performed on the basis of arrival time of the processes irrespective of their
other parameters. Each process will be executed according to its arrival time. Calculate the waiting time
and turnaround time of each of the processes accordingly.
ALGORITHM:
Step 1: Start the program.
Step 2: Get the input process and their burst time.
Step 3: Sort the processes based on order in which it requests CPU.
Step 4: Compute the waiting time and turnaround time for each process.
Step 5: Calculate the average waiting time and average turnaround time.
Step 6: Print the details about all the processes.
Step 7: Stop the program.
PROGRAM
FCFS CPU Scheduling
#include<stdio.h>
#include<conio.h>
void main()
{
int bt[20], wt[20], tat[20], i, n;
float wtavg, tatavg;
//clrscr();
printf("\nEnter the number of processes -- ");
scanf("%d", &n);
for(i=0;i<n;i++)
{
printf("\nEnter Burst Time for Process %d -- ", i);
scanf("%d", &bt[i]);
}
wt[0] = wtavg = 0;
tat[0] = tatavg = bt[0];
for(i=1;i<n;i++)
{
wt[i] = wt[i-1] +bt[i-1];
tat[i] = tat[i-1] +bt[i];
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 10 of 53
wtavg = wtavg + wt[i];
tatavg = tatavg + tat[i];
}
printf("\n \t PROCESS \tBURST TIME \t WAITING TIME\t TURNAROUND TIME\n");
for(i=0;i<n;i++)
printf("\n\t P%d \t\t %d \t\t %d \t\t %d", i, bt[i], wt[i], tat[i]);
OUTPUT:
Enter the number of processes -- 3
Enter Burst Time for Process 0 -- 5 1 7
P0 5 0 5
P1 1 5 6
P2 7 6 13
Average Waiting Time -- 3.666667
Average Turnaround Time -- 8.000000
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 11 of 53
SJF CPU Scheduling
AIM
To write a C program to implement shortest job first (non-pre-emptive) scheduling algorithm.
DESCRIPTION:
For SJF scheduling algorithm, read the number of processes/jobs in the system, their CPU burst times.
Arrange all the jobs in order with respect to their burst times. There may be two jobs in queue with the
same execution time, and then FCFS approach is to be performed. Each process will be executed
according to the length of its burst time. Then calculate the waiting time and turnaround time of each of
the processes accordingly.
ALGORITHM:
Step 1: Start the program.
Step 2: Get the input process and their burst time.
Step 3: Sort the processes based on burst time.
Step 4: Compute the waiting time and turnaround time for each process.
Step 5: Calculate the average waiting time and average turnaround time.
Step 6: Print the details about all the processes.
Step 7: Stop the program.
#include<stdio.h>
#include<conio.h>
void main()
{
int p[20], bt[20], wt[20], tat[20], i, k, n, temp; float wtavg,
tatavg;
//clrscr();
printf("\nEnter the number of processes -- ");
scanf("%d", &n);
for(i=0;i<n;i++)
{
p[i]=i;
printf("Enter Burst Time for Process %d -- ", i);
scanf("%d", &bt[i]);
}
for(i=0;i<n;i++)
for(k=i+1;k<n;k++)
if(bt[i]>bt[k])
{
temp=bt[i];
bt[i]=bt[k];
bt[k]=temp;
temp=p[i];
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 12 of 53
p[i]=p[k];
p[k]=temp;
}
wt[0] = wtavg = 0;
tat[0] = tatavg = bt[0];
for(i=1;i<n;i++)
{
wt[i] = wt[i-1] +bt[i-1];
tat[i] = tat[i-1] +bt[i];
wtavg = wtavg + wt[i];
tatavg = tatavg + tat[i];
}
printf("\n\t PROCESS \tBURST TIME \t WAITING TIME\t TURNAROUND TIME\n");
for(i=0;i<n;i++)
printf("\n\t P%d \t\t %d \t\t %d \t\t %d", p[i], bt[i], wt[i], tat[i]);
OUTPUT:
Enter the number of processes -- 4
Enter Burst Time for Process 0 -- 6
Enter Burst Time for Process 1 -- 8
Enter Burst Time for Process 2 -- 7
Enter Burst Time for Process 3 -- 3
P3 3 0 3
P0 6 3 9
P2 7 9 16
P1 8 16 24
Average Waiting Time -- 7.000000
Average Turnaround Time -- 13.000000
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 13 of 53
Round Robin CPU Scheduling
AIM:
To write a C program to implement Round Robin scheduling algorithm.
DESCRIPTION:
For round robin scheduling algorithm, read the number of processes/jobs in the system, their CPU burst
times, and the size of the time slice. Time slices are assigned to each process in equal portions and in
circular order, handling all processes execution. This allows every process to get an equal chance.
Calculate the waiting time and turnaround time of each of the processes accordingly.
ALGORITHM:
Step 1: Start the program.
Step 2: Get the input process and their burst time.
Step 3: Sort the processes based on priority.
Step 4: Compute the waiting time and turnaround time for each process. Step 5: Calculate the average
waiting time and average turnaround time. Step 6: Print the details about all the processes.
Step 7: Stop the program.
#include<stdio.h>
#include<conio.h>
void main()
{
int i,j,n,bu[10],wa[10],tat[10],t,ct[10],max;
float awt=0,att=0,temp=0;
//clrscr();
printf("Enter the no of processes -- ");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("\nEnter Burst Time for process %d -- ", i+1);
scanf("%d",&bu[i]);
ct[i]=bu[i];
}
printf("\nEnter the size of time slice -- ");
scanf("%d",&t);
max=bu[0];
for(i=1;i<n;i++)
if(max<bu[i])
max=bu[i];
for(j=0;j<(max/t)+1;j++)
for(i=0;i<n;i++)
if(bu[i]!=0)
if(bu[i]<=t)
{
tat[i]=temp+bu[i];
temp=temp+bu[i];
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 14 of 53
bu[i]=0;
}
else
{
bu[i]=bu[i]-t;
temp=temp+t;
}
for(i=0;i<n;i++)
{
wa[i]=tat[i]-
ct[i]; att+=tat[i];
awt+=wa[i];
}
printf("\nThe Average Turnaround time is -- %f",att/n);
printf("\nThe Average Waiting time is -- %f ",awt/n);
printf("\n\tPROCESS\t BURST TIME \t WAITING TIME\tTURNAROUND TIME\n");
for(i=0;i<n;i++)
printf("\t%d \t %d \t\t %d \t\t %d \n",i+1,ct[i],wa[i],tat[i]);
getch();
}
OUTPUT:
Enter the no of processes -- 3
Enter Burst Time for process 1 -- 24
Enter Burst Time for process 2 -- 3
Enter Burst Time for process 3 -- 3
Enter the size of time slice -- 3
RUN2:
Enter the no of processes -- 3
Enter Burst Time for process 1 -- 24
Enter Burst Time for process 2 -- 3
Enter Burst Time for process 3 -- 3
Enter the size of time slice -- 2
The Average Turnaround time is -- 16.333334
The Average Waiting time is -- 6.333333
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 15 of 53
3 3 7 10
Priority CPU Scheduling
AIM
To write a C program to implement Priority Scheduling algorithm.
DESCRIPTION:
For priority scheduling algorithm, read the number of processes/jobs in the system, their CPU burst
times, and the priorities. Arrange all the jobs in order with respect to their priorities. There may be two
jobs in queue with the same priority, and then FCFS approach is to be performed. Each process will be
executed according to its priority. Calculate the waiting time and turnaround time of each of the
processes accordingly.
ALGORITHM:
Step 1: Start the program.
Step 2: Get the input process and their burst time.
Step 3: Sort the processes based on priority.
Step 4: Compute the waiting time and turnaround time for each process.
Step 5: Calculate the average waiting time and average turnaround time.
Step 6: Print the details about all the processes.
Step 7: Stop the program.
#include<stdio.h>
#include<conio.h>
void main()
{
int p[20],bt[20],pri[20], wt[20],tat[20],i, k, n, temp; float wtavg,
tatavg;
//clrscr();
printf("Enter the number of processes --- ");
scanf("%d",&n);
for(i=0;i<n;i++)
{
p[i] = i;
printf("Enter the Burst Time & Priority of Process %d --- ",i);
scanf("%d%d",&bt[i], &pri[i]);
}
for(i=0;i<n;i++)
for(k=i+1;k<n;k++)
if(pri[i] > pri[k])
{
temp=p[i];
p[i]=p[k];
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 16 of 53
p[k]=temp;
temp=bt[i];
bt[i]=bt[k];
bt[k]=temp;
temp=pri[i];
pri[i]=pri[k];
pri[k]=temp;
}
wtavg = wt[0] = 0;
tatavg = tat[0] = bt[0];
for(i=1;i<n;i++)
{
wt[i] = wt[i-1] + bt[i-1];
tat[i] = tat[i-1] + bt[i];
wtavg = wtavg + wt[i];
tatavg = tatavg + tat[i];
}
printf("\nPROCESS\t\tPRIORITY\tBURST TIME\tWAITING TIME\tTURNAROUND
TIME");
for(i=0;i<n;i++)
printf("\n%d \t\t %d \t\t %d \t\t %d \t\t %d ",p[i],pri[i],bt[i],wt[i],tat[i]);
printf("\nAverage Waiting Time is --- %f",wtavg/n);
printf("\nAverage Turnaround Time is --- %f",tatavg/n);
getch();
}
OUTPUT:
Enter the number of processes --- 5
Enter the Burst Time & Priority of Process 0 --- 10 3
Enter the Burst Time & Priority of Process 1 --- 1 1
Enter the Burst Time & Priority of Process 2 --- 2 4
Enter the Burst Time & Priority of Process 3 --- 1 5
Enter the Burst Time & Priority of Process 4 --- 5 2
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 17 of 53
VIVA QUESTIONS:
1. Define operating system?
2. What are the different types of operating systems?
3. Define a process?
4. What is CPU Scheduling?
5. Define arrival time, burst time, waiting time, turnaround time?
6. What is the advantage of round robin CPU scheduling algorithm?
7. Which CPU scheduling algorithm is for real-time operating system?
8. In general, which CPU scheduling algorithm works with highest waiting time?
9. Is it possible to use optimal CPU scheduling algorithm in practice?
10. What is the real difficulty with the SJF CPU scheduling algorithm?
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 18 of 53
PROGRAM-3
DESCRIPTION:
Producer-consumer problem, is a common paradigm for cooperating processes. A producer process
produces information that is consumed by a consumer process. One solution to the producer-consumer
problem uses shared memory. To allow producer and consumer processes to run concurrently, there
must be available a buffer of items that can be filled by the producer and emptied by the consumer.
This buffer will reside in a region of memory that is shared by the producer and consumer processes. A
producer can produce one item while the consumer is consuming another item. The producer and
consumer must be synchronized, so that the consumer does not try to consume an item that has not yet
been produced.
ALGORITHM:
Step 1: The Semaphore mutex, full & empty are initialized.
Step 2: In the case of producer process
i) Produce an item in to temporary variable.
ii) If there is empty space in the buffer check the mutex value for enter into the critical section.
iii) If the mutex value is 0, allow the producer to add value in the temporary variable to the
buffer.
PROGRAM:
#include<stdio.h>
#include<conio.h>
void main()
{
int buffer[10], bufsize, in, out, produce, consume,choice=0;
in = 0;
out = 0;
bufsize = 10;
while(choice !=3)
{
printf(" \n1. Produce \t 2. Consume \t3. Exit");
printf(" \nEnter your choice: ");
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 19 of 53
scanf("%d", &choice);
switch(choice)
{
case 1:
if((in+1)%bufsize==out)
printf("\nBuffer is Full");
else
{
printf("\nEnter the value: ");
scanf("%d", &produce);
buffer[in] = produce;
in = (in+1)%bufsize;
}
break;
case 2:
if(in == out)
printf("\nBuffer is Empty");
else
{
consume = buffer[out];
printf("\nThe consumed value is %d", consume);
out = (out+1)%bufsize;
}
break;
}
}
}
OUTPUT:
1. Produce 2. Consume 3. Exit
Enter your choice: 2
Buffer is Empty
1. Produce 2. Consume 3. Exit
Enter your choice: 1
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 20 of 53
1. Produce 2. Consume 3. Exit
Enter your choice: 1
Buffer is Empty
1. Produce 2. Consume 3. Exit
Enter your choice: 3
VIVA QUESTIONS
1. Define Semaphore?
2. What is use of wait and signal functions?
3. What is mutual exclusion?
4. Define producer consumer problem?
5. What is the need for process synchronization?
6. Discuss the consequences of considering bounded and unbounded buffers in producer-consumer
problem?
7. Can producer and consumer processes access the shared memory concurrently?
If not which technique provides such a benefit?
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 21 of 53
PROGRAM-4
DESCRIPTION:
In reader writer process the named pipes provide a mechanism for interprocess communication between
a reader and a writer process. The writer opens the pipe for writing, and the reader opens it for reading.
Data is written to the named pipe by the writer and can be read by the reader, facilitating
communication between the two processes. Once communication is complete, the named pipe can be
unlinked to clean up system resources.
Algorithm:
1. Create a Named Pipe (FIFO)
Use the mkfifo function to create a named pipe. This should be done before running the
reader and writer processes.
2. Writer Process
Open the named pipe for writing using the OPEN function,
Check for errors in opening the pipe
Prepare the data to be written and store it in buffer
Use the WRITE function to send data to the named pipe
Close the file descriptor to release the named pipe
3. Reader Process
Open the named pipe for reading using the OPEN function
Check for errors in opening the pipe
Create a buffer to receive the data
Use the READ function to read data from the named pipe
Close the file descriptor when you done reading data
4. Error Handling
Ensure proper error handling for mkfifo, open, read, and write functions to handle cases
like failed pipe crestion, opening, and reading/ writing
5. Cleanup
After communication is complete, both writer and reader processes should unlink the
named pipe using the unlink function to remove the pipe
6. End of Process
Terminate the reader and writer processes when they have completed their task.
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 22 of 53
Writer Process
#include <stdio.h>
#include <fcntl.h>
#include <sys/type.h> // for ‘mkfifo()’ and permission modes.
#include <unistd.h>
int main()
{
int fd; // declare file descriptor
char buf[1024];
/* create the FIFO (named pipe) */
char * myfifo = "/tmp/myfifo"; //defining the path of FIFO
mkfifo(myfifo, 0666) //Create named pipe with read and write permissions.
; printf("Run Reader process to read the FIFO File\n");
fd = open(myfifo, O_WRONLY); //opens FIFO for write operation
write(fd,"Hi", sizeof("Hi")); // write the string “Hi” to the FIFO
close(fd); //close the file descriptor
unlink(myfifo); // remove the FIFO
return 0;
}
Reader Process
#include <stdio.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
int main() {
int fd;
char buf[1024];
char * myfifo = "/tmp/myfifo";
// Open the FIFO for reading
fd = open(myfifo, O_RDONLY);
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 23 of 53
close(fd);
return 0;
}
OUTPUT
To test the communication between the writer and reader programs:
Compile both programs:
gcc writer.c -o writer
gcc reader.c -o reader
Run the writer in one terminal:
./writer
This will create the FIFO, and write "Hi" into it.
Run the reader in another terminal:
./reader
This will read the message from the FIFO and display "Received: Hi" on the terminal.
VIVA QUESTIONS
1. What is IPC?
2. What is the use shared memory?
3. List commands used for shared memory communication?
4. What is the function of shmget function?
5. What is the use of shmctl fuction?
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 24 of 53
PROGRAM 5
Develop a C program to simulate Bankers Algorithm for Deadlock Avoidance
AIM:
To Simulate Algorithm for Deadlock avoidance
DESCRIPTION:
In a multiprogramming environment, several processes may compete for a finite number of resources.
A process requests resources; if the resources are not available at that time, the process enters a waiting
state. Sometimes, a waiting process is never again able to change state, because the resources it has
requested are held by other waiting processes. This situation is called a deadlock. Deadlock avoidance
is one of the techniques for handling deadlocks. This approach requires that the operating system be
given in advance additional information concerning which resources a process will request and use
during its lifetime. With this additional knowledge, it can decide for each request whether or not the
process should wait. To decide whether the current request can be satisfied or must be delayed, the
system must consider the resources currently available, the resources currently allocated to each
process, and the future requests and releases of each process. Banker’s algorithm is a deadlock
avoidance algorithm that is applicable to a system with multiple instances of each resource type
ALGORITHM:
Step 1: Start the Program
Step 2: Get the values of resources and processes.
Step 3: Get the avail value.
Step 4: After allocation find the need value.
Step 5: Check whether its possible to allocate. If possible it is safe state
Step 6: If the new request comes then check that the system is in safety or not if we allow the request.
Step 7: Stop the execution.
Step 8: Stop the program
PROGRAM:
#include<string.h>
#include<stdlib.h>
void main()
{
int alloc[10][10],max[10][10];
int avail[10],work[10],total[10],done[10];
int i,j,k,n,need[10][10];
int m,z=0;
int count=0,c=0;
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 25 of 53
char finish[10];
//clrscr();
printf("Enter the no. of processes and resources:");
scanf("%d%d",&n,&m);
for(i=0;i<=n;i++)
finish[i]='n';
printf("Resource vector:");
for(i=0;i<m;i++)
scanf("%d",&total[i]);
for(i=0;i<m;i++)
avail[i]=0;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
avail[j]+=alloc[i][j];
for(i=0;i<m;i++)
work[i]=avail[i];
for(j=0;j<m;j++)
work[j]=total[j]-work[j];
for(i=0;i<n;i++)
for(j=0;j<m;j++)
need[i][j]=max[i][j]-alloc[i][j];
A:
for(i=0;i<n;i++)
{
c=0;
for(j=0;j<m;j++)
if((need[i][j]<=work[j])&&(finish[i]=='n'))
c++;
if(c==m)
{
printf("All the resources can be allocated to Process %d", i+1);
printf("\n\nAvailable resources are:");
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 26 of 53
for(k=0;k<m;k++)
{
work[k]+=alloc[i][k];
printf("%4d",work[k]);
}
printf("\n");
finish[i]='y';
done[z++]=i+1;
printf("%d\t", finish[i]);
printf("\nProcess %d executed?:%c \n",i+1,finish[i]);
count++;
}
}
if(count!=n)
goto A;
else
printf("\n System is in safe mode");
getch();
}
OUTPUT:
Enter the no. of processes and resources:4 3
Enter the claim matrix:
322
613
314
422
Enter the allocation matrix:
100
612
211
002
Resource vector:9 3 6
All the resources can be allocated to Process 2
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 27 of 53
Available resources are:8 3 6
Process 4 executed?:y
All the resources can be allocated to Process 1
VIVA QUESTIONS:
1. How to recover once the Deadlock has been detected?
2. List the steps to illustrate the Deadlock Detection Algorithm.
3. What are the advantages to check each resource request?
4. .How to fill the Allocation matrix?
5. How to identify whether the process exist in deadlock or not?
6. Define Deadlock Prevention.
7. List the difference Between Starvation and Deadlock.
8. Give the advantages of Deadlock.
9. List the disadvantages of Deadlock method.
10. Define resource. Give examples.
11. What are the conditions to be satisfied for the deadlock to occur?
12. How can be the resource allocation graph used to identify a deadlock situation?
13. How is Banker’s algorithm useful over resource allocation graph technique?
14. Differentiate between deadlock avoidance and deadlock prevention?
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 28 of 53
PROGRAM 6
Develop a C program to simulate the following contiguous memory allocation Techniques:
a . Worst fit b. Best fit c. First fit
AIM:
To write a C program to implement Memory Management concept using the technique best fit, worst
fit and first fit algorithms.
ALGORITHM:
1. Get the number of process.
2. Get the number of blocks and size of process.
3. Get the choices from the user and call the corresponding switch cases.
4. First fit -allocate the process to the available free block match with the size of the process
5. Worst fit –allocate the process to the largest block size available in the list
6. Best fit-allocate the process to the optimum size block available in the list
7. Display the result with allocations
PROGRAM:
Worst Fit
#include<stdio.h>
#include<conio.h>
#define max 25
void main()
{
int frag[max],b[max],f[max],i,j,nb,nf,temp,highest=0; static int bf[max],ff[max];
//clrscr();
printf("\n\tMemory Management Scheme - Worst Fit");
printf("\nEnter the number of blocks:");
scanf("%d",&nb);
printf("Enter the number of files:");
scanf("%d",&nf);
printf("\nEnter the size of the blocks:-\n");
for(i=1;i<=nb;i++)
{
printf("Block %d:",i);
scanf("%d",&b[i]);
}
printf("Enter the size of the files :-\n");
for(i=1;i<=nf;i++)
{
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 29 of 53
printf("File %d:",i);
scanf("%d",&f[i]);
}
for(i=1;i<=nf;i++)
{
for(j=1;j<=nb;j++)
{
if(bf[j]!=1) //if bf[j] is not allocated
{
temp=b[j]-f[i];
if(temp>=0)
if(highest<temp)
{
ff[i]=j;
highest=temp;
}
}
}
frag[i]=highest; bf[ff[i]]=1; highest=0;
}
printf("\nFile_no:\tFile_size:\tBlock_no:\tBlock_size:\tFragement");
for(i=1;i<=nf;i++)
printf("\n%d\t\t%d\t\t%d\t\t%d\t\t%d",i,f[i],ff[i],b[ff[i]],frag[i]);
getch();
}
OUTPUT:
Memory Management Scheme - Worst Fit
Enter the number of blocks:3
Enter the number of files:2
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 30 of 53
Best fit
#include<stdio.h>
#include<conio.h>
#define max 25
void main()
{
int frag[max],b[max],f[max],i,j,nb,nf,temp,lowest=10000;
static int bf[max],ff[max];
//clrscr();
printf("\nEnter the number of blocks:");
scanf("%d",&nb);
printf("Enter the number of files:");
scanf("%d",&nf);
printf("\nEnter the size of the blocks:-\n");
for(i=1;i<=nb;i++)
{
printf("Block %d:",i);
scanf("%d",&b[i]);
}
printf("Enter the size of the files :-\n");
for(i=1;i<=nf;i++)
{
printf("File %d:",i);
scanf("%d",&f[i]);
}
for(i=1;i<=nf;i++)
{
for(j=1;j<=nb;j++)
{
if(bf[j]!=1)
{
temp=b[j]-f[i];
if(temp>=0)
if(lowest>temp)
{
ff[i]=j;
lowest=temp;
}
}
}
frag[i]=lowest; bf[ff[i]]=1; lowest=10000;
}
printf("\nFile No\tFile Size \tBlock No\tBlockSize\tFragment");
for(i=1;i<=nf && ff[i]!=0;i++)
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 31 of 53
printf("\n%d\t\t%d\t\t%d\t\t%d\t\t%d",i,f[i],ff[i],b[ff[i]],frag[i]);
getch();
}
OUTPUT:
Enter the number of blocks:3
Enter the number of files:2
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 32 of 53
First Fit
#include<stdio.h>
#include<conio.h>
#define max 25
void main()
{
int frag[max],b[max],f[max],i,j,nb,nf,temp; static int bf[max],ff[max];
//clrscr();
printf("\n\tMemory Management Scheme - First Fit");
printf("\nEnter the number of blocks:");
scanf("%d",&nb);
printf("Enter the number of files:");
scanf("%d",&nf);
printf("\nEnter the size of the blocks:-\n");
for(i=1;i<=nb;i++)
{
printf("Block %d:",i);
scanf("%d",&b[i]);
}
printf("Enter the size of the files :-\n");
for(i=1;i<=nf;i++)
{
printf("File %d:",i);
scanf("%d",&f[i]);
}
for(i=1;i<=nf;i++)
{
for(j=1;j<=nb;j++)
{
if(bf[j]!=1)
{
temp=b[j]-f[i];
if(temp>=0)
{
ff[i]=j;
break;
}
}
}
frag[i]=temp;
bf[ff[i]]=1;
}
printf("\nFile_no:\tFile_size :\tBlock_no:\tBlock_size:\tFragement");
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 33 of 53
for(i=1;i<=nf;i++)
printf("\n%d\t\t%d\t\t%d\t\t%d\t\t%d",i,f[i],ff[i],b[ff[i]],frag[i]);
getch();
}
OUTPUT:
Memory Management Scheme - First Fit
Enter the number of blocks:3
Enter the number of files:2
VIVA QUESTIONS
1. What is Memory Management?
2. Why Use Memory Management?
3. List the memory allocation techniques
4. Define Best fit and its advantage?
5. What is the use of First fit and worst fir methods?
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 34 of 53
PROGRAM-7
DESCRIPTION :
The FIFO Page Replacement algorithm associates with each page the time when that page was brought
into memory. When a page must be replaced, the oldest page is chosen . There is not strictly necessary
to record the time when a page is brought in. By creating a FIFO queue to hold all pages in memory
and by replacing the page at the head of the queue. When a page is brought into memory, insert it at the
tail of the queue.
ALGORITHM:
1. Start the process
2. Declare the size with respect to page length
3. Check the need of replacement from the page to memory
4. Check the need of replacement from old page to new page in memory
5. Format queue to hold all pages
6. Insert the page require memory into the queue
7. Check for bad replacement and page fault
8. Get the number of processes to be inserted
9. Display the values
10. Stop the process
PROGRAM:
FIFO
#include<stdio.h>
#include<conio.h>
int fr[3];
void main()
{
void display();
int i,j,page[12]={2,3,2,1,5,2,4,5,3,2,5,2};
int flag1=0,flag2=0,pf=0,frsize=3,top=0;
//clrscr();
for(i=0;i<3;i++)
{
fr[i]=-1;
}
for(j=0;j<12;j++)
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 35 of 53
{
flag1=0; flag2=0;
for(i=0;i<12;i++)
{
if(fr[i]==page[j])
{
flag1=1; flag2=1; break;
}
}
if(flag1==0)
{
for(i=0;i<frsize;i++)
{
if(fr[i]==-1)
{
fr[i]=page[j]; flag2=1; break;
}
}
}
if(flag2==0)
{
fr[top]=page[j];
top++;
pf++;
if(top>=frsize)
top=0;
}
display();
}
getch();
}
void display()
{
int i; printf("\n");
for(i=0;i<3;i++)
printf("%d\t",fr[i]);
}
OUTPUT:
2 -1 -1
2 3 -1
2 3 -1
2 3 1
5 3 1
5 2 1
5 2 4
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 36 of 53
5 2 4
3 2 4
3 2 4
3 5 4
3 5 2 Number of page faults : 9
LRU
AIM:
To write UNIX C program a program to implement LRU page replacement algorithm.
DESCRIPTION:
The Least Recently Used replacement policy chooses to replace the page which has not been referenced
for the longest time. This policy assumes the recent past will approximate the immediate future. The
operating system keeps track of when each page was referenced by recording the time of reference or
by maintaining a stack of references.
ALGORITHM:
1. Start the process
2. Declare the size
3. Get the number of pages to be inserted
4. Get the value
5. Declare counter and stack
6. Select the least recently used page by counter value
7. Stack them according the selection.
8. Display the values
9. Stop the process
PROGRAM:
void main()
{
void display();
int p[12]={2,3,2,1,5,2,4,5,3,2,5,2},i,j,fs[3];
int index,k,l,flag1=0,flag2=0,pf=0,frsize=3;
//clrscr();
for(i=0;i<3;i++)
{
fr[i]=-1;
}
for(j=0;j<12;j++)
{
flag1=0,flag2=0;
for(i=0;i<3;i++)
{
if(fr[i]==p[j])
{
flag1=1;
flag2=1; break;
}
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 37 of 53
}
if(flag1==0)
{
for(i=0;i<3;i++)
{
if(fr[i]==-1)
{
fr[i]=p[j]; flag2=1;
break;
}
}
}
if(flag2==0)
{
for(i=0;i<3;i++)
fs[i]=0;
for(k=j-1,l=1;l<=frsize-1;l++,k--)
{
for(i=0;i<3;i++)
{
if(fr[i]==p[k])
fs[i]=1;
}
}
for(i=0;i<3;i++)
{
if(fs[i]==0)
index=i;
}
fr[index]=p[j];
pf++;
}
display();
}
printf("\n no of page faults :%d",pf+frsize);
getch();
}
void display()
{
int i;
printf("\n");
for(i=0;i<3;i++)
printf("\t%d",fr[i]);
}
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 38 of 53
OUTPUT:
2 -1 -1
2 3 -1
2 3 -1
2 3 1
2 5 1
2 5 1
2 5 4
2 5 4
3 5 4
3 5 2
3 5 2
3 5 2
no of page faults :7
VIVA QUESTIONS
1. What is the use Memory Management?
2. Define Memory Management Techniques
3. What is Swapping?
4. What is paging?
5. What are the advantages of non-contiguous memory allocation schemes?
6. What is the process of mapping a logical address to physical address with respect to the paging
memory management technique?
7. Define the terms – base address, offset?
8. Differentiate between paging and segmentation memory allocation techniques?
9. What is the purpose of page table?
10. Whether the paging memory management technique suffers with internal or external fragmentation
problem. Why?
11.What is the purpose of page replacement?
12. Define page fault?
13. Which replacement algorithms suffers from Belady’s anomaly?
14. Reference bit is used in which page replacement algorithm?
15. What is LRU page replacement?
16. Define optimal page replacement.
17. Define the concept of thrashing? What is the scenario that leads to the situation of thrashing?
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 39 of 53
Signature of Lab Faculty In-charge/Co-Faculty
PROGRAM-8
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 40 of 53
strcpy(dir.fname[i],dir.fname[dir.fcnt-1]);
break;
}
}
if(i==dir.fcnt)
printf("File %s not found",f);
else
dir.fcnt--;
break;
case 3: printf("\nEnter the name of the file -- ");
scanf("%s",f);
for(i=0;i<dir.fcnt;i++)
{
if(strcmp(f, dir.fname[i])==0)
{
printf("File %s is found ", f);
break;
}
}
if(i==dir.fcnt)
printf("File %s not found",f);
break;
case 4: if(dir.fcnt==0)
printf("\nDirectory Empty");
else
{
printf("\nThe Files are -- ");
for(i=0;i<dir.fcnt;i++)
printf("\t%s",dir.fname[i]);
}
break;
default: exit(0);
}
}
getch();
}
OUTPUT:
Enter name of directory -- AIML
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 41 of 53
Enter your choice -- 1
Enter the name of the file -- A
1. Create File 2. Delete File 3. Search File
4. Display Files 5. Exit
Enter your choice -- 1
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 42 of 53
File C is found
1. Create File 2. Delete File 3. Search File
4. Display Files 5. Exit
Enter your choice – 5
Program:
TWO LEVEL DIRECTORY
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
struct
{
char dname[10],fname[10][10];
int fcnt;
}dir[10];
void main()
{
int i,ch,dcnt,k;
char f[30], d[30];
//clrscr();
dcnt=0;
while(1)
{
printf("\n\n1. Create Directory\t2. Create File\t3. Delete File");
printf("\n4. Search File\t\t5. Display\t6. Exit\t Enter your choice --");
scanf("%d",&ch);
switch(ch)
{
case 1: printf("\nEnter name of directory -- ");
scanf("%s", dir[dcnt].dname);
dir[dcnt].fcnt=0;
dcnt++;
printf("Directory created"); break;
case 2: printf("\nEnter name of the directory -- ");
scanf("%s",d);
for(i=0;i<dcnt;i++)
if(strcmp(d,dir[i].dname)==0)
{
printf("Enter name of the file -- ");
scanf("%s",dir[i].fname[dir[i].fcnt]);
dir[i].fcnt++;
printf("File created");
}
if(i==dcnt)
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 43 of 53
printf("Directory %s not found",d);
break;
case 3: printf("\nEnter name of the directory -- ");
scanf("%s",d);
for(i=0;i<dcnt;i++)
for(i=0;i<dcnt;i++)
{
if(strcmp(d,dir[i].dname)==0)
{
printf("Enter name of the file -- ");
scanf("%s",f);
for(k=0;k<dir[i].fcnt;k++)
{
if(strcmp(f, dir[i].fname[k])==0)
{
printf("File %s is deleted ",f);
dir[i].fcnt--;
strcpy(dir[i].fname[k],dir[i].fname[
dir[i].fcnt]);
goto jmp;
}
}
printf("File %s not found",f); goto jmp;
}
}
printf("Directory %s not found",d);
jmp : break;
case 4: printf("\nEnter name of the directory -- ");
scanf("%s",d);
for(i=0;i<dcnt;i++)
{
if(strcmp(d,dir[i].dname)==0)
{
printf("Enter the name of the file -- ");
scanf("%s",f);
for(k=0;k<dir[i].fcnt;k++)
{
if(strcmp(f, dir[i].fname[k])==0)
{
printf("File %s is found ",f); goto jmp1;
}
}
printf("File %s not found",f); goto jmp1;
}
}
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 44 of 53
else
{
printf("\nDirectory\tFiles");
for(i=0;i<dcnt;i++)
{
printf("\n%s\t\t",dir[i].dname);
for(k=0;k<dir[i].fcnt;k++)
printf("\t%s",dir[i].fname[k]);
}
}
break;
default:exit(0);
}
}
getch();
}
OUTPUT:
1. Create Directory 2. Create File 3. Delete File
4. Search File 5. Display 6. Exit Enter your choice --1
Directory Files
DIR1
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 45 of 53
DIR2 B1
Directory Files
DIR1
DIR2
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 46 of 53
Signature of Lab Faculty In-charge/Co-Faculty
PROGRAM-9
AIM:
To write a C program to implement File Allocation concept using the technique Linked List Technique.
ALGORITHM:
Step 1: Start the Program
Step 2: Get the number of files.
Step 3: Allocate the required locations by selecting a location randomly
Step 4: Check whether the selected location is free.
Step 5: If the location is free allocate and set flag =1 to the allocated locations.
Step 6: Print the results file no, length, blocks allocated.
Step 7: Stop the execution
PROGRAM:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
void main()
{
int f[50],p,i,j,k,a,st,len,n,c;
//clrscr();
for(i=0;i<50;i++)
f[i]=0;
printf("Enter how many blocks that are already allocated");
scanf("%d",&p);
printf("\nEnter the blocks no.s that are already allocated");
for(i=0;i<p;i++)
{
scanf("%d",&a);
f[a]=1;
}
X:
printf("Enter the starting index block & length");
scanf("%d%d",&st,&len);
k=len;
for(j=st;j<(k+st);j++)
{
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 47 of 53
if(f[j]==0)
{
f[j]=1;
printf("\n%d->%d",j,f[j]);
}
else
{
printf("\n %d->file is already allocated",j);
k++;
}
}
printf("\n If u want to enter one more file? (yes-1/no-0)");
scanf("%d",&c);
if(c==1)
goto X;
else
exit(0);
getch();
}
OUTPUT:
Enter how many blocks that are already allocated3
3->1
If u want to enter one more file? (yes-1/no-0)1
Enter the starting index block & length4 1
9->1
If u want to enter one more file? (yes-1/no-0)1
Enter the starting index block & length10 1
10->1
If u want to enter one more file? (yes-1/no-0)1
Enter the starting index block & length11 1
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 48 of 53
11->1
If u want to enter one more file? (yes-1/no-0)1
Enter the starting index block & length12 1
12->1
If u want to enter one more file? (yes-1/no-0)0
VIVA QUESTIONS:
1. Define file?
2. What are the different kinds of files?
3. What is the purpose of file allocation strategies?
4. Identify ideal scenarios where sequential, indexed and linked file allocation strategies are most
appropriate?
5. What are the disadvantages of sequential file allocation strategy?
6. What is an index block?
7. What is the file allocation strategy used in UNIX?
RubricsforContinuousEvaluation-2022Scheme (15Marks)
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 49 of 53
PROGRAM-10
DESCRIPTION
One of the responsibilities of the operating system is to use the hardware efficiently. For the disk
drives, meeting this responsibility entails having fast access time and large disk bandwidth. Both the
access time and the bandwidth can be improved by managing the order in which disk I/O requests are
serviced which is called as disk scheduling. The simplest form of disk scheduling is, of course, the first-
come, first-served (FCFS) algorithm. This algorithm is intrinsically fair, but it generally does not
provide the fastest service. In the SCAN algorithm, the disk arm starts at one end, and moves towards
the other end, servicing requests as it reaches each cylinder, until it gets to the other end of the disk. At
the other end, the direction of head movement is reversed, and servicing continues. The head
continuously scans back and forth across the disk. C-SCAN is a variant of SCAN designed to provide a
more uniform wait time. Like SCAN, C-SCAN moves the head from one end of the disk to the other,
servicing requests along the way. When the head reaches the other end, however, it immediately returns
to the beginning of the disk without servicing any requests on the return trip
PROGRAM:
#include <stdio.h>
#include <stdlib.h>
#define LOW 0
#define HIGH 1
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 50 of 53
{
for (int j = 0; j < n-i-1; j++)
{
if (arr[j] > arr[j+1])
{
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
int main() {
int n, initial, size, direction;
int totalHeadMovement = 0;
int requestQueue[n];
printf("Enter the request sequence:\n");
for (int i = 0; i < n; i++) {
scanf("%d", &requestQueue[i]);
}
printf("Enter the head movement direction (0 for LOW, 1 for HIGH): ");
scanf("%d", &direction);
sort(requestQueue, n);
int currentPosition = initial;
// Move in the chosen direction until the end or beginning is reached
if (direction == HIGH) {
for (int i = 0; i < n; i++) {
if (requestQueue[i] >= currentPosition) {
totalHeadMovement += abs(requestQueue[i] - currentPosition);
currentPosition = requestQueue[i];
}
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 51 of 53
}
if (currentPosition != size - 1) {
totalHeadMovement += abs((size - 1) - currentPosition);
currentPosition = size - 1;
}
OUTPUT:
Enter the number of requests: 9
Enter the request sequence:
55
58
60
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 52 of 53
70
18
90
150
160
184
VIVA QUESTIONS:
1. What is disk scheduling?
2. List the different disk scheduling algorithms?
3. Define the terms – disk seek time, disk access time and rotational latency?
4. Define sequential file allocation?
5. What is the use of indexed file allocation?
6. What is the advantages if linked allocation?
7. What is the advantage of C-SCAN algorithm over SCAN algorithm?
8. Which disk scheduling algorithm has highest rotational latency? Why?
Rubrics for Continuous Evaluation (15 Marks)
Continuous Evaluation for15marks Marks Marks
Allotted Obtained
A Observation Writeup and Attendance 4
B Conduction of Experiment and Output 3
C Viva Voice 4
D Record Writeup 4
Total 15
__________________________________________________________________________________________
BGSCET/ OS_Lab Manual/CSE 2023-24 Page 53 of 53