|
|
Community > ReactOS Newsletter Archive > ReactOS Newsletter: 时事通讯 58 期时事通讯 58 期by Z98 on 2009-05-16 UniATAUniversal ATA(通用 ATA)驱动程序时常被指出能够作为一个方法来解决一些在 ReactOS 里比较令人反感的问题,比如缺乏 SATA 的支持以及限制 ROS 所见到的空间为 8GB。既然这两个问题处在今时今日里是完全的荒谬又无法接受的,对我们而言修正它们一直都是处在非常高的优先权。可是我们却遇到数个搅局者而无法永久的切换到它。还好 Aleksey Bragin 能够解决当中的一些。当中牵涉到 UniATA 最大的问题是无法在真实硬件里检测光盘驱动,而Aleksey 能够追查出是因为时机问题。UniATA 的开发者为此决定为某些操作降低等候时间,从而导致控制器没有给予足够的时间去切换它们的状态。Aleksey 就切换等候时间以匹配旧有的 atapi 驱动程序,随后现在就能够在真实硬件里可靠的检测出驱动器。 另一个现在还未修正的问题是 UniATA 在 VirtualBox 里失败。真正的原因仍然不明,但是却是Aleksey 的列表中下一个要纠正的对象。 top池作为努力检查损坏在何处发生的一部分,Aleksey 也再次检查使用内存池。池基本上是给内核和驱动程序分派内存的地方,并且它也可以被分页(写出到磁盘)以及非分页(每次都在内存里)。Aleksey 正在付出以便以新的方式实现它而且所写的部分基本上是一个池调式器,能够检查在读取或分派到池的溢出。运行它后,他只发现一个在 PnP(即插即用)管理器里出现过读的问题。该工具并不会检查少读或写,从而它们还可能还在浮现中。至少在未来里,本团队会有个工具以确保我们不会再犯下这样的错误。这些都是在准备实现 Aleksey所制作新的池,但却无法提交它们是因为某个东西使用新代码后在 ReactOS 里做同样的东西就会导致崩溃。希望有了调试器后 Aleksey 能够追查这个原因是什么。 Aleksey 还认为要一个堆调试器,可是那个产物却证明是非常棘手。这是因为我们要考虑堆分派的发生次数更加时常出现。 作为预留,Aleksey 也修正一个导致在真实硬件里崩溃的 USB问题。原来是因为该 USB 代码 尝试移除一个不存在已链接列表中的指针,最终导致损坏池。这就是一个少写的错误而池调试器却还未检测的例子。 top更多内存目前正在进行修正一个由 OllyDbg(另一个调试器)所揭发的错误,Michael Martin 也意外地修正 Mono 的安装问题。确切的原因为何 OllyDbg 和 Mono 都会在这个错误中窒息仍然未明,但是 Michael 本人非常肯定问题已经修正。有效的发生是 OllyDbg 调用一系列的函数,由 CreateFileMappingA 开始。比较重要的一点是这个创建必须决定所需分派的内存大小。OllyDbg 然后调用 MapViewOfFile,而这里就是东西可以出错的地方。MapViewOfFile 函数以及那些调用都在寻找 SEC_IMAGE 数据结构而却有可能或未被 CreateFileMapping 和其调用的函数所定义。如果它找到该数据结构,它就会获取其指定的大小并基于舍入从而对齐其分页大小。如果它找不到 SEC_IMAGE,函数就会从一个由 CreateFileMapping 调用链里所创建的 FileObject 数据结构中提取。可是这个数值却未向上舍入。这就导致在 OllyDbg 在这个顺序中调用第三个函数时遇到问题,它是 VirtualQuery。这个函数根本是内存范围的信息,包括其大小。OllyDbg 似乎预期这个大小应该是与分页对齐并且不能良好的接收那些非对齐的分页大小。 Michael 原先并不晓得舍入并不存在并且在 Windows XP 里做些测试。在那里他发现到 VirtualQuery 每次返回一个对齐的分页大小,随后就在 ReactOS 检查才发现到这个对齐并不存在从而找到了问题。没有人能够确认这个问题如何搞砸 Mono,这是因为没有人真的有心去发觉是什么原因导致 Mono 失败。所有测试者都能肯定在 Martin 提交这个修正后,他们能够成功的安装 Mono。 top |