存储器管理(第四章)

目录

一、内存的基础知识

1.什么是内存?有何作用?

2.几个常用的数量单位

3. 进程的运行原理--指令

4.逻辑地址vs物理地址

5.从写程序到程序运行

6.链接的三种方式

7.装入的三种方式

绝对装入

静态重定位

动态重定位

 二、内存管理的概念

1.内存的分配与回收

单一连续分配

 固定分区分配

 动态分区分配

2.内存的扩充

​编辑

 a.覆盖技术

b.交换技术

3.地址转换

 4.内存保护


一、内存的基础知识

1.什么是内存?有何作用?

 内存是用于存放数据的硬件。程序执行前需要先放到内存中才能被CPU处理

2.几个常用的数量单位

3. 进程的运行原理--指令

 可见,我们写的代码要翻译成CPU能识别的指令。这些指令会告诉CPU应该去内存的哪个地址存/取数据,这个数据应该做怎么样的处理。在这个例子中,指令中直接给出了变量x的实际存放位置(物理地址)。但实际在生成器指令的时候并不知道该进程的数据会被放到什么位置。所以编译生成的指令中一般是使用逻辑地址(相对地址)

4.逻辑地址vs物理地址

5.从写程序到程序运行

编译:由编译程序将用户源代码编译成若干个目标模块(编译就是把高级语言翻译为机器语言

链接:由链接程序将编译后形成的一组目标模块,以及所需库函数链接在一起,形成一个完整的装入模块

装入(装载):由装入程序将装入模块装入内存运行

6.链接的三种方式

1. 静态链接:在程序运行之前,先将各目标模块及它们所需的库函数连接成一个完整的可执行文件(装入模块)之后不再拆开。
2.装入时动态链接:将各目标模块装入内存时,边装入边链接的链接方式。
3. 运行时动态链接:在程序执行中需要该目标模块时,才对它进行链接。其优点是便于修改和更新,便于实现对目标模块的共享,

7.装入的三种方式

绝对装入

在编译时,如果知道程序将放到内存中的哪个位置,编译程序将产生绝对地址的目标代码。装入程序按照装入模块中的地址,将程序和数据装入内存。

 绝对装入只适用于单道程序环境。

程序中使用的绝对地址,可在编译或汇编时给出,也可由程序员直接赋予。通常情况下都是编译或汇编时再转换为绝对地址。

静态重定位

 又称可重定位装入。编译、链接后的装入模块的地址都是从0开始的,指令中使用的地址、数据存放的地址都是相对于起始地址而言的逻辑地址。可根据内存的当前情况,将装入模块装入到内存中的适当位置。装入时对地址进行”重定位“,将逻辑地址变换为物理地址(地址变换实在装入时一次完成的)。

静态重定位的特点是一个作业装入内存时,必须分配其要求的全部内存空间,如果没有足够的内存,就不能装入该作业。作业一旦进入内存后,在运行期间就不能再移动,也不能再申请内存空间。

动态重定位

又称动态运行时装入。编译、链接后的装入模块的地址都是从0开始的。装入程序把装入模块装入内存后,并不会立即把逻辑地址转换为物理地址,而是把地址转换推迟到程序真正要执行时才进行。因此装入内存后所有的地址依然是逻辑地址。这种方式需要一个重定位寄存器的支持。

 二、内存管理的概念

1.内存的分配与回收

1.1连续分配管理方式

 

连续分配:指为用户进程分配的必须是一个连续的内存空间

单一连续分配

在单一连续分配方式中,内存被分为系统区用户区。系统区通常位于内存的低地址部分,用于存放操作系统相关数据;用户区用于存放用户进程相关数据。内存中只能有一道用户程序,用户程序独占整个用户区空间。
优点:实现简单;无外部碎片;可以采用覆盖技术扩充内存;不一定需要采取内存保护(eg:早期的C操作系统MS-DOS)
缺点:只能用于单用户、单任务的操作系统中;有内部碎片;存储器利用率极低。

分配给某进程的内部区域中,如果有些部分没有用上,就是”内部碎片“

 固定分区分配

20世纪60年代出现了支持多道程序的系统,为了能在内存中裝入多道程序,且这些程序之问又不会相互干扰,于是将整个用户空间划分为若干个固定大小的分区,在每个分区中只装入一道作业
这样就形成了最早的、最简单的一种可运行多道程序的内存管理方式。

分区大小相等:缺之灵活性,但是很适合用于用一台计算机控制多个相同对象的场合(比如:钢铁厂有n个相同的炼钢炉,就可把内存分为n个大小相等的区域存放n个炼钢炉控制程序)


分区大小不等:增加了灵活性,可以满足不同大小的进程需求。根据常在系统中运行的作业大小情况进行划分(比如:划分多个小分区、适量中等分区、少量大分区)

 操作系统需要建立一个数据结构一分区说明表,来实现各个分区的分配与回收。每个表项对应一个分区,通常按分区大小排列。每个表项包括对应分区的大小、起始地址、状态(是否已分配)

当某用户程序要装入内存时,由操作系统内核程序粮据用户程序大小检索该表,
从中找到一个能满足大小的、未分配的分区,将之分配给该程序,然后修改状
态为“己分配”
优点:实现简单,无外部碎片
缺点:a. 当用户程序太大时,可能所有的分区都不能满足需求,此时不得不采
用覆盖技术来解决,但这又会降低性能;b.会产生内部碎片,内存利用率低。

 动态分区分配

动态分区分配又称为可变分区分配。这种分配方式不会预先划分内存分区,而是在进程装入内存时,根据进程的大小动态地建立分区,并使分区的大小正好合适进程的需要。因此系统分区的大小和数目是可变的。

1.系统要用什么样的数据结构记录内存的使用情况?

 2.当很多个空闲分区都能满足需求时,应该选择哪个分区进行分配?

四种动态分区分配算法

3.如何进行分区的分配与回收操作?

......

1.2

2.内存的扩充

(虚拟内存)

 a.覆盖技术

覆盖技术的思想:将程序分为多个段(多个模块)。常驻的段常驻内存,不常用的段在需要时调入内存。

内存中分一个“固定区”若干个”覆盖区“

需要常驻内存的段放在”固定区“中,调入后就不再调出(除非运行结束)

不常用的段放在”覆盖区“,需要用到时调入内存用不到时调出内存

 必须由程序员申明覆盖结构,操作系统完成自动覆盖。缺点:对用户不透明,增加了用户编程负担。覆盖技术只用于早期的操作系统中,现在已成为历史。

b.交换技术

交换(对换)技术的设计思想:内存空间紧张时,系统将内存中某些进程暂时换出外存,把外存中某些已具备运行条件的进程换入内存(进程在内存与磁盘间动态调度)

1.应该在外存(磁盘)的什么位置保存被换出的进程?

 具有对换功能的操作系统中,通常把磁盘空间分为文件区对换区两部分。文件区主要用于存放文件,主要追求存储空间的利用率,因此对文件区空间的管理采用离散分配方式;对换区空间只占磁盘空间的小部分,被换出的进程数据就存放在对换区。由于对换的速度直接影响到系统的整体速度,因此对换区空间的管理主要追求换入换出速度,因此通常对换区采用连续分配方式(文件管理章节。总之,对换区的I/0速度比文件区的更快


2.什么时候应该交换?
交换通常在许多进程运行且内存吃紧时进行,而系统负荷降低就暂停。例如:在发现许多进程运行时经常发生缺页,就说明内存紧张,此时可以换出一些进程:如果缺页率明显下降,就可以暂停换出。


3.应该换出哪些进程?
可优先换出阻塞进程;可换出优先级低的进程:为了防止优先级低的进程在被调入内存后很快又被换出,有的系统还会考虑进程在内存的驻留时间。(注意:PCB 会常驻内存,不会被换出外存)

3.地址转换

 4.内存保护

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值