Rain_Saber
文章7
标签0
分类2
操作系统-非连续内存分配

操作系统-非连续内存分配

这是我个人在学习操作系统的笔记。。。

1.基本概念

每个操作系统都有自己的方法来保存页表。
绝大多数都为每个进程分配一个页表。页表的指针与其他寄存器的值一起存入进程控制块

  1. 转换表缓冲区(TLB)–快表
    快表只存部分表,若发现匹配的页号,则将块号取出,不通过页表,直接与页内位移拼接,形成物理地址。
    若没有匹配的页号,按普通访问页表方式进行。再把该页号与块号对应关系送入快表保存。若快表满,则删除其中一个表项。
  2. 快速寄存器价格昂贵,完全由它来组成页表的方案不可取
  3. 分页保护
    分页环境下,内存保护通过与每个帧相关联的保护位来实现,保护位在页表中保存
  4. 分页的优先之一
    可以共享公共代码,其特点是只读,通过正确的代买,及操作系统强制实现

1.非连续内存分配:分段

1.1非连续分配内存的原因

  • 连续内存分配的缺点

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

1.2非连续内存分配

  • 优点

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

  • 缺点

    建立虚拟地址和物理地址之间的转换
    软件方案(开销大)
    硬件方案
    两种硬件方案
    分段
    分页

2.分段

  • 程序的分段地址空间(内存地址空间如何去寻址)
    逻辑地址空间是连续的,物理地址是离散的。中间需要有一种映射机制,让它们建立一种相应的关系。

  • 分段寻址方案(硬件手段)
    段访问机制:一个段指的是一个内存块,是一个逻辑地址空间
    程序访问内存地址需要:一个二维的二元组(s段号,addr端内偏移)

  • 段访问机制的硬件实现方案


2.非连续内存分配:分页

  1. 页号作为页表的索引
    页表包含每页所在物理内存的基地址
  • 划分物理内存至固定大小的-帧(物理)
    大小是2的幂,如512,4096,8192
  • 划分逻辑地址空间至相同的-页(逻辑)
    大小是2的幂,如512,4096,8192
  • 建立方案:逻辑转换为物理地址
    页表、MMU/TLB

2.1 物理地址部分:页帧
页帧:物理内存的布局和组织方式
帧:物理内存被分割为大小相等的帧
一个内存物理地址是一个二元组(f,o)表示

  • f –帧号(F位,共有2^F个帧)
  • o –帧内位移(S位,每帧有2^S个字节)
  • 通过一个实例来加深对这个概念的理解

首先有一个物理内存地址(3,6),帧号是3,它是7位的,说明一共能有2^7个帧,这个帧是其中的第3个;
帧内偏移是6,他是9位的,说明一个帧里可以有2^9个字节,当前地址是在这个帧里的第6个字节;
因此,它的物理地址是3 * 2^9 + 6。
通过这个例子,可以发现 页帧号 的作用就是通过一个二元组能够找到一个物理地址。

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

  • (逻辑地址)页内偏移的大小 = (物理地址的)帧内偏移的大小
  • (逻辑地址)页号大小可能不等于(物理地址的)帧号大小
  • 一个逻辑地址是一个二元组(p,o)
    p –页号(P位,2^p个页)
    o –页内偏移(S位,每页有2^s字节)