OS_内存管理@非连续方式@段式和段页式
创始人
2024-03-01 11:23:53
0 次
文章目录 OS_内存管理@非连续方式@段式和段页式 内存管理方式的发展 基本分段存储 逻辑结构图 逻辑地址结构划分 段表 地址变换机构 段表寄存器内容结构 段和段表项的记号 地址变换机构 变换过程 段的共享与保护 段页式存储 逻辑地址结构 实现思路:段表和页表的变体🎈 相关寄存器的作用🎈 地址变换机构 变换过程
OS_内存管理@非连续方式@段式和段页式
内存管理方式的发展
当OS由单道向多道发展时,存储管理方式便由单一连续 分配发展为固定分区分配。 为了能更好地适应不同大小的用户程序要求,存储管理方式又从固定分区分配,发展到动态分区分配。 为了能更好地提高内存的利用率,进而又从连续分配 方式发展到离散分配 方式:分页存储管理方式 管理分页管理方式是从计算机的角度 考虑设计的,目的是提高内存的利用率
基本分段存储
Memory segmentation
it is an operating system memory management technique of division of a computer’s primary memory into segments or sections . In a computer system using segmentation, a reference to a memory location includes a value that identifies a segment and an offset (memory location) within that segment. Segments or sections are also used in object files of compiled programs when they are linked together into a program image and when the image is loaded into memory. 引入分段存储管理方式 的目的,则主要是为了满足用户(程序员)在编程和使用上多方面的要求 ,其中有些要求是其它几种存储管理方式所难以满足的。
因此,这种存储管理方式已成为当今所有存储管理方式的基础 ,许多高级语言和C语言的编译程序也都支持分段存储管理方式 。
分页 通过硬件机制实现,对用户完全透明。
分段 管理方式的提出则考虑了用户和程序员,以满足方便编程、信息保护和共享、动态增长及动态链接等多方面的需要。
分段段式管理方式按照用户进程中的自然段 划分逻辑空间。 例如 某个用户进程由以下几个段组成 每段从0开始编址,并分配一段连续的地址空间 段内要求连续,段间不要求连续,因此整个作业的地址空间是二维 的
逻辑结构图
逻辑地址结构划分
由段号S与段内偏移量W两部分组成
两者都必须由用户显式提供,(或者编译器来完成)
段表
地址变换机构
为了实现进程的逻辑地址到物理地址的变换功能,系统中设置了段表寄存器 (Segment Register)
段表寄存器内容结构
Segment Register
段表始址F 🎈
段表长度M 🎈
段和段表项的记号
段表项长度 :L(I)L(I)L(I)🎈 段长 C=L(S)🎈
地址变换机构
变换过程
从逻辑地址A中取出前s位为段号S,后w位为段内偏移量W 两个字段分两次使用 地址长度为n,则s+w=n地址长度为n,则s+w=n地址长度为n,则s+w=n 检查段表寄存器SR,比较段号S和段表长度M 若S⩾MS\geqslant MS⩾M,则产生越界中断 若S 计检查段表ST,算段号S对应的段表项(地址) :ST.S=F+S×L(I)ST.S=F+S×L(I)ST.S=F+S×L(I) 取出该段表项 的前c位得到段长C 若W⩾CW\geqslant{C}W⩾C,则产生越界中断 若W 取出段表项中该段始址 b=ST.S.bb=ST.S.bb=ST.S.b,计算A对应的具体存储单元的物理地址E=b+WE=b+WE=b+W 用得到的物理地址E去访问内存(可以取得具体的内存单元(存储字)内容)。
段的共享与保护
在分段系统中,段的共享 是通过两个作业的段表中相应表项指向被共享的段的同一个物理副本 来实现的。 当一个作业正从共享段中读取数据时,必须防止另一个作业修改此共享段中的数据。 不能修改的代码称为纯代码或可重入代码 (它不属于临界资源), 这样的代码和不能修改的数据可以共享 , 而可修改的代码和数据不能共享 。 分段管理 的保护方法主要有两种: 一种是存取控制保护 ,另一种是地址越界保护 。 地址越界保护将段表寄存器 中的段表长度与逻辑地址中的段号比较, 若段号大于段表长度,则产生越界中断: 再将段表项中的段长C 和逻辑地址中的段内偏移w 进行比较, 若段内偏移大于段长,也会产生越界中断。 分页管理 只需要判断页号是否越界,页内偏移是不可能越界的。 与页式管理不同,段式管理不能通过给出一个整数便确定对应的物理地址, 因为每段的长度是不固定的 ,无法通过整数除法得出段号 ,无法通过求余得出段内偏移,所以段号和段内偏移一定要显式给出 (段号,段内偏移),因此分段管理的地址空间是二维的。
段页式存储
分页存储管理能有效地提高内存利用率,而分段存储管理能反映程序的逻辑结构并有利于段的共享和保护。 将这两种存储管理方法结合起来,便形成了段页式存储管理方式。 在段页式系统中, 作业的地址空间首先被分成若干逻辑段 ,每段都有自己的段号, 然后将每段分成若干大小固定的页 。 对内存空间的管理仍然和分页存储管理一样, 將其分成若干和页面大小相同的存储块, 对内存的分配以存储块为单位
逻辑地址结构
实现思路:段表和页表的变体🎈
逻辑结构图
sp-段表
sp-页表
页表项 至少包含: 页号P 可以理解为sp-段内的偏移,可以确定页表 和单纯的段偏移(记为pure-段内偏移)有所不同(pure-段内偏移是为了确定具体的存储单元) 块号b
sp段表寄存器
相关寄存器的作用🎈
页表寄存器和段表寄存器的作用: 寻址 根据段号或者页号,计算出逻辑地址被映射到的段表或页表 一个程序对应的段表 只有一个 但是可能对应多个页表 如果没有越界,会返回一个有效的段表/页表起始地址值 根据具体的段表/页表地址,可以计算出相应的表项 (段表项/页表项) 根据表项中指示的物理块地址,结合段/页内偏移,计算出具体内存单元的物理地址 越界判断 如果进程要映射的逻辑地址越界(非法/错误),会引发中断 同一个逻辑地址,采用不同的内存管理方式(段式/页式/段页式/…),仅在划分字段的时候有所不同,
地址变换机构
变换过程
先确定段,再确定页,最后确定字 在进行地址变换时,首先通过段表 查到页表始址 ,然后通过页表找到页帧号 ,最后形成物理地址 。 进行一次访问实际需要三次访问主存
相关内容