1.内存空间的共享和保护
为了节省内存空间和提高内存利用率,可用的内存空间常常由许多进程共享,两个或多个进程共享内存中相同区域称为内存的共享。共享又分为代码共享和数据共享,代码共享是指多个进程运行内存中的同一个程序代码段,如多个进程共享同一个编辑器程序完成编辑工作,代码共享要求共享的代码为纯代码(也称可重入代码),纯代码是指不可被任意修改的代码;数据共享可实现进程通信,如一个进程对某个变量赋值,而另一个进程读取同一个变量的值,这种情况下对共享数据操作要进行互斥并保证正确的操作次序。
系统为每个进程设置了访问内存共享区的权限,如可读写、只读、只可执行等,不允许进程对内存共享区进行违反权限的操作。即实现信息共享必须解决共享信息的保护问题。
在多道程序设计环境下,当系统中同时存在系统程序和多个用户程序时,如何保证用户程序不破坏系统程序?如何保证用户程序之间不相互干扰?这些都是存储管理中存储保护需要解决的问题。存储保护的目的是保护系统程序区不被用户有意或无意地侵犯,不允许用户程序读写不属于自己存储空间的数据,使得内存中的各道程序只能访问各自的内存区,以避免彼此之间相互干扰,特别是当一道程序发生错误时,不至于影响其他程序的正常运行。保护功能通常由硬件完成并辅以软件实现。
计算机中使用的存储保护主要包括界地址保护、存储键保护等方式。
(1)界地址保护
界地址保护方式主要是防止地址越界,每个进程(程序)都有属于自己的内存空间,如果一个进程(程序)在运行中出现所访问的地址超出其所属内存空间时,则出现地址越界。也就是说,当进程(程序)要访问某个内存单元时,由硬件实施是否越界的检查,如果未越界,则执行此次访问操作;否则产生地址越界中断,并由操作系统进行相应的处理。
常用的界地址保护有以下两种。
①上下界保护和地址检查机构。这种机制主要用于静态地址转换。硬件提供一对上下界寄存器,来分别存放程序装入内存后的首地址和末地址。当访问内存地址时,地址检查机构将CPU提供的访存地址(注意:静态地址转换后该地址为物理地址)与上、下界寄存器的值进行比较。若介于上下界之间,则可用该地址直接访问内存;否则产生地址越界中断,并终止程序的运行。
②基址、限长寄存器和动态地址转换机构。这种机制主要用于动态地址转换。在计算机中设置两个专门的寄存器,称为基址寄存器和限长寄存器,这两种寄存器分别存放当前运行程序中内存的起始地址及程序的长度。在访问内存地址时,首先将CPU提供的访存地址(在动态地址转换中该地址为逻辑地址)与限长寄存器中的值进行比较,若越界(超出程序的长度),则终止该程序运行;否则将访存地址(逻辑地址),加上基址寄存器中存放的该程序在内存的起始地址,得到要访问的内存物理地址。
(2)存储键保护(www.xing528.com)
存储键保护方式是通过保护键匹配来判断存储访问方式是否合法。其方法是对每个内存区域指定一个键值和若干禁止的访问方式,并且给每个进程也指定键值,如果所访问的内存区域键值和当前运行的进程键值不匹配,而且是被禁止的访问方式,则发生操作越权错误。所谓键值就是操作代码,如01表示允许读操作,10表示允许写操作,11则表示既可以读操作又可以写操作,00表示禁止访问等。CPU的程序状态字寄存器PSW中,设置相应的位来表示当前可访问的内存存储区键值。这样,只有在PSW中的键值、当前运行进程所拥有的键值以及当前访问的方式均匹配时,才能执行相应的访问操作,否则为非法操作,且终止该进程的执行。
2.内存空间的扩充
用户在编写程序时不应受内存容量的限制,因此要采用一定技术来扩充内存的容量,使用户得到比实际内存容量大得多的存储空间。实现内存扩充的根本办法是充分利用内存与外存资源,即只将当前需要使用的部分程序和数据放入内存,而将暂不使用的部分程序和数据暂存于外存,当需要的时候再交换(与内存中已使用过的部分程序和数据交换其存储位置)到内存来。因此,这就需要在程序的执行过程中,经常地在内、外存之间交换程序和数据。
控制程序和数据在内、外存之间交换的基本方式有以下两种。
(1)用户程序自己控制方式。典型的例子是覆盖,即将不同时执行的几个程序段共用一段内存区域,通过在需要的时候装入要执行的程序段,来覆盖掉已存放在该内存区程序段的方法,达到扩充内存的目的。覆盖管理的目标是逻辑扩充内存,以缓解大程序与小内存之间的矛盾。覆盖技术要求用户清楚地了解程序的结构,并指定用于覆盖的各程序段及调入同一内存区的先后次序,它是一种早期的内存扩充方式,不能实现虚拟存储。
(2)操作系统控制方式。这种方式又可进一步分为交换方式、请求调入方式和预调入方式三种。
①交换方式的基本目的是缓解内存不够大的问题,它利用外存空间(进程交换区),通过对进程实体的整体或部分交换(内存不够用时,将内存中某些暂不执行的进程调出至外存,然后将需要执行的进程由外存调入内存)来满足用户程序(进程)对内存的需要,从而实现多道程序运行。交换方式的主要特点是打破了进程运行的驻留性(进程创建后一直驻留内存)。
②请求调入方式是在程序执行过程中,如果所要访问的程序段或数据段不在内存时,则由操作系统自动地从外存将有关的程序段和数据段调入内存。
③预调入方式则由操作系统预测在不远的将来会访问到哪些程序段和数据段,并在它们被访问之前选择合适的时机将其调入内存。
在操作系统控制方式下,只需装入部分程序和数据到内存,而其余的部分程序和数据则驻留在外存。在程序运行过程中,系统采用某种方法把未装入的部分程序和数据由外存调入内存,或者把内存中不用的部分程序和数据调出至外存。这样,使得系统可以运行比内存容量大的程序,或者在内存中装入尽可能多的程序。对用户来说,好像有一个十分大的内存,这个内存就是虚拟存储器。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。