内存管理-
一.存储器管理应具有的功能?
① 内存的分配和回收:
实施内存的分配,回收系统或用户释放的内存空间。New delete()
② 地址变换:
提供地址变换功能,将逻辑地址转换成物理地址。
③ 扩充内存:
借助于虚拟存储技术和其他自动覆盖技术,为用户提供比内存空间大的地址空间,从逻辑 上扩充内存。把不重要的,不常有的占据内存的资源换出到外存。
④ 存储保护:
保证进入内存的各道作业都在自己的存储空间内运行,互不干扰。
二.将用户程序变为可在内存中执行的程序的步骤?
1.编译:
由编译程序将用户源代码编译成若干目标模块,高级语言变为二进制语言。
2.链接:
由链接程序将编译后形成的一组目标模块及所需的库函数链接在一起,形成一个完整的装入模块。
程序的链接方式有哪些?
① 静态链接:
在程序运行之前,先把各个目标模块及所需库链接为一个完整的可执行程序,以后不再拆 开。
② 装入时动态链接:
将应用程序编译后所得到的一组目标模块在装入内存时采用边装入边链接的链接方 式。
③ 运行时动态链接:知道程序运行过程中需要一些模块时,才对这些模块进行链接。
3.装入:
由装入程序将装入模块装入内存中运行。
程序的装入方式有哪些?
① 绝对装入:
在编译时就知道程序将要驻留在内存的物理地址,编译程序产生含有物理地址的目标代码, 不适合多道程序设计。
② 可重定位装入:
根据内存当前情况,将装入模块装入到内存的适当位置,地址变换通常在装入时一次 完成,之后不再改变,也称静态重定位。当操作系统为程序分配一个以某地址为起始地址的连续主存 区域后,重定位时将程序中指令或操作数的逻辑地址加上这个起始地址就得到了物理地址。
③ 动态运行装入:
允许程序运行时在内存中移动位置,把装入模块装入到内存后的所有地址都是相对地 址,在程序执行过程中每当访问到相应指令或数据时,才将要 访问的程序或数据的相对地址转换为物 理地址。动态重定位的实现要依靠硬件地址变换机构。
三.覆盖技术和交换技术?区别?
覆盖技术:
把一个大的程序划分为一系列覆盖,每个覆盖是一个相对独立的程序单位,把程序执行时并不要求同时 装入内存的覆盖组成一组,成为覆盖段,这个覆盖段分配到同一个存储区域,这个存储区域成为覆盖区,它与覆盖段一一对应。覆盖段的大小由覆盖段中最大的覆盖来确定。(为了解决内存容量太小的问题,打破了必须将一个程序全部信息装入内存后才能运行的限制)
交换技术:
把暂时不用的某个程序及数据部分从内存移到外存中去,以便腾出必要的内存空间;或者把指定的程序或数据从外存读到相应的内存中,并将控制权交给他,让其在系统上运行的一种内存扩充技术。处理器的中级调度就是采用交换技术。
区别:
- ① 与覆盖技术相比,交换技术不要求程序员给出的 程序段之间的覆盖结构;
- ② 交换技术主要在进程和作业之间进行,覆盖技术主要在同一个进程或作业中进行;
- ③ 覆盖技术只能覆盖于覆盖程序段无关的程序段,交换进程由换出和换入两个过程组成。
四.内存连续分配管理方式有哪些?
1.单一连续分配
- 内存在此方式下分为系统区和用户区,系统区仅提供给操作系统使用,通常在低地址部分;用户区是为用户提供的、除系统区之外的内存空间。这种方式无需进行内存保护。
- 这种方式的优点是简单、无外部碎片,可以釆用覆盖技术,不需要额外的技术支持。
- 缺点是只能用于单用户、单任务的操作系统中,有内部碎片,存储器的利用率极低。
2.固定分区分配
固定分区分配是最简单的一种多道程序存储管理方式,它将用户内存空间划分为若干个固定大小的区域,每个分区只装入一道作业。当有空闲分区时,便可以再从外存的后备作业队列中,选择适当大小的作业装入该分区,如此循环。
固定分区分配在划分分区时,有两种不同的方法:
(1) 分区大小相等:
用于利用一台计算机去控制多个相同对象的场合,缺乏灵活性。
(2) 分区大小不等:
划分为含有多个较小的分区、适量的中等分区及少量的大分区。
3.动态分区分配
动态分区分配又称为可变分区分配,是一种动态划分内存的分区方法。这种分区方法不预先将内存划分,而是在进程装入内存时,根据进程的大小动态地建立分区,并使分区的大小正好适合进程的需要。因此系统中分区的大小和数目是可变的。
4.动态分区分配算法
在进程装入或换入主存时,如果内存中有多个足够大的空闲块,操作系统必须确定分配哪个内存块给进程使用,这就是动态分区的分配策略,考虑以下几种算法:
(1) 首次适应(First Fit)算法:
空闲分区以地址递增的次序链接。分配内存时顺序查找,找到大小能满足要求的第一个空闲分区。
(2) 最佳适应(Best Fit)算法:
空闲分区按容量递增形成分区链,找到第一个能满足要求的空闲分区。
(3) 最坏适应(Worst Fit)算法:
又称最大适应(Largest Fit)算法,空闲分区以容量递减的次序链接。找到第一个能满足要求的空闲分区,也就是挑选出最大的分区。
(4) 邻近适应(Next Fit)算法:
又称循环首次适应算法,由首次适应算法演变而成。不同之处是分配内存时从上次查找结束的位置开始继续查找。