段页式内存管理

操作系统从逻辑地址到物理地址变换过程采用了分段和分页两种机制。
第一阶段,分段机制将程序的逻辑地址变换成处理器可寻址的内存空间(称为线性地址空间)中的地址
第二阶段,分页机制将线性地址变换成物理地址。
在80x86的地址变换过程中,第一阶段的分段变换总是使用的,而第二阶段的分页机制则是选用。如果没有启用分页机制,那么分段机制产生的线性地址空间就直接映射到处理器的物理地址空间。物理地址空间定义为处理器在其地址总线上能够产生的地址范围。

概念补充:

分段机制会把程序的虚拟地址分为4个段,包括堆,栈,数据段和代码段。

每个程序都有自己的LDT,但是同一台计算机上的所有程序共享一个GDT。LDT描述局部于每个程序的段,包括其代码、数据、堆栈等。GDT描述系统段,包括操作系统本身。由于每个进程都有自己的一套程序段、数据段、堆栈段,有了局部描述符表则可以将每个进程的程序段、数据段、堆栈段封装在一起,只要改变LDTR就可以实现对不同进程的段进行访问。

 

 

1.分段机制:

  1). 实现任务间的隔离:分段机制提供隔绝各个代码,数据和堆栈区域的机制, 因此多个任务可以运行在同一个处理器上而不会互相干扰。
  2). 逻辑地址包括一个16位段选择符和32位一个偏移量,并由段描述符可以得到线性地址。段选择符指明段的大小,访问权限和段的特权级,段类型以及段的第一个字节在线性地址空间中的位置(称为段的基地址)。通过段选择符在段描述符GDT中得到段基址和段界限

为了把逻辑地址转换成一个线性地址,处理器会执行以下操作:
1. 使用段选择符中的偏移值(段索引)在GDT或LDT表中定位相应的段描述符(仅当一个新的段选择符加载到段寄存器中时才需要这一步)
2.利用段描述符检验段的访问权限和范围
3.把段描述符中取得的段基址加到段偏移量上,最后形成一个线性地址。

段描述表:段描述符的一个数组。有两种描述表:全局描述表GDT和局部描述表LDT。虚拟地址空间被分割成大小相等的两半。 一半是由GDT映射变换到线性地址;另一半是由LDT映射。当发生任务切换时,LDT会更换成新任务的LDT,但是GDT并不会改变。因此,GDT所映射的一半虚拟地址空间是系统所有任务共享的,但是LDT所映射的另一半是在任务切换时改变的。系统所有共享的段都由GDT来映射。进程间的隔离和共享

2.分页机制
  1). 多任务系统通常定义的线性地址空间要比含有物理空间内存容量大得多,所以需要虚拟化线性地址空间的方法,即使用虚拟存储技术。系统通过维护一个页目录和一些页表,当程序试图访问线性地址空间的一个地址位置时,处理器会使页目录和页表把线性地址空间转换成一个物理地址,然后在内存位置上执行相应的操作,如读写。

  2). 段表存储在线性地址空间,而页表存储在物理地址空间
  3). 分页机制会使用大小固定的内存块,而分段管理使用了大小可变的块来管理内存。无论在物理内存还是在磁盘啥,分页使用固定的页更适合管理物理内存。

 

内部碎片和外部碎片:

内部碎片:分配给某进程的内存区域中,如果有些部分没有用上
外部碎片:是指内存中的某些空闲分区由于太小而难以使用

外部碎片可以通过紧凑技术来改进

操作系统应该用什么的数据结构记录内存使用情况

1. 空闲分区表
2. 空闲分区链

posted @ 2021-08-24 14:36  Baymax_HH  阅读(339)  评论(0)    收藏  举报