操作系统实验一记录
问题1:完成lab1的过程中用过哪些调试的方法(打印日志、gdb)?简单描述一下并提供截图。
实验时出现的问题:使用make run打开程序窗口后内部文字一直闪烁,无法辨识,并且停留在加载阶段,没有进入时钟显示阶段。

通过gdb调试后发现是读取扇区内存时从第0扇区开始读取,修改后即可。
问题2:bootloader和app代码的栈初始位置是否一致,是否可以不一致?设置的原则是什么?
可以不一致
原则:
(1)栈区不能与代码加载区、静态数据区重叠。
(2)栈向低地址增长,要预留足够深度,避免递归或中断时溢出。
(3)bootloader 与 app 交接时,若调用约定依赖栈状态,要保证切换前后可预测。
(4)在保护模式下通常要保持 4 字节或更高对齐,减少潜在兼容问题。
问题3:app的链接时设置的逻辑地址起始位置是否可以与实际加载位置不一致?
不可以
app被链接到固定地址0x10000,bootloader也应按照该地址跳转执行,若实际加载地址与链接地址不同,代码中的绝对地址引用会失效,将导致异常。
查阅资料得知,在具有重定位机制时可以不一致,但是当前的lab框架没有实现这一机制。