CS439: Principles of Computer Systems
Homework 1, Part 1
Due in Section on Friday, January 29, 2016 Part 1 of the
homeworks must be completed before section and brought to section. Please refer
homework turnin instructions.
Create a name tent for use during all discussion sections this semester. Your
name tent should be typed. If you are unsure of either what a name tent is or
how to create one, many examples can be found using Google (probably the one and
only time this semester we will recommend Google). Bring your name tent with
you to discussion section.
Describe what a pair programming log in this course should contain. How often
should the pair/group change drivers? How much time must the pair/group spend
Open a terminal on a departmental Linux machine. After ensuring that you are in
a bash shell, use the time command to measure the time taken by a Linux
command that sends output to the screen (and maybe other things as well). You
may use any Linux command you like. For instance, a sample run might be (from
your Project 0 directory):
Inspect the output. Explain the meaning of each line. Is the output as you
would expect? Why or why not? Include your command in your answer.
Write a C program that expects an integer command line argument, x,
and then uses recursion to print, Hello, World! x times.
Paste the code into your homework.
[The next three questions relate to the program you just wrote.]
Compile your program on the CS Linux machines
using gcc. Use command line options to:
- Name the executable file hello.
- Set the optimization to level 0.
Turn on the debugging information.
You may find the overview of gcc on the course homepage helpful.
What command did you use?
Run your program from within gdb with an argument of 5.
- Set a break point at the entrance to your recursive function.
- Print the value of the argument to the function.
- Step through each line of the function until Hello,
World! is printed.
- Continue the execution until the next breakpoint is reached.
Check the value of the argument, and, if it is not the last recursive
call, continue the program.
- On the last recursive call, print a backtrace of the call stack.
Identify the line number of the call to your recursive function
What commands did you use in gdb? What is the line number of your
Return to your program and add an if statement in main after
the recursive call that reads:
if(x == x)
where x is the name of the argument to the recursive call. (If
you didn't save it into a variable before, please do so now!)
Recompile your program with the optimizations set to level 4.
Run your program using gdb, but set a breakpoint
in main for the if statement and inspect the value of x.
What do you learn?