NOTICE
请描述ucore OS配置和驱动外设时钟的准备工作包括哪些步骤? (w2l2)
+ 采分点:说明了ucore OS在让外设时钟正常工作的主要准备工作
- 答案没有涉及如下3点;(0分)
- 描述了对IDT的初始化,包了针时钟中断的中断描述符的设置(1分)
- 除第二点外,进一步描述了对8259中断控制器的初始过程(2分)
- 除上述两点外,进一步描述了对8253时钟外设的初始化,或描述了对EFLAG操作使能中断(3分)
lab1中完成了对哪些外设的访问? (w2l2)
+ 采分点:说明了ucore OS访问的外设
- 答案没有涉及如下3点;(0分)
- 说明了时钟(1分)
- 除第二点外,进一步说明了串口(2分)
- 除上述两点外,进一步说明了并口,或说明了CGA,或说明了键盘(3分)
lab1中的cprintf函数最终通过哪些外设完成了对字符串的输出? (w2l2)
+ 采分点:说明了cprintf函数用到的3个外设
- 答案没有涉及如下3点;(0分)
- 说明了串口(1分)
- 除第二点外,进一步说明了并口(2分)
- 除上述两点外,进一步说明了CGA(3分)
lab1中printfmt函数用到了可变参,请参考写一个小的linux应用程序,完成实现定义和调用一个可变参数的函数。(spoc)
如果让你来一个阶段一个阶段地从零开始完整实现lab1(不是现在的填空考方式),你的实现步骤是什么?(比如先实现一个可显示字符串的bootloader(描述一下要实现的关键步骤和需要注意的事项),再实现一个可加载ELF格式文件的bootloader(再描述一下进一步要实现的关键步骤和需要注意的事项)...) (spoc)
如何能获取一个系统调用的调用次数信息?如何可以获取所有系统调用的调用次数信息?请简要说明可能的思路。(spoc)
如何修改lab1, 实现一个可显示字符串"THU LAB1"且依然能够正确加载ucore OS的bootloader?如果不能完成实现,请说明理由。
对于ucore_lab中的labcodes/lab1,我们知道如果在qemu中执行,可能会出现各种稀奇古怪的问题,比如reboot,死机,黑屏等等。请通过qemu的分析功能来动态分析并回答lab1是如何执行并最终为什么会出现这种情况?
对于ucore_lab中的labcodes/lab1,如果出现了reboot,死机,黑屏等现象,请思考设计有效的调试方法来分析常在现背后的原因。
如何修改lab1, 实现在出现除零错误异常时显示一个字符串的异常服务例程的lab1?
在lab1/bin目录下,通过objcopy -O binary kernel kernel.bin
可以把elf格式的ucore kernel转变成体积更小巧的binary格式的ucore kernel。为此,需要如何修改lab1的bootloader, 能够实现正确加载binary格式的ucore OS? (hard)
>
GRUB是一个通用的bootloader,被用于加载多种操作系统。如果放弃lab1的bootloader,采用GRUB来加载ucore OS,请问需要如何修改lab1, 能够实现此需求? (hard)
>
如果没有中断,操作系统设计会有哪些问题或困难?在这种情况下,能否完成对外设驱动和对进程的切换等操作系统核心功能?
读入ucore内核的代码?
跳转到ucore内核的代码?
全局描述符表的初始化代码?
GDT内容的设置格式?初始映射的基址和长度?特权级的设置位置?
可执行文件格式elf的各个段的数据结构?
如果ucore内核的elf是否要求连续存放?为什么?
函数调用的stackframe结构?函数调用的参数传递方法有哪几种?
系统调用的stackframe结构?系统调用的参数传递方法有哪几种?
使用内联汇编的原因?
特权指令、性能优化
对ucore中的一段内联汇编进行完整的解释?
4.4 x86中断处理过程
中断描述符表IDT的结构?
中断描述表到中断服务例程的地址计算过程?
中断处理中硬件压栈内容?用户态中断和内核态中断的硬件压栈有什么不同?
中断处理中硬件保存了哪些寄存器?
>
trap类型的中断门与interrupt类型的中断门有啥设置上的差别?如果在设置中断门上不做区分,会有什么可能的后果?
>
gcc编译、ld链接和dd生成两个映像对应的makefile脚本行?
在函数print_stackframe中要调用函数print_debuginfo(uintptr_t eip)来打印函数源码位置信息,
print_stackframe(void)
eip = read_eip();
#option 1
print_debuginfo(eip - 1);
#option 2
print_debuginfo(eip );
请问option1和 option2 的结有何区别?请说明。
对于如下5条语句执行后得到的5个eip(类型为uint32_t)的结果的数值关系是什么?
eip = ((uint32_t *)ebp)[2];
eip = ((uint32_t *)ebp)[1];
eip = ((uint32_t *)(ebp+4);
eip = ((uint32_t *)(ebp+2);
eip = ((uint32_t *)(ebp+1);
qemu的命令行参数含义解释?
gdb命令格式?反汇编、运行、断点设置
A20的使能代码分析?
生成主引导扇区的过程分析?
保护模式的切换代码?
如何识别elf格式?对应代码分析?
跳转到elf的代码?
函数调用栈获取?
如何识别elf格式?对应代码分析?
跳转到elf的代码?
函数调用栈获取?
函数read_ebp是inline的,而函数read_eip是__noinline的,能否正好相反设置,即设置函数read_ebp是_noinline的,而函数read_eip是inline的?为什么?
各种设备的中断初始化?
中断描述符表IDT的排列顺序?
- [x]
中断号 CPU加电初始化后中断是使能的吗?为什么?
中断服务例程的入口地址在什么地方设置的?
alltrap的中断号是在哪写入到trapframe结构中的?
trapframe结构?
- [x]