DragonOS icon indicating copy to clipboard operation
DragonOS copied to clipboard

[BUG] 启动阶段Current PCB 空指针异常

Open chiichen opened this issue 2 years ago • 4 comments

描述错误 启动阶段 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)暂时没遇到这个问题

屏幕截图 image

系统日志 serial_opt.txt

chiichen avatar Nov 21 '23 09:11 chiichen

这个问题可能是因为内核栈爆栈导致的,参考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 解决了这个问题

fslongjin avatar Nov 27 '23 08:11 fslongjin

这个问题可能是因为内核栈爆栈导致的,参考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行处)

chiichen avatar Nov 29 '23 09:11 chiichen

这个问题可能是因为内核栈爆栈导致的,参考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

chiichen avatar Nov 29 '23 10:11 chiichen

我今天又定位到这个问题,是在创建PCB的do_create_pcb()这个函数内, 在这个版本内: 91e9d4ab55ef960f57a1b6287bc523ca4341f67a 该函数会产生10kb+的内存占用。

主要原因是函数的内联以及sigstruct在栈上初始化导致的。因此我把sigstruct改为堆上的了,并且禁止了几个函数的内联,使得do_create_pcb这个函数的内存占用量减少到小于3kb pr: https://github.com/DragonOS-Community/DragonOS/pull/479

fslongjin avatar Dec 26 '23 16:12 fslongjin