存储器——虚拟内存概述及发展历史

虚拟内存引言

在谈虚拟内存之前,我们先来聊聊物理内存。物理内存是真实存在的,比如在8086系统中,CPU提供的地址可以直接到主存中寻址,并且获取数据,这是因为8086是单道程序执行,所有资源被独大的程序使用,这很合理。

一台电脑如果一次只能调用一个进程,此时我在打字,屏幕上不一定会即时显示。随着多道程序处理的出现,一个系统中的进程和其他进程共享CPU和主存资源,存储资源是有限的,如果程序失去了存储空间,那程序就无法执行。当多个进程共享内存时,容易出现“争斗”。
为了有效管理内存,现代系统提供了一种叫虚拟内存的抽象概念,这个虚拟并不是指fake,而是pretend,假装我在使用内存。
①虚拟内存为每个进程提供了一个独立的小空间,并且编址方式等等都是一样的,进程会以为自己在独立使用内存,其实这些数据都在磁盘中放着,只有需要的数据会放入内存。
②虚拟内存为进程提供了保护机制

早期分页存储器管理

  1. 早期:内存有限,程序员自己管理主存,每条指令要标出这个数据应该放在哪里。1961年,研究人员提出一种自动执行overlay的方式,程序自动分配内存。
  2. 为了减少程序员的工作量,人们把地址空间主存容量的概念区分开,程序员在地址空间内编写程序,计算机系统将程序员的地址空间映射到计算机的实际主存
    什么是地址空间?
    存放数据的空间,从程序员角度,这个数据在虚拟地址空间中,从CPU角度,这个数据在物理地址空间中,所以在不同的空间,一个数字的地址不一样(就好像空间的每个点在极坐标和直角坐标中的表示不一样)
    比如虚拟地址有16位,物理地址有12位,虚拟的空间比实际物理空间大,那怎么存放这些多出来的数据呢?
  3. 分页方式的实现:
    我们将216bit分为24页,每页有212bit,需要哪一页我就放进去哪一页(这利用了数据的空间局部性和时间局部性),同时改变地址值,将每个虚拟地址一一对应到0-212-1的地址中
    早期一个内存里放一页,现在根据需求不同可放多页。
  4. 是否需要将一个进程全部装入内存呢?
    答案是不需要,按需调页正是虚拟存储管理概念
    可能会浪费最后一页(最后一页不满但是也要全部调入并且独占一个页框)
    在这里插入图片描述
  5. 地址之间的转换由硬件完成:因为这是在指令执行阶段的任务

段式和段页式虚拟存储管理

  1. 分页方式的缺陷:
    由于页的大小往往确定,并且不会根据单一程序的实际情况改变。 如果一个数据跨页,就需要将两个页都调入内存,代价过高。一页中可能有数据段也有代码段,比较混乱。
  2. 引入分段系统
    一个程序由多个代码段和数据段构成,按照程序的逻辑结构(考虑了其实际意义)划分为多个相对独立的部分。(代码段,只读数据段,可读写数据段等等)
  3. 段的属性
    段名,段基址,段长,属性(分页方式尤其不利于说明数据或程序的属性)
    缺点:造成碎片(碎片空间放不下一个段)
  4. 段页式存储
    程序的虚拟地址空间先按段分,在段内分页。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值