第八章: 内存管理

进程使用内从内存的界定

  • 一个进程使用的地址范围 基地址寄存器 和 界限地址寄存器 决定
  • 基地址是开始位置 界限地址寄存器是偏移量

内存空间划定意义

  • 避免系统区域被用户程序修改
  • 确保用户进程不被其他进程访问

地址绑定

  • 地址绑定
    是进程内内存到物理实际内存的映射
  • 物理地址可以直接寻址
  • 地址绑定是逻辑地址到物理地址的映射
    源程序中的地址 -> 可重定位地址-> 绝对地址
  • 3种情况
    编译时就知道进程在内存中的地址
    加载时进行 编译器生成可重定位代码后
    运行时进行 进程可以从一个内存段移到另一个内存段,犹如动态链接库

LINUX内存文件

  • 6列 地址范围 权限 偏移量 设备 节点 路径

动态加载

  • 优点
    不使用的程序不会加载到内存
    适合操作大量不常发生的事件
    不需要操作系统特别支持,由程序员设计
  • 本质是,进程运行时载入了一段别的代码,用于使用

交换 本质是主存进程的交换

  • 交换到快速磁盘
  • 换出再换入时调入哪个内存的算法
    编译时决定 加载时决定 运行时决定

内存分配 实际上是进程放在内存的哪里比较好

连续分配

  • 多分区方法 多个固定大小分区 分区大小相同 分区大小不同
  • 可变分区方法 内存记录已用未用内存,就是实验4内容

不连续分配

  • 分页 进程块为页 内存块为帧
  • 一个进程分的内存块可以不是连续的
  • 一个进程持有一个页表

页表

  1. 页表的地址变换
    页号:页表基地址 与 页偏移:与页表基地址形成帧号
  2. 页表的实现 可用专用寄存器 或 载入内存 来实现
  3. 页表载入内存的问题
    为了访问数据需要两次访问内存
    第一次为了获取页表信息
    第二次为了使用页表信息访问数据
  4. 地址转换旁观缓冲
    使用高速缓冲区存放页表
    访问数据只需要访问一次
  5. 在分页环境下实现内存保护 使用保护位
    页表的长度是固定的,如果有程序不需要用到所有的页表的话,必定有尾部几块的页表是无效的,所以要避免进程访问不属于它自己的数据
  6. 分页优点
    使用共享页表实现代码共享
  7. 页表结构
    层次页表
    避免进程同一时间持有的页表过于庞大,层次页表的本质是 按需读区某一小段的页表,使其他页表强制失效
    第八章: 内存管理_第1张图片
    多级页表示意图

哈希结构
逻辑地址的定义为:虚拟页码 + 偏移量
哈希页表每一条目是链表,链着 虚拟页码,此页对应的帧号,下一个元素指针
通过进程页号转移到哈希表中 -> 找到对应的帧号 -> 用帧号与页偏移形成物理地址
反向页表
不是重点,不做赘述

你可能感兴趣的:(第八章: 内存管理)