Title: Timing Information Description: Timing measurements for the following features of the OS. 1. Context switch Time taken to compete the context switch, i.e time spent in _Swap function. 2. Interrupt latency Time taken from the start of the common interrupt handler till the actual ISR handler being called. 3. Tick overhead Time spent by the cpu in the tick handler. 4. Thread Creation Time spent in creating a thread. 5. Thread cancel Time taken to cancel the thread which is not yet started execution. So the time taken to complete the function call is measured. 6. Thread abort Time taken to abort the thread which has already started execution. So the time measured is from the start of the function call until the another thread is swapped in. 7. Thread Suspend The time measured is from the start of the function call until the current thread is suspended and another thread is swapped in. 8. Thread Resume The time measured is from the start of the function call until the required thread is resumed by swap operation. 9. Thread Yield The time measured is from the start of the function call until the higher priority thread is swapped in. 10. Thread Sleep The time measured is from the start of the function call until the current thread is put on the timeout queue and another thread is swapped in. 11. Heap Malloc The time to allocate heap memory in fixed size chunks. Continuously allocate the memory from the pool. Average time taken to complete the function call is measured. 12. Heap Free Time to free heap memory in fixed size chunks. Continuously free the memory that was allocated. Average time taken to complete the function call is measured. 13. Semaphore Take with context switch Taking a semaphore causes a thread waiting on the semaphore to be swapped in. Thus Time measured is the time taken from the function call till the waiting thread is swapped in. 14. Semaphore Give with context switch Giving a semaphore causes a thread waiting on the semaphore to be swapped in (higher priority). Thus Time measured is the time taken from the function call till the waiting thread is swapped in. 15. Semaphore Take without context switch Time taken to take the semaphore. Thus time to complete the function call is measured. 16. Semaphore Give without context switch Time taken to give the semaphore. Thus time to complete the function call is measured. 17. Mutex lock Time taken to lock the mutex. Thus time to complete the function call is measured. 18. Mutex unlock Time taken to unlock the mutex. Thus time to complete the function call is measured. 19. Message Queue Put with context switch A thread is waiting for a message to arrive. The time taken from the start of the function call till the waiting thread is swapped in is measured. 20. Message Queue Put without context switch The time taken to complete the function call is measured. 21. Message Queue get with context switch A thread has gone into waiting because the message queue is full. When a get occurs this thread gets free to execute. The time taken from the start of the function call till the waiting thread is swapped in is measured. 22. Message Queue get without context switch The time taken to complete the function call is measured. 23. MailBox synchronous put The time taken from the start of the function call till the waiting thread is swapped in is measured. 24. MailBox synchronous get The time taken from the start of the function call till the waiting thread is swapped in is measured. 25. MailBox asynchronous put The time taken to complete the function call is measured. 26. MailBox get without context switch The time taken to complete the function call is measured. -------------------------------------------------------------------------------- Building and Running Project: This benchmark outputs to the console. It can be built and executed on QEMU as follows: make run -------------------------------------------------------------------------------- Troubleshooting: Problems caused by out-dated project information can be addressed by issuing one of the following commands then rebuilding the project: make clean # discard results of previous builds # but keep existing configuration info or make pristine # discard results of previous builds # and restore pre-defined configuration info -------------------------------------------------------------------------------- Sample Output: