本文是操做系统系列
第三篇,介绍物理内存管理。操做系统对内存的管理是很是复杂的,和程序的执行、硬件、编译器等密切相关。本文从物理内存入手,介绍内存管理的重要概念,也为后续的虚拟内存管理内容作铺垫。 原文连接,更多内容见公号机器学习与系统
,欢迎与我互动~
地址是用来标志存储资源位置的,在计算机中用一串二进制数据表示。html
一. 地址空间算法
地址空间就是指地址的范围,从最小值到最大值:编程
下图展现了物理地址空间,进程A、B的逻辑地址空间。缓存
二. 地址生成微信
物理地址是已经肯定的,逻辑地址的生成依赖于编译器。架构
逻辑地址空间
内的地址(重定位)三. 地址解析机器学习
下图是CPU和计算机的基本架构,咱们以此图来讲明物理/逻辑地址在CPU和计算机中如何被解析处理的。ide
控制逻辑把数据、操做请求和物理地址发送到总线,分为读请求和写请求函数
在上面的过程当中,MMU负责逻辑地址和物理地址之间的转换,操做系统负责创建逻辑地址和物理地址之间的映射关系。性能
内存碎片:内存上一些没有被分配利用的区域
当程序被加载时,根据进程的实际须要动态分配内存空间,使分配的大小恰好与做业的大小相等。动态分区分配并不预先将内存划分红一块块分区,而是在程序进入内存时,根据程序的大小动态地创建分区,所以系统中分区的大小是可变的,分区的数目也是可变的。
有如下三种分配策略:
使用第一个可用空间比N大的内存块
。如分配400 byte的内存块,按照从上到下的查找顺序,应该分配1K byte
内存区域。若是是从下往上查找,应该分配5K byte
的区域。查找并使用不小于N的最小空闲分区
。若是要分配2800 byte,应该分配3K byte
区域。使用尺寸不小于N的最大空闲分区
。若是分配800 byte,则选择5K byte
区域。上述三种分区算法,在释放分区时,都要检查是否能和周围的分区合并。
连续内存分配会出现内/外部碎片、动态修改比较困难、内存必须连续,并且内存利用率不高。所以提出了非连续内存分配的方法,容许程序使用非连续的内存空间、容许共享代码和数据,以提升内存利用效率和管理的灵活性。
固然,这也带来了挑战:非连续内存分配中,如何有效实现和管理逻辑地址和物理地址间的映射。
下面介绍三种方式:
段(segment)指一类地址空间,一个段就是一个地址连续的内存块,若干个段组成程序的逻辑地址空间。
每一个段由0到最大的线性地址序列构成。各个段的长度能够是0到某个容许的最大值之间的一个数。不一样的段的长度能够不一样(一般状况下也都不同),段的长度在运行期间能够动态改变,好比push数据时,堆栈段的长度会增长,pop时会减小。段也能够被装满,可是一般状况下段的长度很大,这种状况不多发生。
段式存储管理下的逻辑地址组成格式为(s, o),s为段号
,o为段内偏移量
,段号和对应内存中的物理起始地址由段表
记录。寻址时,先根据段号到段表中查到物理起始地址(基址),而后加上偏移量,获得最终的物理地址。
页式存储管理有两个相当重要的概念:
页式存储管理的寻址方式和段式管理相似,逻辑地址格式为(p, o),表示页中的地址,其中p表示页号,o表示偏移量。物理地址格式为(f, o),表示页帧中的地址,其中f表示页帧号,o表示偏移量,页偏移量和页帧偏移量是相等的。
页和页帧的对应关系使用页表(Page Table)来管理。寻址时首先根据页号找到页表中对应的页帧号,而后用获得的页帧号与偏移量组成实际的物理地址。
页面和页帧的大小相比分段要小得多,假设系统是32位,页帧大小1024字节,这样有2^32/2^10=2^22条页表记录,查询页表的时间要多不少。下面介绍两个提升性能的方法:
分页和分段系统有许多类似之处。二者都采用离散分配方式,且都要经过地址映射机构来实现地址变换。但在概念上二者彻底不一样,主要表如今下述三个方面:
段式存储和页式存储都是为了更好管理内存,段式从程序的角度入手,页式从物理底层的角度入手,在理解上,能够结合二者的优缺点进行选择:
分段 | 分页 | |
---|---|---|
优势 | 段长可动态修改,方便编程,分段共享,分段保护,动态连接,动态增加 | 非连续分配,减小内存碎片,提升内存利用效率 |
缺点 | 内部碎片,地址计算须要更多硬件支持 | 须要两次内存访问,页表可能很大 |
段页式存储管理充分利用了段式存储在内存保护方面有优点,页式存储在内存利用和优化转移到后备存储方面有优点。
在段式存储管理基础上,给每一个段加一级页表。逻辑地址格式为(s, p, o),s为段号,p为页号,o为页内偏移。寻址时,现根据段号s查找段表中的页表地址,而后到页表中查找p对应的起始地址,最后加上偏移o获得最终的物理地址。
程序在执行时,CPU看到的是逻辑地址,当CPU读写数据时,由MMU根据逻辑地址找到对应的物理地址,而后到总线上读写数据。经过这种管理机制,能够更好地管理内存,在多道程序执行中作到隔离和共享。
文章持续更新,能够微信搜索「 机器学习与系统 」阅读最新内容,回复【内推】【考研】获取我准备的头条内推以及考研信息