思考一个问题: 是否有可能把相对地址连续的作业信息分散存放到几个不连续的主存区域中, 且仍然能保证作业正确执行?
若可行的话,既可充分利用主存空间又可减少移动所花费的开销, 页式存储管理就是这样的管理方式。
一 页式存储管理的基本原理
定义: 页式存储管理是把主存储器分成大小相等的许多区, 每个区称为一块。 与此对应, 编制程序的相对地址也分成页, 页的大小与块的大小相等。 好像写一篇文章时, 若所用的稿纸每张可写400字, 那么这篇文章也就是400字一页。
采用分页式存储管理时, 相对地址由两部分组成: 页号和页内地址。 其格式为:
页号 | 页内地址 |
地址结构确定了主存储器的分块的大小,也就决定了页面的大小。 假定地址总长度为15位, 其中页号占15位, 页内地址占10位, 这样相对地址中可有32页, 编号为0~31. 每一页有1024个字节,编号为0~1023。 显然,从地址结构来看,相对地址是连续的, 在编制程序时无需考虑如何分页。
当使用一组顺序的地址时, 如果地址是0~1023, 则只使用了低10位地址部分, 而高地址(页号)部分为"0", 自然这些地址是属第0页的。 如果继续使用1024~2047的地址, 实际上在地址结构中表现为页号部分是"1", 而页内地址仍为0~1023个字节。 依此类推,一组顺序的连续地址自然地由地址结构被分页了。所以在编制程序时仍只需用连续的相对地址,不必顾及如何分页。
二 页式主存空间的分配与回收
页式存储管理把主存储器的可分配区域按页面大小分成若干块,主存空间按块为单位进行分配。 可用一张主存分配表来记录已分配的块和尚未分配的块以及当前剩余的空闲块数。 由于块的大小是固定的, 所以可以用一张 “位示图”来构成主存分配表。
例如, 假设主存储器的可分配区域被分成256块, 则可用字长为32位的8个字的位示图来构成主存分配表。 位示图中的每一位与一个块对应, 用0/1表示对应块为空闲/已占用, 另用一字节记录当前剩余的空闲块数, 如图4-18所示。
块号 = 字号 * 字长 + 位号
当一个作业执行结束时,应收回作业所占的主存块。根据归还的块号计算出该块在位示图中对应的位置, 将占用标志改为 “0”, 再把归还数加到空闲块数中。 假定归还块的块号为i, 则在位示图中对应的位置为: