存储器管理

Posted STR·不语

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了存储器管理相关的知识,希望对你有一定的参考价值。

1、可采用哪几种方式将程序装入内存?它们分别适用于何种场合?

答:A、首先由编译程序将用户源代码编译成若干目标模块,再由链接程序将编译后形成的目标模块和所需的库函数链接在一起,组成一个装入模块,再由装入程序将装入模块装入内存;

B、装入模块的方式有:绝对装入方式,可重定位方式和动态运行时装入方式;

C、绝对装入(absolute loading):在可执行文件中记录内存地址,装入时直接定位在上述(即文件中记录的地址)内存地址。适用于单道程序环境下。

D、可重定位方式适用于多道程序环境下;可重定位装入(relocatable loading):在可执行文件中,列出各个需要重定位的地址单元和相对地址值。当用户程序被装入内存时,一次性实现逻辑地址到物理地址的转换,以后不再转换(一般在装入内存时由软件完成)。即:装入时根据所定位的内存地址去修改每个重定位地址项,添加相应偏移量。

E、动态运行时装入方式也适用于多道程序环境下。动态装入(dynamic run-time loading):在可执行文件中记录虚拟内存地址,装入和执行时通过硬件地址变换机构,完成虚拟地址到实际内存地址的变换。

2、何谓静态链接及装入时动态链接和运行时的动态链接?

A、静态链接是指事先进行链接形成一个完整的装入模块,以后不再拆开的链接方---式;

B、装入时动态链接是指目标模块在装入内存时,边装入边链接的链接方式;

C、运行时的动态链接是将某些目标模块的链接推迟到执行时才进行。

3、在进行程序链接时,应完成哪些工作?

A、对相对地址进行修改; B、变换外部调用符号。

4、在动态分区分配方式中,可利用哪些分区分配算法?

答:A、首次适应算法; B、循环首次适应算法;C、最佳适应算法; D、最坏适应算法。

最先匹配法(first-fit)首次适应算法按分区的先后次序,从头查找,找到符合要求的第一个分区

该算法的分配和释放的时间性能较好,空闲较大的分区可以被保留在内存高端。

但随着低端分区不断划分而产生较多小分区,每次分配时查找时间开销会增大。

下次匹配法(next-fit)循环首次适应算法按分区的先后次序,从上次分配的分区起查找(到最后分区时再回到开头),找到符合要求的第一个分区

该算法的分配和释放的时间性能较好,使空闲分区分布得更均匀,但较大的空闲分区不易保留。

最佳匹配法(best-fit)最佳适应算法找到其大小与要求相差最小的空闲分区

从个别来看,外碎片较小,但从整体来看,会形成较多外碎片。较大的空闲分区可以被保留。

最坏匹配法(worst-fit)最坏适应算法找到最大的空闲分区

基本不留下小空闲分区,但较大的空闲分区不被保留。

5、在动态分区分配方式中,应如何将各空闲分区链接成空闲分区链?

应在每个分区的起始地址部分,设置一些用于控制分区分配的信息,以及用于链接各分区的前向指针;在分区尾部则设置一后向指针,通过前,后向指针将所有的分区链接成一个双向链。

6、为什么要引入动态重定位?如何实现?

答:A、为了在程序执行过程中,每当访问指令或数据时,将要访问的程序或数据的逻辑地址转换成物理地址,引入了动态重定位。

B、可在系统中增加一个重定位寄存器,用它来装入(存放)程序在内存中的起始地址,程序在执行时,真正访问的内存地址是相对地址与重定位寄存器中的地址相加而形成的,从而实现动态重定位。

7、试用类 Pascal 语言来描述首次适应算法进行内存分配的过程。

使用FBC和类PASCAL语言描述。

        PROGRAM   blockcontrol;

        type    blk =^block

         block=RECORD

         addr : integer  /*分区始址*/

         size : integer   /*分区大小*/

               next : blk      /*后续分区*/

                const  max=100   /*限制分区块数*/

                δ=10    /*限制分区最小长度*/

                var  fbc : array[0..max] of blk

    PROCEDURE   get_block(x,p);

    begin  i:=1;

WHILE (FBC[i].size<>0) AND (FBC[i].size<x) DO

       i:=i+1;

IF FBC[i]:=0  THEN  p:=0

             ELSE  begin p:=FBC[i].addr;

                         y:=FBC[i].size-x;

                         IF y>=δ THEN begin FBC[i].size:=y;

                                            FBC[i].addr:=FBC[i].addr+x;

                                       end;

                    end;

    end;

    PROCEDURE    free_block(x,p);

    begin  i:=0;

REPEAT  i:=i+1

UNTIL  FBC[i]<p AND FBC[i+1]>p

IF     FBC[i+1]=x+p

THEN  IF    (FBC[i].size+FBC[i])=p

       THEN  FBC[i].size:=FBC[i].size+FBC[i].size+x

              FBC[i].next:=FBC[i+2]

       ELSE  FBC[i+1]:=p

              FBC[i+1].size:=FBC[i+1].size+x

ELSE   IF   (FBC[i].size+FBC[i])=p

       THEN  FBC[i].size=FBC[i].size+x

       ELSE   FBC[i].next:=p

               FBC[i].next^.size:=x

               FBC[i].next^.next:=FBC[i+1]

    end;

 (x为申请空间或回收块的大小,p为分配自由块或回收块的始地址)

7、在采用首次适应算法回收内存时,可能出现哪几种情况?应怎样处理这些情况?

A、回收区与插入点的前一个分区相邻接,此时可将回收区与插入点的前一分区合并,不再为回收分区分配新表项,而只修改前邻接分区的大小;

B、回收分区与插入点的后一分区相邻接,此时合并两区,然后用回收区的首址作为新空闲区的首址,大小为两者之和;

C、回收区同时与插入点的前后两个分区邻接,此时将三个分区合并,使用前邻接分区的首址,大小为三区之和,取消后邻接分区的表项;

D、回收区没有邻接空闲分区,则应为回收区单独建立一个新表项,填写回收区的首址和大小,并根据其首址,插入到空闲链中的适当位置。

9、在系统中引入对换后带有哪些好处?

能将内存中暂时不运行的进程或暂时不用的程序和数据,换到外存上,以腾出足够的内存空间,把已具备运行条件的进程或进程所需的程序和数据换入内存,从而大大地提高了内存的利用率。

10 为实现对换,系统应具备哪几方面功能?

A、对对换空间的管理; B、进程的换出; C、进程的换入。

11 在以进程为单位进行对换时,每次是否都将整个进程换出?为什么?

A、以进程为单位进行对换时,每次都将整个进程换出;

B、目的为了解决内存紧张的问题,提高内存的利用率。

12 为实现分页存储管理,需要哪些硬件支持?你认为以 Intel 8086,MC68000,Intel 80286 为芯片的微机,是否适合于实现分页管理?(有待讨论)

13 请较详细地说明,引入分段存储管理是为了满足用户哪几方面的需要?

A、方便了编程; B、实现了分段共享; C、实现了分段保护;D、实现了动态链接; E、实现了动态增长。

14 在具有快表的段页式存储管理方式中,如何实现地址变换?

首先,必须配置一段表寄存器,在其中存放段表始址和段长 TL。 进行地址变换时,先利用段号 S,与段长TL 进行比较,若 S<TL,表示未越界,(若 S>=TL,表示段号太大,访问越界,产生越界中断信号)于是利用段表始址和段号来求出该段对应的段表项在段表中的位置,从中求出该段的页表始址,并利用逻辑地址中的段内页号 P 来获得对应页的页表项位置,从中读出该页所在的物理块号 b,再用块号 b 和页内地址构成物理地址。

15 为什么说分段系统较之分页系统更易于实现信息共享和保护?

A、对于分页系统,每个页面是分散存储的,为了实现信息共享和保护,则页面之间需要一一对应起来,为此需要建立大量的页表项;

B、而对于分段系统,每个段都从 0 开始编址,并采用一段连续的地址空间,这样在实现共享和保护时,只需为所要共享和保护的程序设置一个段表项,将其中的基址与内存地址一一对应起来即可。

16 分页和分段有何区别?

答:A、共同点:分页和分段都采用离散分配的方式,且都要通过地址映射机构来实现地址变换,这是它们的共同点;

B、不同点:1、,页是信息的物理单位,分页是出于系统管理的需要,段是信息的逻辑单位,分段是出于用户应用的需要。 2、一条指令或一个操作数可能会跨越两个页的分界处,而不会跨越两个段的分界处。3、页大小是系统固定的,而段大小则通常不固定。4、分页的作业地址空间是一维的,而分段的作业地址空间是二维的。 5、通常段比页大,因而段表比页表短,可以缩短查找时间,提高访问速度。

17 试全面比较连续分配和离散分配方式。

A、连续分配是指为一个用户程序分配一个连续的地址空间,包括单一连续分配方式和分区式分配方式,前者将内存分为系统区和用户区,系统区供操作系统使用,用户区供用户使用,是最简单的一种存储方式,但只能用于单用户单任务的操作系统中;分区式分配方式分为固定分区和动态分区,固定分区是最简单的多道程序的存储管理方式,由于每个分区的大小固定,必然会造成存储空间的浪费;动态分区是根据进程的实际需要,动态地为之分配连续的内存空间,常用三种分配算法:首次适应算法 FF,该法容易留下许多难以利用的小空闲分区,加大查找开销;循环首次适应算法,该算法能使内存中的空闲分区分布均匀,但会致使缺少大的空闲分区;最佳适应算法,该算法也易留下许多难以利用的小空闲区;

B、离散分配方式基于将一个进程直接分散地分配到许多不相邻的分区中的思想,分为分页式存储管理,分段存储管理和段页式存储管理。 分页式存储管理旨在提高内存利用率,满足系统管理的需要,分段式存储管理则旨在满足用户(程序员)的需要,在实现共享和保护方面优于分页式存储管理,而段页式存储管理则是将两者结合起来,取长补短,即具有分段系统便于实现,可共享,易于保护,可动态链接等优点,又能像分页系统那样很好的解决外部碎片的问题,以及为各个分段可离散分配内存等问题,显然是一种比较有效的存储管理方式;

C、综上可见,连续分配方式和离散分配方式各有各自的特点,应根据实际情况加以改进和利用。

1、在请求分页系统中,其页表项中包含那些数据项? 它们的作用是什么?

答:A、在请求分页系统中,其页表项中包含的数据项有页号,物理块号,状态位 P,访问字段 A,修改位 M 和---外存地址;

B、其中状态位 P 指示该页是否调入内存,供程序访问时参考;

C、访问字段 A 用于记录本页在一段时间内被访问的次数,或最近已有多长时间未被访问,提供给置换算法选择换出页面时参考;

D、修改位 M 表示该页在调入内存后是否被修改过;

E、外存地址用于指出该页在外存上的地址,通常是物理块号,供调入该页时使用。

2、一个计算机系统的虚拟存储器,其最大容量和实际容量分别由什么决定?

A、最大容量由内存和外存之和决定;B、实际容量由内存决定。

3、虚拟存贮器有那些特征? 其中最本质的特征是什么?

A、虚拟存储器具有离散性,多次性,对换性和虚拟性的特征;

B、其中最本质的特征是离散性,在此基础上又形成了多次性和对换性,所表现出来的最重要的特征是虚拟性。

4、实现虚拟存储器要那些硬件支持?

A、对于为实现请求分页存储管理方式的系统,除了需要一台具有一定容量的内存及外存的计算机外,还需要有页表机制,缺页中断机构以及地址变换机构;

B、对于为实现请求分段存储管理方式的系统,除了需要一台具有一定容量的内存及外存的计算机外,还需要有段表机制,缺段中断机构以及地址变换机构;

5、在实现虚拟存储器时的几个关键技术是什么?

(有待讨论)

6、在请求分页系统中,页表应包括那些数据项?每项的作用是什么?

(同第一题)

7、在请求分页系统中,应从何处将所需页面调入内存?

A、在进行地址变换时,首先去检索快表,试图从中找出所要访问的页,若找到,便修改页表项中的访问位,对于写指令,还须将修改位置 1,然后利用页表项中给出的物理块号和页内地址,形成物理地址;

B、如果在快表中未找到该页的页表项,则应再到内存中去查找页表,再从找到的页表项中的状态位来了解该页是否已调入内存,如果该页已调入内存,应将此页的页表项写入快表,当快表已满时,应先调出按某种算法所确定的页的页表项,然后再写入该页的页表项;

C、如果该页尚未调入内存,这时便应产生缺页中断,请求 OS 从外存中把该页调入内存;

D、外存分为文件区和对换区,若系统有足够的对换区空间,可在进程运行前,将与该进程有关的文件拷贝到对换区,需要时从对换区调入;

E、若系统缺少足够的对换区空间,则凡是不会被修改的文件,可直接从文件区调入,需换出时可不必写入外存,但对于可能被修改的部分,在将它们换出时,便须调到对换区,以后需要时再从对换区调入。

8、在请求分页系统中,常采用哪几种页面置换算法?

A、最佳置换算法; B、先进先出算法;C、最近最久未使用 LRU 置换算法; D、Clock 置换算法; E、此外,还有最少使用置换算法和页面缓冲算法。

9、某虚拟存储器的用户空间共有 32 个页面,每页 1KB,主存 16KB、假定某时刻为用户的第 0,1,2,3 页分别分配的物理块号为 5,10,4,7,试将虚拟地址 0A5C 和 093C 变换为物理地址。

A、将 0A5C 变换为 2 进制为:0000,1010,0101,1100,由于页面大小为 1KB 约为 2 的 10 次方,所以 0A5C 的页号为 2,对应的物理块号为:4,所以虚拟地址 0A5C 的物理地址为 125C;

B、将 093C 变换为 2 进制为:0000,1001,0011,1100,页号也为 2,对应的物理块号也为 4,此时虚拟地址093C 的物理地址为 113C、

10 在请求分页系统中,通常采用那种页面分配方式?为什么?

A、在请求分页系统中,有固定和可变分配两种分配方式;

B、采用固定分配方式是基于进程的类型(交互型)或根据程序员,系统管理员的建议,为每个进程分配一固定页数的内存空间,在整个运行期间不再改变;

C、采用可变分配方式有全局置换和局部置换两种,前者易于实现,后者效率高。

26、在一个请求分页系统中,采用 FIFO 页面置换算法时,假如一个作业的页面走向为 432143543215,当分配给该作业的物理块数 M 分别为 3 4 时,试计算访问过程中所发生的缺页次数和缺页率?比较所得结果?

解答:A、当分配给该作业的物理块数 M 为 3 时

FIFO

4

3

2

1

4

3

5

4

3

2

1

5

0

4

3

2

1

4

3

5

5

5

2

1

1

1

4

3

2

1

4

3

3

3

5

2

2

2

4

3

2

1

4

4

4

3

5

5

缺页

×

×

×

×

×

×

×

×

×

(缺页用“×”表示,不缺页用“∨”表示,)

12次访问中有缺页9次,缺页率:9/12=75%

B、当分配给该作业的物理块数 M 为 4 时

FIFO

4

3

2

1

4

3

5

4

3

2

1

5

0

4

3

2

1

1

1

5

4

3

2

1

5

1

4

3

2

2

2

1

5

4

3

2

1

2

4

3

3

3

2

1

5

4

3

2

3

4

4

4

3

2

1

5

4

3

缺页

×

×

×

×

×

×

×

×

×

×

(缺页用“×”表示,不缺页用“∨”表示,)

12次访问中有缺页10次,缺页率:10/12=83.33%

结论:增加物理块数并不能保证有效降低缺页率。

12 在置换算法中,LRU 和 LFU 哪个更常用?为什么?

A、LRU 与 LFU 置换算法的页面的访问图完全相同,即使用的硬件是相同的;

B、但是 LFU 并不能真正访问反映出页面的使用情况。

13 实现 LRU 算法所需的硬件支持是什么?

A、寄存器,用于记录某进程在内存中各页的使用情况;

B、栈,用于保存当前使用的各个页面的页面号。

14 试说明改进型 Clock 置换算法的基本原理。

A、因为对于修改过的页面在换出时所付出的开销将比未被修改过的页面的开销大,所以在改进型 Clock 算法中,出了须考虑到页面的使用情况外,还须再增加一个置换代价这一因素; B、在选择页面作为淘汰页面时,把同时满足未使用过和未被修改作为首选淘汰页面。

15 什么是抖动? 产生抖动的原因是什么?

A、抖动(Thrashing)就是指当内存中已无空闲空间而又发生缺页中断时,需要从内存中调出一页程序或数据送磁盘的对换区中,如果算法不适当,刚被换出的页很快被访问,需重新调入,因此需再选一页调出,而此时被换出的页很快又要被访问,因而又需将它调入,如此频繁更换页面,以致花费大量的时间,我们称这种现象为"抖动";

B、产生抖动的原因是由于 CPU 的利用率和多道程序度的对立统一矛盾关系引起的,为了提高 CPU 利用率,可提高多道程序度,但单纯提高多道程序度又会造成缺页率的急剧上升,导致 CPU 的利用率下降,而系统的调度程序又会为了提高 CPU 利用率而继续提高多道程序度,形成恶性循环,我们称这时的进程是处于"抖动"状态。

16 试说明请求分段系统中的缺页中断处理过程?

(见 P185 图 6-12)

17 如何实现分段共享?

A、可在每个进程的段表中,用相应的表项来指向共享段在内存中起始地址;

B、配置相应的数据结构作为共享段表,可在段表项中设置共享进程计数 Count,每调用一次该共享段,Count 指增 1,每当一个进程释放一个共享段时,Count 执行减 1 操作,若减为 0,则由系统回收该共享段的物理内存,以及取消在共享段表中该段所对应的表项;

C、对于一个共享段,应给不同的进程以不同的存取权限;

D、不同的进程可以使用不同的段号去共享该段。

18 Intel 80386 芯片可支持哪几种方式的存储管理?

A、不分段也不分页的存储管理方式; B、分页不分段的存储管理方式; C、分段不分页的存储管理方式; D、分段分页存储管理方式。

19 试说明 80386 的分段地址变换机构的工作原理。

A、采用段寄存器和虚地址结构; B、在分段部件中,地址变换是将逻辑地址变换为线性地址,然后送分页部件中。

20 试说明 80386 的两级分页地址变换机构的原理。

21 可通过哪些途径来提高内存利用率?

(有待讨论,该题可以看成是对本章的本质内容的全面概括和总结)

以上是关于存储器管理的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode0001.两数之和

两数之和(hash初接触)

mysql 使用存储过程实现求1-100之间的偶数之和的功能

两数之和

c语言如何求1至100之间的全部奇数之和

图论-图的存储方式