Liping Zou bio photo

Liping Zou

An Android Developer

Email Twitter Instagram Github Stackoverflow

Overview

###进程如何使用内存

进程是操作系统资源分配的最小单元。操作系统分配给进程的内存空间中包含五种段:数据段、代码段、BSS、堆、栈。

  • 数据段:存放程序中的静态变量和已初始化且不为零的全局变量。
  • 代码段:存放可执行文件的操作指令,代码段是只读的,不可进行写操作。这部分的区域在运行前已知其大小。
  • BSS段( Block Started By Symbol):存放未初始化的全局变量,在变量使用前由运行时初始化为零。
  • 堆:存放进程运行中被动态分配的内存,其大小不固定。
  • 栈:存放程序中的临时的局部变量和函数的参数值。

内存区域中以上五个段的组织形式:

组织形式

###逻辑地址、相对地址与物理地址

  • 逻辑地址:与当前数据在内存中的物理分配地址无关的访问地址,在执行对内存的访问之前必须转化为物理地址。
  • 相对地址:特殊的逻辑地址,相对于某些已知点的存储单元。
  • 物理地址:数据在主存中的实际位置

###内存管理技术

几种内存管理技术整理

table1

table2

####分页

逻辑地址到物理地址的映射过程

  1. 提取页号,即逻辑地址最左的n位
  2. 以这个页号为索引,查找该进程页表中相应的帧号k
  3. 该帧的起始物理地址为k*2^m,被访问字节的物理地址是这个数加上偏移量

分页

举个例子

腾讯今年的实习生笔试的某个选择题 实习

根据上面的三个步骤可以很容易得到结果:物理地址 = 3 * 8 * 1024 + 9612 % 8192 = 25996

####分段

逻辑地址到物理地址的映射过程

  1. 提取段号,即逻辑地址最左的n位s
  2. 以这个段号为索引,查找该进程段表中该段的起始物理地址
  3. 最右m位表示偏移量,偏移量和段长度比较,如果偏移量大于该长度,则该地址失效
  4. 物理地址为该段的起始物理地址加上偏移量的和

分段

分页、分段的特点

  1. 进程的所有存储器访问的都是逻辑地址,在运行时动态地转换为物理地址。
  2. 一个进程可以划分为许多块,在执行的过程中,这些块不需要连续的存在主存中。

####段页式结合

对于每一个虚拟地址,处理器使用段号检索进程段表来寻找该段的页表;页号用来检索页表并查找到帧号。

段页