IBM Window 服务 (DWS) mvs 上的 csrevw 函数

IBM Window Services (DWS) csrevw function on MVS

我正在使用 IBM MVS (z/OS) 并尝试使 Window 服务正常工作。 关于函数 CSREVW 我不明白参数 pfcount 的用途是什么。 根据文档,在我的程序引用一个不在我的 window 中的块后,这将要求 window 服务读取多个块。 但是 window 服务应该如何知道我试图引用不在我的 window 中的数据?我的意思是,如果我不再次调用 CSREVW 或 CSRVIEW,它就不知道我正在从 window 中读取数据。

也许我的主要问题是我很难理解英语,但这对我来说似乎很清楚...

这是文档的 link,第 23-24 页对此进行了解释: http://publibz.boulder.ibm.com/epubs/pdf/iea3c102.pdf

我知道这是一个关于 IBM 服务的非常具体的问题,对此我深表歉意。

谢谢! 蒂姆

来自手册

,pfcount Specifies the number of additional blocks you want window services to bring into the window each time your program references data that is not already in the window. The number you specify is added to the minimum of one block that window services always brings in. That is, if you specify a value of 20, window services brings in up to 21. The number of additional blocks ranges from zero through 255. Note that you get 1 block without asking.

我认为您遇到的问题是您需要稍微了解 windowing 服务背后的底层对象如何在虚拟存储中工作。

各种 windowing 服务的核心是为您提供 "private" 页面数据集。您分配和引用存储,但虚拟 space 中的对象并不真正在内存中 - 系统的页面错误机制在您引用它们时将它们带入。所以是的,您正在访问 "window" 内的数据,但实际上,您期望看到的数据此时可能不是 "paged in"。

更深入一点,当您第一次分配对象时,它映射到的虚拟存储在基础页面 table 条目中具有标记为 "invalid" 的所有页面。这意味着一旦您触摸此存储,就会发生页面错误中断。此时,操作系统介入并通过将必要的数据放入内存来解决页面错误,然后您的程序继续运行,代表您忘记所有这些处理。你是对的,你只是在 window 中引用数据,但在幕后有很多支持这一点的东西。

这就是 PFCOUNT 的用武之地...

假设您的虚拟 window 中有 64K 长的结构。每次引用这个结构的每个页面都会导致页面错误,这将是草率和缓慢的。更好的方法是使用 PFCOUNT 使您引用的页面和您的对象所需的所有 15 个其他页面通过单个操作调入。相反,如果您的数据很小并且您访问它的方式非常随机,那么 PFCOUNT 不会帮助您 - 您引用的下一页可能在任何地方,而且拥有一个大的 PFCOUNT 实际上是浪费,因为您最终会带来在您从未使用过的大量数据中。

希望这是有道理的 - 如果您喜欢挑战,请给自己一个系统转储并在您引用数据时检查系统跟踪条目...您会看到一种非常明显的页面错误模式,I/O 并恢复你的程序,希望这一切对你来说都有意义。