瓦尼什如何遇到切里3/N
在仍然失败的四项测试中,有三项使用了“文件装卸工”。
在Cheri下不能做的事情:共享文件中的指针
在Varnish中,“装卸工”负责编排缓存对象的存储,它是一个API扩展点。
“Malloc装卸工”是默认的,它做的完全是你认为它做的事情。
文件装卸工, mmap(2)
是文件系统中的一个文件,并根据需要进行分区,非常类似于 malloc(3)
就行了。
“文件”装卸工之所以存在,主要是因为早在2006年,就用 MAP_NOCORE
是避免将整个对象缓存包括在核心转储中的唯一方法。
但Cheri不会允许您将指针放入常规文件 mmmap(2)
‘编辑 MAP_SHARED
,因为这将允许另一个进程,甚至可能在不同的计算机上, mmap(2)
该文件 MAP_SHARED
稍后,言下之意是让这些指针复活。
第1部分中提到的“坚持不懈的”装卸工做了同样的事情,并且由于同样的原因在Cheri的领导下不工作。
如果我们改为映射该文件 MAP_PRIVATE
,其他人将永远不能看到指针,并且这三个测试用例通过:
MAP_SHARED pointers
=====================
TEST tests/b00005.vtc
TEST tests/r02429.vtc
TEST tests/s00003.vtc
(我们不能对“持久的”装卸工做同样的事情,因为它存在的唯一原因正是为了在以后复活那些指针。)
最后,也是非常糟糕的测试用例
如前所述,当您有100K线程时,您必须节省内存,尤其是线程堆栈。
但是,如果你调得太紧,线程就会跳出堆栈,导致核心转储。我们试图在这种情况下对诊断有所帮助,我们有一个测试用例试图实现这一点。
这个测试用例是一个相当令人讨厌的工作,而且出于所有的意图和目的,它只是Cheri应该为我们做的事情的一个廉价的erzats,所以我将在它上面下注,并进入这个项目更有趣的部分:
SigSegv handler test
=====================
TEST tests/c00057.vtc
/phk