03 非连续内存分配之分段和分页机制

物理内存管理之非连续内存分配

  • 两种方法分段(Segmentation)、分页(Paging)、
  • 页表(Page Table)[分页中很总要的一种数据结构]

非连续内存分配之分段

问题之为什么需要非连续内存分配?

连续内存分配的缺点

  • 分配给一个程序的物理内存是连续的
  • 内存的利用率较低
  • 有外碎片、内碎片的问题

非连续内存分配的优点:

  • 一个程序的物理地址空间是非连续的
  • 更好的内存利用和管理
  • 允许共享代码与数据(共享库等…)
  • 支持动态加载和动态链接

如何建立虚拟地址和物理地址之间的转换

  • 软件方案
  • 硬件方案
    • 分段机制
    • 分页机制

分段机制需要关注的两个问题:

  • 程序的分段地址空间
  • 分段寻址方案

分段寻址方案:段访问机制

一个段即为一个内存“块”,是一个逻辑地址空间,程序访问内存地址需要一个二维数组(s,addr),其中s代表段号,addr代表的是段内偏移。逻辑地址段号和物理地址段号的映射关系存放在段表(包括段的起始地址和段的长度信息)当中。段表是操作系统在寻址之前建立的,段表建立之后段机制才能正常的工作。


非连续内存分配之分页

分页与分段的区别:段的大小是可变的,页的大小是固定不变的

  • 划分物理内存至固定大小的帧(frame,指的是物理页),大小是2的幂次:512,4096,8192
  • 划分逻辑地址的空间至相同大小的页(page,指的是逻辑页),大小是2的幂次:512,4096,8192

地址转换方案:转换逻辑地址为物理地址(pages to frames)

  • 页表
  • MMU/TLB

帧(frame):物理内存被分割为大小相等的帧。

  • 一个内存的物理地址是一个二元地址(f,o)
  • f—帧号(F位,表示共有2^F个帧)
  • o(offset)—帧内偏移(S位,每帧有2^S帧字节)
  • 物理地址的=2^S * f + o

页(page):一个程序的逻辑地址空间被划分为大小相等的页

  • 一个逻辑地址是一个二元数组(p,o)
  • p—页号
  • o—页内偏移
  • 虚拟地址(逻辑地址)= 2^S * p + o (其中S是逻辑地址的二进制表示中,表示页内偏移所占的位数,具体地址是由两部分组成,即表示页号的二进制位数和表示页内偏移的二进制位数,其中2^S的计算结果为一页所具有的存储单元的个数)


页寻址机制(由逻辑地址转换成物理地址的过程)

途中页表的作用是由已知的页号寻找到对应的帧号(页的大小是固定的,但分段机制中段的大小不是固定的)

  • 但是逻辑页的大小和物理地址帧的大小是不一致的,一般而言是逻辑地址的空间要大于物理地址的空间
  • 页映射到帧,页是连续的虚拟内存,帧是非连续的物理内存(有助于减少内存碎片),不是所有的页都有对应的帧

提示:为了更好的理解知识点,博主在微信公众号中将操作系统知识进行了重新排版和插入图片。感兴趣的朋友可以扫码进行关注。

在这里插入图片描述

发布了19 篇原创文章 · 获赞 1 · 访问量 716

猜你喜欢

转载自blog.csdn.net/weixin_45615071/article/details/105505319
03