如何理解“页式存储管理方案”?
这要从一个皇帝的故事开始讲起。
从前有个人叫我很酷,他靠自己的能力和威信,建了个小国家,这个国家有100个人,我很酷是皇帝,为什么只有一百个人呢?(我很酷不会告诉你这是因为他觉得自己管一百个人刚刚好,再多他就要累死了)。
然后,我很酷遇到了一个敌人叫我更酷,我更酷目前确实比我很酷要酷那么一些,因为我更酷有400个小弟,(就是他的国家有400人),我很酷不开心了,于是他想着要怎么打败我更酷。
“去找几个不错的小弟,emmm取个好听点的名字,官员,让他们替我管人,我管着他们不就好了?”我很酷觉得这个主意真是太好了。
于是,他选了100个精英,当官员,他姑且让这些官员每个人管50人(毕竟能力没他强),于是,皇帝我很酷发现,他能够管500个百姓了(不算官员),他打败了我更酷!
我更酷在竞争中不思进取,落伍了。
那么,如果某一天,皇帝想要看看第468个百姓的情况怎么办?
现在我们假设皇帝我很酷管的500个百姓每人都有一个编号,并且假定他们的顺序不变,并且皇帝直接管理的100个官员,是按照第一个人才管第1-50个百姓,第二个人才管第51-100个百姓这样的顺序。
皇帝的头脑很好,他知道要找这个第468个百姓,就应该去找他直接管的第,emmmmm,第十个人就没错了,
468 / 50 = 9 468 % 50 = 18
我靠,皇帝(我很酷)这个时候突然迷茫了,因为他忘记他直接管的第十个官员住在哪里了,刚好这个官员去度假了,皇帝找得很辛苦,于是他勃然大怒,颁布了一道圣旨,以后我管的这一百个官员,你必须给我都住在小羊街里,而且每个官员按姓名的笔画的多少来编号,号码从1到100,然后皇帝在皇城南部1000米处,建了一个小羊街。
这道圣旨颁布以后,官员很快都住到了小羊街来,于是皇帝终于可以开开心心地去小羊街找第十号官员了,找到第十号官员,皇帝说,你,给我把第468号人叫来。
这个官员虽然管老百姓不错,奈何他算数不好,以为皇帝故意找茬,他颤颤巍巍地跪下,说皇上饶命啊,微臣只管了50号人,何来468号啊?
皇帝一听,反而乐了,心想还是我聪明,
“起来吧,你就把你管的第18号人带来就对了”
于是,官员把18号人带来了。
皇帝的能力
现在我们思考一下,如果皇帝的管人能力从100变成1000,官员仍然只能管50人,其他条件不变,那皇帝想找第888号百姓的时候,该怎么做
:皇帝应该去皇城南部1000米小羊村处,找到第13号官员,然后让他带他管的第38号人上来就对了。
大胆的官员
有一天,一位大胆的官员向皇帝请求,皇上,我们住在小羊村里住了好久,小羊村位置偏北,不利于对南方百姓的管理啊,我们能否自己出钱修建一个村子在国家中部,当然这个村子还叫小羊村,您看行吗?
皇帝今天心情好,于是就爽快地答应了,他说:建吧,你们只要别改了小羊村的名字就行了,还有不要跟我要钱,你们爱在哪建在哪建,前提是要告诉我你们小羊村的地址!
说着,皇帝指了指身边的太监,你们把地址给他。
于是以后皇帝再要找某个百姓,他首先自己悄悄计算一下应该去找第几个官员管的第几个人,(自己计算显得自己数学好)然后从太监那里找到小羊村的地址,坐上马车,来到小羊村,找到那个官员,然后找到自己要找的那个百姓。
在上述事例中,这个皇帝的管人能力就是页式存储管理方案中的页面大小,逻辑地址就类似皇帝管理的百姓,比如第一个例子中是500人,第二个例子中是5000人,而小羊村的地址就是页表起始地址。
以32位处理器的计算机为例,本来可以表示的地址空间只有(因为计算机以二进制存储),后来引进“先进的管理技术后”,即使用了页式存储管理方案后,就可以使得可以表示的地址空间变大了。
现在的问题是,计算机应该给页号分配多少个二进制位呢?(即一个皇帝管理的官员个数)从之前的例子我们可以猜测,这不是你分不分配的问题,而是你这个皇帝能管多少个官员的问题,即皇帝的能力问题。
是不是可以这么想,为了跟计算机处理数据的思维方式一致,现在我们假设皇帝的脑子有32个洞,并且这个皇帝他只认数字0和1,那么,这个皇帝的能力就确定下来了,因为这32个洞的限制,皇帝只能记下种不同的数,而且这32个洞,在找百姓的时候,不仅要用来记官员的编号,还要记住这个百姓在官员管理处的编号,就是之前算式的余数。
所以,计算机应该给页号分配的二进制位,受到“皇帝脑洞”即处理器能力的限制,还有“官员管理百姓的能力”即“页面大小”的限制。
当然,后来这个问题好像变成了官员管理百姓的个数在多少时,管理效率最高的问题。