代码改变世界

存储管理

2019-05-14 20:32  林扬程1  阅读(406)  评论(0编辑  收藏  举报

 


1、试述计算机系统中的存储器层次。为什么要配置层次式的存储器?

计算机系统的存储器层次结构分为寄存器、高速缓存、主存储器、磁盘、磁带等5层。计算机系统均采用层次结构的存储子系统,以便在容量大小、速度快慢、价格高低等诸多因素中取得平衡点,获得较好的性能/价格比。

 

2、简述不同编译、链接、装载与地址定位过程。

编译:编译器将源程序转换成可重定位代码。

其有三个逻辑地址块:代码段(机器指令块),数据段(静态变量块),栈段(表示程序执行时使用的栈)。

编译器将所有的翻译过的机器指令写入代码段。考虑可重定位对象模块中的过程入口点,一般而言,编译器不能确定入口点的地址,因为目标过程可能在不同的可重定位模块中。例如,如果目标是库例程,如print(),目标函数在系统软件建立时就编译好了。由于在编译时不知道目标模块的地址,所以目标函数不能被绑定,知道连接器将调用函数的模板与定义函数的模版链接为止。编译器将注明对每个外部地址的引用,使得链接器在链接时可以确定在绝对程序中外部引用的地址,并能将正确的地址填入代码中。

链接:在链接时,每个可重定位对象模块的代码和数据段联合形成绝对程序。

链接器会将所有的数据段联合成单个的数据段,并将所有的代码段联合成单个代码段。当数据段合并时,各静态变量的相对地址将改变。链接器然后重定位指令中的地址,使得它们引用合并的数据段中的新地址。链接器然后对入口点引用与合并代码段中定义的入口点地址进行匹配。在合并可重定位模块时,所有未定义的地址引用最后会被链接器发现,最终的组合模块包括了所有的程序文本和数据,这样每个数据的引用或程序入口点的引用都被解决了。绝对模块可以存储在文件(辅存)直到被执行。

加载:在加载一个绝对程序之前,存储管理器会分配一块主存给进程。

然后加载器会将绝对程序和数据拷贝到分配的存储器中。注意,绝对模块的代码段部分中的地址需要再次调整。链接器将绝对程序中的所有地址设置成好像模块是从主存位置0处加载的。然而,模块现在是主存中的一个特定物理地址被加载的:存储块汇总的首地址需要由存储管理器指定。加载器转换每个内部逻辑主地址,使得它引用的是被分配的主存地址(而不是数据段或代码段的偏移量)。将程序使用的地址与主存中的物理存储位置相关联的过程称为地址绑定。

 

3、什么是逻辑地址、物理地址?什么是静态地址重定位、动态地址重定位?

内存是由若干个存储单元组成的,每个存储单元有一个编号,这种编号可惟一标识一个存储单元,称为内存地址(或物理地址)。源程序经过汇编或编译后,形成目标程序,每个目标程序都是以0为基址顺序进行编址的,原来用符号名访问的单元用具体的数据——单元号取代。这样生成的目标程序占据一定的地址空间,称为作业的逻辑地址空间,简称逻辑空间。在逻辑空间中每条指令的地址和指令中要访问的操作数地址统称为逻辑地址。动态地址重定位是在程序执行期间进行的。一般说来,这种转换由专门的硬件机构来完成,通常采用一个重定位寄存器,在每次进行存储访问时,对取出的逻辑地址加上重定位寄存器的内容,形成正确的物理地址,重定位寄存器的内容是程序装入内存的起始地址。静态重定位是在程序执行之前进行重定位,它根据装配模块将要装入的内存起始位置,直接修改装配模块中的有关使用地址的指令。

 

4、固定分区管理的缺点是什么?

存在内部碎片(分区内未被利用空间)、分区总数固定,限制了并发执行的程序数量。

 

5、简述固定分区存储管理和可变分区存储管理的区别

(1)固定分区存储管理:分区大小是事先固定的,因而可容纳作业的大小受到限制,而且当用户作业的地址空间小于分区的存储空间时,造成存储空间浪费。 
(2)可变分区存储管理:不是预先将内存划分分区,而是在作业装入内存时建立分区,使分区的大小正好与作业要求的存储空间相等。这种处理方式使内存分配有较大的灵活性,也提高了内存利用率。但是随着对内存不断地分配、释放,操作会引起存储碎片的产生

 

6、某系统采用可变分区方式管理主存储器,在主存分配情况如图所示时,有4个作业要求装入主存,它们各自所需的主存空间为:J1:8KB,J2:15KB,J3:30KB,J4:115KB,系统不允许移动。 用最先适应分配算法,按2341的作业顺序装入,描述作业装入内存的过程。

答: