首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >计算机组织结构(十) 内存管理

计算机组织结构(十) 内存管理

作者头像
Rikka
发布2022-01-18 14:12:23
发布2022-01-18 14:12:23
6450
举报
文章被收录于专栏:rikkarikka

📚 文档目录 合集-数的二进制表示-定点运算-BCD 码-浮点数四则运算-内置存储器-Cache-外存-纠错-RAID-内存管理-总线-指令集: 特征- 指令集:寻址方式和指令格式

过去, 只有操作系统和一个程序在内存中.

现在, 操作系统和多个程序都在内存中. 程序等待 I/O 时, 为了避免处理器等待, 需要进行优化, 使得更多的程序可以加载入内存.

内存管理: 在多程序设计系统中, 内存的 “用户部分” 应该被进一步划分以适应多个程序, 这是由系统动态决定的.

加载更多程序的途径

  • 增大内存
  • 使用交换和重叠技术
    • 当没有程序就绪的时候, 系统载入程序
    • 分区分页
  • 虚拟内存
    • 请求分页
    • 虚拟地址

分区

固定大小分区

系统: 固定的大小

用户程序: 固定的大小, 但各不相同. 当加载一个程序的时候, 将其载入刚好能够容纳下这个程序的最小的区中.

缺点: 产生大量内部碎片.

可变大小分区

系统: 固定的大小

用户程序: 按需分配

缺点: 产生大量外部碎片

分页

基本思想:

  • 将内存分为固定大小的块, 称为页框(页帧), 将程序分为固定大小的块, 称为
  • 将页加载入页框中

逻辑地址: 指令中的地址

物理地址:主存中的地址

虚拟内存

内存的大小是有限的,但是对内存的需求在不断增加

基本思想:请求分页,一个进程的页只有在需要的时候才被调入

本质:

  • 在比内存大的逻辑地址空间中编程
  • 只调入需要的程序和数据
  • 通过硬件将逻辑地址转化为物理地址
  • 当发生页缺失的时候在内存和硬盘之间交换信息

一些问题

  • 页的大小: 4KB, 8Kb…
  • 映射函数: 关联映射
  • 类型:
    • 基于页的虚拟内存
    • 基于段的虚拟存储器
    • 基于段和页的虚拟内存
  • 写策略: 写回

基于页的虚拟内存

将主存和虚拟内存分成相同大小的页

  • 虚页(Virtual page)/逻辑页(Logical page): 虚拟内存中的页
  • 物理页(Physical page)/页框(page frame): 主存中的页

页表:

  • 包含着所有虚页的信息, 包括位置, 有效位, 脏位, 可读写位
  • 存储在主存中
  • 虚拟地址 <− 虚页号 + 页内地址 (偏移量)

快表 (TLB)

页表的使用增加了主存的访问

为了减少访问主存, 将最常用的页表项加载进 cache

TLB: 页表项被载入 cache

  • 全相联映射, 组关联映射
  • 随机替换策略

No.

TLB

page table

cache

possibility

1

hit \

valid

————-

hit

possible, in cache

2

hit \

invalid

————-

hit

impossible

3

hit \

invalid

————-

miss

impossible

4

hit \

valid

————-

miss

possible, in memory bu not in cache

5

miss

valid

hit

possible, in cache

6

miss

invalid

hit

impossible

7

miss

valid

miss

possible, in memory bu not in cache

8

miss

invalid

miss

possible, not in memory

ps: 快表中只有 valid 情况下才能算 hit

分析:

  • 最好: 1, 未访问内存
  • 好 4, 5 只访问一次内存
  • 坏 7 两次访问主存
  • 最坏 8 两次访问主存, 并访问硬盘

基于段的虚拟存储器

将程序和数据分成不同长度的段, 并将需要的段载入主存

虚拟地址: 段号 + 段内偏移量

与基于页的虚拟内存相比:

  • 基于页的虚拟内存
    • 优势: 简单, 成本低
      • 劣势:指令和数据可能跨页
  • 基于段的虚拟内存
    • 优势: 数据和程序自然划分
    • 劣势: 长度并非固定

基于段和页的虚拟内存

将程序和数据划分为段, 并进一步将段划分为页, 每一个段都有它自己页表

虚拟地址: 段号 + 页号 + 偏移量

优势: 程序在段中可以共享和保护

劣势: 需要多次查表

补充 PA 中的内存管理部分

实模式

8086的实模式
  • 寄存器长度:16 位
    • 访问内存需要结合段寄存器(segment register)进行
  • 地址线:20 根
  • 物理地址计算方式 physical address = (seg_reg<<4)+offset,offset 为 16 位的偏移量 可寻址空间:
分段机制

x86 的机器开机后首先进入实模式

  • 加载操作系统
  • 操作系统初始化段表
  • 拨动一个”开关”, 从实模式切换到保护模式

进入保护模式后

  • 程序给出 48 位逻辑地址(16位段选择符 + 32 位有效地址)
  • 使用段选择符来查段表
  • 进行段级地址转换得到线性地址
分段机制(地址转换)

80386 保护模式下的地址转换

  • 逻辑地址到线性地址的转换
    • 逻辑地址: 48 位, 又叫虚拟地址,其中 段选择符: 16 位(sreg对应的段寄存器的内容) 段内偏移量(有效地址): 32 位(vaddr给出的32位地址)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-12-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 加载更多程序的途径
  • 分区
    • 固定大小分区
    • 可变大小分区
  • 分页
  • 虚拟内存
    • 一些问题
    • 基于页的虚拟内存
    • 快表 (TLB)
    • 基于段的虚拟存储器
    • 基于段和页的虚拟内存
  • 补充 PA 中的内存管理部分
    • 实模式
      • 8086的实模式
      • 分段机制
      • 分段机制(地址转换)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档