CS3461_OS_Lab_manual
CS3461_OS_Lab_manual
LAB MANUAL
(IV SEMESTER)
REGULATION 2021
PERI Institute of Technology
Department of Computer Science and Engineering
Vision:
Mission:
In the process of realization of its Vision, PERIIT strives to provide quality technical
education at affordable cost in a challenging & stimulating environment with state-of-the-art
facilities and a global team of dedicated and talented academicians, without compromising in
its core values of honesty, transparency and excellence.
Vision:
The vision of the department is to prepare industry-ready competent professionals
with moral values by imparting scientific knowledge and skill-based education.
Mission:
To provide exposure of latest tools and technologies in the broad area of computing.
To promoter search-based projects/activities in the emerging area soft technology.
ToenhanceIndustryInstituteInteractionprogramtogetacquaintedwithcorporate
cultureand to develop entrepreneurship skills.
To induce ethical values and spirit of social commitment.
SYLLABUS
3. Process Management using System Calls : Fork, Exec, Getpid, Exit, Wait, Close
15. Write C programs for the implementation of various disk scheduling algorithms
16. Install any guest operating system like Linux using VMware
3
LIST OF EXPERIMENTS
9 Implementation of Threading 56
4
Ex.No:1 Installation of Linux Operating System
Aim:
To study the installation of Linux operating system.
Procedure:
1. Back Up Your Existing Data!
This is highly recommended that you should take backup of your entire data before start
with the installation process.
2. Obtaining System Installation Media
Download latest Desktop version of Ubuntu from this link:
http://www.ubuntu.com/download/desktop
3. Booting the Installation System
There are several ways to boot the installation system. Some of the very popular ways are
, Booting from a CD ROM, Booting from a USB memory stick, and Booting from TFTP.
Here we will learn how to boot installation system using a CD ROM.
Before booting the installation system, one need to change the boot order and set CD-
ROM as first boot device.
4. Changing the Boot Order of a Computers
As your computer starts, press the DEL, ESC, F1, F2, F8 or F10 during the initial startup
screen. Depending on the BIOS manufacturer, a menu may appear. However, consult the
hardware documentation for the exact key strokes. In my machine, its DEL key as shown
in following screen- shot.
5. Find the Boot option in the setup utility. Its location depends on your BIOS.Select the
Boot option from the menu, you can now see the options Hard Drive, CD-ROM
Drive, Removable Devices Disk etc.
6. Change the boot sequence setting so that the CD-ROM is first. See the list of “Item
Specific Help” in right side of the window and find keys which is used to toggle to
change the boot sequence.
7. Insert the Ubuntu Disk in CD/DVD drive.
5
8. Save your changes. Instructions on the screen tell you how to save the changes on
your computer. The computer will restart with the changed settings. Machine should
boot from CD ROM, Wait for the CD to load...
9. In a few minutes installation wizard will be started. Select your language and click the
"Install Ubuntu" button to continue...
10. Optionally, you can choose to download updates while installing and/or install third
party software, such as MP3 support. Be aware, though, that if you select those
options, the entire installation process will be longer!
6
11. Since we are going to create partitions manually, select Something else, then click
Continue. Keep in mind that even if you do not want to create partitions manually, it
is better to select the same option as indicated here. This would insure that the
installer will not overwrite your Windows , which will destroy your data. The
assumption here is that sdb will be used just for Ubuntu 12.04, and that there are no
valuable data on it.
12. Where are you? Select your location and Click the "Continue" button.
7
13. Keyboard layout
Select your keyboard layout and UK (English) and Click on “Continue” button.
8
15. Now Ubuntu 12.04 LTS (Precise Pangolin) operating system will be installed.
16. It will take approximately 10-12 minutes (depending on computer's speed), a pop-up
window will appear, notifying you that the installation is complete, and you'll need to
restart the computer in order to use the newly installed Ubuntu operating system.
Click the "Restart Now" button.
9
17. Please remove the CD and press the "Enter" key to reboot. The computer will be
restarted. In a few seconds, you should see Windows 7′s boot menu with two entires
listed – Windows 7 and Ubuntu 12.04 (LTS).Then you may choose to boot into
Windows 7 or Ubuntu 12.04 using the UP/Down arrow key.
18. Please select Ubuntu 12.04 (LTS) and press Enter to boot the machine in Ubuntu
12.04 Linux.
10
19. Here you can see the users on the machine, Click on the user name and enter the
password and press Enter key to login.
11
Result:
Thus the Linux operating system installation has been studied successfully.
12
Ex.No:2a Basic Commands in UNIX
Aim:
To study and execute UNIX commands.
UNIX Commands
1. Cat Command
It is used to create a file, display the contents of a file and concatenating the
files.
$cat > filename /for create
$cat filename /for display
$cat file1 file2 >file3 /for concatenate
2. Date Command
It is used to display the current date, time, month and year.
$date +%d /display date
$date +%m /display month
$date +%h /display month in words
$date +%y /display year
$date +%R /display the time with hour and mins
$date +%T /display time with hour,mins and sec
1. Calendar Command
It is used to display the calendar of the given month and year.
$cal year /display the year calendar
$cal month year /display the calendar of given month
13
3. Man command
It is used to display the description and usage of particular command.
$man command name /display the description of the cmd
4. Head Command
It is used to display the text from top of the file content to mentioned
line.
$head – (option) filename / display text from top
5. Tail command
It is used to display the text from bottom of the file content to mentioned
line.
$tail – (option) filename / display text from bottom
6. Wc Command
It is used to count the number of lines, words and characters in the given
file.
$wc filename /display no of lines, words and characters
7. Copy Command
It is used to copy the content from one file to another file.
$cp source destination /copy content from source to destination.
8. Move Command
It is used to rename the file.
$mv filename1 filename2 /for renaming
9. Compare Command
It is used to compare two sorted files line by line.
$cmp file1 file2 /to compare file1& 2
two files
15
14. Directory Commands
It is used to making, changing and removing directories.
$mkdir dirname /to create directory
$cd dirname /to change working directory
$rmdir dirname /to remove the directory
$cd .. /to close the working directory
21. Bc Command
It is used as an online calculator.
$bc /open an online calculator
33. Nl Command
17
It is used to add line number to file content.
$nl filename /add no to the file content
Output:
FILE COMMANDS
1. Cat Command
18
[examuser1@linux ~]$ cat file3
hi
Welcome
This is my first unix file
Thank You
This is my second File
Thank You
2. Copy Command
3. Move Command
4. Remove Command
5. WC Command
6. Creating A Directory
[exam1@redhat unix]$ cd ..
9.The Path
20
January February March
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 1 2 3 4 5 6 1 2 3 4 5 6
3 4 5 6 7 8 9 7 8 9 10 11 12 13 7 8 9 10 11 12 13
10 11 12 13 14 15 16 14 15 16 17 18 19 20 14 15 16 17 18 19 20
17 18 19 20 21 22 23 21 22 23 24 25 26 27 21 22 23 24 25 26 27
24 25 26 27 28 29 30 28 29 30 31
31
May 2012
Su Mo Tu We Th Fr Sa
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
PIPES
18. Who
20.Man command
NAME
cat - concatenate files and print on the standard output
SYNOPSIS
cat [OPTION] [FILE]...
DESCRIPTION
22
Concatenate FILE(s), or standard input, to standard output.
-A, --show-all
equivalent to -vET
-b, --number-nonblank
number nonblank output lines
-e equivalent to -vE
-E, --show-ends
display $ at end of each line
-n, --number
number all output lines
21.List Command
[examuser1@linux ~]$ ls -t
postfix.l file7 file4 file3 file2 file1 new
22.Print Command
23.Sort Command
23
[examuser1@linux ~]$ which
Usage: /usr/bin/which [options] [--] programname [...]
Options: --version, -[vV] Print version and exit successfully.
--help, Print this help and exit successfully.
--skip-dot Skip directories in PATH that start with a dot.
--skip-tilde Skip directories in PATH that start with a tilde.
--show-dot Don't expand a dot to current directory in output.
--show-tilde Output a tilde for HOME directory for non-root.
--tty-only Stop processing options on the right if not on tty.
--all, -a Print all matches in PATH, not just the first
--read-alias, -i Read list of aliases from stdin.
--skip-alias Ignore option --read-alias; don't read stdin.
--read-functions Read shell functions from stdin.
--skip-functions Ignore option --read-functions; don't read stdin.
Result:
Thus the basic UNIX commands have been studied and executed.
24
Ex: No: 2b Shell Programming
i. Biggest of Three Numbers
Aim:
To write a shell program for finding the biggest among 3 numbers
Algorithm:
1. Get the 3 values
2. Check if ‘a’ is greater than ‘b’
3. If step 2 is true, go to step 4. else, go to step 7
4. Check if ‘a’ is bigger than ‘c’
5. If step 4 is true, print “a is big”. else print “c is big”
6. Go to step 9
7. Check if ‘b’ is greater than ‘c’
8. If step 7 is true, print “b is big”. Else, print “c is big”
9. End of program
Program:
Output:
[examuser1@linux ~]$ sh biggest.sh
enter a
5
enter b
4
enter c
2
a is big
Result:
Result:
Thus the shell program for finding the biggest among 3 numbers, has been written and
executed successfully.
25
ii. Checking Odd or Even
Aim:
To write a shell program to find the given number is odd or even
Algorithm:
1. Get a number from the user, say num.
2. check if (num % 2) = = 0
2.1 Display the given number is even otherwise
2.2 Display the given number is odd
3. Stop the program
Program:
Output:
[examuser1@linux ~]$ sh oddeven.sh
enter any number
5
number is odd
[examuser1@linux ~]$ sh oddeven.sh
enter any number
4
number is even
Result:
Thus the shell program for finding whether the given number is odd or even has been
written and executed successfully
26
iii. Finding Factorial
Aim:
To write a shell program to find factorial of given number.
Algorithm:
1. Read a number say n.
2. Initialize i=1,f=1
3. Repeat until I is leass than n.
3.1.f=f*i
3.2.i=i+1
4. Display factorial (f) of n
5. Stop
Program:
Output:
[examuser1@linux ~]$ sh fact.sh
enter number
5
Factorial is.. 120
Result:
Thus the shell program to find factorial of given number has been written and
executed successfully.
27
iv. Arithmetic Operations
Aim:
To write a shell program for implementing arithmetic operations.
Algorithm:
1. Display menu to user.
Say, 1.Add 2. Sub 3. Mul 4. Div 5.exit
2.Prompt user to enter 2 values (say a, b) and enter choice of operation.
3. Using switch case statement, use choice value for processing output accordingly.
3.1.If choice=1, return sum (a+b)
3.2. If choice=2, return difference (a-b)
3.3. If choice=3, return product (a*b)
3.4. If choice=4, return quotient
(a/b) 4Display result.
.
Program:
Output:
28
[examuser1@linux ~]$ sh case.sh
Enter two numbers
84
1. Add 2.Sub 3.Mul 4.Div 5.Exit
4
2
Result:
Thus the shell program for implementing arithmetic operations has been written and
executed successfully.
29
EX. NO. 3a Implementation of Process Management using fork and getpid system calls
Aim:
To create a new child process using fork system call and implement getpid system
call.
Algorithm
1. Declare a variable x to be shared by both child and parent.
2. Create a child process using fork system call.
3. If return value is -1 then
a. Print "Process creation unsuccessfull"
b. Terminate using exit system call.
4. If return value is 0 then
a. Print "Child process"
b. Print process id of the child using getpid system call
c. Print value of x
d. Print process id of the parent using getppid system call
5. Otherwise
a. Print "Parent process"
b. Print process id of the parent using getpid system call
c. Print value of x
d. Print process id of the shell using getppid system call.
6. Stop
Program:
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
main()
{
pid_t pid;
int x=5;
pid=fork();
x++;
if(pid<0)
{
printf("process creation
error"); exit(-1);
}
else if(pid==0)
{
printf("child process:");
printf("\n process id is %d",getpid());
printf("\n value of x is %d",x);
printf("\n process id of parent is%d\n",getppid());
}
else
{
30
printf("\n parent process:");
printf("process id is %d",getpid());
printf("\n value of x is %d",x);
printf("\n process id of shell is %d\n",getppid());
}
}
Output:
process id is 7353
value of x is 6
process id of parent is7352
parent process:
process id is 7352
value of x is 6
process id of shell is 7122
Result
Thus a child process is created with copy of its parent's address space.
31
EX. NO. 3b Implementation of Process Management using wait system call
Aim:
To block a parent process until child completes using wait system call.
Algorithm:
1. Create a child process using fork system call.
2. If return value is -1 then
a. Print "Process creation unsuccessfull"
3. Terminate using exit system call.
4. If return value is > 0 then
a. Suspend parent process until child completes using wait system call
b. Print "Parent starts"
c. Print even numbers from 0–10
d. Print "Parent ends"
5. If return value is 0 then
a. Print "Child starts"
b. Print odd numbers from 0–10
c. Print "Child ends"
6. Stop
Program:
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
main()
{
int i,status;
pid_t pid;
pid=fork();
if(pid<0)
{
printf("\n process creation failure\n");
exit(-1);
}
else if(pid>0)
{
wait(NULL);
printf("\n parent starts \n even nos:");
for(i=2;i<=10;i+=2)
printf("%3d",i);
printf("\n parent ends\n");
}
else if(pid==0)
{
printf("child starts \n odd nos:");
for(i=1;i<10;i+=2)
printf("%3d",i);
32
printf("\n child ends\n");
}
}
Output:
[examuser1@linux ~]$ cc wait.c
[examuser1@linux ~]$ ./a.out
child starts
odd nos: 1 3 5 7 9
child ends
parent starts
even nos: 2 4 6 8 10
parent ends
Result
Thus using wait system call zombie child processes were avoided.
33
EX. NO. 3c Implementation of Process Management using exec system call
Aim:
To load an executable program in a child processes exec system call.
Algorithm:
1. If no. of command line arguments 3 then stop.
2. Create a child process using fork system call.
3. If return value is -1 then
a. Print "Process creation unsuccessfull"
b. Terminate using exit system call.
4. If return value is > 0 then
a. Suspend parent process until child completes using wait system call
b. Print "Child Terminated".
c. Terminate the parent process.
5. If return value is 0 then
a. Print "Child starts"
b. Load the program in the given path into child process using exec system
call.
c. If return value of exec is negative then print the exception and stop.
d. Terminate the child process.
6. Stop
Program:
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
#include<stdlib.h>
main(int argc,char *argv[])
{
pid_t pid;
int i;
if(argc!=3)
{
printf("\n insufficient arguments load program");
printf("\n usage:./a.out <path> <cmd> \n");
exit(-1);
}
switch(pid=fork())
{
case -1:
printf("fork
failed"); exit(-1);
case 0:
printf("child process\n");
i=execl(argv[1],argv[2],0);
if(i<0)
{
printf("%s program not loaded using exec system call \n",argv[2]);
exit(-1);
}
34
default:
wait(NULL);
printf("child terminated \n");
exit(0);
}
}
Output:
Result
Thus the child process loads a binary executable file into its address space.
35
EX. NO. 3d. Implementation of Process Management using system calls: open, read,
write, close, exit
Aim:
To implement UNIX I/O system calls open ,read , write,close and exit.
Algorithm:
1. Declare a character buffer buf to store 100 bytes.
2. Get the new filename as command line argument.
3. Create a file with the given name using open system call with O_CREAT and
O_TRUNC options.
4. Check the file descriptor.
a) If file creation is unsuccessful, then stop.
5. Get input from the console until user types Ctrl+D
a) Read 100 bytes (max.) from console and store onto buf using read system
call
b) Write length of buf onto file using write system call.
6. Close the file using close system call.
7. Stop
Program:
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
main(int argc, char *argv[])
{
int fd, n, len;
char buf[100];
if (argc != 2)
{
printf("Usage: ./a.out <filename>\n");
exit(-1);
}
fd = open(argv[1], O_WRONLY|O_CREAT|O_TRUNC, 0644);
if(fd < 0)
{
printf("File creation problem\n");
exit(-1);
}
printf("\n The execution of creat & write system calls:\n");
printf("Press Ctrl+D at end in a new line:\n");
36
fd = open(argv[1], O_RDONLY);
if(fd == -1)
{
printf("%s file does not exist\n", argv[1]);
exit(-1);
}
printf("\nExecution of read system call:\n"); printf("\
nOpening the file %s to read\n",argv[1]);
printf("Contents of the file %s is : \n", argv[1]);
while(read(fd, buf, sizeof(buf)) > 0)
printf("%s", buf);
close(fd);
}
Output:
[examuser1@linux ~]$ cc orw.c
[examuser1@linux ~]$ ./a.out os.txt
System calls provide interface between a process and the operating system.
File has been created and contents are written in the file
System calls provide interface between a process and the operating system.
Result:
Thus the program for implementing system calls open,read, write,close and exit have
been executed successfully.
37
Ex.No.: 4 Implementation of various CPU Scheduling Algorithms
Algorithm:
38
avg_turn=tot_turn/n;
printf("\nProcess No \tBurst Time \tWaiting Time \tTurn Around Time");
for(i=1;i<=n;i++)
{
printf("\n%d\t\t%d\t\t%d\t\t%d",i,p[i].btime,p[i].wtime,p[i].ttime);
}
printf("\n\nAverage Waiting Time=%f",avg_wait);
printf("\nAverage Turn Around Time=%f",avg_turn);
printf("\n");
printf("\n\t\t\t\tGANTT CHART");
printf("\n\t\t\t\t***********\n\n");
for(i=1;i<=n;i++)
{
printf("%d",p[i].wtime);
for(j=1;j<=p[i].btime;j++)
printf("_");
}
for(i=1;i<=n;i++)
{
c=p[i].wtime+p[i].btime;
}
printf("%d",c);
printf("\n\n");
return 0;
}
Output:
39
Average Turn Around Time=17.400000
GANTT CHART
***********
0 10 15 17 20 25
Result:
Thus the program to implement FCFS scheduling algorithm has been written and
executed successfully.
40
Ex.No.4b Shortest Job First Scheduling
Aim:
Algorithm:
Program:
#include<stdio.h>
main()
{
int i,j,n,t,d,h,tot=0,tt=0,p[20],c[20],a[20]; printf("\n\t\t\t\
tSHORTEST JOB FIRST SCHEDULING\n"); printf("\t\t\t\
t*****************************\n\n"); printf("Enter the
number of process:");
scanf("%d",&n);
printf("\nEnter the %d process\n",n);
for(i=0;i<n;i++)
scanf("%d",&p[i]);
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(p[i]>p[j])
{
t=p[i];
p[i]=p[j];
p[j]=t;
}
printf("\nSorted Process\n");
for(i=0;i<n;i++) printf("%d\
n",p[i]);
c[0]=0;
for(i=0;i<n-1;i++)
c[i+1]=c[i]+p[i];
for(i=0;i<n;i++)
41
a[i]=c[i]+p[i];
printf("\nP.No \tProcess \tWaiting Time \tTurn Around Time");
for(i=0;i<n;i++)
{
printf("\n%d\t%d\t\t%d\t\t%d",i+1,p[i],c[i],a[i]);
tot=tot+c[i];
tt=tt+a[i];
}
printf("\n\nAverage Waiting Time %f",((float)tot/n));
printf("\nAverage Turn Around Time %f",((float)tt/n));
printf("\n");
printf("\n\n\t\t\t\t\tGANTT CHART");
printf("\n\n\t\t\t\t\t***********");
printf("\n\n\t\t\t\t");
for(i=0;i<n;i++)
{
printf("%d",c[i]);
for(j=1;j<p[i];j++)
printf("_");
}
for(i=1;i<n;i++)
{
d=c[i]+p[i];
}
printf("%d",d);
printf("\n\n");
return 0;
}
Output:
42
10
GANTT CHART
***********
01 4 9 17 27
Result:
Thus the program to implement shortest job first scheduling algorithm has been
written and executed successfully.
43
Ex.No.4c Priority Scheduling
Aim:
Algorithm:
Program:
#include<stdio.h>
main()
{
int n,b[10],w[10],i,j,h,t,tt,d;
int stime[10],a[10],p[10];
float avg=0;
printf("\n\t\t\t\tPRIORITY SCHEDULING ALGORITHM");
printf("\n\t\t\t\t*****************************\n");
printf("Enter how many jobs:");
scanf("%d",&n);
printf("\nEnter burst time & priority for corresponding job\n\n");
for(i=1;i<=n;i++)
{
printf("Process %d:",i);
scanf("%d %d",&b[i],&p[i]);
a[i]=i;
}
for(i=1;i<=n;i++)
for(j=i;j<=n;j++)
if(p[i]>p[j])
{
t=b[i];
tt=a[i];
b[i]=b[j];
a[i]=a[j];
b[j]=t;
a[j]=tt;
}
w[1]=0;
printf("\nProcess %d Waiting Time:0",a[1]);
for(i=2;i<=n;i++)
{
44
w[i]=b[i-1]+w[i-1];
printf("\nProcess %d waiting time:%d",a[i],w[i]);
avg+=w[i];
}
printf("\nTotal Waiting Time:%f",avg);
printf("\nAverage Waiting
Time=%f\n",avg/n); printf("\nGANTT
CHART"); printf("\n***********\n\n");
for(i=1;i<=n;i++)
{
printf("%d ",b[i]);
}
printf("\n\n");
for(i=1;i<=n;i++)
{
printf("%d",w[i]);
for(j=1;j<=b[i];j++)
printf("_");
}
for(i=1;i<=n;i++)
{
d=w[i]+b[i];
}
printf("%d",d);
return 0;
}
Output:
[examuser1@linux ~]$ cc pri_gantt.c
[examuser1@linux ~]$ ./a.out
45
GANTT CHART
***********
5 10 1 2 1
0 5 15_16 18_19
Result:
Thus the program to implement priority scheduling algorithm has been written and
executed successfully.
46
Ex.4d Round Robin Scheduling
Aim:
To write a program to implement the Round Robin CPU scheduling Algorithm
Algorithm:
1. Start the program
2. Get the number of processors
3. Get the Burst time(BT) of each processors
4. Get the Quantum time(QT) or time slice.
5. Execute each processor until reach the QT or BT
6. Time of reaching processor’s BT is it’s Turn Around Time(TAT)
7. Time waits to start the execution, is the waiting time(WT) of each processor
8. Calculation of Turn Around Time and Waiting Time
8.1.tot_TAT = tot_TAT + cur_TAT
8.2.avg_TAT = tot_TAT/num_of_proc
8.3.tot_WT = tot_WT + cur_WT
8.4.avg_WT = tot_WT/num_of_proc
9. Display the result
10. STOP the program
Program:
#include<stdio.h>
int n,b[10],z[10],q,i,j,r,m[50],e=0,avg=0;
float f;
main()
{
printf("\n\n\t\t\t\t\tROUND ROBIN\n\n");
printf("\t\t\t\t\t*****************\n");
printf("Enter how many jobs:");
scanf("%d",&n);
printf("\nEnter burst time for corresponding job..\n");
printf("\n");
for(i=1;i<=n;i++)
{
printf("Process %d:",i);
scanf("%d",&b[i]);
z[i]=b[i];
}
printf("\nEnter the time slice value:");
scanf("%d",&q);
rr();//no return type with no argument function
average();
return 0;
}
rr()
{
int max=0;
max=b[1];
for(j=1;j<=n;j++)
if(max<=b[j])
47
max=b[j];
if((max%q)==0)
r=(max/q);
else r=(max/q)
+1;
for(i=1;i<=r;i++)
{
printf("\n\nRound %d",i);
for(j=1;j<=n;j++)
{
if(b[j]>0)
{
b[j]=b[j]-q;
if(b[j]<=0)
{ b[j]=
0;
printf("\nProcess %d is completed",j);
}
else
{
printf("\nProcess %d remaining time is %d",j,b[j]);
}
}
}
}
return 0;
}
average()
{
for(i=1;i<=n;i++)
{ e=
0;
for(j=1;j<=r;j++)
{
if(z[i]!=0)
{
if(z[i]>=q)
{
m[i+e]=q;
z[i]-=q;
}
else
{
m[i+e]=z[i];
z[i]=0;
}
}
else
m[i+e]=0;
48
e=e+n;
}
}
for(i=2;i<=n;i++)
for(j=1;j<=i-1;j++)
avg=avg+m[j];
for(i=n+1;i<=r*n;i++)
{
if(m[i]!=0)
{
for(j=i-(n-1);j<=i-1;j++)
avg=m[j]+avg;
}
}
f=avg/n;
printf("\n\nTotal Waiting:%d",avg);
printf("\n\nAverage Waiting Time:%f\n",f);
printf("\n\t\t\t\tGANTT CHART"); printf("\
n\t\t\t\t***********\n\n");
for(i=1;i<=r*n;i++)
{
if(m[i]!=0)
{
if(i%n==0)
{
printf("P%d",(i%n)+(n));
}
else
{
printf("P%d",(i
%n));
for(j=1;j<=m[i];j++)
printf("_",h);
}
}
}
printf("\n\n\n");
return 0;
}
Output:
ROUND ROBIN
***********
Enter how many jobs:5
Round 1
Process 1 remaining time is 1
Process 2 remaining time is 3
Process 3 is completed
Process 4 remaining time is 3
Process 5 remaining time is 3
Round 2
Process 1 is completed
Process 2 remaining time is 1
Process 4 remaining time is 1
Process 5 remaining time is 1
Round 3
Process 2 is completed
Process 4 is completed
Process 5 is completed
Total Waiting:54
GANTT CHART
***********
P1 P2 P3 P4 P5P1_P2 P4 P5P2_P4_P5
Result:
Thus the program to implement round robin scheduling algorithm has been written
and executed successfully.
50
Ex: No: 5 Illustration of Interprocess Communication using Shared Memory
Aim:
To write a C program to implement inter process communication using shared memory .
Algorithm:
1. Start the Program
2. Obtain the required process id
3. Increment the *ptr=*ptr+1;
4. Print the process identifier.
5. Check the values of sem_num, sem_op, sem_flg.
6. Stop the execution.
Program:
#include<stdio.h>
#include<sys/shm.h>
#include<sys/ipc.h>
int main()
{
int child,shmid,i;
char *shmptr;
child=fork(); if(!
child)
{
shmid=shmget(2041,32,0666|IPC_CREAT);
shmptr=shmat(shmid,0,0);
printf("\n Parent writing\n");
for(i=0;i<10;i++)
{
shmptr[i]='a'+i;
putchar(shmptr[i]);
}
}
else
{
shmid=shmget(2041,32,0666);
shmptr=shmat(shmid,0,0);
printf("\n child is reading\n");
for(i=0;i<10;i++)
putchar(shmptr[i]);
shmdt(NULL);
shmctl(shmid,IPC_RMID,NULL);
}
return 0;
}
51
Output:
[examuser1@linux ~]$cc memory.c
[examuser1@linux ~]$./a.out
Parent writing
abcdefghij
child is reading
abcdefghij
Result:
Thus the program to implement interprocess communication using shared memory
has been written and executed successfully.
52
Ex.No:6 Implementation of Mutex for Producer Consumer Problem by
Semaphores
Aim:
Algorithm:
3. Initialize the buffer size and get maximum item you want to produce.
4. Get the option, which you want to do either producer, consumer or exit from
the operation.
5. If you select the producer, check the buffer size if it is full the producer should not
produce the item or otherwise produce the item and increase the value buffer size.
6. If you select the consumer, check the buffer size if it is empty the consumer should
not consume the item or otherwise consume the item and decrease the value of buffer
size.
Program:
#include<stdio.h>
int mutex=1,full=0,empty=3,x=0;
main()
int n;
void producer();
void consumer();
int wait(int);
n2.CONSUMER\n3.EXIT\n");
53
while(1)
scanf("%d",&n);
switch(n)
case 1:
if((mutex==1)&&(empty!=0))
producer();
else
printf("BUFFER IS FULL");
break;
case 2:
if((mutex==1)&&(full!=0))
consumer();
else
printf("BUFFER IS EMPTY");
break;
case 3:
exit(0);
break;
int wait(int s)
return(--s);
54
}
int signal(int s)
return(++s);
void producer()
mutex=wait(mutex);
full=signal(full);
empty=wait(empty);
x++;
mutex=signal(mutex);
void consumer()
mutex=wait(mutex);
full=wait(full);
empty=signal(empty);
x--;
mutex=signal(mutex);
Output:
55
1. PRODUCER
2. CONSUMER
3. EXIT
BUFFER IS EMPTY
Result:
Thus the C program to implement mutex for the producer – consumer problem by
semaphores has been written and executed successfully.
56
Ex.No:7 Implementation of Bankers algorithm for Deadlock Avoidance
Aim:
To write a C program to implement bankers algorithm for dead lock avoidance
Algorithm:
1. Start the Program
2. Get the values of resources and processes.
3. Get the avail value.
4. After allocation find the need value.
5. Check whether its possible to allocate. If possible it is safe state
6. If the new request comes then check that the system is in safety or not if we allow
the request.
7.Stop the execution
Program:
#include<stdio.h>
int max[100][100];
int alloc[100][100];
int need[100][100];
int avail[100];
int n,r;
void input();
void show();
void cal();
int main()
{
int i,j;
input();
show();
cal();
return 0;
}
void input()
{
int i,j;
printf("Enter the no of Processes\t");
scanf("%d",&n);
printf("Enter the no of resources instances\t");
scanf("%d",&r);
printf("Enter the Max Matrix\n");
for(i=0;i<n;i++)
{
for(j=0;j<r;j++)
{
scanf("%d",&max[i][j]);
}
}
printf("Enter the Allocation Matrix\n");
57
for(i=0;i<n;i++)
{
for(j=0;j<r;j++)
{
scanf("%d",&alloc[i][j]);
}
}
printf("Enter the available Resources\n");
for(j=0;j<r;j++)
{
scanf("%d",&avail[j]);
}
}
void show()
{
int i,j;
printf("Process\t Allocation\t Max\t Available\t");
for(i=0;i<n;i++)
{
printf("\nP%d\t ",i+1);
for(j=0;j<r;j++)
{
printf("%d ",alloc[i][j]);
}
printf("\t");
for(j=0;j<r;j++)
{
printf("%d ",max[i][j]);
}
printf("\t");
if(i==0)
{
for(j=0;j<r;j++)
printf("%d ",avail[j]);
}
}
}
void cal()
{
int finish[100],temp,need[100][100],flag=1,k,c1=0;
int safe[100];
int i,j;
for(i=0;i<n;i++)
{
finish[i]=0;
}
//find need matrix
for(i=0;i<n;i++)
{
for(j=0;j<r;j++)
58
{
need[i][j]=max[i][j]-alloc[i][j];
}
}
printf("\n");
while(flag)
{
flag=0;
for(i=0;i<n;i++)
{
int c=0;
for(j=0;j<r;j++)
{
if((finish[i]==0)&&(need[i][j]<=avail[j]))
{
c++;
if(c==r)
{
for(k=0;k<r;k++)
{
avail[k]+=alloc[i][j];
finish[i]=1;
flag=1;
}
printf("P%d->",i);
if(finish[i]==1)
{
i=n;
}
}
}
}
}
}
for(i=0;i<n;i++)
{
if(finish[i]==1)
{
c1++;
}
else
{
printf("P%d->",i);
}
}
if(c1==n)
{
printf("\n The system is in safe state");
}
else
59
{
printf("\n Process are in dead lock");
printf("\n System is in unsafe state");
}
}
Output:
Result:
Thus the program to implement Bankers algorithm for deadlock avoidance has been
written and executed successfully.
60
Ex.No:8 Implementation of Deadlock Detection Algorithm
Aim:
Algorithm:
61
for(i=0;i<n;i++)
{
for(j=0;j<r;j++)
{
scanf("%d",&alloc[i][j]);
}
}
printf("Enter the available Resources\n");
for(j=0;j<r;j++)
{
scanf("%d",&avail[j]);
}
}
void show()
{
int i,j;
printf("Process\t Allocation\t Max\t Available\t");
for(i=0;i<n;i++)
{
printf("\nP%d\t ",i+1);
for(j=0;j<r;j++)
{
printf("%d ",alloc[i][j]);
}
printf("\t");
for(j=0;j<r;j++)
{
printf("%d ",max[i][j]);
}
printf("\t");
if(i==0)
{
for(j=0;j<r;j++)
printf("%d ",avail[j]);
}
}
}
void cal()
{
int finish[100],temp,need[100][100],flag=1,k,c1=0;
int dead[100];
int safe[100];
int i,j;
for(i=0;i<n;i++)
{
finish[i]=0;
}
for(i=0;i<n;i++)
{
for(j=0;j<r;j++)
62
{
need[i][j]=max[i][j]-alloc[i][j];
}
}
while(flag)
{
flag=0;
for(i=0;i<n;i++)
{
int c=0;
for(j=0;j<r;j++)
{
if((finish[i]==0)&&(need[i][j]<=avail[j]))
{
c++;
if(c==r)
{
for(k=0;k<r;k++)
{
avail[k]+=alloc[i][j];
finish[i]=1;
flag=1;
}
if(finish[i]==1)
{
i=n;
}
}
}
}
}
}
j=0;
flag=0;
for(i=0;i<n;i++)
{
if(finish[i]==0)
{
dead[j]=i;
j++;
flag=1;
}
}
if(flag==1)
{
printf("\n\nSystem is in Deadlock and the Deadlock processes are\n");
for(i=0;i<n;i++)
{
printf("P%d\t",dead[i]);
}
63
}
else
{
printf("\nNo Deadlock Occur");
}
}
Output:
Result:
Thus the program to implement deadlock detection algorithm has been written and
executed successfully.
64
Ex.No:9 Implementation of Threading
Aim:
To write a C program to implement Threading & Synchronization
Algorithm:
1. Start the Program
2. Initialize the process thread array.
3. Print the job started status.
4. Print the job finished status.
5. Start the main function
6. Check for the process creation if not print error message.
7. Stop the execution
Program:
#include<stdio.h>
#include<string.h>
#include<pthread.h>
#include<stdlib.h>
#include<unistd.h>
pthread_t tid[2];
int counter;
void* doSomeThing(void *arg)
{
unsigned long i = 0;
counter += 1;
printf("\n Job %d started\n", counter);
for(i=0; i<(0xFFFFFFFF);i++);
printf("\n Job %d finished\n", counter);
return NULL;
}
int main(void)
{
int i = 0;
int err;
while(i < 2)
{
err = pthread_create(&(tid[i]), NULL, &doSomeThing, NULL);
if (err != 0)
printf("\ncan't create thread :[%s]", strerror(err));
i++;
}
pthread_join(tid[0],
NULL);
pthread_join(tid[1],
NULL); return 0;
}
65
Output:
$ ./tgsthreads
Job 1 started
Job 2 started
Job 2 finished
Job 2 finished
Result:
Thus the program to implement threading and synchronization application has been
written and executed successfully.
66
Ex: No: 10 Implementation of Paging Technique
Aim:
To write a C program to implement paging technique.
Algorithm:
#include<stdio.h>
#include<conio.h
> void main(void)
{
int i,m,n,k,z,l[30];
char data[25][10],mem[50][10];
clrscr();
for(i=0;i<50;i++)
strcpy(mem[i]," ");
printf("Enter the number of pages");
scanf("%d",&n);
printf("\nEnter the page size:");
scanf("%d",&m);
k=m*n;
printf("\nEnter the %d number of data:\n",k);
for(i=0;i<k;i++)
scanf("%s",data[i]);
printf("Enter the %d page table values:\n",n);
for(i=0;i<n;i++)
scanf("%d",&l[i]);
for(i=0;i<k;i++)
{
z=l[i/m]*m+(i%m);
strcpy(mem[z],data[i]);
}
printf("\t Memory allocation");
for(i=0;i<30;i++) printf("\t%d\
t\t%s\n",i,mem[i]); getch();
}
67
Output:
68
22
23
24
25
26
27
28
29
Result:
Thus the c program to implement the paging technique has been written and
executed successfully.
69
Ex.No:11 Implementation of the following Memory Allocation Methods for fixed
partition
Aim:
To write a program to implement memory allocation method for fixed partition using
first fit,worst fit,best fit algorithms.
Algorithm:
c. Allocate the process to the memory partition which is the largest out of all.
c. If not start at the hole, which is sharing the previous best fit search end.
d. Compare the hole.
e. If small enough, then stop searching in the procedure.
f. Display the values.
7. Terminate the process.
Program:
#include<stdio.h>
int main()
{
int n,p,i,j,tmp,t;
int size[10],first[10],best[10],worst[10];
printf(" Memory Allocation Strategy \n\n Enter the number of holes in the Main Memory
: ");
scanf("%d",&n);
printf(" Mention their sizes.\n");
for (i=0;i<n;i++)
70
{
printf("Hole %d : ",i+1);
scanf("%d",&size[i]);
}
printf(" Holes and their sizes \n\n");
for (i=0;i<n;i++)
{
printf(" Hole %d : %d\n",i+1,size[i]);
first[i]=size[i];
best[i]=size[i];
worst[i]=size[i];
}
printf("Enter the size of new process : ");
scanf("%d",&p);
printf("\n FIRST - FIT \n *********** \n");
for (i=0;i<n;i++)
{
if (size[i]>=p)
{
first[i]=size[i]-p;
break;
}
}
if (n==i+1)
{
printf("......New process of size %d cannot be stored in any holes",p);
goto l;
}
for (i=0;i<n;i++)
{
printf("\tHole %d : %d\n",i+1,first[i]);
}
l:printf("\n BEST - FIT \n *********** \n");
t=0;
for (i=0;i<n;i++)
best[i]=size[i]-p;
tmp=best[0];
for (i=1;i<n;i++)
{
if (best[i]>0)
{
if (best[i]<tmp)
{
tmp=best[i];
t=i;
}
}
}
for (i=0;i<n;i++)
best[i]=size[i];
71
if (best[t]>=p)
best[t]=best[t]-p;
else
{
printf("......New process of size %d cannot be stored in any holes.",p);
goto l1;
}
for (i=0;i<n;i++)
printf("\tHole %d : %d\n",i+1,best[i]);
l1: printf("\n WORST - FIT \n *********** \n");
t=0;
for (i=0;i<n;i++)
best[i]=size[i]-p;
tmp=best[0];
for (i=1;i<n;i++)
{
if (best[i]>0)
{
if (best[i]>tmp)
{
tmp=best[i];
t=i;
}
}
}
for (i=0;i<n;i++)
worst[i]=size[i];
if (worst[t]>=p)
worst[t]=worst[t]-p;
else
{
printf("......New process of size %d cannot be stored in any holes.",p);
goto l2;
}
for (i=0;i<n;i++)
printf("\tHole %d : %d\n",i+1,worst[i]);
l2: printf("\nProgram Ended");
}
72
Output:
[examuser1@linux ~]$ vi fit.c
[examuser1@linux ~]$ cc fit.c
[examuser1@linux ~]$./a.out
Memory Allocation Strategy
Hole 1 : 100
Hole 2 : 50
Hole 3 : 150
Enter the size of new process : 40
FIRST - FIT
***********
Hole 1 : 60
Hole 2 : 50
Hole 3 : 150
BEST - FIT
***********
Hole 1 : 100
Hole 2 : 10
Hole 3 : 150
WORST - FIT
***********
Hole 1 : 100
Hole 2 : 50
Hole 3 : 110
Program Ended
Result:
Thus the c program to implement memory allocation methods for fixed partitions
has been written and executed successfully.
73
Ex: No: 12a Implementation Of FIFO Page Replacement
Algorithm
Aim:
To write a program to implement FIFO page replacement algorithm.
Algorithm:
1. Start the process.
2. Declare the size with respect to page length.
3. Check the need of replacement from page to memory.
4. Check the need of replacement from old page to new page in memory.
5. Form a queue to hold all pages.
6. Insert the page memory into the queue.
7. Check for bad replacement and page faults.
8. Get the number of process to be inserted.
9. Display the values.
10. Stop the process.
Program:
#include<stdio.h>
#include<conio.h
> void main()
{
int n,ref[50],f,frame[10],i,fault=0,k=0,j;
clrscr();
printf("\n Enter the number of reference string:");
scanf("%d",&n);
printf("\n Enter the reference string values");
for(i=0;i<n;i++)
scanf("%d",&ref[i]);
printf("\n Enter the frame size:");
scanf("%d",&f);
printf("\n FIFO page replacement \n");
for(i=0;i<f;i++)
{
frame[i]=ref[i]; printf("%d\
t",frame[i]);
}
fault=f;
while(i<n)
{
for(j=0;j<f;j++)
{
if(ref[i]==frame[j])
{
break;
}
}
if(f==j)
74
{
fault++;
frame[k]=ref[i];
k++;
if(k==3)
k=0;
printf("\n");
for(j=0;j<f;j++)
printf("%d\t",frame[j]);
} i+
+;
}
printf("\n Number of page fault is %d",fault);
getch();
}
Output:
Enter the number of reference string:6
page replacement
2 3 4
5 3 4
5 6 4
5 6 7
Number of page fault is 6
Result:
Thus the c program to implement FIFO page replacement has been written and
executed successfully.
75
Ex: No: 12b Implementation Of LRU Page Replacement Algorithm
Aim:
To write a program to implement LRU page replacement
Algorithm:
1. Start the process.
2. Declare the size.
3. Get the number of pages to be inserted.
4. Get the value.
5. Declare the counter and stack value.
6. Select the least recently used by counter value.
7. Stack them according to the selection
8. Display the values.
9. Stop the process.
Program:
#include<stdio.h>
#include<conio.h
> int main()
{
int q[20],p[50],c=0,c1,d,f,i,j,k=0,n,r,t,b[20],c2[20];
clrscr();
printf("Enter the number of pages:");
scanf("%d",&n);
printf("Enter the references string");
for(i=0;i<n;i++)
scanf("%d",&p[i]);
printf("Enter the no of frames:");
scanf("%d",&f);
q[k]=p[k]; printf("\n\t
%d\n",q[k]); c++;
k++;
for(i=1;i<n;i++)
{ c1=
0;
for(j=0;j<f;j++)
{
if(p[i]!=q[j])
c1++;
}
if(c1==f)
{ c+
+;
if(k<f)
{
q[k]=p[i];
k++;
for(j=0;j<k;j++)
76
printf("\t%d",q[j]);
printf("\n");
}
else
{
for(r=0;r<f;r++)
{ c2[r]=
0;
for(j=i-1;j<n;j--)
{
if(q[r]!=p[j])
c2[r]++;
else
break;
}
}
for(r=0;r<f;r++)
b[r]=c2[r];
for(r=0;r<f;r++)
{
for(j=r;j<f;j++)
{
if(b[r]<b[j])
{
t=b[r];
b[r]=b[j];
b[j]=t;
}
}
}
for(r=0;r<f;r++)
{
if(c2[r]==b[0])
q[r]=p[i]; printf("\t
%d",q[r]);
}
printf("\n");
}
}
}
printf("\n The no. of page faults is %d",c);
return 0;
}
77
Output:
Enter the number of pages:18
Enter the references string
7
0
1
2
0
3
0
4
2
3
0
3
2
1
2
0
1
7
Enter the no of frames:4
7
7 0
7 0 1
7 0 1 2
3 0 1 2
3 0 4 2
3 0 1 2
7 0 1 2
Result:
Thus the c program to implement LRU page replacement has been written and
executed successfully.
78
Ex. No: 12c Optimal (LFU) Page Replacement Algorithm
Aim:
To write a program to implement LFU page replacement.
Algorithm:
Program:
#include<stdio.h>
#include<conio.h>
int i,j,nof,nor,flag=0,ref[50],frm[50],pf=0,victim=-1;
int recent[10],optcal[50],count=0;
int optvictim();
void main()
{
clrscr();
printf("\n OPTIMAL PAGE REPLACEMENT
ALGORITHN"); printf("\n....");
printf("\nEnter the no.of frames");
scanf("%d",&nof);
printf("Enter the no.of reference string");
scanf("%d",&nor);
printf("Enter the reference string");
for(i=0;i<nor;i++)
scanf("%d",&ref[i]);
clrscr();
printf("\n OPTIMAL PAGE REPLACEMENT
ALGORITHM"); printf("\n.. ");
printf("\nThe given string");
printf("\n....................\n");
for(i=0;i<nor;i++)
printf("%4d",ref[i]);
for(i=0;i<nof;i++)
{
frm[i]=-1;
optcal[i]=0;
}
for(i=0;i<10;i++)
79
recent[i]=0;
printf("\n");
for(i=0;i<nor;i++)
{
flag=0;
printf("\n\tref no %d ->\t",ref[i]);
for(j=0;j<nof;j++)
{
if(frm[j]==ref[i])
{
flag=1;
break;
}
}
if(flag==0)
{
count++;
if(count<=nof)
victim++;
else
victim=optvictim(i);
pf++;
frm[victim]=ref[i];
for(j=0;j<nof;j++)
printf("%4d",frm[j]);
}
}
printf("\n Number of page faults: %d",pf);
getch();
}
int optvictim(int index)
{
int i,j,temp,notfound;
for(i=0;i<nof;i++)
{
notfound=1;
for(j=index;j<nor;j++)
if(frm[i]==ref[j])
{
notfound=0;
optcal[i]=j;
break;
}
if(notfound==1)
return i;
}
temp=optcal[0];
for(i=1;i<nof;i++)
if(temp<optcal[i])
temp=optcal[i];
80
for(i=0;i<nof;i++)
if(frm[temp]==frm[i])
return i;
return 0;
}
Output:
Enter reference
string..
654231
Reference NO 6-> 6 -1 -1
Reference NO 5-> 6 5 -1
Reference NO 4-> 6 5 4
Reference NO 2-> 2 5 4
Reference NO 3-> 2 3 4
Reference NO 1-> 2 3 1
Result:
Thus the c program to implement Optimal (LFU) page replacement has been written
and executed successfully.
81
Ex.No: 13 a Single Level Directory
Aim:
To write a C program to implement File Organization concept using the technique Single
level directory.
Algorithm:
1. Start the Program
2. Initialize values gd=DETECT,gm,count,i,j,mid,cir_x.
3. Initialize graph function
4. Set back ground color with setbkcolor();
5. Read number of files in variable count.
Program:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<graphics.h>
void main()
{
int gd=DETECT, gm, count, i, j, mid, cir_x;
char fname[10][20];
clrscr();
initgraph(&gd, &gm, "c:\c\bgi");
cleardevice();
setbkcolor(GREEN);
puts("Enter no. of Files fo you have?");
scanf("%d", &count);
for(i=00;i<count;i++)
{
cleardevice();
setbkcolor(GREEN);
printf("Enter File %d Name", i+1);
scanf("%s", fname[i]);
setfillstyle(1,MAGENTA);
mid = 640 / count;
cir_x=mid/3;
bar3d(270,100,370,150,0,0);
settextstyle(2,0,4);
settextjustify(1,1);
outtextxy(320,125,"Root Directory");
setcolor(BLUE); for(j=0;j<=i;j+
+,cir_x+=mid)
{
82
line(320,150,cir_x,250);
fillellipse(cir_x,250,30,30);
outtextxy(cir_x,250,fname[j]);
}
getch();
}
}
Output:
Result:
Thus the C program to implement File Organization concept using the technique
Single level directory has been written and executed successfully.
83
Ex.No: 13 b Two Level Directoryies
Aim:
To write a C program to implement File Organization concept using the technique two
level directories.
Algorithm:
1. Start the Program
2. Initialize structure elements
3. Start main function
4. Set variables gd =DETECT, gm;
5. Create structure using create (&root,0,”null”,0,639,320);
6. initgraph(&gd,&gm,”c:\tc\bgi”);
7. Stop the execution
Program:
#include<stdio.h>
#include<graphics.h>
struct tree_element
{
char name[20];
int x,y,ftype,lx,rx,nc,level;
struct tree_element *link[5];
};
typedef struct tree_element node;
void main()
{
int gd=DETECT,gm;
node *root;
root=NULL;
clrscr();
create(&root,0,"null",0,639,320);
clrscr(); initgraph(&gd,&gm,"c:\\
tc\\bgi"); display(root);
getch();
closegraph();
}
create(node **root, int lev, char *dname,
int lx,int rx,int x)
{
int i,gap;
if(*root==NULL)
{
(*root)=(node*)malloc(sizeof(node));
printf("Enter Name of Dir/File under %s):",dname);
fflush(stdin);
gets((*root)->name);
if(lev==0||lev==1)
(*root)->ftype=1;
else
84
(*root)->ftype=2;
(*root)->level=lev;
(*root)->y=50+lev*50;
(*root)->x=x;
(*root)->lx=lx;
(*root)->rx=rx;
for(i=0;i<5;i++)
(*root)-
>link[i]=NULL;
if((*root)->ftype==1)
{
if(lev==0||lev==1)
{
if((*root)->level==0)
printf("How many Users :");
else
printf("How many Files :");
printf("(for%s):", (*root)->name);
scanf("%d",& (*root)->nc);
}else(*root)->nc=0;
if((*root)->nc==0)
gap=rx-lx;
else
gap=(rx-lx)/(*root)->nc;
for(i=0;i<(*root)->nc;i++)
create(&((*root)->link[i]),lev+1,
(*root)->name,lx+gap*i,lx+gap*i+gap,lx+gap*i+gap/2);
}
else (*root)->nc=0;
}
}
display(node *root)
{
int i;
settextstyle(2,0,4);
settextjustify(1,1);
setfillstyle(1,BLUE);
setcolor(14); if(root!
=NULL)
{
for(i=0;i<root->nc;i++)
{
line(root->x,root->y,root->link[i]->x,root->link[i]->y);
}
if(root->ftype==1)
bar3d(root->x-20, root->y-10,root->x+20,root->y+10,0,0);
else
fillellipse(root->x,root->y,20,20);
outtextxy(root->x,root->y,root->name);
for(i=0;i<root->nc;i++)
{
85
display(root->link[i]);
}}
}
Output:
Enter Name of Dir/File (under null) : sld
How many Users (for sld) : 2
Enter Name of Dir/File (under sld) : tld
How many Files (for tld) : 2
Enter Name of Dir/File (under tld) : hir
Enter Name of Dir/File (under tld) : dag
Enter Name of Dir/File (under sld) : bin
How many Files (for bin) : 2
Enter Name of Dir/File (under bin) : exe
Enter Name of Dir/File (under bin) : obj
Result:
Thus the C program to implement File Organization concept using the technique two
level directories has been written and executed successfully.
86
Ex.No: 13 c Hierarchical Directories
Aim:
To write a C program to implement File Organization concept using the technique
hierarchical level directories.
Algorithm:
1. Start the Program
2. Define structure and declare structure variables
3. In main declare variables
4. Check a directory tree structure
5. Display the directory tree in graphical mode.
6. Stop the execution
Program:
#include<stdio.h>
#include<graphics.h>
struct tree_element
{
char name[20];
int x,y,ftype,lx,rx,nc,level;
struct tree_element *link[5];
};
typedef struct tree_element node;
void main()
{
int gd=DETECT,gm;
node *root;
root=NULL;
clrscr();
create(&root,0,"root",0,639,320);
clrscr(); initgraph(&gd,&gm,"c:\\
tc\\BGI"); display(root);
getch();
closegraph();
}
create(node **root,int lev, char *dname,
int lx,int rx,int x)
{
int i,gap;
if(*root==NULL)
{
(*root)=(node *)malloc(sizeof(node));
printf("Enter Name of Dir/File (under %s) : ",dname);
fflush(stdin);
gets((*root)->name);
printf("Enter 1 for Dir/2 for
File :"); scanf("%d",&(*root)-
>ftype); (*root)->level=lev;
(*root)-
>y=50+lev*50;
(*root)->x=x;
(*root)->lx=lx;
87
(*root)->rx=rx;
for(i=0;i<5;i++)
(*root)-
>link[i]=NULL;
if((*root)->ftype== 1)
{
printf("No. of Sub Directories / Files (for %s) :",
(*root)->name);
scanf("%d",&(*root)->nc);
if((*root)->nc==0)
gap=rx-lx;
else
gap=(rx-lx)/(*root)->nc;
for(i=0;i<(*root)->nc;i++)
create(&((*root)->link[i]),lev+1,(*root)->name,
lx+gap*i,lx+gap*i+gap,lx+gap*i+gap/2);
}
else(*root)->nc=0;
}
}
display(node *root)
{
int i;
settextstyle(2,0,4);
settextjustify(1,1);
setfillstyle(1,BLUE);
setcolor(14); if(root!
=NULL)
{
for(i=0;i<root->nc;i++)
{
line(root->x,root->y,root->link[i]->x,root->link[i]->y);
}
if(root->ftype==1)
bar3d(root->x-20, root->y-10,root->x+20,root->y+10,0,0);
else
fillellipse(root->x, root->y,20,20);
outtextxy(root->x, root->y, root->name);
for(i=0;i<root->nc;i++)
{
display(root->link[i]);
}
}
}
88
Output:
Enter Name of Dir/File (under root) : ROOT
Enter 1 for Dir/2 for File :1
No. of Sub Directories / Files (for ROOT) :2
Enter Name of Dir/File (under ROOT) : USER 1
Enter 1 for Dir/2 for File :1
No. of Sub Directories / Files (for USER 1) :1
Enter Name of Dir/File (under USER 1) : SUBDIR
Enter 1 for Dir/2 for File :1
No. of Sub Directories / Files (for SUBDIR) :2
Enter Name of Dir/File (under SUBDIR) : JAVA
Enter 1 for Dir/2 for File :1
No. of Sub Directories / Files (for JAVA) :0
Enter Name of Dir/File (under SUBDIR) : VB
Enter 1 for Dir/2 for File :1
No. of Sub Directories / Files (for VB) :0
Enter Name of Dir/File (under ROOT) : USER 2
Enter 1 for Dir/2 for File :1
No. of Sub Directories / Files (for USER 2) :2
Enter Name of Dir/File (under USER 2) : SUBDIR 2
Enter 1 for Dir/2 for File :1
No. of Sub Directories / Files (for SUBDIR 2) :2
Enter Name of Dir/File (under SUBDIR 2) : PPL
Enter 1 for Dir/2 for File :1
No. of Sub Directories / Files (for PPL) :2
Enter Name of Dir/File (under PPL) : B
Enter 1 for Dir/2 for File :2
Enter Name of Dir/File (under PPL) : C
Enter 1 for Dir/2 for File :2
Enter Name of Dir/File (under SUBDIR 2) : AI
Enter 1 for Dir/2 for File :1
No. of Sub Directories / Files (for AI) :2
Enter Name of Dir/File (under AI) : D
Enter 1 for Dir/2 for File :2
Enter Name of Dir/File (under AI) : E
Enter 1 for Dir/2 for File :2
Result:
Thus the C program to implement File Organization concept using the technique hierarchical
level directory has been written and executed successfully.
89
Ex.No: 13 d Directed Acyclic Graph Directory
Aim:
To write a C program to implement File Organization concept using the technique
directed acyclic graph directory.
Algorithm:
1. Start the Program
2. Define structure and declare structure variables
3. In main declare variables
4. Check a directory tree structure
5. Display the directory tree in graphical mode
6. Stop.
Program:
#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#include<string.h>
struct tree_element
{
char name[20];
int x,y,ftype,lx,rx,nc,level;
struct tree_element *link[5];
};
typedef struct tree_element node;
typedef struct
{
char from[20];
char to[20];
}link;
link L[10]; int nofl;
node *root;
void main()
{
int gd=DETECT, gm;
root=NULL;
clrscr();
create(&root,0,"root",0,639,320);
read_links();
clrscr(); initgraph(&gd,&gm,"c:\\
tc\\BGI"); draw_link_lines();
display(root);
getch();
closegraph();
}
read_links()
{
int i;
90
printf("How many Links :");
scanf("%d",&nofl);
for(i=0;i<nofl;i++)
{
printf("File / Dir :");
fflush(stdin);
gets(L[i].from);
printf("Username :");
fflush(stdin);
gets(L[i].to);
}
}
draw_link_lines()
{
int i,x1,y1,x2,y2;
for(i=0;i<nofl;i++)
{
search(root,L[i].from,&x1,&y1);
search(root,L[i].to,&x1,&y1);
setcolor(LIGHTGREEN);
setlinestyle(3,0,1);
line(x1,y1,x2,y2);
setcolor(YELLOW);
setlinestyle(0,0,1);
}
}
search(node *root,char *s,int *x,int *y)
{
int i; if(root!
=NULL)
{
if(strcmpi(root->name,s)==0)
{ *x=root->x;
*y=root->y;
return;
}
else
{
for(i=0;i<root->nc;i++)
search(root->link[i],s,x,y);
}
}
}
create(node **root,int lev,char *dname,int lx,
int rx,int x)
{
int i,gap;
if(*root==NULL)
{
(*root)=(node *)malloc(sizeof(node));
91
printf("Enter Name of Dir / File (under %s):",dname);
fflush(stdin);
gets((*root)->name);
printf("Enter 1 for Dir / 2 for
File :"); scanf("%d",&(*root)-
>ftype); (*root)->level=lev;
(*root)-
>y=50+lev*50;
(*root)->x=x;
(*root)->lx=lx;
(*root)->rx=rx;
for(i=0;i<5;i++)
(*root)-
>link[i]=NULL;
if((*root)->ftype==1)
{
printf("No. of Sub-Directories / Files (for
%s) :", (*root)->name);
scanf("%d",&(*root)->nc);
if((*root)->nc==0)
gap=rx-lx;
else
gap=(rx-lx)/(*root)->nc;
for(i=0;i<(*root)->nc;i++)
create(&((*root)->link[i]),
lev+1,
(*root)->name,lx+gap*i,lx+gap*i+gap,lx+gap*i+gap/2);
}
else
*root)->nc=0;
}
}
/* Displays the Constructed Tree in Grpahics mode */
display(node *root)
{
int i;
settextstyle(2,0,4);
settextjustify(1,1);
setfillstyle(1,BLUE);
setcolor(14); if(root!
=NULL)
{
for(i=0;i<root->nc;i++)
{
line(root->x,root->y,root->link[i]->x,
root->link[i]->y);
}
if(root->ftype==1)
bar3d(root->x-20, root->y-10, root->x+20,
root->y+10,0,0);
else
92
fillellipse(root->x, root->y, 20, 20);
outtextxy(root->x, root->y, root-
>name);
93
for(i=0;i<root->nc;i++)
{
display(root->link[i]);
}
}
}
Output :
Enter Name of Dir/File (under root) : ROOT
Enter 1 for Dir / 2 for File : 1
No. of Sub-Directories / Files (for ROOT) : 2
Enter Name of Dir/File (under ROOT) : USER 1
Enter 1 for Dir / 2 for File : 1
No. of Sub-Directories / Files (for USER 1) : 2
Enter Name of Dir/File (under USER 1) : VB
Enter 1 for Dir / 2 for File : 1
No. of Sub-Directories / Files (for VB) : 2
Enter Name of Dir/File (under VB) : A
Enter 1 for Dir / 2 for File : 2
Enter Name of Dir/File (under VB) : B
Enter 1 for Dir / 2 for File : 2
Enter Name of Dir/File (under USER 1) : C
Enter 1 for Dir / 2 for File : 2
Enter Name of Dir/File (under ROOT) : USER 2
Enter 1 for Dir / 2 for File : 1
No. of Sub-Directories / Files (for USER2) : 1
Enter Name of Dir/File (under USER 2) : JAVA
Enter 1 for Dir / 2 for File : 1
No. of Sub-Directories / Files (for JAVA) : 2
Result:
Thus the C program to implement File Organization concept using directed acyclic graph
directory has been written and executed successfully.
94
Ex.No.14a Sequential File Allocation
Aim:
To implement sequential file allocation technique.
Algorithm:
1.Start the program.
2.Get the number of
files.
3. Get the memory requirement of each file.
4. Allocate the required locations to each in sequential order.
4.1. Randomly select a location from available location s1= random(100);
4.2.Check whether the required locations are free from the selected location.
4.3.Allocate and set flag=1 to the allocated locations.
5. Print the results file number, length , Blocks
allocated. 6.Stop the program.
Program:
#include<stdio.h>
int main()
{
int f[50],i,st,j,len,c,k,count=0;
for(i=0;i<50;i++)
f[i]=0; X:
printf("\n enter starting block & length of files");
scanf("%d%d",&st,&len);
printf("\n file not allocated(yes-1/no-0)");
for(k=st;k<(st+len);k++)
if(f[k]==0)
count++;
if(len==count)
{
for(j=st;j<(st+len);j++)
if(f[i]==0)
{ f[j]=
1;
printf("\n%d\t
%d",j,f[j]);
if(j==(st+len-1))
printf("\n the file is allocated to disk");
}
}
else
printf("file is not allocated");
count=0;
printf("\n if u want to enter more files(y-1/n-0)");
scanf("%d",&c);
if(c==1)
goto X;
else
exit(0);
95
return 0;
96
}
Output:
97
Result:
Thus the C program to implement sequential file allocation has been written and executed
successfully.
98
Ex.No: 14 b Indexed File Allocation
Strategy Aim:
To write a C program to implement File Allocation concept using indexed allocation
Technique.
Algorithm:
1. Start the Program
2. Get the number of files.
3. Get the memory requirement of each file.
4. Allocate the required locations by selecting a location randomly.
5. Print the results file no,length, blocks allocated.
6. Stop the execution.
Program:
#include<stdio.h>
#include<conio.h>
#include<string.h>
struct file
{
char n[20];
int ind;
}s[20];
int no,i= -1,a,b,f,j= -1,fe,t;
char tem[20];
void create();
void display();
void del();
void main()
{
clrscr();
while(1)
{
printf("\n \n Menu" );
printf("\n 1.Create \n 2.Display \n 3.Delete \n 4.Exit ");
printf("Enter Your Choice : ");
scanf("%d",&no);
switch(no)
{
case 1:
create();
break;
case 2 :
display();
break;
case 3:
del();
break;
case 4:
exit(0);
default :
99
printf("Wrong Choice");
}
}
}
void create()
{ i+
+;
printf("\n Enter the name of the record : ");
scanf("%s",&s[i].n);
printf("\n Enter the Index no. :");
scanf("%d",&s[i].ind);
j++;
}
void display()
{
for(a=0;a<i;a++)
{
for(b=0;b<i;b++)
{
if(s[b].ind > s[b+1].ind)
{
t = s[b].ind;
s[b].ind = s[b+1].ind;
s[b+1].ind = t;
strcpy(tem,s[b].n);
strcpy(s[b].n,s[b+1].n);
strcpy(s[b+1].n,tem);
}
else
continue;
}
}
printf("\n \t Index Recordname");
for(i=0;i<=j;i++)
{
printf("\n \t %d \t",s[i].ind);
printf("\t %s",s[i].n);
}
i--;
}
void del()
{
int de,index= -1, k=0,l;
if(i!= -1)
{
printf("Enter Index no. to be Deleted : ");
scanf("%d", &de);
index = de;
while(s[k].ind!= de)
{
100
k++;
printf("\n \t \t \t %d",k);
}
for(l=k;l<=j;l++)
s[l] = s[l+1];
i--;
j--;
printf("\n Index no. %d File is deleted",index);
}
}
Output :
Menu
1.Create
2.Display
3.Delete
4.Exit
Menu
1.Create
2.Display
3.Delete
4.Exit
Enter your Choice : 1
Enter the name of the record : b.c
Enter the index no : 1
Enter the Field no : 2
Menu
1.Create
2.Display
3.Delete
4.Exit
Enter your choice : 2
Index Recordname FieldNo
0 a.java 1
1 b.c 2
Menu
1.Create
2.Display
3.Delete
101
4.Exit
Enter your Choice : 4
Result:
Thus the C program to implement indexed file allocation has been written and executed
successfully.
102
Ex.No.: 14c Linked File Allocation Strategy
Aim:
To write a C program to implement File Allocation concept using Linked List
Technique.
Algorithm:
1. Start the Program
2. Get the number of files.
3. Allocate the required locations by selecting a location randomly
4. Check whether the selected location is free.
5. If the location is free allocate and set flag =1 to the allocated locations.
6. Print the results file no, length, blocks allocated.
7. Stop the execution
Program:
#include<stdio.h>
#include<conio.h
> void main()
{
int f[50],p,i,j,k,a,st,len,n;
char c;
for(i=0;i<50;i++)
f[i]=0;
printf("enter how many blocks already allocated");
scanf("%d",&p);
printf("\nenter the blocks nos");
for(i=0;i<p;i++)
{
scanf("%d",&a);
f[a]=1;
}
printf("enter index starting block & length");
scanf("%d%d",&st,&len);
k=len;
if(f[st]==0)
{
for(j=st;j<(k+st);j++)
{
if(f[j]==0)
{ f[j]
=1;
printf("\n%d->%d",j,f[j]);
}
else
{
printf("\n %d->file is already allocated",j);
k++;
}
}
103
}
else
printf("\nif u enter one more (yes-1/no-0)");
scanf("%d",&c);
if(c==1)
goto X;
else
exit();
getch();
}
Output:
enter how many blocks already allocated4
1->1
2->file is already allocated
3->1
4->file is already allocated
5->1
6->1
7- >file is already
allocated 8->file is already
allocated 9->1
10->1
11->1
12->1
13->1
14->1
Result:
Thus the C program to implement linked file allocation has been written and executed
successfully.
104
Ex.No.: 15 Implementation of various Disk Scheduling Algorithms
Program:
#include<stdio.h>
#include<stdlib.h>
intmain()
{
intRQ[100],i,n,TotalHeadMoment=0,initial;
printf("Enter the number of Requests\n");
scanf("%d",&n);
printf("Enter the Requests sequence\n");
for(i=0;i<n;i++)
scanf("%d",&RQ[i]);
printf("Enter initial head position\n");
scanf("%d",&initial);
for(i=0;i<n;i++)
{
TotalHeadMoment=TotalHeadMoment+abs(RQ[i]-initial);
initial=RQ[i];
}
105
Output:
Enter the number of Request
8
Enter the Requests Sequence
95 180 34 119 11 123 62 64
Enter initial head position
50
Total head movement is 644
Result:
Thus the C program to implement FCFS disk scheduling has been written and executed
successfully.
106
Ex.No.: 15b SSTF Disk Scheduling
Aim:
To write a C program to implement SSTF disk scheduling.
Algorithm:
1. Let Request array represents an array storing indexes of tracks that have been
requested,‘head’ is the position of disk head.
2. Find the positive distance of all tracks in the request array from head.
3. Find a track from requested array which has not been accessed/serviced yet and
has minimum distance from head.
4. Increment the total seek count with this distance.
5. Currently serviced track position now becomes the new head position.
6. Go to step 2 until all tracks in request array have not been serviced.
Program:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int RQ[100],i,n,TotalHeadMoment=0,initial,count=0;
printf("Enter the number of Requests\n");
scanf("%d",&n);
printf("Enter the Requests sequence\n");
for(i=0;i<n;i++)
scanf("%d",&RQ[i]);
printf("Enter initial head position\n");
scanf("%d",&initial);
}
TotalHeadMoment=TotalHeadMoment+min;
107
initial=RQ[index];
// 1000 is for max
// you can use any number
RQ[index]=1000;
count++;
}
Output:
Enter the number of Request
8
Enter Request Sequence
95 180 34 119 11 123 62 64
Enter initial head Position
50
Total head movement is 236
Result:
Thus the C program to implement SSTF disk scheduling has been written and executed
successfully
108
Ex.No.: 15c SCAN Disk Scheduling
Aim:
To write a C program to implement SCAN disk scheduling.
Algorithm:
1. Let Request array represents an array storing indexes of tracks that have been
requested in ascending order of their time of arrival. ‘head’ is the position of disk
head.
2. Let direction represents whether the head is moving towards left or right.
3. In the direction in which head is moving service all tracks one by one.
4. Calculate the absolute distance of the track from the head.
5. Increment the total seek count with this distance.
6. Currently serviced track position now becomes the new head position.
7. Go to step 3 until we reach at one of the ends of the disk.
8. If we reach at the end of the disk reverse the direction and go to step 2 until all tracks
in request array have not been serviced.
Program:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int RQ[100],i,j,n,TotalHeadMoment=0,initial,size,move;
printf("Enter the number of Requests\n");
scanf("%d",&n);
printf("Enter the Requests sequence\n");
for(i=0;i<n;i++)
scanf("%d",&RQ[i]);
printf("Enter initial head position\n");
scanf("%d",&initial);
printf("Enter total disk size\n");
scanf("%d",&size);
printf("Enter the head movement direction for high 1 and for low 0\n");
scanf("%d",&move);
109
}
110
}
int index;
for(i=0;i<n;i++)
{
if(initial<RQ[i])
{
index=i;
break;
}
}
}
}
// if movement is towards low value
else
{
for(i=index-1;i>=0;i--)
{
TotalHeadMoment=TotalHeadMoment+abs(RQ[i]-initial);
initial=RQ[i];
}
// last movement for min size
TotalHeadMoment=TotalHeadMoment+abs(RQ[i+1]-0);
initial =0;
for(i=index;i<n;i++)
{
TotalHeadMoment=TotalHeadMoment+abs(RQ[i]-initial);
initial=RQ[i];
}
}
111
return 0;
}
Output:
Enter the number of Request
8
Enter the Requests Sequence
95 180 34 119 11 123 62 64
Enter initial head position
50
Enter total disk size
200
Enter the head movement direction for high 1 and for low 0
1
Total head movement is 337
Result:
Thus the C program to implement SCAN disk scheduling has been written and executed
successfully
Ex.No.: 15d CSCAN Disk Scheduling
112
Aim:
To write a C program to implement CSCAN disk scheduling.
Algorithm:
1. Let Request array represents an array storing indexes of tracks that have been
requested in ascending order of their time of arrival. ‘head’ is the position of disk
head.
2. The head services only in the right direction from 0 to the size of the disk.
3. While moving in the left direction does not service any of the tracks.
4. When we reach the beginning (left end) reverse the direction.
5. While moving in the right direction it services all tracks one by one.
6. While moving in the right direction calculates the absolute distance of the track from
the head.
7. Increment the total seeks count with this distance.
8. Currently serviced track position now becomes the new head position.
9. Go to step 6 until we reach the right end of the disk.
10. If we reach the right end of the disk reverse the direction and go to step 3 until all
tracks in the request array have not been serviced.
Program:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int RQ[100],i,j,n,TotalHeadMoment=0,initial,size,move;
printf("Enter the number of Requests\n");
scanf("%d",&n);
printf("Enter the Requests sequence\n");
for(i=0;i<n;i++)
scanf("%d",&RQ[i]);
printf("Enter initial head position\n");
scanf("%d",&initial);
printf("Enter total disk size\n");
scanf("%d",&size);
printf("Enter the head movement direction for high 1 and for low 0\n");
scanf("%d",&move);
113
}
}
int index;
for(i=0;i<n;i++)
{
if(initial<RQ[i])
{
index=i;
break;
}
}
}
}
// if movement is towards low value
else
{
for(i=index-1;i>=0;i--)
{
TotalHeadMoment=TotalHeadMoment+abs(RQ[i]-initial);
initial=RQ[i];
}
// last movement for min size
TotalHeadMoment=TotalHeadMoment+abs(RQ[i+1]-0);
/*movement min to max disk */
TotalHeadMoment=TotalHeadMoment+abs(size-1-0);
initial =size-1;
for(i=n-1;i>=index;i--)
{
TotalHeadMoment=TotalHeadMoment+abs(RQ[i]-initial);
initial=RQ[i];
114
}
}
Output:
Result:
Thus the C program to implement CSCAN disk scheduling has been written and executed
successfully.
115
Ex.No.: 15e CLOOK Disk Scheduling
Aim:
116
To write a C program to implement CLOOK disk scheduling.
Algorithm:
1. Let Request array represents an array storing indexes of the tracks that have been
requested in ascending order of their time of arrival and head is the position of the
disk head.
2. The initial direction in which the head is moving is given and it services in the
same direction.
3. The head services all the requests one by one in the direction it is moving.
4. The head continues to move in the same direction until all the requests in this
direction have been serviced.
5. While moving in this direction, calculate the absolute distance of the tracks from
the head.
6. Increment the total seeks count with this distance.
7. Currently serviced track position now becomes the new head position.
8. Go to step 5 until we reach the last request in this direction.
9. If we reach the last request in the current direction then reverse the direction and
move the head in this direction until we reach the last request that is needed to be
serviced in this direction without servicing the intermediate requests.
10. Reverse the direction and go to step 3 until all the requests have not been serviced.
Program:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int RQ[100],i,j,n,TotalHeadMoment=0,initial,size,move;
printf("Enter the number of Requests\n");
scanf("%d",&n);
printf("Enter the Requests sequence\n");
for(i=0;i<n;i++)
scanf("%d",&RQ[i]);
printf("Enter initial head position\n");
scanf("%d",&initial);
printf("Enter total disk size\n");
scanf("%d",&size);
printf("Enter the head movement direction for high 1 and for low 0\n");
scanf("%d",&move);
117
{ if(RQ[j]>R
Q[j+1])
{
int temp;
temp=RQ[j];
RQ[j]=RQ[j+1];
RQ[j+1]=temp;
}
}
}
int index;
for(i=0;i<n;i++)
{
if(initial<RQ[i])
{
index=i;
break;
}
}
for( i=0;i<index;i++)
{
TotalHeadMoment=TotalHeadMoment+abs(RQ[i]-initial);
initial=RQ[i];
}
}
// if movement is towards low value
else
{
for(i=index-1;i>=0;i--)
{
TotalHeadMoment=TotalHeadMoment+abs(RQ[i]-initial);
initial=RQ[i];
}
for(i=n-1;i>=index;i--)
{
TotalHeadMoment=TotalHeadMoment+abs(RQ[i]-initial);
118
initial=RQ[i];
}
}
Output:
Result:
Thus the C program to implement CLOOK disk scheduling has been written and executed
successfully.
119
Ex.No : 16 Install any guest operating system like Linux using VMware
Date :
AIM:
To Install any guest operating system like Linux using VMware
Go to VMWare website and download the .exe file of VMWare Player. At the time of writing
this article, VMWare player 16 is the latest version.
Download VMWare
Once downloaded, double-click the exe file and follow the on-screen instructions to install
VMWare.
Next, you need to download the ISO file of the Linux distribution. You can get this image from
the official website of the Linux distribution you are trying to use.
I am using Ubuntu in this example, and you can download ISO images for Ubuntu from the
link below:
Download Ubuntu
You have installed VMWare and you have downloaded the ISO for Linux. You are now set to
install Linux in VMware.
120
Step 4: Create new virtual machine in VMWare
Select “I will install operating system later” option and press next.
121
Select install operating system later button. On the next screen, set the Operating system to
Linux and the version to Ubuntu 64bit.
Select Linux type and ubuntu 64 type. Give the virtual machine a name and press Next.
In the next screen, set the disk size to a minimum of 20 GB and also select “Store Virtual Disk
as a single file” option.
122
Step 6: Select disk size and store as single file
From the next screen, you can either press Finish and set ISO file later by right-clicking and
Settings. Or you can select the ISO file on the go. For this, press “Customize Hardware” button.
Once the created machine is opened, you will get the Ubuntu boot screen.
you can select the downloaded ISO file and start the process.
123
Step 8:Select install ubuntu to start installation process
Next, you need to set your Keyboard Layout, which by default is set to English US.
124
Step 9:Press Customize Hardware button
On this screen, you can tweak memory, processors, etc. But you need to select “New
CD/DVD” button and add the Ubuntu ISO as shown in the screenshot:
Once done with your settings, you can press the Install Now button. This will ask you to
provide a time zone. Normally, it detects your time zone automatically. Otherwise, you can
click on the region in the associated map to set your time zone
125
Pressing Continue will ask you to provide user credentials like name, password etc. Provide
them all and press Continue.
Now the installation will be started and once completed, you can start using Ubuntu by
restarting the system.
126
Press the restart button once the installation is completed
VMWare player menu button. Once done, you will have Ubuntu 22.04 installed inside
VMWare.
127
Result:
Thus the Installation of guest operating system like Linux using VMware is installed successfully
128