热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

分页存储和分段存储的一些小问题解答

为什么能通过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维的数据,逻辑地址大小即可.
但是分段存储的地址结构就不一样,我们必须要知道段号,以及段内地址。因为段的长度是 不定的,因此我们无法像分页那样直接计算段号,因此必须要给出段号,加上段内偏移地址,就构成了二维的。即逻辑地址必须由段号+段内地址构成(二维)




 

分页存储

分段存储

不同点:

页长:固定

段长:不固定

引入:提高内存利用率

引入:满足程序员(例如:动态链接)

地址空间:一维

地址空间:二维

页号和页内偏移对用户可见

段号和段内偏移由程序员设定(对其他用户不可见)

相同点:

离散分配地址(非连续)



一字一句的纯手打!
如有错误,望批评指正!





推荐阅读
author-avatar
啊123
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有