`
lxlsp
  • 浏览: 6870 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

Windows内存结构

阅读更多

1  进程的虚拟地址空间布局

1.1 进程虚拟地址空间布局:

每个进程都被赋予它自己的虚拟地址空间。对于3 2位进程来说,这个地址空间是4GB,Win2K在IA-32架构的CPU下面的进程地址空间分布如下表所示:

地址空间说明
 地址空间
 
64K NULL指针分配区
 0x00000000~0x0000FFFF  (64K)
 
用户空间
 0x00010000~0x7FFEFFFF  (2G–128K)
 
64K禁入区
 0x7FFF0000~0x7FFFFFFF  (64K)
 
内核空间
 0x80000000~0xFFFFFFFF   (2G)
 

可见Win2K的内存布局非常简单,主要有4个部分,两个不能被存取的64K;然后剩下的部分就是分别是用户空间(2G–128K)和系统空间(2G)了。

1.2 进程虚拟地址空间布局说明:

1.  64K NULL指针分配区:

这个分区的设置是为了帮助程序员掌握NULL指针的分配情况。如果你的进程中的线程试图读取该分区的地址空间的数据,或者将数据写入该分区的地址空间,那么C P U就会引发一个访问违规。也就是说在Win2K中,NULL的宏定义不必一定是0;可以是64K之内的任何地址;比如在win2K下面定义一个指针变量pVar;令pVar取值在0~65535(64K)之间的时候都会发生存取异常;当令pVar = 65536就没有问题了。

2.  用户空间:

在Windows 2000中,所有的. exe和DLL模块均加载这个分区。每个进程可以将这些D L L加载到该分区的不同地址中(不过这种可能性很小)。系统还可以在这个分区中映射该进程可以访问的所有内存映射文件。

3.  64K禁入区:

64K禁入区的作用很明显是隔离了用户和内核空间;防止用户程序跨越到内核空间中。

4.  内核空间:

这个分区是存放操作系统代码的地方。用于线程调度、内存管理、文件系统支持、网络支持和所有设备驱动程序的代码全部在这个分区加载。驻留在这个分区中的一切均可被所有进程共享。在Windows 2000中,这些组件是完全受到保护的。

2  进程的虚拟地址空间分配

2.1 如何分配地址空间?

当进程被创建并被赋予它的地址空间时,该地址空间的主体是未分配的。若要使用该地址空间的各个部分,必须通过调用VirtualAlloc函数来分配它里边的各个区域。对一个地址空间的区域进行分配的操作称为保留( reserving)。

分配地址空间的两个规则:要确保保留区域从一个分配粒度的边界开始(系统自身保留地址空间时未必遵守这个约定)。x86使用64KB这个分配粒度;还要确保保留区域的大小是系统页面大小的倍数。x86使用的页面大小是4KB。

2.2 如何回收地址空间?

当你的程序不再需要访问已经保留的地址空间区域时,保留区域应该被释放。这个过程称为释放地址空间的区域,它是通过调用VirtualFree函数来完成的。

注意这节说的只是对地址空间的分配,而不是对内存的分配。已经被分配的地址空间没有和内存相对应;这时候对这块空间的读写会发生访问违规。

2.3 地址空间可以和什么相对应呢?

和地址空间相对应的只有两样东西,一个是页面文件,也就是通常所说的虚拟内存,一个是内存映射文件,内存映射文件也是磁盘上的文件,这包括exe,dll等,还包括用户自己创建的内存映射文件。或许你认为和地址空间相对应的应该是ram,不错,当我们真正对一个地址进行读写的时候,确实是对ram进行读写;但是ram只是相当于一个缓冲区;负责对内存映射文件和虚拟内存读写进行缓冲。

3  进程的虚拟地址空间的保护属性

3.1 什么是Copy-On-Write保护属性?

在保留地址空间的同时可以指定其保护属性,这些属性无法就是读,写,执行,及其组合,这里重点说一下两个特殊的保护属性。一个是PAGE_WRITECOPY,另一个是PAGE_EXECUTE_WRITECOPY。这两个属性的作用是为了节省RAM的使用量和页文件的空间。Windows支持一种机制,使得两个或多个进程能够共享单个内存块。但是这要求所有实例都将该内存视为只读或只执行的内存。如果一个实例中的线程将数据写入内存修改它,那么其他实例看到的这个内存也将被修改,从而造成一片混乱。为了防止出现这种混乱,操作系统给共享内存块赋予了Copy-On-Write保护属性。当一个.exe或DLL模块被映射到一个内存地址时,系统将计算有多少页面是可以写的(通常包含代码的页面标为PAGE_EXECUTE_READ,而包含数据的页面则标为PAGE_READWRITE)。然后,系统依照计算结果从页文件中分配内存,以防备对这些可写页面写入时的需要。当然如果不对该模块的可写页面进行实际的写入操作,那么这些页文件内存就不会被使用。

3.2 Copy-On-Write保护是如何实现的?

当一个进程中的线程试图将数据写入一个共享内存块时,系统就会进行干预,并执行下列操作步骤:

1)系统查找RAM中的一个空闲内存页面。

2)系统将试图被修改的页面内容拷贝到第一步中找到的页面。并将其赋予PAGE_READWRITE或PAGE_EXECUTE_READWRITE保护属性。原始页面的保护属性和数据不发生任何变化。

3)然后系统更新进程的页面表,使得被访问的虚拟地址被转换成新的RAM页面。

当系统执行了这3个操作步骤之后,该进程就可以访问它自己的内存页面的私有实例。

分享到:
评论

相关推荐

    Windows内存体系结构

    Windows操作系统内存体系结构详细介绍。

    windows进程中的内存结构

    windows进程中的内存结构,涵盖知识点多,讲解详细,适合C/C++开发人员学习

    Windows 2000内存结构

    Windows 2000是32位的操作系统,它使计算机CPU可以用32位地址对32位内存块进行操作。内存中的每一个字节都可以用一个32位的指针来寻址。这样,最大的存储空间就是232字节或4000兆字节 (4GB) 。这样,在Windows下运行...

    实验五、Windows 2000内存结构.doc

    实验五、Windows2000内存结构1背景知识Windows2000是32位的操作系统,它使计算机CPU可以用32位地址对32位内存块进行操作。内存中的每一个字节都可以用一个32位的指针来寻址,这样,最大的存储空间就是232字节或4000...

    WindowsCE内存查看工具

    该工具可以用来查看系统的总内存及当前可用内存情况,便于系统评估及软件开发,运行平台ARMV4,ARMVRI+WINCE

    基于Windows的存储器管理实验报告

    通过实验,使学生了解Windows内存结构和虚拟内存的管理,学习如何在应用程序中管理内存。 (1)为应用程序分配内存空间; (2)检测内存的使用情况; (3)显示每个虚拟内存区域的特性; (4)内存区域的保护; 内存...

    论文研究-基于KPCR结构的Windows物理内存分析方法.pdf

    介绍了计算机在线取证方式的优势,总结了目前国外在计算机物理内存分析的研究现状及其存在的不足,在此基础上提出了一种新的Windows物理内存分析方法——基于KPCR结构的物理内存分析方法。与传统的物理内存方法相比...

    内存管理作业C++ 提供两个版本:windows平台和linux平台下运行

    7 程序的结构化模块化清晰 6 详细的源代码注释 编程要点: 1 详细见源代码和注释 2 算法难点(1) 将空闲分区链表和占用分区链表按地址顺序合并显示 3 算法难点(2) 提供最先分配和最优分配两种算法,逻辑控制较复杂

    windowsnt 技术内幕

    怎样准备70-073考试 理解工作站与客户端 理解为什么要参加70-073测试 理解Windows NT体系结构 深入理解用户模式内核模式 Windows NT Executive简介 理解Windows NT内存模型的优点 理解中央管理的优点 登录到Windows ...

    redis-windows-7.0.11

    Redis是一种开源的内存数据结构存储系统,它支持多种数据结构,如字符串、哈希、列表、集合、有序集合等。Redis可以用作数据库、缓存和消息中间件。Redis在性能、可扩展性和灵活性方面表现出色,因此被广泛应用于Web...

    深入解析WINDOWS操作系统(第4版).pdf

    内容简介 ...观察Windows如何管理虚拟内存和物理内存;理解NTFS的操作和格式,诊断文件系统访问问题;从上往下查看 Windows的网络栈,包括映射、API、名称解析和协议驱动程序;诊断引导问题,执行崩溃分析

    屏幕取词原理与实现

    文章描述了通过截获系统API实现 Windows NT内核屏幕取词的方法。以一个屏幕取词应用的具体实现为主线, 对实现屏幕取词的关键...其中涉及的相关技术有Windows内存结构与管理、设备上下文、动态链接库和Windows挂钩等。

    windows internals 7th-2; windows 内核数据结构;内核编程参考;英文PDF转word原版

    本内容含windows内核数据结构,常用工具介绍900页,待后续转换中英双语版本; * 使用 Dependency Walker 工具查看从 Windows 子系统 DLL 导出的函数。从 http://www.dependencywalker.com 下载 Dependency Walker ...

    内存管理技术内幕

    Windows NT所面对的最复杂和困难的任务之一就是要管理好计算机上有限的物理内存。NT必须为可能同时运行的多个进程划分物理内存以提供给每个进程适当的一份的事实更加强了这个挑战。此外,NT还必须能在一个从少到16MB...

    WINDOWS 内部原理 (八)

    如果能够深入了解Windows内存管理机制,那么无论在系统配置还是在故障排错方面,都能让我们直达根源,起到事半功倍的效果。本课程将全面介绍Windows内部内存管理机制,包括寻址原理、进程内存空间分布、核心态用户态...

    使用内存映射数据文件

    Windows提供了3种进行内存管理的方法: • 虚拟内存,最适合用来管理大型对象或结构数组。 • 内存映射文件,最适合用来管理大型数据流(通常来自文件)以及在单个计算机上运行的多个进程之间共享数据。 • ...

    建立基于内存的文件系统

    为该文件系统设计相应的数据结构来管理目录、虚拟磁盘的空闲空间、已分配空间等。 提供文件的创建、删除、移位、改名等功能。 提供良好的界面,可以显示磁盘文件的状态和空间的使用情况; 提供虚拟磁盘转储功能,可...

    深入解析Windows操作系统中文.part2.rar

    本书是著名的操作系统内核专家Mark Russinovich和David Solomon撰写的Windows操作系统原理的最新版著作,全面和深入地阐述了Windows操作系统的整体结构以及内部工作细节。本书针对Windows Server 2003、Windows XP...

    windows internals fifth edition (英文版) part2

    观察Windows如何管理虚拟内存和物理内存;理解NTFS的操作和格式,诊断文件系统访问问题;从上往下查看Windows的网络栈,包括映射、API、名称解析和协议驱动程序;诊断引导问题,执行崩溃分析。本书适合广大Windows...

Global site tag (gtag.js) - Google Analytics