OS LAB MANUAL
OS LAB MANUAL
Develop a c program to implement the Process system calls (fork (), exec(), wait(), create
process,terminate process)
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
int main() {
pid_t child_pid;
int status;
if (child_pid == -1) {
perror("Fork failed");
exit(EXIT_FAILURE);
}
if (child_pid == 0) {
// This code will be executed by the child process
printf("Child process: PID = %d\n", getpid());
if (WIFEXITED(status)) {
printf("Parent process: Child process terminated with exit status %d\n",
WEXITSTATUS(status));
} else {
printf("Parent process: Child process did not terminate normally\n");
}
return 0;
}
OUTPUT:
Simulate the following CPU scheduling algorithms to find turnaround time and waiting time
a) FCFS b) SJF c) Round Robin d) Priority.
#include <stdio.h>
#include <stdlib.h>
struct Process {
int processId;
int burstTime;
int priority;
int waitingTime;
int turnaroundTime;
};
printf("FCFS Scheduling\n");
printf("Process\tBurst Time\tWaiting Time\tTurnaround Time\n");
for (int i = 0; i < n; i++) {
printf("%d\t%d\t\t%d\t\t%d\n", processes[i].processId, processes[i].burstTime,
processes[i].waitingTime, processes[i].turnaroundTime);
}
}
calculateTurnaroundTime(processes, n);
calculateWaitingTime(processes, n);
printf("SJF Scheduling\n");
printf("Process\tBurst Time\tWaiting Time\tTurnaround Time\n");
for (int i = 0; i < n; i++) {
printf("%d\t%d\t\t%d\t\t%d\n", processes[i].processId, processes[i].burstTime,
processes[i].waitingTime, processes[i].turnaroundTime);
}
}
int currentTime = 0;
int completed = 0;
calculateTurnaroundTime(processes, n);
calculateWaitingTime(processes, n);
printf("Priority Scheduling\n");
printf("Process\tBurst Time\tWaiting Time\tTurnaround Time\n");
for (int i = 0; i < n; i++) {
printf("%d\t%d\t\t%d\t\t%d\n", processes[i].processId, processes[i].burstTime,
processes[i].waitingTime, processes[i].turnaroundTime);
}
}
int main() {
int n, timeQuantum, choice;
do {
printf("\nMenu:\n");
printf("1. FCFS Scheduling\n");
printf("2. SJF Scheduling\n");
printf("3. Round Robin Scheduling\n");
printf("4. Priority Scheduling\n");
printf("5. Exit\n");
printf("Enter your choice: ");
scanf("%d", &choice);
if (choice == 5) {
break;
}
return 0;
}
OUTPUT:
Menu:
1. FCFS Scheduling
2. SJF Scheduling
3. Round Robin Scheduling
4. Priority Scheduling
5. Exit
Enter your choice: 1
Enter the number of processes: 3
Enter burst time for process 1: 5
Enter priority for process 1: 3
Enter burst time for process 2: 4
Enter priority for process 2: 2
Enter burst time for process 3: 5
Enter priority for process 3: 3
FCFS Scheduling
Process Burst Time Waiting Time Turnaround Time
1 5 0 5
2 4 5 9
3 5 9 14
Menu:
1. FCFS Scheduling
2. SJF Scheduling
3. Round Robin Scheduling
4. Priority Scheduling
5. Exit
Enter your choice: 2
Enter the number of processes: 3
Enter burst time for process 1: 5
Enter priority for process 1: 3
Enter burst time for process 2: 4
Enter priority for process 2: 2
Enter burst time for process 3: 5
Enter priority for process 3: 3
SJF Scheduling
Process Burst Time Waiting Time Turnaround Time
2 4 0 4
1 5 4 9
3 5 9 14
Menu:
1. FCFS Scheduling
2. SJF Scheduling
3. Round Robin Scheduling
4. Priority Scheduling
5. Exit
Enter your choice: 3
Enter the number of processes: 3
Enter burst time for process 1: 5
Enter priority for process 1: 3
Enter burst time for process 2: 4
Enter priority for process 2: 2
Enter burst time for process 3: 5
Enter priority for process 3: 3
Enter the time quantum for Round Robin: 1
Round Robin Scheduling (Time Quantum: 1)
Process Burst Time Waiting Time Turnaround Time
1 5 13 18
2 4 11 15
3 5 14 19
Menu:
1. FCFS Scheduling
2. SJF Scheduling
3. Round Robin Scheduling
4. Priority Scheduling
5. Exit
Enter your choice: 4
Enter the number of processes: 3
Enter burst time for process 1: 5
Enter priority for process 1: 3
Enter burst time for process 2: 4
Enter priority for process 2: 2
Enter burst time for process 3: 5
Enter priority for process 3: 3
Priority Scheduling
Process Burst Time Waiting Time Turnaround Time
2 4 0 4
1 5 4 9
3 5 9 14
Menu:
1. FCFS Scheduling
2. SJF Scheduling
3. Round Robin Scheduling
4. Priority Scheduling
5. Exit
Enter your choice: 5
Program 3:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <semaphore.h>
#include <unistd.h>
#define BUFFER_SIZE 5
#define NUM_PRODUCERS 3
#define NUM_CONSUMERS 2
#define MAX_ITERATIONS 10
int buffer[BUFFER_SIZE];
int in = 0, out = 0;
int producerCount = 0, consumerCount = 0;
pthread_exit(NULL);
}
pthread_exit(NULL);
}
int main() {
pthread_t producerThreads[NUM_PRODUCERS];
pthread_t consumerThreads[NUM_CONSUMERS];
// Initialize semaphores
sem_init(&mutex, 0, 1);
sem_init(&full, 0, 0);
sem_init(&empty, 0, BUFFER_SIZE);
int producerIds[NUM_PRODUCERS];
int consumerIds[NUM_CONSUMERS];
// Destroy semaphores
sem_destroy(&mutex);
sem_destroy(&full);
sem_destroy(&empty);
return 0;
}
OUTPUT:
Producer 1 produced: 83
Consumer 2 consumed: 83
Producer 2 produced: 86
Consumer 1 consumed: 86
Producer 3 produced: 77
Producer 3 produced: 49
Producer 1 produced: 62
Producer 2 produced: 90
Consumer 1 consumed: 77
Producer 3 produced: 26
Producer 3 produced: 26
Consumer 2 consumed: 49
Producer 1 produced: 11
Consumer 2 consumed: 62
Producer 2 produced: 67
Consumer 1 consumed: 90
Producer 3 produced: 29
Consumer 2 consumed: 26
Consumer 1 consumed: 26
Consumer 2 consumed: 11
Consumer 1 consumed: 67
Program 4:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <string.h>
int main() {
int fd;
char message[] = "Hello, Reader!"; // Message to be sent by the writer process
char buffer[100];
// Writer Process
if (fork() == 0) {
// Open the FIFO for writing
fd = open(FIFO_NAME, O_WRONLY);
exit(0);
}
// Reader Process
else {
// Open the FIFO for reading
fd = open(FIFO_NAME, O_RDONLY);
OUTPUT:
#include <stdio.h>
#include <stdbool.h>
#define MAX_PROCESS 10
#define MAX_RESOURCE 10
int available[MAX_RESOURCE];
int max[MAX_PROCESS][MAX_RESOURCE];
int allocation[MAX_PROCESS][MAX_RESOURCE];
int need[MAX_PROCESS][MAX_RESOURCE];
bool finish[MAX_PROCESS];
int main() {
int processes, resources;
input(processes, resources);
if (isSafe(processes, resources)) {
printf("System is in safe state.\n");
} else {
printf("System is in unsafe state.\n");
}
return 0;
}
OUTPUT:
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int id;
int size;
int allocated;
} Block;
if (worstFitIdx != -1) {
blocks[worstFitIdx].allocated = 1;
printf("Memory allocated using Worst Fit at Block %d\n", worstFitIdx);
} else {
printf("No suitable block found for Worst Fit allocation\n");
}
}
if (bestFitIdx != -1) {
blocks[bestFitIdx].allocated = 1;
printf("Memory allocated using Best Fit at Block %d\n", bestFitIdx);
} else {
printf("No suitable block found for Best Fit allocation\n");
}
}
int main() {
int numBlocks, i, choice, requestSize;
printf("Enter the number of memory blocks: ");
scanf("%d", &numBlocks);
Block blocks[numBlocks];
while (1) {
printf("\nMenu:\n");
printf("1. Worst Fit Allocation\n");
printf("2. Best Fit Allocation\n");
printf("3. First Fit Allocation\n");
printf("4. Exit\n");
printf("Enter your choice: ");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("Enter the size of the memory request: ");
scanf("%d", &requestSize);
worstFit(blocks, numBlocks, requestSize);
break;
case 2:
printf("Enter the size of the memory request: ");
scanf("%d", &requestSize);
bestFit(blocks, numBlocks, requestSize);
break;
case 3:
printf("Enter the size of the memory request: ");
scanf("%d", &requestSize);
firstFit(blocks, numBlocks, requestSize);
break;
case 4:
exit(0);
default:
printf("Invalid choice. Please try again.\n");
}
}
return 0;
}
OUTPUT:
Enter the number of memory blocks: 3
Enter the size of Block 0: 100
Enter the size of Block 1: 200
Enter the size of Block 2: 150
Menu:
1. Worst Fit Allocation
2. Best Fit Allocation
3. First Fit Allocation
4. Exit
Enter your choice: 1
Enter the size of the memory request: 120
Memory allocated using Worst Fit at Block 1
Menu:
1. Worst Fit Allocation
2. Best Fit Allocation
3. First Fit Allocation
4. Exit
Enter your choice: 2
Enter the size of the memory request: 110
Memory allocated using Best Fit at Block 2
Menu:
1. Worst Fit Allocation
2. Best Fit Allocation
3. First Fit Allocation
4. Exit
Enter your choice: 3
Enter the size of the memory request: 130
No suitable block found for First Fit allocation
Menu:
1. Worst Fit Allocation
2. Best Fit Allocation
3. First Fit Allocation
4. Exit
Enter your choice: 4
Program 7:
#include <stdio.h>
#include <stdlib.h>
int main() {
int choice, n;
int pages[100]; // Assume a maximum of 100 pages for simplicity
int capacity = MAX_FRAMES;
while (1) {
printf("\nPage Replacement Algorithms Menu:\n");
printf("1. FIFO (First-In-First-Out)\n");
printf("2. LRU (Least Recently Used)\n");
printf("3. Exit\n");
printf("Enter your choice: ");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("Page Faults using FIFO: %d\n", fifo(pages, n, capacity));
break;
case 2:
printf("Page Faults using LRU: %d\n", lru(pages, n, capacity));
break;
case 3:
exit(0);
default:
printf("Invalid choice. Please try again.\n");
}
}
return 0;
}
if (!pageFound) {
if (rear < capacity - 1) {
rear++;
} else {
rear = 0;
}
frame[rear] = pages[i];
pageFaults++;
}
}
return pageFaults;
}
if (!pageFound) {
int lruPage = 0;
for (int j = 1; j < capacity; j++) {
if (counter[j] < counter[lruPage]) {
lruPage = j;
}
}
frame[lruPage] = pages[i];
counter[lruPage] = i;
pageFaults++;
}
}
return pageFaults;
}
OUTPUT:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct SingleLevelDirectory {
char filename[100][100];
int fileCount;
};
struct TwoLevelDirectory {
char directoryName[100][100];
struct SingleLevelDirectory files[100];
int directoryCount;
};
void singleLevelDirectory() {
struct SingleLevelDirectory singleLevelDir;
singleLevelDir.fileCount = 0;
char filename[100];
printf("Enter the filename: ");
scanf("%s", filename);
strcpy(singleLevelDir.filename[singleLevelDir.fileCount], filename);
singleLevelDir.fileCount++;
void twoLevelDirectory() {
struct TwoLevelDirectory twoLevelDir;
twoLevelDir.directoryCount = 0;
char directoryName[100];
printf("Enter the directory name: ");
scanf("%s", directoryName);
strcpy(twoLevelDir.directoryName[twoLevelDir.directoryCount], directoryName);
twoLevelDir.files[twoLevelDir.directoryCount].fileCount = 0;
char filename[100];
printf("Enter the filename: ");
scanf("%s", filename);
strcpy(twoLevelDir.files[twoLevelDir.directoryCount].filename[twoLevelDir.files[twoLevelDir.dire
ctoryCount].fileCount], filename);
twoLevelDir.files[twoLevelDir.directoryCount].fileCount++;
twoLevelDir.directoryCount++;
int main() {
int choice;
while (1) {
printf("\nFile Organization Techniques Menu:\n");
printf("1. Single Level Directory\n");
printf("2. Two Level Directory\n");
printf("3. Exit\n");
printf("Enter your choice: ");
scanf("%d", &choice);
switch (choice) {
case 1:
singleLevelDirectory();
break;
case 2:
twoLevelDirectory();
break;
case 3:
exit(0);
default:
printf("Invalid choice. Please try again.\n");
}
}
return 0;
}
OUTPUT:
File Organization Techniques Menu:
1. Single Level Directory
2. Two Level Directory
3. Exit
Enter your choice: 1
Enter the filename: document.txt
File 'document.txt' added to single level directory.
#include <stdio.h>
#include <stdlib.h>
struct Block {
int blockNumber;
int fileSize;
struct Block *next;
};
Block *head = NULL; // Linked list representing the File Allocation Table (FAT)
if (head == NULL) {
head = newBlock;
} else {
Block *temp = head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newBlock;
}
void displayFAT() {
Block *temp = head;
printf("File Allocation Table (FAT):\n");
while (temp != NULL) {
printf("Block Number: %d, File Size: %d\n", temp->blockNumber, temp->fileSize);
temp = temp->next;
}
}
int main() {
int choice, fileSize, blockNumber;
while (1) {
printf("\nLinked File Allocation Strategies Menu:\n");
printf("1. Allocate File\n");
printf("2. Deallocate File\n");
printf("3. Display File Allocation Table (FAT)\n");
printf("4. Exit\n");
printf("Enter your choice: ");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("Enter the file size: ");
scanf("%d", &fileSize);
allocateFile(fileSize);
break;
case 2:
printf("Enter the block number to deallocate: ");
scanf("%d", &blockNumber);
deallocateFile(blockNumber);
break;
case 3:
displayFAT();
break;
case 4:
exit(0);
default:
printf("Invalid choice. Please try again.\n");
}
}
return 0;
}
OUTPUT:
#include <stdio.h>
#include <stdlib.h>
printf("Enter the initial head movement direction (1 for right, 0 for left): ");
scanf("%d", &direction);
if (direction == 1) {
// Move right until the end of the disk
for (int i = head; i <= TOTAL_CYLINDERS; i++) {
printf("Head moved to cylinder %d\n", i);
totalMovement++;
for (int j = 0; j < size; j++) {
if (requestQueue[j] == i) {
printf("Request for cylinder %d serviced.\n", i);
requestQueue[j] = -1; // Mark request as serviced
}
}
}
int main() {
int requestQueue[100];
int size;
return 0;
}
OUTPUT:
Enter the number of requests: 5
Enter the request queue (cylinders separated by space): 60 70 90 10 110
Enter the initial head movement direction (1 for right, 0 for left): 1
Head moved to cylinder 50
Head moved to cylinder 51
Head moved to cylinder 52
Head moved to cylinder 53
Head moved to cylinder 54
Head moved to cylinder 55
Head moved to cylinder 56
Head moved to cylinder 57
Head moved to cylinder 58
Head moved to cylinder 59
Head moved to cylinder 60
Request for cylinder 60 serviced.
Head moved to cylinder 61
Head moved to cylinder 62
Head moved to cylinder 63
Head moved to cylinder 64
Head moved to cylinder 65
Head moved to cylinder 66
Head moved to cylinder 67
Head moved to cylinder 68
Head moved to cylinder 69
Head moved to cylinder 70
Request for cylinder 70 serviced.
Head moved to cylinder 71
Head moved to cylinder 72
Head moved to cylinder 73
Head moved to cylinder 74
Head moved to cylinder 75
Head moved to cylinder 76
Head moved to cylinder 77
Head moved to cylinder 78
Head moved to cylinder 79
Head moved to cylinder 80
Head moved to cylinder 81
Head moved to cylinder 82
Head moved to cylinder 83
Head moved to cylinder 84
Head moved to cylinder 85
Head moved to cylinder 86
Head moved to cylinder 87
Head moved to cylinder 88
Head moved to cylinder 89
Head moved to cylinder 90
Request for cylinder 90 serviced.
Head moved to cylinder 91
Head moved to cylinder 92
Head moved to cylinder 93
Head moved to cylinder 94
Head moved to cylinder 95
Head moved to cylinder 96
Head moved to cylinder 97
Head moved to cylinder 98
Head moved to cylinder 99
Head moved to cylinder 100
Head moved to cylinder 101
Head moved to cylinder 102
Head moved to cylinder 103
Head moved to cylinder 104
Head moved to cylinder 105
Head moved to cylinder 106
Head moved to cylinder 107
Head moved to cylinder 108
Head moved to cylinder 109
Head moved to cylinder 110
Request for cylinder 110 serviced.
Head moved to cylinder 111
Head moved to cylinder 112
Head moved to cylinder 113
Head moved to cylinder 114
Head moved to cylinder 115
Head moved to cylinder 116
Head moved to cylinder 117
Head moved to cylinder 118
Head moved to cylinder 119
Head moved to cylinder 120
Head moved to cylinder 121
Head moved to cylinder 122
Head moved to cylinder 123
Head moved to cylinder 124
Head moved to cylinder 125
Head moved to cylinder 126
Head moved to cylinder 127
Head moved to cylinder 128
Head moved to cylinder 129
Head moved to cylinder 130
Head moved to cylinder 131
Head moved to cylinder 132
Head moved to cylinder 133
Head moved to cylinder 134
Head moved to cylinder 135
Head moved to cylinder 136
Head moved to cylinder 137
Head moved to cylinder 138
Head moved to cylinder 139
Head moved to cylinder 140
Head moved to cylinder 141
Head moved to cylinder 142
Head moved to cylinder 143
Head moved to cylinder 144
Head moved to cylinder 145
Head moved to cylinder 146
Head moved to cylinder 147
Head moved to cylinder 148
Head moved to cylinder 149
Head moved to cylinder 150
Head moved to cylinder 151
Head moved to cylinder 152
Head moved to cylinder 153
Head moved to cylinder 154
Head moved to cylinder 155
Head moved to cylinder 156
Head moved to cylinder 157
Head moved to cylinder 158
Head moved to cylinder 159
Head moved to cylinder 160
Head moved to cylinder 161
Head moved to cylinder 162
Head moved to cylinder 163
Head moved to cylinder 164
Head moved to cylinder 165
Head moved to cylinder 166
Head moved to cylinder 167
Head moved to cylinder 168
Head moved to cylinder 169
Head moved to cylinder 170
Head moved to cylinder 171
Head moved to cylinder 172
Head moved to cylinder 173
Head moved to cylinder 174
Head moved to cylinder 175
Head moved to cylinder 176
Head moved to cylinder 177
Head moved to cylinder 178
Head moved to cylinder 179
Head moved to cylinder 180
Head moved to cylinder 181
Head moved to cylinder 182
Head moved to cylinder 183
Head moved to cylinder 184
Head moved to cylinder 185
Head moved to cylinder 186
Head moved to cylinder 187
Head moved to cylinder 188
Head moved to cylinder 189
Head moved to cylinder 190
Head moved to cylinder 191
Head moved to cylinder 192
Head moved to cylinder 193
Head moved to cylinder 194
Head moved to cylinder 195
Head moved to cylinder 196
Head moved to cylinder 197
Head moved to cylinder 198
Head moved to cylinder 199
Head moved to cylinder 200
Head moved to cylinder 199
Request for cylinder 199 serviced.
Head moved to cylinder 198
Request for cylinder 198 serviced.
Head moved to cylinder 197
Request for cylinder 197 serviced.
Head moved to cylinder 196
Request for cylinder 196 serviced.
Head moved to cylinder 195
Request for cylinder 195 serviced.
Head moved to cylinder 194
Request for cylinder 194 serviced.
Head moved to cylinder 193
Request for cylinder 193 serviced.
Head moved to cylinder 192
Request for cylinder 192 serviced.
Head moved to cylinder 191
Request for cylinder 191 serviced.
Head moved to cylinder 190
Request for cylinder 190 serviced.
Head moved to cylinder 189
Request for cylinder 189 serviced.
Head moved to cylinder 188
Request for cylinder 188 serviced.
Head moved to cylinder 187
Request for cylinder 187 serviced.
Head moved to cylinder 186
Request for cylinder 186 serviced.
Head moved to cylinder 185
Request for cylinder 185 serviced.
Head moved to cylinder 184
Request for cylinder 184 serviced.
Head moved to cylinder 183
Request for cylinder 183 serviced.
Head moved to cylinder 182
Request for cylinder 182 serviced.
Head moved to cylinder 181
Request for cylinder 181 serviced.
Head moved to cylinder 180
Request for cylinder 180 serviced.
Head moved to cylinder 179
Request for cylinder 179 serviced.
Head moved to cylinder 178
Request for cylinder 178 serviced.
Head moved to cylinder 177
Request for cylinder 177 serviced.
Head moved to cylinder 176
Request for cylinder 176 serviced.
Head moved to cylinder 175
Request for cylinder 175 serviced.
Head moved to cylinder 174
Request for cylinder 174 serviced.
Head moved to cylinder 173
Request for cylinder 173 serviced.
Head moved to cylinder 172
Request for cylinder 172 serviced.
Head moved to cylinder 171
Request for cylinder 171 serviced.
Head moved to cylinder 170
Request for cylinder 170 serviced.
Head moved to cylinder 169
Request for cylinder 169 serviced.
Head moved to cylinder 168
Request for cylinder 168 serviced.
Head moved to cylinder 167
Request for cylinder 167 serviced.
Head moved to cylinder 166
Request for cylinder 166 serviced.
Head moved to cylinder 165
Request for cylinder 165 serviced.
Head moved to cylinder 164
Request for cylinder 164 serviced.
Head moved to cylinder 163
Request for cylinder 163 serviced.
Head moved to cylinder 162
Request for cylinder 162 serviced.
Head moved to cylinder 161
Request for cylinder 161 serviced.
Head moved to cylinder 160
Request for cylinder 160 serviced.
Head moved to cylinder 159
Request for cylinder 159 serviced.
Head moved to cylinder 158
Request for cylinder 158 serviced.
Head moved to cylinder 157
Request for cylinder 157 serviced.
Head moved to cylinder 156
Request for cylinder 156 serviced.
Head moved to cylinder 155
Request for cylinder 155 serviced.
Head moved to cylinder 154
Request for cylinder 154 serviced.
Head moved to cylinder 153
Request for cylinder 153 serviced.
Head moved to cylinder 152
Request for cylinder 152 serviced.
Head moved to cylinder 151
Request for cylinder 151 serviced.
Head moved to cylinder 150
Request for cylinder 150 serviced.
Head moved to cylinder 149
Request for cylinder 149 serviced.
Head moved to cylinder 148
Request for cylinder 148 serviced.
Head moved to cylinder 147
Request for cylinder 147 serviced.
Head moved to cylinder 146
Request for cylinder 146 serviced.
Head moved to cylinder 145
Request for cylinder 145 serviced.
Head moved to cylinder 144
Request for cylinder 144 serviced.
Head moved to cylinder 143
Request for cylinder 143 serviced.
Head moved to cylinder 142
Request for cylinder 142 serviced.
Head moved to cylinder 141
Request for cylinder 141 serviced.
Head moved to cylinder 140
Request for cylinder 140 serviced.
Head moved to cylinder 139
Request for cylinder 139 serviced.
Head moved to cylinder 138
Request for cylinder 138 serviced.
Head moved to cylinder 137
Request for cylinder 137 serviced.
Head moved to cylinder 136
Request for cylinder 136 serviced.
Head moved to cylinder 135
Request for cylinder 135 serviced.
Head moved to cylinder 134
Request for cylinder 134 serviced.
Head moved to cylinder 133
Request for cylinder 133 serviced.
Head moved to cylinder 132
Request for cylinder 132 serviced.
Head moved to cylinder 131
Request for cylinder 131 serviced.
Head moved to cylinder 130
Request for cylinder 130 serviced.
Head moved to cylinder 129
Request for cylinder 129 serviced.
Head moved to cylinder 128
Request for cylinder 128 serviced.
Head moved to cylinder 127
Request for cylinder 127 serviced.
Head moved to cylinder 126
Request for cylinder 126 serviced.
Head moved to cylinder 125
Request for cylinder 125 serviced.
Head moved to cylinder 124
Request for cylinder 124 serviced.
Head moved to cylinder 123
Request for cylinder 123 serviced.
Head moved to cylinder 122
Request for cylinder 122 serviced.
Head moved to cylinder 121
Request for cylinder 121 serviced.
Head moved to cylinder 120
Request for cylinder 120 serviced.
Head moved to cylinder 119
Request for cylinder 119 serviced.
Head moved to cylinder 118
Request for cylinder 118 serviced.
Head moved to cylinder 117
Request for cylinder 117 serviced.
Head moved to cylinder 116
Request for cylinder 116 serviced.
Head moved to cylinder 115
Request for cylinder 115 serviced.
Head moved to cylinder 114
Request for cylinder 114 serviced.
Head moved to cylinder 113
Request for cylinder 113 serviced.
Head moved to cylinder 112
Request for cylinder 112 serviced.
Head moved to cylinder 111
Request for cylinder 111 serviced.
Head moved to cylinder 110
Request for cylinder 110 serviced.
Head moved to cylinder 109
Request for cylinder 109 serviced.
Head moved to cylinder 108
Request for cylinder 108 serviced.
Head moved to cylinder 107
Request for cylinder 107 serviced.
Head moved to cylinder 106
Request for cylinder 106 serviced.
Head moved to cylinder 105
Request for cylinder 105 serviced.
Head moved to cylinder 104
Request for cylinder 104 serviced.
Head moved to cylinder 103
Request for cylinder 103 serviced.
Head moved to cylinder 102
Request for cylinder 102 serviced.
Head moved to cylinder 101
Request for cylinder 101 serviced.
Head moved to cylinder 100
Request for cylinder 100 serviced.
Head moved to cylinder 99
Request for cylinder 99 serviced.
Head moved to cylinder 98
Request for cylinder 98 serviced.
Head moved to cylinder 97
Request for cylinder 97 serviced.
Head moved to cylinder 96
Request for cylinder 96 serviced.
Head moved to cylinder 95
Request for cylinder 95 serviced.
Head moved to cylinder 94
Request for cylinder 94 serviced.
Head moved to cylinder 93
Request for cylinder 93 serviced.
Head moved to cylinder 92
Request for cylinder 92 serviced.
Head moved to cylinder 91
Request for cylinder 91 serviced.
Head moved to cylinder 90
Request for cylinder 90 serviced.
Head moved to cylinder 89
Request for cylinder 89 serviced.
Head moved to cylinder 88
Request for cylinder 88 serviced.
Head moved to cylinder 87
Request for cylinder 87 serviced.
Head moved to cylinder 86
Request for cylinder 86 serviced.
Head moved to cylinder 85
Request for cylinder 85 serviced.
Head moved to cylinder 84
Request for cylinder 84 serviced.
Head moved to cylinder 83
Request for cylinder 83 serviced.
Head moved to cylinder 82
Request for cylinder 82 serviced.
Head moved to cylinder 81
Request for cylinder 81 serviced.
Head moved to cylinder 80
Request for cylinder 80 serviced.
Head moved to cylinder 79
Request for cylinder 79 serviced.
Head moved to cylinder 78
Request for cylinder 78 serviced.
Head moved to cylinder 77
Request for cylinder 77 serviced.
Head moved to cylinder 76
Request for cylinder 76 serviced.
Head moved to cylinder 75
Request for cylinder 75 serviced.
Head moved to cylinder 74
Request for cylinder 74 serviced.
Head moved to cylinder 73
Request for cylinder 73 serviced.
Head moved to cylinder 72
Request for cylinder 72 serviced.
Head moved to cylinder 71
Request for cylinder 71 serviced.
Head moved to cylinder 57
Head moved to cylinder 58