操作系统-内存篇1(地址空间及连续内存分配)

一、计算机体系结构及内存分层体系

1. 计算机体系结构

2. 内存分层体系

寄存器/cache位于cpu,操作系统无法管理,速度很快,容量很小

主存:放置op本身,或者需要运行的代码,掉电后数据丢失

磁盘:存储大,掉电后数据还存在

3. 在操作系统的内存管理范例

操作系统在内存管理中完成的事情:

  • 抽象:操作系统抽象了内存分配,寻址等功能,应用程序运行时,无需考虑物理内存与外设,只需访问连续的地址空间(逻辑地址空间)即可
  • 保护:内存中运行多个应用程序,有可能访问别的应用程序的地址空间。操作系统提供隔离机制
  • 共享:提供共享空间,使得进程能安全可靠的进行数据传递
  • 虚拟化:swap,并对应用程序透明

操作系统中管理内存的不同方法:

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

二、地址空间及地址生成

1. 地址空间定义

物理地址空间:与硬件对应(内存条等)

逻辑地址空间:运行程序所看到的内存空间(一维线性地址空间),逻辑地址空间最终会落入物理地址空间

2.地址生成

逻辑地址空间生成:exe程序会将逻辑地址映射到物理地址

将指令逻辑地址映射到物理地址的过程:

  1. mmu中维护了逻辑地址对应的物理地址
  2. 当cpu要执行某一条指令时,alu发出请求,参数为逻辑地址
  3. cpu中的mmu查找逻辑地址的映射表,若逻辑地址的物理地址存在,则返回;若不存在,则在内存中查找
  4. 若查找成功,则cpu控制器发出请求,主存通过总线发送数据至cpu

3.地址安全检查

操作系统确定每个程序有效访问的地址空间(起始地址+长度)

若程序访问的内存地址不在有效的地址空间中,cpu则产生内存访问异常

三、连续内存分配

1. 内存碎片问题

定义:给程序分配一定空间之后,会出现有一些无法进一步利用的空闲空间

分类:外部碎片(在分配单元间的未使用内存)、内部碎片(在分配单元中的未使用内存)

2. 分区的动态分配

简单的内存管理方法:

当一个程序允许运行在内存中时,分配一个连续的区间

1) 第一适配

为了分配n字节,使用第一可用空闲块(大小大于n)

实现:从按地址排序的空闲块列表中,寻找出一块合适的分区

注意:回收内存空间时,可判断相邻的空闲分区能否合并

优点:简单;易于产生更大空闲块

缺点:会产生外碎片;具有不确定性

2) 最佳适配

为了分配n字节,使用最小的可用空闲块(大小大于n的最小空闲块)

实现:从按尺寸排序的空闲块列表中,寻找一个合适的分区

注意:回收内存空间时,可判断相邻的空闲分区能否合并

优点:当大部分分配是小尺寸时有效;比较简单

缺点:外碎片;重分配慢;易于产生很多没有用的微小碎片

3) 最差适配

为了分配n字节,使用最大的可用空闲块

实现:从按尺寸排序(从大到小)的空闲块列表中,寻找一个合适的分区

注意:回收内存空间时,可判断相邻的空闲分区能否合并

优点:分配很快(获取最大分区即可);分配是中等尺寸内存,效果最好

缺点:重分配慢;外碎片;易于破坏大的空闲块,导致需要大内存的程序无法被分配

3. 压缩式碎片整理

定义:通过拷贝,压缩出较大的空闲空间

问题:

  1. 拷贝的时机(程序运行时拷贝,会导致访问内存出错,可在进程非运行状态时执行)
  2. 开销

4. 交换式碎片整理

使用压缩式碎片整理,也无法再分配出空闲空间,此时,可用交换式碎片整理

定义:将不使用的程序的内存换到硬盘中

问题:

  1. 应该选择哪一个程序换出
  2. 什么时候执行换入换出的操作
  3. 换入换出粒度若为单个程序,开销太大

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值