操作系统-7【内存管理】

在这里插入图片描述

7.1 内存管理需求

1. 逻辑组织

程序是在模块里写的
why: 模块可以独立编写和编译 给模块不同程度的保护
只读只写 在进程之间共享模块,如dll ,库文件

2. 共享

允许多个进程访问内存的统一部份 why 最好允许每个进程访问程序的同一副本,而不是拥有自己的单独副本

3. 保护

进程不应该在未经许可的情况下引用另一个进程中的内存位置
不可能在编译时检查绝对地址,必须在run时检查
内存保护 要求必须由处理器(硬件)而不是操作系统(软件)来满足
操作系统不能预料程序所有需要的内存

4. 重定位 relocation

加载时间:程序员不知道程序会被放在内存的哪个位置
运行时间:当程序运行时,可能被交换到磁盘,并返回到主存的不同位置
内存访问 references 必须 在代码中转化为实际的物理内存

用户程序装入过程

在多道程序环境下,要使程序运行,必须为先为之创建进程
创建进程的第一件事,将程序和数据装入内存。

如何将一个用户源程序变为一个可在内存中执行的程序,通常都要经过几个步骤:
编译: 由编译程序compiler将用户源代码编译成若干个目标模块object module
链接,由链接程序Linker将编译后形成的一组目标模块和他们所需要的库函数连接在一起,形成一个完整的装入模块 load module
装入,由装入程序Loader将装入模块装入内存在这里插入图片描述

装入方式:

  1. 绝对装入方式
    在编译时,知道程序将驻留在内存的什么位置,那么编译程序将产生绝对地址的目标代码;例如,事先已知用户程序(进程)驻留在R开始的位置,则编译程序所产生的目标模块便从R开始向上扩展。绝对装入程序按照装入模块中的地址,将程序和数据装入内存。
    装入模块被装入内存后,由于程序中的逻辑地址与实际内存地址完全相容,故不需要对程序的地址进行修改。
    程序中所使用的绝对地址,可在编译和汇编是给出,也可由程序员直接赋予。
    但在程序员赋值时,要求程序员熟悉内存的使用情况,一旦程序或数据被修改后,可能要改变程序中所有的地址。

  2. 重定位装入方式

把程序模块装在内存是对慕白哦程序中的指令和数据的物理地址修改的过程成为内存地址的重定位

在这里插入图片描述

5. 物理组织physical organization

主存储器 和 辅助存储器 main memory secondary memory

  • 可用于程序以及数据的内存可能不足
  • 允许不同模块被分配到同一个内存区域

7.2 内存分区memory partitioning

1. 固定分区 fixed partitioning

  • 大小相等的分区
  • 大小不等的分区

在这里插入图片描述

大小相等 固定分区

内存分配:任何小于等于分区大小的进程都可以被加载到可用分区中

内存交替: 如果所有分区都满了,操作系统可以从分区中交换一个进程

困难:

一个程序可能不适合一个分区
主存使用率低,任何程序无论多小,都会占用整个分区,即 内部碎片化 internal fragmentation

大小不等 固定分区

可以将每个进程分配到它最适合的最小分区
每个分区的队列
减少在一个分区的浪费

2. 动态分区 dynamic partitioning

分区的长度和数量是可变的
进程被按照所需的大小分配内存

最终在内存中出现漏洞。-这叫做外部碎片化

使用压缩,移动进程,所以他们是连续的,所有空闲内存都在一个块中

动态分区布局算法

dynamic partitioning placement
操作系统必须决定分配哪个空闲块给进程

思想:最大的内存块 被分为更小的块
为了在内存的末尾获得一个大块,需要进行压缩Compaction is required to
obtain a large block at the end of memory

最佳适配Best-fit algorithm

选择与请求大小最接近的块
——总体表现最差
——由于为进程找到的块最小,剩余的碎片数量也最小
——内存压缩必须更频繁地进行

首次适配First-fit algorithm

从开始扫描内存并选择第一个足够大的可用块
-最快
-可能有许多进程加载在内存前端,当试图寻找一个空闲块时必须搜索

邻近适配Next-fit

从最后一个位置扫描内存
——通常在内存的末尾分配一个内存块,在那里可以找到最大的块

3. buddy system

仅当
程序请求分配空间大小 大于空闲空间的一半,才分配

随时对空闲空间进行分裂或合并

4. relocation

Logical Address(逻辑地址)

与当前数据在内存中的分配独立的访问地址
必须转到实际地址

Relative Address(相对地址)
用相对于某个已知点的位置表示的地址

Physical Address(物理地址)
主存中的绝对地址或实际位置
在这里插入图片描述

7.3 分页paging

将内存划分为小的、相等的、固定大小的块
将每个进程划分为相同大小的块

chunks
进程的chunks——页pages
内存的chunks——帧frames

操作系统包含了页表和偏移量offset

7.4 分段 segmentation

所有程序的所有分段不必具有相同的长度
有一个最大的段长度
寻址包含两部分: 段号 segment number+偏移量offset
由于分段不相等,分段类似于动态分区

在这里插入图片描述
在这里插入图片描述

名词解释

重定位

从逻辑地址 到物理地址的 转换

覆盖

多个内存模块 被分到一个内存单元,由主存决定他们的换入换出

逻辑地址

与数据的 物理地址无关的地址,在进行存取时,需要将其转化为物理地址

物理地址

数据在内存块中的地址

相对地址

逻辑地址的特殊情况,指 相对于一个已知的点的 存储单元

交换

在内存已经满了的时候,将内存中的数据换出 到内存,将外存中的数据换入到内存

零头

外部碎片:与动态分区相关,在内存分区产生的碎片

内部碎片:在内存分区 内产生的碎片

简答

固定分区和 分页关系

固定分区

在系统启动的时候,就划分好固定大小的分区
进程可以装入 大于等于自身大小的分区

分页

内存被划分为 许多固定大小的页框
每个进程 被划分为 同样大小的页

如果要装入一个进程
就要把他所有页装入内存中不一定连续的页框中

动态分区和 分段关系

动态分区

分区是动态创建的
每个进程可以被放到大小等于自身大小 的分区中

分段

每个进程被划分为 许多段
要装入一个进程
就要把进程包含的 所有段都装入内存中不一定连续动态分区

首次分配 临近分配 最佳分配

简单分区 纯分页的特点

分页计算

从逻辑地址中 提取出页号 ,根据页表找到对应 页框号
页框号 与 偏移量组合的到物理地址

分段计算

从逻辑地址中提取段号,根据段表 找到其段基址,将
段基址和偏移量相加得到物理地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值