sim*_*ico 5 database filesystems operating-system
Stonebraker的论文(数据库管理操作系统支持)解释说,"从缓冲池管理器获取块的开销通常包括系统调用和核心到核心的移动." 忘记缓冲区替换策略等.我唯一提出的问题是引用.
我的理解是,当DBMS想要读取块x时,它会发出一条公共读取指令.应该与请求阅读的任何其他应用程序没有区别.
我不是在寻找通用答案(我得到了它们,并阅读了论文).我寻求所述问题的详细答案.请参阅从Java应用程序读取的文件是否调用系统调用?
阅读您的其他问题,并继续努力:
当 DBMS 必须从磁盘获取一页时,它将至少涉及一个系统调用。在他看来,大多数 DBMS 都会将页面放入它们自己的缓冲区中。(它们最终也会进入操作系统的缓冲区,但这并不重要)。
所以,我们有一个系统调用。但是,我们可以避免任何进一步的系统调用。这是可能的,因为 DBMS 在其自己的内存空间中缓存页面。当 DBMS 决定需要一个页面时,它要做的第一件事就是检查它的缓存中是否有该页面。如果存在,它会从那里检索它,而无需调用系统调用。
DBMS 可以以最有利于其 IO 需求的方式自由地使缓存中的页面过期。操作系统的缓存以更一般的方式过期,因为操作系统还有其他事情需要担心。其中一个例子是,DBMS 通常会使用大量内存来缓存页面,因为它知道磁盘 IO 是它能做的最昂贵的事情之一。操作系统不会这样做,因为它必须平衡磁盘 IO 的成本和供其他应用程序使用的内存。