基本分段存储管理方式

什么是分段(类似于分页管理中的分页)

进程的地址空间,会按照自身的逻辑关系,划分为若干个段,每个段都有一个段名,在低级语言中,程序员使用段名来编程)每段都要从0开始编址

内存分配规则:以段为单位分配,每个段在内存中占据连续空间,但是各段之间可以不相邻

由于是按照逻辑功能模块划分,用户编程更加方便,程序的可读性更高

段号的位数决定了每个进程最多可以分几个段

段内地址位数决定了每个段的最大长度是多少

比如段号占16位,每个进程最多有2^16=64K个段

段内地址占16位,每个段的最大长度是2^16KB

什么是段表(类似于分页管理中的页表)

程序分多个段,各段离散存入内存,为了保证程序能正常映射,就必须能从物理内存中找到各个逻辑段存放的位置,为此需要建立一张段表

1.每个段对应一个段表项,其中记录了段在内存中的起始地址(又称为“基址”)和段的长度

2.各个段表项的长度是相同的(段号16位,段内地址16位:那么用16位就可以表示最大段长,物理内存大小位4GB,可以用用32位表示整个物理内存地址空间;那么每个段表项占16+32=48位也就是6B)

段号是隐含的,不占存储空间,如果段表的起始存放地址为M,则K号段对应地址为M+6*K

如何实现地址转换

image-20251001100550622

![image-20251001213335537](/Users/tusier/Library/Application Support/typora-user-images/image-20251001213335537.png)

分段,分页管理的对比

页是信息的物理单位,分页主要是为了实现离散分配,提高内存利用率,仅仅是系统管理上的需要,完全是系统行为,对用户不可见

段是信息的逻辑单位。分段的主要目的是更好满足用户的需求,一个段通常包含一组属于一个逻辑模块的信息,分段对用户是可见的,用户编程时需要显式地给出段名

页的大小是固定的,段的长度不固定

分页的用户进程地址空间是一维的,只需要给出一个记忆符号就可以表示一个地址

分段用户进程地址空间是二维的,程序要在标识一个地址时,既要给出段名,也要给出段内地址

分段比分页更容易实现信息的共享和保护

只有不能被修改的纯代码或者可重入代码,才能被共享

分页(单级页表)第一次访存:查内存中的页表;第二次访存:访问目标内存单元。总共两次访存

分段:第一次访存:查内存中的段表;第二次访存:访问目标内存单元。总共两次访存

与分页系统类似,分段系统也可以引入快表机构,把近期访问过的段表项放到快表中,这样可以少一次访存,加快地址变换速度

posted @ 2025-10-01 21:43  是我,米老鼠  阅读(12)  评论(0)    收藏  举报