- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[第14讲存储器管理之基本分段存储管理方式
第十四讲 存储器管理之基本分段存储管理方式
分段存储管理方式也是一种离散分配方式,只是其分配的基本单位事段。
1 分段存储管理方式的引入
为什么要引入分段?分段有哪些优点?我们现在了解一下。
1 方便编程: 因为实际编程中,用户作业通常按照逻辑关系分为几个段,每个段都是从0开始编址,并有名字和长度,访问的逻辑地址由段名和段内偏移量决定。此存储管理方式就按逻辑上有联系的段来进行管理,方便编程。
2 信息共享: 从上面可以得知,段是信息的逻辑单位,也就是段具有实际的逻辑意义。这和前一讲的“页”完全不同。因此要实现段的共享,就要求存储管理能与用户程序的分段组织方式相适应。
3 信息保护: 信息保护同样是对信息的逻辑单位进行保护,因此分段管理方式能有效的实现信息保护。
4 动态增长: 实际应用中,某些段(数据段)会不断增长,前面的存储管理方法均难以实现。而分段却可以解决这个问题。
5 动态链接: 要求以段为单位。
由此我们理解为什么要引入分段存储管理。
2 分段系统的基本原理
2.1 空间划分(分段)
将用户作业的地址空间依照相应的逻辑信息组的长度来划分若干个段,各段的长度不等。各段有段名(常用段号代替),段内首地址为0。段地址结构如下图:
一般我们常见的有代码段、数据段、共享段等等。
2.2 内存分配
在为作业分配内存时,也以段为单位,分配一段连续的物理地址空间;段间不必连续。如下图
注意:
整个作业的逻辑地址空间是二维的,其逻辑地址由段号和段内地址组成。页式管理是把内存视为一维线性空间;而段式管理是把内存视为二维空间。
怎么理解?
有的同学说分页也是二维的,页号一维,页内地址一维。总共是二维。其实不然
站在进程的角度而言,就会发现分页是一维的,而分段是二维的。
对一个进程来说,在分页式系统中,它的内容会保存在多页里,即进程的内容由一维页序列保存,通过页表映射来进行寻址。请注意,页内地址对进程而言是没有意义的,在从逻辑地址到页表访问到物理地址的映射都是由OS管理的。所以在分页系统中将页内地址作为一个维度是没有实际意义的。
但是在分段式系统中,进程的内容会保存在多个相互独立的段里,段内的地址是单独编
址的,如代码段内偏移154,数据段内偏移209。
举例说明:
对分页系统而言,给出一个地址2345,OS会根据进程对应的页表算出它在第几页内,偏
移是多少。而在OS外部,逻辑地址是一维的。
对于分段系统而言,访问一个地址,必须给出“段号+段内偏移”,因此,逻辑地址就是二维的了。
所以说,分页是一维地址管理、分段是二维地址管理。
需要CPU的硬件支持(地址变换机构)
2.3 段表
概念:系统中为每个进程建立一张段映射表,就是段表。
段表内容:每个段在表中占有一个表项,其中记录了该段在内存中的起始地址(又叫“基址”)和段的长度。段表如下图
存储位置:可以存储于寄存器。但一般存放在内存。
作用:记录了段与内存位置的对应关系
注意:访问一个字节的数据/指令需访问内存2次(段表一次,内存一次),所以也出现内存访问速度降低的问题。
利用段表实现地址映射如下图
2.4 地址变换机构
地址变换过程:系统中设置段表寄存器,用于存放段表起始地址和段表长度TL。在进行地址变换时,系统将逻辑地址中的段号与段表长度TL进行比较。若STL,则访问越界。否则,根据段表的起始地址和该段的段号,计算出该段对应段表项的位置,从中读出该段在内存中的起始地址。再检查段内地址D是否超过该段的段长SL。若超过则越界,否则将该段的基址和段内地址相加,即可得到要访问的内存物理地址。如下图
例1:某段表的内容如下:段号 段首址 段长度
0 120K 40K
1 760K 30K
2 480K 20K
3 370K 20K
一逻辑地址为(2154),它对应的物理地址为多少?
解:逻辑地址为:
段号 段内地址 由段表可知段号为2位,段内地址为16位,段允许的最大长度为 2^16=2^10*2^6=1024*64=65536。
所以逻辑地址2154的段号为0,查段表知其对应的物理地址为: 120K+2154
例2:在一个段式存储管理系统中,其段表为:
段号 内存起始地址 段长
0 210 500
1 2350 20
2 100 90
3
文档评论(0)