计算机操作系统——存储器管理(5)

本文介绍了分段存储管理的基本概念,包括其目的、地址结构、地址变换过程等,并对比了分段与分页的主要区别,最后简述了段页式存储管理和可重入代码的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本分段存储管理方式

如果说推动内存管理从固定分区分配方式发展到动态分区分配方式再发展到分页方式的目的,是提高内存利用率。那么促使分页方式发展到分段方式的目的,则是满足程序员的使用

①方便编程,将进程按照逻辑关系划分为若干个段;

②信息共享,“页”只是存放信息的物理单位(块),并无完整的意义,“段”是信息的逻辑单位;

③信息保护;

④动态增长,有些段(尤其是数据段)在使用过程中会不断增长;

⑤动态链接,运行时先将目标程序装入内存并启动运行,当运行过程中又需要调用某段时,才将该段调入内存并进行链接。(如果是运行时动态链接,就很少使用;如果引入虚拟存储器技术,则是装入时动态链接)。


段:程序的地址空间(逻辑地址空间?)被划分为若干个段,每个段定义了一组逻辑信息,通常用段号代替段名,每个段都从0开始编址,并采用一段连续的地址空间(逻辑还是物理上连续?)

地址结构:地址长度为32位时,0~15位为段内地址,16~31位为段号,允许一个进程最长有64K个段,每个段的最大长度为64KB。(编译程序能自动的根据源程序的情况产生若干个段。)


分段:为每个分段分配一个连续的分区,而进程中的各个段可以离散的移入内存中不同的分区中。

参考分页,同样设置段表、段表寄存器、高速缓冲寄存器/联想寄存器。


地址变换机构

为了实现从进程的逻辑地址到物理地址的变换功能,在系统中设置了段表寄存器(在IA-32中共有6个16位的段表寄存器,分别为CS、ES、DS、FS、GS、SS,详细请参考:http://baike.baidu.com/view/364403.htm),用于存放段表始址和段表长度TL。在进行地址变换时,系统将逻辑地址中的段号与段表长度TL(table limit,段表中存放的段表项个数)进行比较。若S>TL,表示段号太大,是访问越界,于是产生越界中断信号;若未越界,则根据段表的始址和该段的段号,计算出该段对应段表项的位置,从中读出该段在内存的起始地址,然后,再检查段内地址d是否超过该段的段长SL。若超过,即d>SL,同样发出越界中断信号;若未越界,则将该段的基址d 与段内地址相加,即可得到要访问的内存物理地址。下图为实模式的地址变换过程。



分页和分段的主要区别

1、页是信息的物理单位,段是信息的逻辑单位;

2、页的大小固定且由系统决定,由系统把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的,因而在系统中只能有一种大小的页面;而段的长度却不固定,决定于用户所编写的程序,通常由编译程序在对源程序进行编译时,根据信息的性质来划分。

3、分页的作业地址空间是一维的,即单一的线性地址空间,程序员只需利用一个记忆符,即可表示一个地址;而分段的作业地址空间则是二维的,程序员在标识一个地址时,既需给出段名,又需给出段内地址。(分页之所以是一维的,原因在于分页的大小是固定的,且页码之间是连续的,操作的时候只需给出一个地址,就能够根据所给地址的大小与页面大小计算出在页码和页内地址,粗略举例,比如页面大小是4KB,给一个地址为5000,可以算出所在页码是1,页内地址是5000-4096=904,即在第二页的第904个位置。而分段的因为每段的长度不一样,必须给出段码和段内地址。


可重入代码

可重入代码(Reentrant Code)又称为“纯代码”(Pure Code),是一种允许多个进程同时访问的代码。为使各个进程所执行的代码完全相同,绝对不允许可重入代码在执行中有任何改变。因此,可重入代码是一种不允许任何进程对它进行修改的代码。但事实上,大多数代码在执行时都可能有些改变,例如,用于控制程序执行次数的变量以及指针、信号量及数组等。为此,在每个进程中,都必须配以局部数据区,把在执行中可能改变的部分拷贝到该数据区,这样,程序在执行时,只需对该数据区(属于该进程私有)中的内容进行修改,并不去改变共享的代码,这时的可共享代码即成为可重入码。


段页式存储管理方式

地址结构:段号+段内页号+页内地址


地址变换过程


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值