Final Test: Operating Systems
Grading
The grade formula is as follows:
Grade = 0.4 * Theory + 0.6 * Programming
Video
Form for video is here.
Submission
Form for theory and program is here.
Rules
It is allowed to use only a text editor and Linux console (with all related commmand-line tools). No lecture materials, AI, or Google search. Cheating policy applies here.
Proctoring
You must record a video of your desktop + video + audio with OBS Studio, upload it to your cloud drive, and submit a link to it. The suggested format for video is .mkv.
Solving both parts (theory and programming) must be recorded. Please start video-recording before you start solving enything.
The form for submitting video will be avaialble for several hours after the deadline in case uploading video takes a long time.
Part 1. Theoretical Questions
Please answer the questions from the form.
Part 2. Programming Task
Please solve the programming task below and submit it to the form. Send the source code and the Make file as a text (merge them and submit to a text field).
Task
Write a program in C that does the following:
- Calculates the value of the specified function
f(x)in the range fromargv[1]toargv[2]with stepargv[3]. - Writes pairs
x, f(x)into text fileoutput.csv(CSV format). - The function to be calculated has the following format:
f(x) = f0(f1(x), f2(x), f3(x), f4(x)), where:
xis the function argument;f0-f4are functions that are individual according to the variant.
Example of Function (you need your variant, see below)
Note: the ^ symbol means “power”.
f0(a, b, c, d) = (a - b + c - d) / 2
f1(x) = 2*x^3 - 4*x^2 + 3*x + 1
f2(x) = sin(5*x)*4 + 3
f3(x) = 1 / (1 + e^(-7*x))
f4(x) = 2^x + 5
Requirements and Grades
- 4 Points: make all calculations and write to file in a parent process; provide a Makefile to build the program;
- 5 Points: write to a file using output redirection (redirect the standard output to the file using dup2);
- 6 Points: make all calculations and write to the file in a child process (use fork);
- 8 Points: execute the f0 function for the entire value range in a child process and send the resulting values to the parent process using a pipe;
- 10 Points: execute f0 in the parent process and f1-f4 in separate child processes; return the calculated values of f1-f4 to f0 using a pipe (you will need 4 pipes).
NOTE: Your program must call fork no more than 4 times (for f1-f4). In the past, an invalid solution
with 4*N calls to fork was distributed among students. Such code will not be accepted (0 points).
This solution is very bad because it will be slower that a single-process solution.
Running in parallel is aimed to improve performance, while extra system calls are very expensive
(especially fork) and may totally kill this advantage. Try to keep the number of system calls to minimum.
Hints
- Function
f0has the following structure:double f0(double a, double b, double c, double d) { return <math expr>; } - Functions
f1-f4have the following structure:double f1(double x) { return <math expr>; } - Command-line arguments (strings) can be converted to
doubleusing the atof function. - Mathematical functions (such as
sin,cos,pow,expetc.) and constants (M_E) are in the math.h library. The program must be linked with the library: use the-lmGCC flag. - To write to a file, open the file and redirect the standard output
(
STDOUT_FILENO) to this file with the dup2 system call. When you do this, you will be able to useprintfto print to the file. If you do this in the parent process, redirection will work in both processes (parent and child). - Sending data from child to parent using a pipe: see example in the manual.
- Child:
f(x)is calculated for a range of values and results (xandf(x)) are written (write(pfd[1], &x, sizeof(x))) to the pipe; - Parent: results (
xandf(x)) are read (read(pfd[0], &x, sizeof(x))) from the pipe in a loop and printed.
- Child:
Variants
Choose your variant number according to your number in your group.
See the lists of students here.
Variants for groups:
Note: the ^ symbol means “power”.