|
|
Community > ReactOS Newsletter Archive > ReactOS Newsletter: 时事通讯 54 期时事通讯 54 期by Z98 on 2009-03-04 内存使用现在这一段时间里 ReactOS 所需的最低内存都在缓慢的直线上升,多数是由于安装向导。基本上,开发者知道ROS 在安装后时的所需内存不可能接近在安装时的那么高。多数假定那里出现某种内存泄漏,无论是在安装向导甚至是在内存管理器。这是一个很多人希望解决的问题,可是直到 Alex Ionescu 前往查看前都不能解决这个问题。Alex 首先更改安装向导的显示以便显示内核缓存和内核池而非分页及非分页的池。如此一来才能显示究竟这些泄漏是在源自于何处。他也移除一个每当内存使用量飙升超过 40% 时导致安装向导死机的破解。之后他就前往修正部分的内存管理器和共同缓存,从而减少所需内存到 24MB。该问题牵涉到文件已被缓存到内核的内存里但从未被释放,当然显然的就吃掉可用的资源。一般上安装应用程序应该需要较低的内存使用量。除了安装向导的内存修正,当操作系统启动时所需的内存也降到大约 20MB。我敢肯定我不是唯一大力欣赏这些修正。 topCSRCSRSS 组件管理控制台并且是早期当 ReactOS 代码还非常混杂时的产物、Timo Kreuzer 花了好几天的时间研究它,尝试修正 CSR_API_MESSAGE 的数据结构。这个数据结构是CsrClientConnectToServer 以及正确的初始化 user32, 它处理传输信息,视窗,以及其他必要的东西以便让 Windows 运作所需的产物。在 ROS 原始的版本里是错误的并且被 CsrClientConnectToServer 错误的使用它。可是,在ROS 代码库的某处里某些组件是为该数据结构使用硬编码大小,因此任何尝试添加或移除相应的成员将会导致崩溃。Timo 尝试追踪这个问题可是没有任何结果。他目前暂时已经放弃该组件并且审阅该代码后,我老实的说我不能怪他。那里有些代码行是由某人做数个管型,首先到通用指针类型,之后通过数据结构的大小递增该指针的地址,最后再管型到另一个所要使用的指针类型。任何人有了少量的 C 知识都会立即被这样的代码所吓到,这是因为这样的做法是非常丑陋又容易出错。 top网络自从 Art Yerkes 首次让网络堆栈正确运行到现在已经有段时间了。自从那时起, Cameron Gutman 就继续努力在这个部分,尝试改善代码并实现新功能。许多这样的工作是在分支里进行,可是多数的作品有同步回到主干里。可是,Art 最近花点时间来处理那些持久以来的错误并且他现在对了解网络堆栈和协议有更好的了解。 Art 已经对代码里做出一些额外的工作,最近修正一个回环的问题。若要连接到一个侦听套接口,绑定地址必须是 0 或者匹配应用程序所绑定的适配器的地址。对于那些应用程序要侦听回环,他们可以绑定地址 0 或者 127.0.0.1。选择后者表示应用程序只会侦听本地交通,然而前者表示侦听所有的适配器。可是在 ReactOS,应用程序尝试绑定地址 0 却移交到ReactOS 首个找到适配器的地址。这通常表示他们不再侦听本地交通并且应用程序为了那个用途而依赖着地址 0 就会出现问题。Art 找到问题并且修正它,所以现在绑定地址0 能够运作。 另一个问题 Art 所修正的是错误的处理IRP_MJ_CLEANUP 以及 IRP_MJ_CLOSE。原先 Art 并没有正确的解读这两者用途。IRP_MJ_CLEANUP 应该是取消所有对象被调用却正在等待的 IRP。这些对象本身仍然有效,即使在 IRP 之后而且应该是 IRP_MJ_CLOSE 来取消该对象的分派。可是,ReactOS 却将这两个 IRP 为相同并在这两者之一被调用时就将对象给取消分派。既然本操作系统在 CLEANUP 被调用后预计该对象还有效,这导致缺少资源的问题。 top声音声音的进展已经到了Andrew Greenwood 可以使用 Winamp 来播放音乐的程度。虽然理论上这个在此前真的能够运作,可是那个是使用 NT4 的 sndblst.dll。现在,却是在使用 Andrew 所编写的sndblst.dll也可以做相同的东西。此时仅支持播放一个文件,虽然Andrew 并没有尝试看看当出现多流将会发生什么。理论上它应该调用一个警告关于设备正在使用中。内核流到现在仍然无法运作,至少对 Andrew 而言。要让 wdmaud.drv 与Johannes Anderwald 的代码沟通还需要更多时间,以及编写sndblst.sys,它是 sndblst.dll对应的内核部分。 top平台目标现在 ReactOS 正式目标的 Windows 版本已经在有一段时间里混乱了。那里其实有两个特定的目标,一个牵涉到 NT 内核而另一个是 Win32 子系统。官方上 ReactOS 内核仍然志在 Server 2003 (服务器 2003)的内核,又名为 NT 5.2。这个目标的更改其实是比较缓慢的更改。然而, Win32 子系统的目标每次都瞄准在最新发布的 Windows 版本,就是在当时在撰写此文章时是 Windows Vista。这表示为什么时常提交被标为更新或者实现都是基于 Vista。当 Windows 7 正式发布后, Win32 的目标又会再次转移目标,但这却不代表做出一个决定将会连同转移内核的目标。 top |