什么是分段(类似于分页管理中的分页)
进程的地址空间,会按照自身的逻辑关系,划分为若干个段,每个段都有一个段名,在低级语言中,程序员使用段名来编程)每段都要从0开始编址
内存分配规则:以段为单位分配,每个段在内存中占据连续空间,但是各段之间可以不相邻
由于是按照逻辑功能模块划分,用户编程更加方便,程序的可读性更高
段号的位数决定了每个进程最多可以分几个段
段内地址位数决定了每个段的最大长度是多少
比如段号占16位,每个进程最多有2^16=64K个段
段内地址占16位,每个段的最大长度是2^16KB
什么是段表(类似于分页管理中的页表)
程序分多个段,各段离散存入内存,为了保证程序能正常映射,就必须能从物理内存中找到各个逻辑段存放的位置,为此需要建立一张段表
1.每个段对应一个段表项,其中记录了段在内存中的起始地址(又称为“基址”)和段的长度
2.各个段表项的长度是相同的(段号16位,段内地址16位:那么用16位就可以表示最大段长,物理内存大小位4GB,可以用用32位表示整个物理内存地址空间;那么每个段表项占16+32=48位也就是6B)
段号是隐含的,不占存储空间,如果段表的起始存放地址为M,则K号段对应地址为M+6*K
如何实现地址转换

分段,分页管理的对比
页是信息的物理单位,分页主要是为了实现离散分配,提高内存利用率,仅仅是系统管理上的需要,完全是系统行为,对用户不可见
段是信息的逻辑单位。分段的主要目的是更好满足用户的需求,一个段通常包含一组属于一个逻辑模块的信息,分段对用户是可见的,用户编程时需要显式地给出段名
页的大小是固定的,段的长度不固定
分页的用户进程地址空间是一维的,只需要给出一个记忆符号就可以表示一个地址
分段用户进程地址空间是二维的,程序要在标识一个地址时,既要给出段名,也要给出段内地址
分段比分页更容易实现信息的共享和保护
只有不能被修改的纯代码或者可重入代码,才能被共享
分页(单级页表)第一次访存:查内存中的页表;第二次访存:访问目标内存单元。总共两次访存
分段:第一次访存:查内存中的段表;第二次访存:访问目标内存单元。总共两次访存
与分页系统类似,分段系统也可以引入快表机构,把近期访问过的段表项放到快表中,这样可以少一次访存,加快地址变换速度