非连续内存分配

非连续内存分配允许程序使用非连续的物理地址,允许共享代码数据,支持动态加载和动态链接

实现非连续内存分配需要解决虚拟地址到物理地址的转换

  1.软件实现 开销大

  2.硬件实现 开销小

段式存储管理:

  进程的段地址空间由多个段组成:

    1.主代码段

    2.子模块代码段

    3.公用库代码段

    4.堆栈段

    5.堆数据

    6.初始化数据段

    7.符号表等

  段的概念:表示访问方式和存储数据等属性相同的一段地址空间,段内地址要求连续,若干段足证进程逻辑地址空间。

  段的访问:逻辑地址由二元组(s,addr)组成,s表示段号,addr表示段内偏移通过段号到段表中查找相应的段描述符,

每个段描述符包含了段的起始地址和段长度,存储管理单元MMU把偏移addr和段描述符中的段长度做比较判断是否越界,

如果没有越界,则段基地址+偏移得到实际访问的地址。

 

页式存储管理:

  把物理地址空间划分为大小相同的基本分配单位:页帧(frame)

  把逻辑地址空间也划分为相同大小的基本分配单位:页面(page),大小和页帧相同

页帧:

  把物理地址组织成二元组(f,o),f表示帧号,o表示帧内偏移量

  物理地址=f*2^s+o(低s位是偏移量,所以f需要左移s位)

页:

  页内偏移=帧内偏移,但页号一般不等于帧号。用二元组(p,o)表示。

  p-页号,P位,共2P个页

  o-页内偏移,s位,每页2^s字节

  虚拟地址=p*2^s+o(因为低s位是偏移,所以p需要向左偏移s位)

逻辑地址中页号连续,物理地址中帧号不连续。

页表:

  页表保存了逻辑地址到物理地址的映射关系,由页表基址作为起始地址,由页号作为下标查找相应页表项,

页号的对应关系存储在页表中。

posted @ 2016-04-10 11:03  hzxscyq  阅读(643)  评论(0编辑  收藏  举报