Memory segmentation
引入分段存储管理方式的目的,则主要是为了满足用户(程序员)在编程和使用上多方面的要求,其中有些要求是其它几种存储管理方式所难以满足的。
因此,这种存储管理方式已成为当今所有存储管理方式的基础,许多高级语言和C语言的编译程序也都支持分段存储管理方式。
分页通过硬件机制实现,对用户完全透明。


由段号S与段内偏移量W两部分组成
| 段号S | 段内偏移量W |
|---|
两者都必须由用户显式提供,(或者编译器来完成)
记为ST:segment table🎈
类似于页表的作用,记录了逻辑空间与内存地址的映射关系
每个段表项对应进程的一段
段表项记录该段(段号S)在内存中的长度M和始址b
| 段长C | 本段在主存中的始址(基址) |
|---|
具体版:
组成原理中,把段表结构描述的更加具体
| 段号S(index) | 段长C | 装入位 | 本段在主存中的始址(基址) b s b_s bs |
|---|
段表行(段表项)的装入位判断该段是否已调入主存
装入位为“1”,表示该段已调入主存:
装入位为“0”,表示该段不在主存中
已调入主存时,从段表读出该段在主存中的起始地址 b s b_s bs,与段内地址(偏移量W)相加得到对应的主存实地址
记段表ST中,段号S对应的那一条段表项(记录)为 S T . S ST.S ST.S

Segment Register
| 段表始址F | 段表长度M |
|---|
段表始址F🎈
段表长度M🎈

sp前缀适应于段页式存储的段表和页表声明:
表始址有时就代指表本身
表项地址有时代表表项本身
类比于数组的首地址和数组名,有时它们作用相同
页表寄存器和段表寄存器的作用:
同一个逻辑地址,采用不同的内存管理方式(段式/页式/段页式/…),仅在划分字段的时候有所不同,

主要问题
想要查段表,需要先知道段表在哪里,所以要先计算段表的地址(首地址)
知道了段表首地址,怎么计算具体的段表项,从而读取段表项内容字段:页表首地址
再根据地址划分的页号以及页表首地址,计算具体的页表项地址
读出页表项的物理块号字段内容,
结合地址划分的块内偏移,拼接出具体的字地址