Homework: xv6 and Interrupts and Exceptions

Read: xv6 trapasm.S, trap.c, syscall.c, initcode.S, usys.S. Skim vectors.S, lapic.c, ioapic.c, picirq.c.

Hand-In Procedure

You are to turn in this homework during lecture. Please write up your answers to the exercises below and hand them in to a 6.828 staff member at the beginning of the lecture.

Introduction

Try to understand xv6's trapasm.S, trap.c, syscall.c, initcode.S, usys.S. Skim vectors.S, lapic.c, ioapic.c, picirq.c.

You will need to consult:

Chapter 5 of IA-32 Intel Architecture Software Developer's Manual, Volume 3: System programming guide; you can skip sections 5.7.1, 5.8.2, and 5.12.2. Be aware that terms such as exceptions, traps, interrupts, faults and aborts have no standard meaning.

Chapter 9 of the 1987 i386 Programmer's Reference Manual also covers exception and interrupt handling in IA32 processors.

Assignment: In xv6, set a breakpoint at the beginning of syscall() to catch the very first system call. What values are on the stack at this point? Turn in the output of print-stack 35 at that breakpoint with each value labeled as to what it is (e.g., saved %ebp for trap, trapframe.eip, etc.).

As in Homework 3, you may find it easier to examine the appropriate stack when Bochs is simulating only one CPU instead of two. To do this, make a copy of .bochsrc called uni, find the line that starts with cpu: count=2, and change the 2 to 1. Then run bochs using this configuration, by running bochs -q -f uni.

This completes the homework.