Pintos-UserProg所有测试均失败is_kernel_vaddr()

时间:2018-09-24 02:45:17

标签: pintos

我正在侧面进行Pintos项目,以了解有关操作系统的更多信息。一开始我遇到了很多麻烦,因为它无法在18.04 Ubuntu发行版上很好地运行。我现在在UCCS告诉学生下载的Pinto的VirtualBox映像上运行它。

我完成了项目1,并开始将我的解决方案映射到项目2。按照创建文件的说明运行

parseInt

但出现错误

pintos-mkdisk filesys.dsk --filesys-size=2
pintos -- -f -q

然后我尝试运行make check(所有测试)。它们都因相同的原因而失败。

我想念什么吗?我需要实施一些解决此问题的方法吗?我重新阅读了说明,什么都没看到?

将感谢您的帮助! 谢谢

1 个答案:

答案 0 :(得分:0)

我有类似的问题。我对Project 1的代码运行正常,但是我无法格式化Project 2的文件系统。

对我而言,失败来自以下呼叫链:

thread_init()-> ...-> thread_schedule_tail()-> process_activate()-> pagedir_activate()-> vtop()

问题在于,调用init_page_dirpagedir_activate()仍然为NULL。 init_page_dir应该已经在paging_init()中初始化,但这在thread_init()之后被调用。

根本原因是我的调度程序被调用为时过早,即在调用thread_start()之前。我遇到问题的原因是,在完成对thread_yield()的每次调用后,我都建立了对lock_release()的调用,这从优先级捐赠的角度来看是有意义的。不幸的是,在调度程序准备就绪之前就使用了锁!为了解决这个问题,我安装了一个名为threading_started的标志,如果尚未调用thread_block(),则在我的thread_yield()thread_start()函数的第一行中进行标记。

祝你好运!