Standford RedBase 入门(The Paged File Component)

  • 介绍

  • 页面缓冲池

  • 页面数目

  • 页面存储单元分配

  • Scratch Pages

  • 混杂标注

  • PF 接口

  • 介绍
    我们会提供 RedBase 系统的底层组件,PF 组件。这个组件提供了高级客户组件所需的设备从而实现 基于页面的文件 I/O。在 PF 组件中,提供各种方法用来创建,删除,打开和关闭页面文件,扫描给定文件的页面,读取给定文件的特定页面,对给定文件进行页面的增加和删除操作,并且对 scrath 使用提供 obtain 和 release 操作。为了开始使用 PF 组件,可以查询页面 https://web.stanford.edu/class/cs346/2015/redbase-logistics.html 。
    下面提供了PF 组件的 C++ 接口。每个类都以前缀 PF 开头 - 你需要在你的系统构建中遵循这种命名规则。除了 constructor 和 destructor 之外,PF 组件中的每一个方法都会返回一个 int 型的代码,同时在你写的所有方法中都应该保证一下规则:返回值为 0 表示正常的结束,一个非 0 的返回值表示出现了一个例外的情况或者是发生了一个错误。一个非零正数返回值表示 没有错误的例外(例如到达了文件的结尾)或者是一个可以恢复的错误或者是正常的退出(例如尝试关闭一个没有打开的文件)。一个非零负数返回值表示出现了一个系统无法恢复的错误。https://web.stanford.edu/class/cs346/2015/redbase-pf.html#codes 是PF 中各种值所表示的错误规定。

  • 页面的缓冲池 (重要)
    文件中每一页的接入数据
    当一个页面在内存中并且它的数据能够被控制时,这个页面就被称为钉在了缓存池中了。一个 pinned 页面将会保存在缓存池直到它被明确的 unpinned。

(百度翻译)
访问文件页面上的数据首先需要将页面读到主存中的缓冲池中,然后在那里处理(读取或写入)它的数据。当一个页面处于内存中,而它的数据可用于操作时,则称该页在缓冲池中被“钉住”。一个固定的页面仍然在缓冲池,直到它是明确的“不固定”。客户取消一个页面时,页面上的数据进行操作。下一页不一定导致页面被删除从缓冲区--一个不固定的网页是保存在内存中只要在缓冲池中的空间是不需要的。

如果PF组件需要读新的一页在内存缓冲池中有没有留下自由的空间,然后选择一个不固定的PF分量将页面缓冲池中去除,再利用空间。PF分量使用最近最少使用(LRU)页面置换政策。当一个页面从缓冲池中移除时,当且仅当页面被标记为“脏”时,它被复制回磁盘上的文件,直到它们从缓冲区中删除时,脏页才会自动写入磁盘。然而,PF客户机可以总是发送一个显式请求,强制(即写入磁盘)某个页面的内容,或者强制文件的所有脏页,而不将这些页从缓冲区中移除。

重要的是不要把页面不必要地固定在内存中。PF分量的客户,你要实现的设计可以使每个操作假定的页面无需在缓冲池:客户获取它需要的页面,对他们适当的行动,然后取消它们,即使它认为某个页面可能会在不久的将来需要再次。(如果网页是用不久再然后它可能仍然是在缓冲池中反正。)PF分量不允许同一页面被不止一次,不脱钉在之间。在这种情况下,页面实际上并不会解除固定,直到脱离操作数与销操作数。每次取销一个网页是非常重要的,你别忘了拔掉它时,你所做的。如果你不能脱离页面缓冲池会慢慢填满直到你不再把所有的页面(在这一点上,PF分量将返回一个负的代码)。

  • 页面数字

  • 页面存储单元分配

你可能感兴趣的:(Standford RedBase 入门(The Paged File Component))