目录
前言
数据单位
位(bit)
字节(byte)
组织方式
连续分配方式
非连续分配方式
段页式存储管理
虚拟内存管理
NUMA(Non-Uniform Memory Access)架构下的内存管理
逻辑地址与物理地址的映射关系
逻辑地址(内存地址)
前言
操作系统采用多种内存管理方式以适应不同场景的需求,不断优化内存资源的使用效率和程序运行性能。被人熟悉的2种方式是段页式存储管理和虚拟内存管理.
数据单位
1byte = 8 bits
1GB = 1,024MB,而1MB = 1,024KB,1KB = 1,024字节
位(bit)
- 位是计算机系统中最小的数据单位,表示二进制数的一个0或1。
- 在计算机内部所有的信息都是以二进制的形式存储和处理的,因此所有数据最终都可以分解为一系列的比特位。
字节(byte)
- 字节是计算机存储的基本计量单位,通常情况下1个字节等于8个比特(1 byte = 8 bits)。
- 字节被广泛用于衡量文件大小、内存容量等,它是大多数现代计算机体系结构设计的基础单元,能够存储一个ASCII字符或者其他特定编码方案下的字符。
组织方式
连续分配方式
- 单一连续分配:早期的简单系统中,为每个进程分配一块连续的内存空间。
- 固定分区分配:将内存划分为多个固定大小的分区,每个分区只能容纳一个进程。存在内部碎片问题。
- 动态分区分配(可变分区):根据进程需要动态地创建和释放分区,但会导致外部碎片。
非连续分配方式
- 分页存储管理:将内存逻辑上划分为大小相等的页面,并将进程地址空间划分为同样大小的页,通过页表进行逻辑地址到物理地址的映射,有效解决了外部碎片问题。
- 分段存储管理:按照程序的逻辑结构(如代码段、数据段、堆栈段等)划分内存,形成具有不同长度的段,通过段表实现逻辑地址到物理地址的转换,有助于信息共享和保护,但可能产生内部碎片。
段页式存储管理
结合了分段和分页的优点,先将进程逻辑地址空间划分为若干个逻辑段,每个段内再细分成固定大小的页。在内存中,每段都有其对应的页表,这样既可以按逻辑关系分配内存,又可以避免较大的外部碎片。
虚拟内存管理
虚拟内存技术允许每个进程拥有独立且大于实际物理内存的地址空间。当进程的部分数据或代码不在物理内存时,可通过硬件和操作系统的配合,暂时调用硬盘上的交换空间来模拟更大的内存容量。主要利用了页式或段页式的地址转换机制,同时引入了页面替换策略以及缺页中断处理机制。
NUMA(Non-Uniform Memory Access)架构下的内存管理
在多处理器系统中,不同的处理器访问内存的不同部分所需的时间是不同的。NUMA架构下,操作系统需要对内存进行节点化管理,优化跨节点的内存访问性能,确保数据放置策略与处理器亲和性相符。
逻辑地址与物理地址的映射关系
逻辑地址(内存地址)
分页内存管理机制
逻辑地址=页号+页内偏移量
举例:假设一个32位的操作系统为每个进程提供了4GB(即2^32字节)的虚拟地址空间,并且每一页大小为4KB(即2^12字节)。
答案:逻辑地址为 0x12345678 页号:0x001234 (高20位) 页内偏移量0x5678 (低12位)
解析:限定条件为①在32位操作系统中,CPU一次可以处理32位(即4字节)的数据,并且它的寻址能力限制为2^32个内存地址.②页大小=4kb(2^12字节) ③页数*页大小=4GB(2^32)
推断出理论页号最大为2^20. 页号长度为20位.
8位一组(一个字节),所以高20位,我们选取左边的20位;低12位就是选取右边的连续12位
在二进制表示下,0x12345678 转换为二进制是 0001 0010 0011 0100 0101 0110 0111 1000
它代表的是第 0x001234个页面的第 0x5678 字节的位置。
分段内存管理机制
逻辑地址=段号+段内偏移量
举例:假设一个计算机系统的内存管理采用段式存储方式,并且每个逻辑地址由16位表示,其中前8位用于存储段号,后8位用于存储段内偏移量。
有一个逻辑地址 0x2345(十六进制),其具体结构如下:
段号(Segment Number):高8位 0x23
段内偏移量(Offset):低8位 0x45
这意味着这个逻辑地址指向的是段号为 0x23 的段内的偏移量为 0x45 的存储单元。操作系统通过查询段表,根据段号找到对应的段描述符,获取该段的基址(Base Address),然后将段内偏移量与基址相加,得到实际访问的物理地址。
段页式内存管理机制
逻辑地址=段号+页号+页内偏移量
举例:有一个逻辑地址 0x12345678(这里用下划线分隔以示区分),其具体结构如下:
段号(Segment Number):高10位 0x1234
页号(Page Number):中间10位 0x5678 的高位部分 0x56
页内偏移量(Offset):中间10位 0x5678 的低位部分 0x78
这个逻辑地址指向的是段号为 0x1234 的段内的第 0x56 号页面中的偏移量为 0x78 的存储单元。
流程:操作系统首先会根据段号查询段表得到该段的页表起始地址,然后结合页号从页表中获取相应的物理页框号,最后将物理页框号与页内偏移量相加,得到实际访问的物理地址。