Transcript Tutorial4
Tutorial 4
Test Practice
Q1: Which of the following is NOT an operating system theme
or model as defined in lectures?
•
•
•
•
The donkey model.
The onion model.
The manager model.
The resource allocator model.
Q2: Early Unix had what type of operating system kernel?
•
•
•
•
A client/server module kernel.
A client/server microkernel.
An all-in-one monolithic kernel.
A hybrid layered client/server kernel.
Q3: Which of the following best describes the task of a
resident monitor?
•
•
•
•
It kept several programs in memory at once and scheduled them according to time slices.
It supplied a disk operating system with spooling of input and output.
It enabled several people to use the computer at the same time from multiple terminals.
It cleared memory used by one program, automatically loaded the next program and jumped to its
starting point.
Q4: What change contributed most to the development of
time-sharing systems?
•
•
•
•
Disk drives became widely available.
Computers became cheaper.
Spooling - simultaneous peripheral operation online.
Multiple scheduling queues.
Q5: How did a time-sharing operating system
differ from a batch operating system?
• Compared to a batch system many of the
scheduling decisions could no longer be
made by the operating system.
• Time-sharing systems allowed multiple
processes to be running simultaneously.
• The response time was slower on a timesharing system.
• Security was simpler in time-sharing systems.
•
•
•
•
Q6: The first smartphone operating systems
were most similar to which of the following
types of historical operating systems?
Batch systems.
Time-sharing systems.
Hard real-time operating systems.
Resident monitors.
Q7: Which of the following is NOT a reason that virtual
machines are popular?
•
•
•
•
Multiple servers, each in its own virtual machine, can run on one computer.
Virtual machines can be easily moved from one machine to another.
Virtual machines can emulate any CPU architecture.
Virtual machines allow you to run programs from one operating system on top of another operating
system.
Q8: Which of the following was NOT included in Popek and
Goldberg’s requirements of virtualization?
•
•
•
•
Fidelity - the software should run identically on the virtual machine as on a real machine.
Performance - most instructions in the virtual machine should be run directly on the hardware.
Safety - each virtual machine, and the virtual machine monitor should be safe from actions in
another virtual machine.
Simplicity - the implementation of the virtual machine monitor must be clear and simple.
Q9: Which of the following best describes what
application virtualization is?
• An API library layer is provided which allows an
application designed to run on one operating
system to run on another operating system.
• Multiple virtual machines with the same kernel
are implemented as applications on a host
machine also running the same kernel.
• Modifications are made to the source code of an
application so that it can run efficiently on
another operating system.
• A guest operating system runs as an application
on a host operating system.
Q10: Why are spin locks particularly bad when run on a single
core processor?
•
•
•
•
Running in the spin lock is pointless as the thread holding the lock cannot run and therefore
release the lock at the same time.
Single core processors get overheated more easily if a thread is running in a spin lock.
As only one thread can run on a single core processor there is no need for a lock of any kind,
including spin locks.
Because time-slice preemption is the only way another thread can run on a single core, it is possible
for the spin lock to fail.
Q11: Which of the following is the best
definition of an atomic instruction?
• The instruction stops all other processes or
threads from working until it has completed.
• As an atomic instruction executes intermediate
states of the operand values are only accessible
from within the same process.
• Atomic instructions can only be broken down into
smaller sub-atomic instructions.
• The instruction executes without any of its
operands being visible or modifiable by outside
changes until the instruction has completed.
Q12: Which of the following statements about
the x86-64 xchg instruction is FALSE?
• It atomically swaps the values in its two
operands.
• It can be used to implement correctly working
locks.
• It can be used to atomically swap the values
of two memory locations.
• It can be used to atomically swap the values of
two registers.
Q13: How does the Bakery algorithm guarantee a unique
ordering of process requests to use a shared resource?
•
•
•
•
The ticket number distributed by the algorithm is kept unique by the use of a spin lock.
A hash value is generated from the process id of the process and the ticket number distributed by
the algorithm.
The process id of the process is appended to the ticket number distributed by the algorithm.
The algorithm uses the scheduling priority of each process as its unique ordering identifier.
Q14: Which of the following problems does not occur
as a possible consequence of locking resources?
•
•
•
•
Deadlock.
Inconsistent data.
Priority inversion.
Indefinite postponement.
Q15: What is priority inheritance?
• The solution to priority inversion, where a process using a
resource has its priority temporarily increased to that of
the highest priority process waiting for the resource.
• The solution to priority inversion, where all processes
waiting on a resource temporarily get the same priority as
the process currently using the resource.
• The solution to indefinite postponement, where a process
waiting for a resource gets the same priority as the process
currently using the resource.
• The solution to indefinite postponement, where all
processes using or waiting for a resource get the maximum
priority of all processes waiting for the resource.
Q16: Which of the following statements about
semaphores is correct?
• A semaphore is an integer count with some
indivisible operations and an initialization.
• Returning a resource when no process is
waiting causes the semaphore value to
increase.
• A binary semaphore can be used in the same
way as a simple lock.
• All of the above.
Q17: The definition “an instance of a program in
execution” best applies to which of the
following?
• a thread.
• a process.
• a user-level resource.
• a system-level resource.
Q18: Which of the following is NOT an advantage of
system-level threads over user-level threads?
• Each thread can be scheduled separately.
• Blocking threads don’t stop the entire process.
• Threads from the same process can run
simultaneously on different cores/processors.
• Switching between threads is faster.
Q19: Which of the following statements is FALSE concerning
Solaris threads before version 9?
•
•
•
•
There could be several kernel threads associated with one user-level thread at the same time.
Extra lightweight processes were added if necessary when a thread blocked in the kernel.
Several user threads could be associated with one lightweight process.
Each lightweight process was associated with one kernel thread.
Q20: With original Linux threads the clone
system call created a new process which shared
all of its memory with the original process. The
new process was then used as a thread of the
original process. Which of the following
statements was TRUE about original Linux
threads.
• If one thread called exec to run another program, all
threads in the same process would be killed.
• If one thread in the process finished, all threads
finished.
• If a thread made a blocking system call, the other
threads in the same process could still continue.
• All of the above.
Q21: Which of the following statements about the
producer/consumer problem is FALSE?
•
•
•
•
The order of data being consumed must match the order it was produced.
Each item of data produced must be consumed.
Each item of data produced must be consumed only once.
None of the above.
Q22: Which of the following statements about
multitasking is FALSE?
• Preemptive multitasking provides greater predictability
of when processes will be scheduled compared to
cooperative multitasking.
• The use of cooperative multitasking over preemptive
multitasking can make the design of the kernel simpler.
• Multitasking means that multiple processes can take
turns to execute on the same CPU in such a way that it
appears that they are all running simultaneously.
• Cooperative multitasking means that all processes
run to completion before allowing other processes to
run.
Q23: What is normally meant by a “context
switch”?
• Any change in state of a process as it executes.
• Saving the state of one process and restoring the
state of another process so that the CPU moves
from running one process to running the other.
• The switch between a process running in user
mode to running in kernel mode. This can happen
as the result of a system call or an exception.
• The change which occurs on the stack of a
running process as it makes a function call,
including the allocation of memory for any
parameters and the local variables.
Q24: Given three processes A, B, and C with
corresponding burst times 20, 5, and 2, what is
the average waiting time with a first come first
served (FCFS) scheduler? All processes are ready
to run at the same time but they arrived in the
order A, B, then C.
• 15
• 9
• 25
• 3
Here is a very simple attempt at implementing a lock:
lock:
while locked
end
locked = true
unlock:
locked = false
Q25: Which of the following statements about the above lock code is
FALSE?
• It doesn't work, multiple threads could gain the lock
simultaneously.
• It is unfair, there is no guarantee a thread will progress through the
lock.
• It doesn't work, if a thread holds the lock and goes to sleep no
other threads can gain access.
• It wastes CPU cycles checking the value of the locked variable.
Here is the lecture version of Peterson’s software solution to the two thread
lock problem:
lock:
flag[i] = true
turn = j
while (flag[j] && turn == j)
end
unlock:
flag[i] = false
Q26: Which of the following statements about this lock is FALSE?
• It can be generalized to more than two threads by simply extending the
size of the flag array.
• The lock relies on the fact that the line “turn = j” is executed atomically by
each thread.
• The lock guarantees that each thread will eventually progress past the lock
and enter the critical section of code.
• The lock will not allow one thread to enter the critical section twice if the
other thread is waiting to enter the critical section.
#include <stdio.h>
int answer = 6;
void main() {
int x = 3;
int y = 5;
printf("answer1: %d\n", answer);
__asm__("addl %1, %2\n\t"
"movl %2, %0"
: "=m" (answer)
: "r" (x),
"r" (y)
);
printf("answer2: %d\n", answer);
}
Q27: What output is produced by the second printf function in the program above?
• answer2: 6
• answer2: 2
• answer2: 8
• answer2: 5