我正在尝试测试我编写的调度程序。我安排了两个进程 - 都是无限的 while 循环(只是 while(1) 语句)。当我运行程序时,有时它会在十秒后出现段错误(有时是 5 秒,有时是 15 秒或更长时间)。有时它根本没有段错误并按预期运行。我有一个日志文件,显示两个进程在段错误发生之前按预期安排。我正在尝试使用 gdb 调试错误,但这并不是很有帮助。这是我通过回溯得到的:
#0 0x00007ffff7ff1000 in ?? ()
#1 0x000000000000002b in ?? ()
#2 0x00007ffff78b984a in new_do_write () from /lib64/libc.so.6
#3 0x000000000061e3d0 in ?? ()
#4 0x0000000000000000 in ?? ()
我真的不明白#2。
我认为这可能是与堆栈溢出相关的错误。但是,我在整个过程中只 malloc 两次 - 两次设置两个进程时,我都在我写的 pcb 表中 malloc 一个 pcb 块。有没有人遇到过类似的问题?这可能与我在调度程序中设置/交换上下文的方式有关吗?为什么有时会出现段错误,有时不会?