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