操作系统笔记 连续内存空间分配

第三章 物理内存管理

在这里插入图片描述
在操作系统中管理内存的不同方法

  • 程序重定位
  • 分段
  • 分页
  • 虚拟内存
  • 按需分页虚拟内存

实现高度依赖硬件

  • 必须知道内存架构
  • MMU(内存管理单元):硬件组件负责处理CPU的内存访问请求

地址空间
物理地址空间——硬件支持的地址空间

逻辑地址空间——一个运行的程序所拥有的内存范围。(一维的线性空间)

两者之间的对应关系:表TLB
高级语言——编译器——汇编语言文件.s
汇编语言——汇编器——机器语言文件.o
很多程序自带的.bin文件就是程序的二进制表示
在汇编语言转换为机器语言的过程中,汇编器会将汇编语言中的变量符号转换为地址。
因为在高级语言和汇编语言中对于某个数据都是以符号来抽象表示,而机器语言需要将其转换为地址才可以进行访问
Linker程序链接器:能让多个.o文件合起来生成一个.exe文件。
.exe file是一个能够在内存中执行,但是目前还是存放在硬盘中的程序。
在这个文件中,已经对不同的.o文件的访问地址(包括指令还是数据都有地址)已经做了定义(其中包括分配和映射过程)。
此时还需要通过Loader,它也是一个应用程序,它会将.exe文件放在内存中去运行。这一过程中它会在内存中进行逻辑地址的分配。
这样,程序就可以在内存中正常运行。
在这里插入图片描述
但是逻辑地址到物理地址还需要CPU去转换,这就是计组的内容了。

操作系统的作用就是建立逻辑地址与物理地址的映射。
在这里插入图片描述
地址的安全检查:
操作系统需要确保放在内存中的不同程序相互之间不能够干扰,所以需要确保每一个访问的地址空间是合法的。(如上图所示)
所以会有一个限制和约束,而这个限制和约束的范围也是操作系统去建立的。
逻辑地址在进行映射转换前需要进行一次比较。
程序的地址空间就是两个:起始空间和长度(程序大小)。
但是对一个程序来说,程序是一个个指令,而程序用到的数据并不跟程序存放在一起。也就是说,程序的指令和数据是分开存放的,分为指令区和数据区。

也就是说,CPU通过虚拟地址映射到物理空间中取指令,然后对数据进行运算。指令是一定会取的,但是数据如果需要运算,就一定会先加载到寄存器中(也就是到内存中取数据,这个过程也可能涉及I/O,即启动IO设备到硬盘或者其他设备中读取数据)。

3.3 连续内存分配:内存碎片与分区的动态分配

内存碎片问题

  • 空闲内存不能被利用
  • 外部碎片:在分配单元间的未使用内存
  • 内部碎片:在分配单元中的未使用内存

分区的动态分配

简单的内存管理方法

  • 当一个程序准许运行在内存中时,分配一个连续的区间
  • 分配一个连续的内存区间给运行的程序以访问数据
3.4 压缩式和交换式碎片整理

在这里插入图片描述
这就是压缩式碎片整理
其核心就是拷贝内存

在这里插入图片描述
设计内存和磁盘上的虚拟内存的数据交换

  • 地址空间 & 地址生成
  • 连续内存分配:
    • 第一适配
    • 最佳适配
    • 最差适配
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值