[BUG] 启动阶段Current PCB 空指针异常
描述错误 启动阶段 Current PCB 空指针异常
请填写您的电脑的信息:
- 操作系统及版本:WSL2 Ubuntu 22.04.3 LTS
- DragonOS版本:46e234a
- DADK版本:dadk 0.1.5
- Rust版本:rustc 1.73.0-nightly (32303b219 2023-07-29)
重现步骤
重现行为的步骤:
正常使用 make qemu 启动系统,即有概率出现这个错误,大约是1/5到1/10的概率,但是用UEFI启动(make qemu-uefi)暂时没遇到这个问题
屏幕截图
系统日志 serial_opt.txt
这个问题可能是因为内核栈爆栈导致的,参考zulip: https://dragonos.zulipchat.com/#narrow/stream/395467-.E5.86.85.E6.A0.B8.E5.BC.80.E5.8F.91/topic/.E8.AE.A8.E8.AE.BA.EF.BC.9A.E9.9D.99.E6.80.81.E7.88.86.E6.A0.88.E6.A3.80.E6.B5.8B/near/403550632
目前 https://github.com/DragonOS-Community/DragonOS/pull/457 解决了这个问题
这个问题可能是因为内核栈爆栈导致的,参考zulip: https://dragonos.zulipchat.com/#narrow/stream/395467-.E5.86.85.E6.A0.B8.E5.BC.80.E5.8F.91/ topic/.E8.AE.A8.E8.AE.BA.EF.BC.9A.E9.9D.99.E6.80.81.E7.88.86.E6.A0.88.E6.A3.80.E6.B5.8B/near/403550632
目前 #457 解决了这个问题
在最新主线版本4fda81c中仍能复现,串口输出如下serial_opt.txt,还出现了其它的报错Invalid enum discriminant(见文件404行处)
这个问题可能是因为内核栈爆栈导致的,参考zulip: https://dragonos.zulipchat.com/#narrow/stream/395467-.E5.86.85.E6.A0.B8.E5.BC.80.E5.8F.91/ topic/.E8.AE.A8.E8.AE.BA.EF.BC.9A.E9.9D.99.E6.80.81.E7.88.86.E6.A0.88.E6.A3.80.E6.B5.8B/near/403550632 目前 #457 解决了这个问题
在最新主线版本4fda81c中仍能复现,串口输出如下serial_opt.txt,还出现了其它的报错
Invalid enum discriminant(见文件404行处)
补充一下,这个错误和TSC测量失败无关,在下面的文件中,TSC成功测量依然报错 serial_opt.txt
我今天又定位到这个问题,是在创建PCB的do_create_pcb()这个函数内, 在这个版本内: 91e9d4ab55ef960f57a1b6287bc523ca4341f67a 该函数会产生10kb+的内存占用。
主要原因是函数的内联以及sigstruct在栈上初始化导致的。因此我把sigstruct改为堆上的了,并且禁止了几个函数的内联,使得do_create_pcb这个函数的内存占用量减少到小于3kb pr: https://github.com/DragonOS-Community/DragonOS/pull/479