无存储设备
  简单的存储器抽象是根本没有抽象。每一个程序都直接访问物理内存。当一个程序执行如下命令:
  MOV REGISTER1, 1000
  计算机会将位置1000的物理内存中的内存移到REGISTER1中。因此,那时呈献给编程人员的存储器模型是简单地物理内存:从0到某个上限的地址集合,每一个地址对应一个可容纳一定数目二进制位的存储单元,通常是8个。
  一种存储抽象:地址空间
  把物理地址暴露给进程会带来几个严重问题:第一,如果用户程序可以寻址内存的每个字节,它们可以很容易地(故意地或偶然地)破话操作系统;第二,使用这种模型,想要同时(如果只有一个CPU轮流执行)运行多个程序时很困难的。
  地址空间的概念
  地址空间为程序创造了一种抽象的内存。地址空间是一个进程可用于寻址内存的一套地址集合。每个进程都有一个自己的地址空间,并且这个地址空间独立于其他进程的地址空间。
  交换技术
  把所有进程一直保存在内存中需要巨大的内存,如果内存不够,做不到这一点。
  有两种处理内存超载的通用方法。简单的策略是交换技术,即把一个进程完整调入内存,使该进程运行一段时间,然后把它存回磁盘上,所以当它们不运行时不会占用内存(尽管它们的一些进程会周期性地被唤醒以完成相关工作,然后又进入睡眠状态)。另一种策略是虚拟内存,该策略甚至能使进程在只有一部分被调入内存的情况下运行。
  有一个问题值得注意,即当进程被创建或换入时应该为它分配多大的内存。
  如果大部分进程在运行时都要增长,为了减少因内存区域不够而引起的进程交换和移动所产生的开销,一种可用的方法是,当换入或移动进程时为它分配一些额外的内存。
  虚拟内存
  虚拟内存的基本思想是:每个进程拥有自己的地址空间,每个空间被分割成多个块,每一个块称作一页或页面。每一页有连续的地址范围。这些页被映射到物理内存,但并不是所有的页都必须在内存中才能运行程序。当程序引用到一部分在物理内存中的地址空间时,由于硬件立刻执行必要的映射。当程序引用到一部分不在物理内存中的地址空间时,由操作系统负责将缺失的部分装入物理内存并重新执行失败的指令。

  分页
  由程序产生的这些地址成为虚拟地址,它们构成了一个虚拟地址空间。
  虚拟地址空间按照固定大小划分成称为页面的多干单元,在物理内存中对应的单元成为页框。
  页表
  虚拟地址到物理地址的映射可以概括如下:虚拟地址被分成虚拟页号(高位部分)和偏移量(低位部分)。
  页表的目的是把虚拟页面映射为页框。从数学角度说,页表是一个函数,它的参数是虚拟页号,结果是物理页框号。通过这个函数可以把虚拟地址中的虚拟页面的虚拟页面域被替换成页框域。从而形成物理地址。
  分段
  一个直观并且通用的方法是在机器上提供多个互相独立的称为段的地址空间。分段存储管理,每一个段都可以独立地增大或减小而不会影响其他的段。
  分页和分段的比较

  纯分段的实现
  分段和分页的实现本质上是不同的:页面是定长的而段不是。