0

我正在做 Pintos 项目,以了解有关操作系统的更多信息。起初我遇到了大量的开发问题,因为它在 18.04 的 Ubuntu droplet 上运行不佳。我现在在 UCCS 告诉学生下载 pintos 的 VirtualBox 图像上运行它。

我完成了项目 1 并开始为项目 2 制定解决方案。按照说明创建我运行的文件

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

但我收到错误

Kernel PANIC at ../../threads/vaddr.h:87 in vtop(): assertion 
`is_kernel_vaddr (vaddr)' failed.

然后我尝试运行 make check (所有测试)。由于同样的原因,他们都失败了。

我错过了什么吗?我需要实施什么来解决这个问题吗?我重新阅读说明并没有看到任何内容?

非常感谢帮助!谢谢

4

1 回答 1

1

我有一个类似的问题。我的项目 1 的代码运行良好,但我无法格式化项目 2 的文件系统。

我的失败来自以下调用链:

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

问题是调用init_page_dir时仍然为NULL pagedir_activate()init_page_dir应该在 中初始化,paging_init()但这在 之后调用thread_init()

根本原因是我的调度程序被调用得太早,即在调用thread_start(). 我的问题的原因是,我thread_yield()在完成每个电话后都建立了一个电话,lock_release()从优先捐赠的角度来看这是有意义的。不幸的是,在调度程序准备好之前就使用了锁!为了解决这个问题,我在我的and函数threading_started的第一行安装了一个名为 bails的标志,如果还没有被调用。thread_block()thread_yield()thread_start()

祝你好运!

于 2018-09-26T02:14:16.960 回答