1
CSE 2431 HOMEWORK 1 SU 2021
Online Submission to Carmen Due: Thursday May 20, 2021 at 11:30 pm.
Note: You should submit your homework electronically on Carmen as a pdf file
(see below); ALSO, you should retain the C source code files and executables
which the instructions direct you to create and compile or run, because you
may be asked to show them to the instructor or graders.
NOTE that labs are due at 11:30pm on the due date. There is a one half hour “grace
period,”so as long as you submit before midnight, your lab will be counted as on time.
HOWEVER, you should not wait till after 11:30 to submit; your goal should be to submit by
11:30 AT THE ABSOLUTE LATEST (but even this is unwise; aim to submit well in advance
of the deadline, sometime early in the evening)! If you submit after midnight, your lab will be
counted and graded as late, and we will not accept any “excuses” for submitting later
than midnight, because the deadline is 11:30 pm.
The goal of CSE 2431 homework is to give students an opportunity to understand the
Unix/Linux fork() system call, which is used to create new processes, and also to give
students experience with the stdlinux system along with the command line interpreter,
as well as introducing students to forking processes.
All answers for the homework will be submitted to Carmen in a pdf file by the due date
specified above. You should not discuss the homework with other students; the
homework must be the student’s own individual work. You may use Piazza to post
any questions which you have; if you reveal what you think the correct answer to a
question is, or may be, be sure to leave your post private. Guidelines for Piazza and
communication are given on the Syllabus and on Piazza.
All homework answers must be typed, printed, and submitted electronically to
Carmen in a pdf file.
On the CSE Linux System, under your home directory, create a directory cse2431 for Systems
II. Create a directory/folder called hw1 using the command line interface. In that directory, you
will download several C source code files from Carmen, and create several other C source
code files, with code as described below.
After creating your cse2431/hw1 folder on stdlinux, start a firefox web browser, by executing
the following command:
$ firefox https://carmen.osu.edu/#
When the web browser starts, log in, and go to the Homework folder for CSE 2431 in the Files
area.
Download the forktest1.c file to your cse2431/hw1 folder on stdlinux.
Download the forktest2.c file to your cse2431/hw1 folder on stdlinux.
https://carmen.osu.edu/
2
Download the forktest3.c file to your cse2431/hw1 folder on stdlinux.
Download the forktest4.c file to your cse2431/hw1 folder on stdlinux.
IMPORTANT: When you answer the questions below, you should put your answers in a file
which you create with whichever word processor you prefer (not on stdlinux, but on your system),
and when you have all your answers, export your file as a pdf. Also be sure that you read and
understand the file Linux fork.pdf on Carmen in the HW folder.
ALSO IMPORTANT: When you answer the questions, make use of concepts discussed in
class, such as processes, the address spaces of processes, parent and child processes, pid
numbers, the relationship between pids for parent and child processes, and the fork system call
which is used to create processes in Linux. Finally, consider the behavior of the OS scheduler,
which we have not discussed in great detail, but its general behavior has been described. You
can assume that the server has a single-core CPU, so only one process at a time can be
running, but there may be multiple processes in execution (processes which have been
created, but have not yet terminated). Label the answers as the corresponding question is
labeled, so that it is clear which of your answers is responding to each question.
Note: Linux commands are shown with the $ shell prompt. If you have a different prompt in
stdlinux, the commands will still be identical, and they will work the same way.
NOW DO THIS: Compile forktest1.c as follows:
$gcc forktest1.c -o forktest1
Run the program from the directory where you compiled it:
$forktest1
Question 1. How many processes are created when the program runs (include in your count
the process created to run the program when you execute it from the command line on
stdlinux). Describe briefly what is done by the process(es); refer to parent and child process
when you describe what the processes do..
a) Are the results what you expected? Explain.
b) Run the program various times, until the sequence of lines which print values
(what is output as “value”) is different. How many times did you have to run the
program to get a different sequence?
c) Now explain, as clearly as you can, in terms which mention the CPU scheduler
and I/O system calls, why the sequence can vary for different runs of the
program.
NOW DO THIS: Compile forktest2.c as follows:
$gcc forktest2.c -o forktest2
Run the program:
3
$forktest2
Question 2. How many processes are created when the program runs (include in your count
the process created to run the program when you execute it from the command line on
stdlinux)?
a) What value or values is/are output by the program for the variable num?
Answer in terms of parent and child processes.
b) The value of num is changed from the initial value by the program code. Is
this change shown whenever the value of num is printed in the output?
Answer in terms of parent and child processes.
c) Explain why the change in num is or is not reflected by the output (depending
on what you answered for Question b) above). Give your explanation in terms
of parent and child processes.
NOW DO THIS: Compile forktest3.c as follows:
$gcc forktest3.c -o forktest3
Run the program:
$forktest3
Question 3. How many processes are created when the program runs (include in your count
the process created to run the program when you execute it from the command line on
stdlinux)?
a) What value or values is/are output by the program for the variable num?
Answer in terms of parent and child processes.
b) The value of num is changed from the initial value by the program code. Is
this change shown whenever the value of num is printed in the output?
Answer in terms of parent and child processes.
c) Explain why the change in num is or is not reflected by the output (depending
on what you answered for Question b) above). Give your explanation in terms
of parent and child processes.
NOW DO THIS: Compile forktest4.c as follows:
$ gcc forktest4.c -o forktest4
Run the program:
$forktest4
Question 4. How many processes are created when the program runs (include in your count
the process created to run the program when you execute it from the command line on
stdlinux)? [DO NOT just count pids! You need to justify this answer with your explanation for
part a) below.]
4
a) Explain the parent-child relationships between the processes created when the
program executes. You can make a diagram if it is helpful (but it is not required), but
you need to give a verbal (word-based) description of the relationships. Explain, as
clearly as possible (and clarity counts!) how the execution of the C code in forktest4.c
results in the creation of processes which have the parent-child relationships you
identify. If the terms are needed to in order to answer, for a child of a child, you can
use the term grandchild, and for a child of a grandchild, you can use the term great-
grandchild.
Question 5. What do you think the point was of entering and running these programs as
processes? What did you learn?
Question 6. What is a pid? How is a pid useful? It appears that a child process has two pids
associated with it (Note: This does not mean a child process has two pids, but rather, it has two
pids associated with it); what are the values of the two pids? Why are there two?
Question 7. Look at the online manual page for ps, that is, do a ‘man ps’. What does ps do?
Enter and run the commands ‘ps’, ‘ps –f’’, and ‘ps –af’. What are the differences?
Question 8. Look at the online manual page for kill. What does kill do? How might it be
useful? How does it relate to the ps command?
Directions for this part: Give a one or two sentence description, in your own words, of each of
the following system calls:
Question 9. fork
Question 10. getpid
Question 11. getppid
Question 12. wait
Type your answers to the questions above in a document with a word processor, and export the
document to a pdf file called hw1.pdf; to submit the file hw1.pdf to Carmen, log in, and select
HW1 under Assignments.
Homework not submitted by the deadline on the due date but within 24 hours will be
assessed a 25% late penalty of the grade for the whole homework assignment;
homework is not accepted after that time.