头文件head.s:32位保护模式下的初始化与中断处理

需积分: 0 0 下载量 118 浏览量 更新于2024-08-04 收藏 90KB DOCX 举报
《霍峻杰1》实验报告主要探讨的是头文件head.s的工作原理及其在32位保护模式下的功能实现。head.s代码在操作系统中的作用是初始化设置、处理中断和管理两个任务。以下是对关键部分的详细解读: 1. **工作原理**: head.s首先在保护模式下执行,包括初始化设置,如加载数据段(ds)、附加段(ss)和堆栈指针(esp)。它重新配置全局描述符表(GDT)和中断描述符表(IDT),将默认的中断处理程序映射到特定的中断入口,以便正确响应不同类型的中断,如时钟中断和系统调用。 2. **内存分布**: - 数据段:包含内核数据,起始地址未指定,终止地址根据实际分配。 - 代码段:内核代码位于GDT的第二个描述符,起始地址为0x00。 - 栈段:可能有两个,TSS0和TSS1,用于任务切换,但具体地址未给出。 3. **57~62行**: 这些行可能是设置中断返回(iret)后,程序计数器(pc)如何寻找下一条指令的代码。iret指令会从栈中恢复断点地址并返回,确保程序的正常流程。 4. **系统调用和中断处理**: - 系统调用(int 0x80)时,栈顶信息会被保存,包括中断上下文,以便中断处理后正确恢复。在system_interrupt函数结束后,执行iret,此时栈顶的系统调用参数可能已被处理,栈顶元素会发生变化。 - 模式切换:系统调用和中断处理涉及从用户模式切换到内核模式,特权级提升。栈会切换,以保存当前任务状态,并准备执行内核代码。切换过程中,旧任务的TSS会被保存,新任务的TSS则被加载。 5. **时钟中断处理**: 当时钟中断发生,任务0和任务1之间通过TSS进行切换。首先,任务0的控制权交给任务1,TSS内容更新,包括保存任务1的上下文(如ESP、EFLAGS等)。10ms后,计数器重置,中断返回时任务0重新获取控制,TSS内容回滚到任务0状态。整个过程涉及寄存器值的保存和恢复。 6. ** jmp 0,8和保护模式**: 指令使得程序转到GDT表的描述符1,这里设置为内核代码段,执行后续的初始化代码,包括设置定时器中断和系统调用门。 总结而言,head.s负责32位保护模式下系统的初始化,中断管理和任务调度。它通过GDT和IDT管理内存访问权限,处理各种中断事件,并确保任务在中断或系统调用时的正确上下文切换。同时,对时钟中断的精确控制和TSS的使用,保证了系统的稳定性和性能。