作者:啊123 | 来源:互联网 | 2023-07-06 12:35
为什么能通过0~11位的页内地址,计算出页面大小为4KB?为什么分页存储地址空间是一维的,而分段存储却是二维的?分页和分段存储之间的不同点又是什么?请看下面介绍
为什么能通过0~11位的页内地址,计算出页面大小为4KB?
为什么分页存储地址空间是一维的,而分段存储却是二维的?
分页和分段存储之间的不同点又是什么?
请看下面介绍……
1.分页存储结构如下:(以下所有图片来自百度百科)
若给定一个逻辑地址空间中的地址为A,页面的大小为L,则页号P和页内地址d可按右图所示公式求得:
其中,INT是整除函数,MOD是取余函数。例如,其系统的页面大小为1 KB,设A = 2170 B,则由上式可以求得P = 2,d = 122。
分页存储转换如下:
2.分段存储结构如下
分段存储转换如下:
3.问题来了,通过看书,大家也许有2个疑问:
3.1. 为什么能通过0~11位的页内地址,计算出页面大小为4KB?
3.2. 为什么分页存储地址空间是一维的,而分段存储却是二维的?
第一个问题:
首先因为计算机中一个地址默认对应八位二进制数,那么页内偏移量为12位,能表示[0]~[2^12-1]范围的数字,
其中2^12=4^10=4K,由于1位对应1个字节(操作系统一般以字节编址),所以就是4KB
我们可以看到分页地址结构,你们有没有发现页号我们是不需要的,因为页面大小是
固定的
,所以我们可以直接由逻辑地址的大小计算出页号,
例如,其系统的
页面
大小为1 KB,设A = 2170 B,则由上式可以求得页号为2。所以,我们实际上只需要一个1维的数据,逻辑地址大小即可.
但是分段存储的地址结构就不一样,我们必须要知道段号,以及段内地址。因为段的长度是
不定的,因此我们无法像分页那样直接计算段号,因此必须要给出段号,加上段内偏移地址,就构成了二维的。即逻辑地址必须由段号+段内地址构成(二维)
|
分页存储 |
分段存储 |
不同点: |
页长:固定 |
段长:不固定 |
引入:提高内存利用率 |
引入:满足程序员(例如:动态链接) |
地址空间:一维 |
地址空间:二维 |
页号和页内偏移对用户可见 |
段号和段内偏移由程序员设定(对其他用户不可见) |
相同点: |
离散分配地址(非连续) |
一字一句的纯手打!
如有错误,望批评指正!