码迷,mamicode.com
首页 > 其他好文 > 详细

三、存储管理之无存储抽象

时间:2016-05-12 13:19:56      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:

分层存储体系:在这个体系中,计算机有若干兆(MB)快速、昂贵、易失性的告诉缓存(cache),数千兆(GB)速度和价格适中且同样易失性的内存,以及几兆兆(TB)低速、廉价、非易失性的磁盘存储,还有USB等可移动存储装置。操作系统的工作就是将这个存储体系抽象为一个有用的模型并管理这个模型。

操作系统中管理分层存储器体系的部分称为存储管理器。它的任务是有效地管理内存,即记录那些内存是正在使用的,那些内存是空闲的;在进程需要时为其分配内存,在进程使用完后释放内存。

3.1 无存储抽象

早期大型计算机、早起小型计算机和个人计算机(20世纪六七十年代)没有存储器抽象。每个程序都直接访问物理内存。在这种情况下,想要在内存中同时运行两个程序是很困难的。第一个程序在2000的位置写入一个新的值,将会擦掉第二个程序放在相同位置上的内容。

实现并行的一种方法是使用多线程编程。因为线程间可以共享同一内存映像。但是人们通常希望能够在同一时间允许没有关联的程序,这是多线程不能解决的问题。而且,一个没有内存抽象的操作系统不大可能具有线程抽象的功能。

另一种方法是在加载另一个程序之前,先把当前内存中所有内容保存到磁盘文件中,这样,某一个时间内存中就只有一个程序从而避免了冲突。但是这个方案会极大限制运行效率。

另一种解决方案,需要特殊硬件的帮助。IBM 360的早期模型解决方案:把内存划分为2KB的块,每个块被分配一个四位的保护键,保护键存储在CPU的特殊寄存器中。这样,一个内存为1MB的机器需要512个4位寄存器(256字节)。PSW(程序状态字)中存有一个4位码,一个运行中的进程如果访问保护键与其PSW码不同的内存,IBM 360的硬件会捕获到这一事件。因为只有操作系统可以修改保护键,这样可以防止用户进程之间、用户进程和操作系统之间的互相干扰。

这种方案存在的问题:当第二个加载的程序有类似于JMP 28这样的指令时,程序的原意是想要跳转到程序开始位置后28个位置的地方,然而操作系统将会跳转到内存中从0开始的后28个位置的地方,造成程序的错误或崩溃。IBM 360的解决方案为引进了静态重定位技术,当一个程序被装载到16384地址时,常熟16384被加到每一个程序地址上。这个机制在不出错的情况下是可运行的买到这不是一种通用的解决办法,同时会减慢装载的速度。并且,它要求给所有的可执行程序提供额外的信息来区分哪些内存字中存有地址。

缺少内存抽象的情况在嵌入式系统和智能卡系统中还是很常见的。如收音机、洗衣机、微波炉这样的设备都已经完全被软件控制,这些情况下,软件都采用访问绝对内存地址的寻址方式。这些设备能够正常工作是因为所有的运行程序都是事先确定的。

把物理地址暴露给进程会带来下面几个严重的问题:

1)        如果用户程序可以寻址内存的每个字节,他们就可以很容易地(故意或偶然地)破坏操作系统,从而使系统慢慢地停止运行。即使在只有一个用户进程运行的情况下,这个问题也是存在的。除非有特殊的硬件进行保护,如IBM 360的锁键模式。

2)        使用这种模型,想要同时运行多个程序是很困难的。在个人计算机上,同时打开几个程序是很常见的。在系统中没有对物理内存进行抽象的情况下很难做到上述情景。


三、存储管理之无存储抽象

标签:

原文地址:http://blog.csdn.net/fighting_coder/article/details/51364706

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!