CS372H Spring 2010 Homework 1
Problem 1
Define three styles of switching from user mode to supervisor mode.
Problem 2
Which of the following components is responsible for loading the
initial
value in the program counter for an application program before it
starts
running:
* Compiler
* Linker
* Loader
* Boot
module or boot ROM
Problem 3
A hardware designer argues that there are enough transistors on the
chip
to provide 1024 integer registers and 512 floating point registers.
You
have been invited as the operating system guru to give opinion about
the
new design.
1. What is the effect
of
having such a large number of registers on the operating system?
2. What additional
hardware
features you would recommend added to the design above.
3. What happens if
the hardware
designer also wants to add a 16-station pipeline into the CPU. How
would
that affect the context
switching overhead?
Problem 4
Given the following piece of code:
main(int argc, char ** argv)
{
int child = fork();
int c = 5;
if(child == 0)
{
}
else
{
child = fork();
c += 10;
if(child)
}
}
How many different copies of the variable care
there? What are their values?
Problem 5
Given the following piece of code
main(int argc, char ** argv)
{
}
void forkthem(int n)
{
}
How many processes are created if the above
piece
of code is run? Hint: It may be
easier to
solve this problem by induction.
Problem 6
What is the output of the following programs (inspect the manual for
the
system calls if you need more information, but please solve the
problem
without compiling and running the program).
Program 1:
main()
{
val = 5;
if(fork())
wait(&val);
val++;
printf("%d\n", val);
return val;
}
Program 2:
main()
{
val = 5;
if(fork())
wait(&val);
else
exit(val);
val++;
printf("%d\n", val);
return val;
}
Problem 7
A typical hardware architecture provides an instruction called
return from interrupt,
and abbreviated by something like iret.
This instruction switches the mode of operation from supervisor mode
to
user mode. This instruction is usually only available while the
machine
is running in supervisor mode.
1. Explain where in the operating system this
instruction
would be used.
2. What happens if an application program
executes
this instruction?
Problem 8
System Calls vs. Procedure Calls:
How much more expensive is a system call than a procedure
call? Write a simple test program to compare the cost of a simple
procedure
call to a simple system call ("getpid()" is a good
candidate on UNIX;
see the man page.) (Note: be careful to prevent the optimizing
compiler from
"optimizing out" your procedure calls. Do not compile with
optimization on.)
- Run your experiment on two different hardware
architectures and report the results.
- Explain the difference (if any) between the time
required by your simple procedure call and simple system call by
discussing
what work each call must do (be specific). [Note: Do not provide
the source
code for your program, just the results].
Hint:
You should use system
calls such as gethrtime() or gettimeofday() for time
measurements. Design your code such that the measurement overhead is
negligible. Also, be aware that timer values in some systems have
limited
resolution (e.g., millisecond resolution).
Problem 9 (this one is tough)
When an operating system receives a system call from a program, a
switch
to the operating system code occurs with the help of the hardware.
In such
a switch, the hardware sets the mode of operation to supervisor
mode, calls
the operating system trap handler at a location specified by the
operating
system, and allows the operating system to return back to user mode
after
it finishes its trap handling. Now, consider the stack on which the
operating
system must run when it receives the system call. Should this be a
different
stack from the one that the application uses, or could it use the
same
stack as the application program? Assume that the application
program is
blocked while the system call runs.