十三、windows内存体系结构

1. 内核模式分区。 这一分区是操作系统代码的驻地。与线程调度,内存管理,文件系统支持,网络支持以及设备驱动程序相关的代码都载入该分区。驻留在这一分区的任何东西都为所有进程所用。受保护。如果一个应用程序试图读取或写入位于这一分区中的内存地址,会引发访问违规。

2. 当系统创建一个内存并赋予它地址空间时,可用地址空间中的大部分都是闲置的或者尚未分配的。为了使用这部分地址空间,我们必须调用virtualalloc来分配其中的区域。分配区域的操作被称为预定(reserving)。

系统会以应用程序的名义来预定地址空间区域(分配粒度)

进程环境块(peb), 线程环境块(teb)

为了使用所预定的地址空间区域,我们还必须分配物理存储器,并将物理存储器映射到所预定的区域。这个过程被称为调拨(commiting)物理存储器。物理存储器都以页面为单位调拨。我们通过调用virtualalloc函数来将物理存储器调拨给预定的区域。


3. 物理存储器和页交换文件  


磁盘文件一般称为页交换文件,其中包含虚拟内存,可供任何进程使用。为了能够使用虚拟内存,操作系统需要cpu的大力协助。(页表。。)

系统需要在内存和页文件之间复制页面的频率越高,硬盘颠簸得越厉害。系统运行得越慢(加内存的必要性)


4. p364 当用户要求执行一个应用程序时,系统会打开该应用程序对应的.exe并计算出应用程序的代码和数据的大小。然后系统会预定一块地址空间并注明与该区域相关联的物理存储器就是.exe文件本身。 系统并没有从页交换文件中分配空间区域。这样一来,不但载入程序非常大,而且页交换文件也可以保持一个合理的大小。

内存映射文件(17章)


5. 写时复制

应用程序实例共享只读数据或可执行代码段,而对于需要修改并写入一个存储页,采用写时复制:系统在内存中找到预分配的闲置页面,系统把线程想要修改的页面内容复制到闲置页,系统更新进程的页面表。这样一来,原来的虚拟地址现在就对应到一个内存中一个新的页面了。系统在指定这些步骤后,进程就可以访问自己的副本了。

注意p443的图




6. 私有         页交换文件                                 ------|

     已映射    数据文件                                     ------|---------   作为后备存储器          

     映像         加载的exe 或dll                        ------|


7. 数据对齐的重要性

数据对齐更多的是cpu体系结构的一部分。把数据结构的起始地址模除数据的大小,如果结果为0,那么数据是对齐的。

WORD 的起始地址应该被2整除,DWORD 起始地址被4整除

若没有对齐有可能引起异常或多次访问已对齐数据从而取得整个错位的数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值