0

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

也许我的主要问题是我听不懂英语,但这对我来说似乎很清楚......

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

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

谢谢 !蒂姆

4

2 回答 2

0

我认为您遇到的问题是您需要了解一些关于窗口服务背后的底层对象如何在虚拟存储中工作的知识。

在核心,各种窗口服务为您提供相当于“私有”页面数据集的内容。您分配和引用存储,但该虚拟空间中的对象实际上并不在内存中 - 系统的页面错误机制在您引用它们时将它们带入。所以,是的,您正在“窗口”内访问数据,但实际上,您希望看到的数据此时可能不会“分页”。

再深入一点,当您第一次分配对象时,它映射到的虚拟存储在底层页表条目中将所有页面标记为“无效”。这意味着一旦您触摸此存储,就会发生页面错误中断。此时,操作系统会介入并通过将必要的数据放入内存来解决页面错误,然后您的程序会继续执行,而不会代表您进行所有这些处理。你是正确的,你只是在窗口中引用数据,但有很多幕后支持这一点。

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

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

希望这是有道理的——如果你想挑战一下,给自己一个系统转储并在你引用数据时检查系统跟踪条目......你会看到一个非常明显的页面错误模式、I/O 和恢复你的程序,希望它对你有意义。

于 2018-05-17T19:25:55.327 回答
0

从手册

,pfcount 指定每次程序引用窗口中不存在的数据时希望窗口服务带入窗口的附加块的数量。您指定的数量将添加到窗口服务始终引入的最小块中。也就是说,如果您指定值 20,则窗口服务最多引入 21。附加块的数量范围从 0 到 255。注意您无需询问即可获得 1 个街区。

于 2018-05-16T11:12:34.107 回答