无存储器抽象
早期大型计算机(20世纪60年代之前),小型计算机(20世纪70年代之前),个人计算机(20世纪80年代)
不能同时运行2个以上程序,比如第一个程序在地址2000处存放了一个数据,第二个程序向2000也写入数据,那么之前2000地址处的数据会被擦除
将物理地址暴露的缺点:1、容易破坏操作系统 2、运行多个程序是困难的
嵌入式系统和智能卡系统中无存储器抽象还是很常见的,比如收音机、洗衣机、微波炉。
因为他们通常只有一个程序。
一种存储器抽象:地址空间
地址空间:一个进程可用于寻址内存的一套地址集合
主要解决2个问题:保护和重定位
通过在CPU中增加基址寄存器和界限寄存器来实现
每加载一个程序到内存中,基址寄存器保存程序的起始地址,界限寄存器保存程序的长度
这样做的问题就是如果程序大小超过内存大小就无法运行
交换技术
2种处理内存超载的方法:
①交换技术:进程调入内存,运行一段时间,然后存回磁盘
②虚拟内存:程序的一部分调入内存
20世纪60年代把程序分为许多段,称为覆盖
由程序员必须把程序分割成多个片段,费时枯燥,易于出错
解决办法:让计算机去做这些事情
虚拟内存基本思想
小例子
把一个程序抽象为一个班级,地址抽象为每个座位,内存抽象为坐在座位上的学生
有一个演出活动,由多个班级参加,在一个大会场,会场的座位区域抽象为虚拟内存
每个参与演出的班级都会来到会场对应的座位,人是教师的人,但是地址变了,这个地址是虚拟地址,在操作系统中是一个结构体保存着虚拟内存和物理内存之间的映射关系
表演场地抽象为内存
操作系统抽象为工作人员,工作人员会记录哪个班级进行表演
到某一个班级表演时,如果表演人员没有到位,那对应的几个学生先去表演,即部分程序加载到内存
同时有多个班级在表演,表示系统可以同时进行多个进程的执行
当场地不够时,场上许久没有进行表演的同学可以回到会场座位上了,为最近最久未使用算法