计算机系统中的存储器可以分为两类:内存储器(简称内存)和外存储器(简称外存)。处理器可以直接访问内存,但不能直接访问内存。CPU要通过启动相应的输入/输出设备后才能使内存和外存交换信息。
内存管理是操作系统中重要功能之一。
存储设备的速度仍然明显慢于同一级别的中央处理器的速度。任何一种存储设备都无法在速度与容量两个方面同时满足用户的需求。
任何程序和数据以及各种控制用的数据结构都必须占用一定的存储空间,因此,存储空间直接影响系统性能。
内存空间:由存储单元(子节或字)组成的一维连续的地址空间,内存空间用来存放当前正在运行程序的代码及数据,是程序中指令本身地址所指的亦即程序计数器所指的存储空间。
存储管理的实质就是管理供用户使用的那部分空间。
内存管理问题的主要包括:内存管理方法、内存的分配和释放算法、虚拟存储器的管理、控制内存和外存之间的数据流动方法、地址交换技术和内存数据保护与共享技术等。
单道、单用户:在一个区域内存放系统软件,如操作系统本身,而另外一个区域放置用户程序。
多道、多用户系统:为了提高系统的的利用率,需要将内存划分更多的区域,以便支持多道程序。
在操作系统中存储管理的主要任务。
一个有效的存储分配机制,应对用户提出的需求予以快速响应,为之分配相应的存储空间。在用户程序不再需要它的同时及时回收,以供其他用户使用。
功能:
为了实现上述功能,必须引入分配表格,统称为内存分配表,其组织方式包括:
内存分配的两种方式:
动态存储分配具有较大的灵活性:
存储共享是指两个或多个进程共用内存中的相同区域,这样不仅能使多道程序动态的共享内存,提高内存利用率,而且还能共享内存中某个区域的信息。
内容包括:代码共享和数据共享,特别是代码共享要求代码必须是纯代码。
为多个程序共享内存提供保障,是在内存中的各个程序只能访问其自己的区域,避免各程序间相互干扰。
存储保护通常是需要有硬件的支持,并由软件配合实现。
(1)地址越界保护
每个进程都具有其相对独立的进程空间,如果进程在运行是所产生的地址超出其地址空间,则发生地址越界。地址越界可能侵犯其他进程的空间,影响其他进程的正常运行;也可能侵犯操作系统空间,导致系统混乱。对程序产生的地址必须加以检查,发生越界时产生中断,由操作系统进行相应处理。
(2)权限保护
对于多个进程贡献的公共区域,每个进程都有自己的访问权限。
当发生地址越界或者非法操作的时候,由硬件产生中断,进入操作系统处理。
在硬件支持下,软件、硬件相互协作,将内存和外存结合起来统一使用。
借助虚拟存储技术或其他交换技术在逻辑上扩充内存容量,亦即为用户提供比内存物理空间大的多的地址空间,使得用户感受它的程序是在一个大的存储器中运行。
存储器以字节(1B=8个二进制位)为编址单位,每个字节都有一个地址与其对应。假定存储器的容量为n个字节,其地址编号为0,1,2,3,…,n-1 。这些地址称为内存的“绝对地址”,与绝对地址对应的内存空间称为“物理地址空间”。
用户程序中使用的地址称为“逻辑地址”,与逻辑地址对应的存储空间称之为“逻辑地址空间”。
当用户程序进入计算机系统请求执行时,存储管理要为他分配合适的内存空间,这个分配到的内存空间可能是从某个单元开始的一组连续的地址空间。该地址空间的起始地址是不固定的,而且逻辑地址与分到的内存地址空间的绝对地址经常不一致。每个逻辑地址在内存中也没有一个固定的绝对地址与之对应。
为了保证程序的正常执行,必须根据分配给程序的内存区域对程序中指令和数据的存放地址进行重定位,即要把逻辑地址转换成为绝对地址。
把逻辑地址转换成绝对地址的工作称为“地址重定位”或“地址转换”,又称“地址映射”。重定位的方式有“静态重定位”和“动态重定位”两种。
由于地址转换工作是在程序开始执行前集中完成的,所以在程序执行过程中就无须再进行地址转换工作。称为“静态重定位”。
在装入程序时,不进行地址转换,而是直接把程序装到分配的内存区域中,在程序执行过程中,每当执行一条指令时都由硬件的地址转换机构将指令中的逻辑地址转换成绝对地址。称为“动态重定位”。
动态重定位由软件和硬件互相配合来实现。硬件要有一个地址转换机构,该机构可由一个基址寄存器和一个地址转换线路组成。
存储管理为程序分配内存区域后,装入程序把程序直接装到所分配的区域中,并把内存区域的起始地址存入相应程序进程的进程控制块中。当程序进程被调度占用处理器时,随同现场信息的恢复,程序所占的内存区域的起始地址也被存放到“基址寄存器”中。程序执行时,处理器每执行都会把指令中的逻辑地址与基址寄存器中的值相加得到绝对地址,然后按绝对地址访问内存。