我正在侧面进行Pintos项目,以了解有关操作系统的更多信息。一开始我遇到了很多麻烦,因为它无法在18.04 Ubuntu发行版上很好地运行。我现在在UCCS告诉学生下载的Pinto的VirtualBox映像上运行它。
我完成了项目1,并开始将我的解决方案映射到项目2。按照创建文件的说明运行
parseInt
但出现错误
pintos-mkdisk filesys.dsk --filesys-size=2
pintos -- -f -q
然后我尝试运行make check(所有测试)。它们都因相同的原因而失败。
我想念什么吗?我需要实施一些解决此问题的方法吗?我重新阅读了说明,什么都没看到?
将感谢您的帮助! 谢谢
答案 0 :(得分:0)
我有类似的问题。我对Project 1的代码运行正常,但是我无法格式化Project 2的文件系统。
对我而言,失败来自以下呼叫链:
thread_init()
-> ...-> thread_schedule_tail()
-> process_activate()
-> pagedir_activate()
-> vtop()
问题在于,调用init_page_dir
时pagedir_activate()
仍然为NULL。 init_page_dir
应该已经在paging_init()
中初始化,但这在thread_init()
之后被调用。
根本原因是我的调度程序被调用为时过早,即在调用thread_start()
之前。我遇到问题的原因是,在完成对thread_yield()
的每次调用后,我都建立了对lock_release()
的调用,这从优先级捐赠的角度来看是有意义的。不幸的是,在调度程序准备就绪之前就使用了锁!为了解决这个问题,我安装了一个名为threading_started
的标志,如果尚未调用thread_block()
,则在我的thread_yield()
和thread_start()
函数的第一行中进行标记。
祝你好运!