Windows核心编程 - Windows内存体系结构(3)

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

     如今的操作系统能让磁盘空间看起来像内存一样,磁盘上的文件一般被称为页交换文件,其中包含虚拟内存,可供任何进程使用。页交换文件以一种透明的方式增大了应用程序可用内存的总量。

     当一个线程试图访问所属进程的地址空间中的一块数据时,有可能会出现两种情况:

    1)线程要访问的数据就在内存中,这种情况下,CPU会先把数据的虚拟地址映射到物理地址,接着线程就可访问内存中的数据了。

   2)线程要访问的数据不在内存中,而是位于页交换文件中的某处。这种情况下不成功的访问称为页面错误。发生页面错误时,操作系统会在内存中找到一个闲置的页面,如果找不到,操作系统必须先释放一个已分配的页面。

          A)如果待释放的页面没有修改过,那么操作系统可直接释放该页面;

          B) 如果待释放的页面被修改过,则操作系统必须先把页面从内存复制到页交换文件。

     接下来,系统 会在页交换文件中对所需访问的的数据块进行定位,并把数据载入到内存中闲置的页面。然后,将该块数据的虚拟内存地址映射到内存中对应的物理内存地址,这时CPU会再次运行那条引发页面错误的指令,但这一次能成功访问到数据。

 

2.页面保护属性

    我们可以给每个已分配的物理存储页指定不同的页面保护属性,所有的页面保护属性包括如下:

  1)PAGE_NOACCESS

   2)PAGE_READONLY

   3) PAGE_READWRITE

   4)PAGE_EXECUTE

   5)PAGE_EXECUTE_READ

   6)PAGE_EXECUTE_READWRITE

   7)PAGE_WRITECOPY

   8)PAGE_EXECUTE_WRITECOPY

    一些恶意软件将代码写入到用于数据 的内存区域(比如线程栈上), 通过种方式来让应用程序 执行恶意代码。 Windows的数据执行保护(DEP)特性提供了对此类恶意攻击的防护。对于那些真正需要执行代码的内存区域,操作系统才会使用PAGE_EXECUTE_*保护属性。 如果CPU试图执行某个页面的代码,而该页没有PAGE_EXECUTE_*保护属性,那么CPU会抛出访问违规异常。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值