基本分段存储管理方式
分段
分段管理方式的提出则考虑了用户和程序员,把通常的程序分成若干个段,如主程序段、子程序段A、子程序B……、数据段及栈段等,每个段大多是一个相对独立的逻辑单位,方便于程序员的操作;也满足了方便编程、信息保护和共享、动态增长及动态链接等多方面的需要。
分段系统的逻辑地址结构由段号(段名)和段内地址(段内偏移量)所组成。如:
段表
程序分多个段,各段离散地装入内存,为了保证程序能正常运行,就必须能从物理内存中找到各个逻辑段的存放位置。为此,需为每个进程建立一张段映射表,简称“段表”。
地址变换
先经过一系列判断是否越界,若均不越界,根据逻辑地址A中段号S找到基址b,段基址b+段内地址w 就是物理地址
分段、分页管理的对比
分段比分页更容易实现信息的共享和保护。不能被修改的代码称为纯代码或可重入代码(不属于临界资源),这样的代码是可以共享的(比如,有一个代码段,只是简单的输出 “Hello World!”)。可修改的代码是不能共享的(比如,有一个代码段中有很多变量,各进程并发地同时访问可能造成数据不一致)。如按照分段管理方式将进程分段的话,如下图所示:
补充(访问次数)
访问一个逻辑地址需要几次访存?
分页(单级页表):第一次访存——查内存中的页表,第二次访存——访问目标内存单元。总共两次访存。
分段:第一次访存——查内存中的段表,第二次访存——访问目标内存单元。总共两次访存。
与分页系统类似,分段系统中也可以引入快表机构,将近期访问过的段表项放到快表中,这样可以少一次访问,加快地址变换速度。
段页式管理方式
页式存储管理能有效地提高内存利用率,而分段存储管理能反映程序的逻辑结构并有利于段的共享。将这两种存储管理方法结合起来,便形成了段页式存储管理方式。
先分段再分页
将进程按逻辑模块分段,再将各段分页(先分段再分页,如每个页面4KB)。再将内存空间分为大小相同的内存块/页框/页帧/物理块,将各页面分别装入各内存块中。
段页式管理的逻辑地址结构
先进行越界判断,若均不越界,根据页号对照页表,找到对应的内存块号,物理地址=内存块号*页面大小+页内偏移量