The purpose of this assignment is for you to consider how virtualization is achieved using the mechanisms available to a modern OS. You are to design data structures and algorithms to implement virtual timers based on a single underlying hardware timer. Your design could become the component of a real operating system.
The operation of the timer is controlled by two privileged instructions. READTMR reads the current value of the timer; SETTMR loads the timer with a given value. Whenever the timer contains a non-zero value, it is automatically (by the hardware) decremented at each tick. If the timer is decremented to zero an interrupt is generated, and the timer stops. The timer generates no other signals of any kind. The value of the timer can be reset while the timer is running (with SETTMR). It can even be set to zero, which stops the timer but does not generate an interrupt.
You do not need to explain how interrupts work or what processes will do with their virtual timers. Your solution should have enough detail to convince me that you could do a complete implementation, or better yet, that someone else could implement your design while you are away on vacation. You can assume that the person doing the implementing understands various common data structures and their implementation. You can also ignore any other operating system tasks that might actually have to use the hardware timer (such as process scheduling). This assingment is just about virtualizing one simple resource to make it available to many processes.
If you think you have found an efficient solution to the basic assingment, consider the slightly more advanced problem of allowing a process to change its timer midstream. That is, it can turn it off by calling set_timer(0), or simply change the amount of time by supplying a new positive value.