首页 > 试题广场 >

(辅存上的栈)考虑在一个有着相对少量的快速主存但有着相对大量

[问答题]
(辅存上的栈)考虑在一个有着相对少量的快速主存但有着相对大量较慢的磁盘存储空间的计算机上实现一个栈的问题。操作PUSH和POP的操作对象是单字。我们希望计算机支持的栈可以增长的很大,以至于无法全部转入主存中,因为它的大部分都要放在磁盘上。
       一种简单但低效的栈实现方法是将整个栈存放在磁盘上。在主存中保持一个栈的指针,它指向栈顶元素的磁盘地址,如果该指针的地址为p,则栈顶元素是磁盘的页上的第(p mod m)个字,这里的m为每页所含的字数。
         为了实现PUSH操作,我们增加栈指针,从磁盘将适当的页读到主存中后,复制要被压入栈的元素到该页上适当字的位置,最后将该页写回磁盘,POP操作与之类似。我们减少栈指针,从磁盘上读入所需的页,再返回栈顶元素。我们不需要写回该页,因为它没有被修改。
       因为磁盘操作代价相对较高,我们统计任何实现的两部分代价:总的磁盘存储次数和总的CPU时间,任何对一个包含m个字的页面的磁盘的存取,都会引起一次磁盘存取和的CPU时间。
a.从渐近意义上看,使用这种简单实现,在最坏的情况下,n个栈操作需要多少次磁盘存取?CPU时间又是多少?(用m和n来表示这个问题及后面几个问题的答案)
       现在考虑栈的另一种实现,及在主存中始终保持存放栈中的一页,(还用少量的主存来记录当前哪一页在主存中)。只有相关的磁盘页驻留在主存中,才能执行栈操作。如果需要,可以将当前主存中的页写回磁盘,并且可以从磁盘向主存读入新的一页。如果相关的磁盘页已经在主存,那么就无需任何磁盘存取。
b.最坏情况下,n个PUSH操作所需的磁盘存取次数是多少?所需的CPU时间是多少?
c.最坏情况下,n个栈操作所需的磁盘存取次数是多少?所需的CPU时间是多少?
    假设现在是在主存中保持栈的2页(此外还有少量的字来记录哪些页在主存中)的实现。
d.请描述如何管理栈页,使得任何栈操作的摊还时间磁盘存取次数为O(1/m),摊还CPU时间为O(1)。

这道题你会答吗?花几分钟告诉大家答案吧!