2. 调试分析 Linux 0.00 多任务切换

2.1. 实验目的

  • 通过调试一个简单的多任务内核实例,使大家可以熟练的掌握调试系统内核的方法;

  • 掌握Bochs虚拟机的调试技巧;

  • 通过调试和记录,理解操作系统及应用程序在内存中是如何进行分配与管理的;

2.2. 实验内容

通过调试一个简单的多任务内核实例,使大家可以熟练的掌握调试系统内核的方法。 这个内核示例中包含两个特权级 3 的用户任务和一个系统调用中断过程。我们首先说明这个简单内核的基本结构和加载运行的基本原理,然后描述它是如何被加载进机器 RAM 内存中以及两个任务是如何进行切换运行的。

2.2.1. 掌握Bochs虚拟机的调试技巧

  • 如何单步跟踪?

  • 如何设置断点进行调试?

  • 如何查看通用寄存器的值?

  • 如何查看系统寄存器的值?

  • 如何查看内存指定位置的值?

  • 如何查看各种表,如 gdtidtldt 等?

  • 如何查看 TSS

  • 如何查看栈中的内容?

  • 如何在内存指定地方进行反汇编?

2.3. 实验报告

通过仔细的调试与跟踪程序,完成以下任务:

  1. 当执行完 system_interrupt 函数,执行 153iret 时,记录栈的变化情况。

  2. 当进入和退出 system_interrupt 时,都发生了模式切换,请总结模式切换时,特权级是如何改变的?栈切换吗?如何进行切换的?

  3. 当时钟中断发生,进入到 timer_interrupt 程序,请详细记录从任务 0 切换到任务 1 的过程。

  4. 又过了 10ms ,从任务1切换回到任务 0 ,整个流程是怎样的? TSS 是如何变化的?各个寄存器的值是如何变化的?

  5. 请详细总结任务切换的过程。

2.3.1. 评分标准

  1. 记录描述要详细完整,前4项每题 20%,总共 80%

  2. 总结任务切换过程,10%

  3. 格式规范美观,10%