This document provides instructions for a project simulating operating system behaviors. It details assignments on memory management using algorithms like first fit, best fit and worst fit. It also covers file management and multi-threaded programming. Functions are defined to implement the memory allocation algorithms and display the results. The project aims to simulate core operating system functions through a series of C programming assignments.
Basic Civil Engineering first year Notes- Chapter 4 Building.pptx
Deliverables To complete this assignment you must submit your OSManag.pdf
1. Deliverables To complete this assignment you must submit your OSManagement.c to
Webcourses. Project description This project will require students to simulate the behaviors of an
operating system with a series of assignments. 1. Simulate process allocation to memory blocks
based on memory management algorithms First Fit, Best Fit, Next Fit, and Worst Fit. 2. Simulate
file management of directories and files stored in a directory. 3. Simulate multi-threaded
programming with the POSIX (Portable Operating System Interface) threads (a.k.a. pthreads). C
programming language integrated development environment (IDE) 1. Code::Blocks NOT Mac
compatible 2. Visual Studio Code 3. Atom 4. https://replit.com/ 5. XCode Assignment Scope:
Memory Management 1. First Fit Implementation: a. Input memory blocks with size and
processes with size. b. Initialize all memory blocks as free. c. Start by picking each process and
check if it can be assigned to current block. d. If size-of-process <= size-of-block if yes then
assign and check for next process. c. If not then keep checking the further blocks. 2. Best Fit
Implementation: a. Input memory blocks with size and processes with size. b. Initialize all
memory blocks as free. c. Start by picking each process and find the minimum block size that
can be assigned to current process i.e., find min(blockSize[1], blockSize[2],....blockSize[n]) >
processSize[current], if found then assign it to the current process. d. If not, then leave that
process and keep checking the further processes.
3. Worst Fit Implementation: a. Input memory blocks with size and processes with size. b.
Initialize all memory blocks as free. c. Start by picking each process and find the maximum
block size that can be assigned to current process i.e., find max(blockSize[1],
blockSize[2],.....blockSize[n]) > processSize[current], if found then assign it to the current
process. d. If not, then leave that process and keep checking the further processes. 4. Next Fit
Implementation: a. Input memory blocks with size and processes with size. b. Initialize all
memory blocks as free. c. Start by picking each process and check if it ean be assigned to the
current block, if yes, allocate it the required memory and check for next process but from the
block where we Icft not from starting. d. If the current block size is smaller, keep checking the
further blocks.
v. Write decision making logic based on the value of the looping variable (i.e. algorithm) 1.
When algorithm is equal to FIRST, call function firstFit, passing arguments blockSize, blocks,
processSize, and processes 2. When algorithm is equal to BEST, call function bestFit, passing
arguments blockSize, blocks, processSize, and processes 3. When algorithm is equal to WORST,
call function worstFit, passing arguments blockSize, blocks, processSize, and processes 4. When
algorithm is equal to NEXT, call function nextFit, passing arguments blockSire. blocks,
processSize, and processes Write function nextFit to do the following a. Return type void b.
2. Parameter list includes i. One-dimensional array, data type integer, contains the block sizes (i.e.
blockSize) ii. Parameter contains the number of blocks, data type integer (i.e. blocks) iii. One-
dimensional array, data type integer, contains the process sizes (i.e. processSize) iv. Parameter
contains the number of processes, data type integer (i.c. processes) c. Declare a one-dimensional
array, data type integer, to store the block id that a process is allocated to (i.e. allocation), size is
parameter processes d. Declare a variable, data type integer, to store the block allocation for a
process, initialize to 0 (i.c. id) c. Call function memset, passing arguments i. Array allocation ii. -
I (i.e. INVALID) iii. sizeof(allocation) f. Using a looping construct, loop through the number of
processes i. Using a looping construct, loop while id is less than the number of blocks 1. If the
current block size (i.e, index id) is greater than or equal to the current process size (i.e. index of
outer looping variable) a. Update the allocation array to set the clement at index of the outer
looping variable equal to variable id b. Reduce available memory of the current
size (i.e. index of the outer looping variable) c. break out of the inner loop ii. Update the value of
variable id to set the next index in array blockSize by adding I to variable id then modulus the
total by the number of blocks g. Call function displayProcess passing arguments allocation.
processes, and processize Write function firstFit to do the following a. Return type void b.
Parameter list includes i. One-dimensional array, data type integer, contains the block sizes (i.c.
blockSize) ii. Parameter contains the number of blocks, data type integer (i.e. blocks) iii. One-
dimensional array, data type integer, contains the process sizes (i.c. processSize) iv. Parameter
contains the number of processes, data type integer (i.e. processes) c. Declare a one-dimensional
array, data type integer, to store the block id that a process is allocated to (i.e. allocation), sire is
parumeter processes d. Call function memset, passing arguments i. Array allocation ii. -1 (i.e.
INVAI.ID) iii. sizeof(allocation) e. Using a looping construct, loop through the number of
processes i. Using a looping construct, loop the number of blocks 1. If the current block size (i.e,
index of the inner looping variable) is greater than or equal to the current process size (i.e, index
of outer looping variable) a. Update the allocation array to set the element at index of the outer
looping variable equal to the inner looping variable b. Reduce available memory of the current
block size (i.e. index of the inner looping variable) by the process size (i.e. index of the outer
looping variable) c. break out of the inner loop f. Call function displayProcess passing arguments
allocation, processes, and processize
Write function bestFit to do the following a. Return type void b. Parameter list includes i. One-
dimensional array, data type integer, contains the block sizes (i.e. blockSize) ii. Parameter
contains the number of blocks, data type integer (i.e. blocks) iii. One-dimensional array, data
type integer, contains the process sizes (i.e. processhize) iv. Parameter contains the number of
3. processes, data type integer (i.e. processes) c. Declare a one-dimensional array, data type integer,
to store the block id that a process is allocated to (ice. allocation), size is parameter processes d.
Call function memset, passing arguments i. Array allocation ii. - I (ie. INVALID) iii.
sizeof(allocation) e. Using a looping construct, loop through the number of processes i. Declare a
variable, data type integer, to store the current best fit value (i.e. bestldx) initialized to -1 (i.e.
INVALID) ii. Using a looping construct, loop the number of blocks 1. If the current block size
(i.e. index of the inner looping variable ) is greater than or equal to the current process size (ie.
index of outer looping variable) a. If the value of bestIdx is equal to -1 (i.e. INVAI.ID) i. Set
variable bestldx equal to the current block (i.e, the inner looping variable) b. Else if the value of
the block size at index bestldx is greater than the value of the block size at index of the inner
looping variable i. Set variable bestldx equal to the current block (i.e, the inner looping variable)
iii. If the value of variable bestldx is not equal to - 1 (i.e. INVAL.ID) 1. Update the allocation
array to set the element at index of the outer looping variable equal to variable bestldx
size (i.e. index bestIdx) by the process size (i.e. index of the outer looping variable) f. Call
function displayProcess passing arguments allocation, processes, and processize Write function
worstFit to do the following a. Return type void b. Parameter list includes i. One-dimensional
array, data type integer, contains the block sizes (i.e. blockSize) ii. Parameter contains the
number of blocks, data type integer (i.e. blocks) iii. One-dimensional array, data type integer,
contains the process sizes (i.e. processSize) iv. Parameter contains the number of processes, data
type integer (i.e. processes) c. Declare a one-dimensional array, data type integer, to store the
block id that a process is allocated to (i.c. allocation), size is parameter processes d. Call function
memset, passing arguments i. Array allocation ii. -1 (i.c. INVALID) iii. sizeof(allocation) e.
Using a looping construct, loop through the number of processes i. Declare a variable, data type
integer, to store the current worst fit value (i.e. wstIdx) initialized to -1 (i.e. INVALID) ii. Using
a looping construct, loop the number of blocks 1. If the current block size (i.e. index of the inner
looping variable ) is greater than or equal to the current process size (i.e. index of outer looping
variable) a. If the value of wstldx is equal to - I (i.e. INVALID) i. Set variable wstldx equal to the
current block (i.e. the inner looping variable) b. Else if the value of the block size at index wstIdx
is less than the value of the block size at index of the inner looping variable i. Set variable wstldx
equal to the current block (i.e. the inner looping variable)
iii. If the value of variable wstldx is not equal to -1 (i.e. INVALID) 1. Update the allocation array
to set the element at index of the outer looping variable equal to variable wstldx 2. Reduce
available memory of the current block size (i.e. index wstldx) by the process size (i.e. index of
the outer looping variable) f. Call function displayProcess passing arguments allocation,
4. processes, and processSize displayProcess 9. Write function displayProcess to do the following
a. Return type void b. Parameter list includes i. One-dimensional array, data type integer, that
stores the block number allocations (i.e. allocation) ii. Parameter that contains the number of
processes, data type integer (i.e. processes) iii. One-dimensional array, data type integer, that
stores the processes (i.e. processSize) c. Write a looping construct to loop through the processes
(i.e. processize) i. Display to the console the process number (i.e use the looping variable plus 1)
ii. Display to the console the process size (i.e. processSize array at the current looping index) iii.
Display to the console the memory block assigned based on the following logic 1. If the value
stored at the current index of array processSize if -1 (i.e. INVALID), output Not Allocated 2.
Else, output the current allocation (i.e. allocation) OSManagement executable
begin{tabular}{|l|l|} hline Test Case 1 & Test Case 1 passes hline Test Case 2 & Test Case 2
passes hline Test Case 3 & Test Case 3 passes hline Test Case 4 & Test Case 4 passes
hline Test Case 5 & Test Case 5 passes hline Test Case 6 & Test Case 6 passes hline Test
Case 7 & Test Case 7 passes hline Test Case 8 & Test Case 8 passes hline & Source
compiles with no errors hline & Source compiles with no warnings hline & Source runs
with no errors hline end{tabular}
#include h> Hinclude Hinc lude #define EXIT #define INVALID - 1 #define MEMORY 1
Hdefine FILES 2 #define THREAD 3 #define FIRST #define BEST 1 Hdefine WORST 2
void clearscreen() {system( "clear"); int displaymenu() { int choice = INVALID; printf("Select
an option: n"); printf ("1. Memory Management n=); printf ("2. File Management 1n); printf("3.
Mutti-Thread n ); printf(". Exitln"); printf("Enter your choice: "); scanf("%d", &choice); return
choice; 3 int main() { int choice =1; while (choice 1= EXIT) { choice = displayMenu(); switch
(choice) { case MEMORY: clearscreen(): printf("Memory Management selectedn"); break;
case FILES: clearscreen(): printf( "File Management selected n"); break; case THREAD:
clearscreen(): printf("Multi-Thread selected n ): break; case EXIT: clearscreen(); printf("Exiting
the program... In"); exit(EXIT_SUCCESS); default: clearscreen(): printf("Invalid choice, please
try againun"); break; } 3 return ; )