windows核心编程---windows内存体系结构

来源:互联网 发布:有趣有深度的问题知乎 编辑:程序博客网 时间:2024/05/21 09:23

-虚拟地址空间的分区
1.空指针赋值区
2.用户模式分区
进程无法访问驻留在这一分区的其它进程的数据。
3.内核模式分区
驻留在这一分区内的任何东西为所有进程共有。

-地址空间中的区域
1.创建进程并赋予它地址空间时,可用地址空间的大部分是闲置或未分配的。
须先预订–VirtualAlloc。
预订:
区域起始地址:分配粒度整数倍。系统预订区域不受限。
区域大小:页面大小整数倍。

释放–VirtualFree

区域类型:
闲置
私有
映像
映射

-给区域调拨物理存储器
要使用区域,须分配物理存储器+将存储器映射到所预订区域,
即调拨–VirtualAlloc。
调拨:
块大小:页面整数倍。

释放–VirtualFree

-物理存储器–页交换文件
如一台机器有1GB内存,硬盘还有1GB页交换文件,则,应用认为可用内存总量为2GB。

线程试图访问一块数据:
数据在内存,虚拟地址–>物理地址,依据物理地址访问内存数据。
数据在页交换文件,内存中腾出一个闲置页面,把页交换文件数据写入内存闲置页面,虚拟地址–>物理地址,依据物理地址访问内存数据。

-物理存储器–硬盘
当把一个程序位于硬盘的文件映像用作地址空间区域对应的物理存储器时,称此文件映像为内存映射文件。载入exe,dll时,系统自动 预订地址空间区域+把文件映像映射到该区域。
允许开发人员,把数据文件映射到地址空间。

-页面保护属性
PAGE_NOACCESS
PAGE_READONLY
PAGE_READWRITE
PAGE_EXECUTE
PAGE_EXECUTE_READ
PAGE_EXECUTE_READWRITE
PAGE_WRITECOPY
PAGE_EXECUTE_WRITECOPY
PAGE_NOCACHE
PAGE_WRITECOMBINE
PAGE_GUARD

-写时复制
windows支持多个进程共享同一存储器。
系统给共享的存储页指定写时复制属性。系统映射exe,dll到地址空间时,对其中可写页面,从页交换文件中为其分配预留备用空间。

-其它
一个进程地址对应的数据的物理存储器,可能有内存,页交换文件,硬盘。但实际操作数据均是在数据放到内存后进行。

-数据对齐
把数据的地址模除数据的大小,结果为0,则,数据就是对齐的。

阅读全文
1 0
原创粉丝点击