读《windows核心编程》笔记3
来源:互联网 发布:质量数据统计分析图表 编辑:程序博客网 时间:2024/05/22 01:43
13 Wi n d o w s的内存结构
0 操作系统使用的内存结构是理解操作系统如何运行的最重要的关键
1 每个进程都被赋予它自己的虚拟地址空间。对于3 2位进程来说,这个地址空间是4 G B,因为3 2位指针可以拥有从0 x 0 0 0 0 0 0 0 0至0 x F F F F F F F F之间的任何一个值。
2 用户模式分区。这个分区是进程的私有(非共享)地址空间所在的地方。一个进程不能读取、写入、或者以任何方式访问驻留在该分区中的另一个进程的数据。所有的. e x e和D L L模块均加载这个分区。每个进程可以将这些D L L加载到该分区的不同地址中(不过这种可能性很小)。系统还可以在这个分区中映射该进程可以访问的所有内存映射文件。
3 内核模式分区。这个分区是存放操作系统代码的地方。用于线程调度、内存管理、文件系统支持、网络支持和所有设备驱动程序的代码全部在这个分区加载。驻留在这个分区中的一切均可被所有进程共享。在Windows 中,这些组件是完全受到保护的。
4 地址空间中的区域。地址空间中的区域当进程被创建并被赋予它的地址空间时,该可用地址空间的主体是空闲的,即未分配的。若要使用该地址空间的各个部分,必须通过调用Vi r t u a l A l l o c函数(第1 5章介绍)来分配它里边的各个区域。对一个地址空间的区域进行分配的操作称为保留( r e s e r v i n g )。
5 每当你保留地址空间的一个区域时,系统要确保该区域从一个分配粒度的边界开始。所有的C P U平台(x 8 6、3 2位A l p h a、6 4位A l p h a和I A - 6 4)都使用6 4 K B这个相同的分配粒度。
6 当你保留地址空间的一个区域时,系统还要确保该区域的大小是系统页面大小的倍数。系统页面:与分配粒度一样,不同的C P U,其页面大小也是不同的。x 8 6使用的页面大小是4 KB,而A l p h a使用的页面大小则是8 KB。
7 提交地址空间区域中的物理存储器。若要使用已保留的地址空间区域,必须分配物理存储器,然后将该物理存储器映射到已保留的地址空间区域。这个过程称为提交物理存储器。物理存储器总是以页面的形式来提交的。若要将物理存储器提交给一个已保留的地址空间区域,也要调用Vi r t u a l A l l o c函数。
8 物理存储器与页文件(参考原书)
9 保护属性 Copy-On-Write 访问 特殊的访问保护属性的标志 数据对齐的重要性(参考原书)
1 4 虚拟内存 1 5在应用程序中使用虚拟内存
1 系统信息 G e t S y s t e m I n f o函数将用于检索与主机相关的值:
2 虚拟内存的状态 G l o b a l M e m o r y S t a t u s (参考原书)
^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^………………………………………………
了解机制,而不要死记细节(参考原书)
16 线程的堆栈
1 每当创建一个线程时,系统就会为线程的堆栈(每个线程有它自己的堆栈)保留一个堆栈空间区域,并将一些物理存储器提交给这个已保留的区域。按照默认设置,系统保留1 MB的地址空间并提交两个页面的内存。
2 ………………………………
(参考原书)
1 7内存映射文件
内存映射文件可以用于3个不同的目的:
• 系统使用内存映射文件,以便加载和执行. e x e和D L L文件。这可以大大节省页文件空间和应用程序启动运行所需的时间。
• 可以使用内存映射文件来访问磁盘上的数据文件。这使你可以不必对文件执行I / O操作,并且可以不必对文件内容进行缓存。
• 可以使用内存映射文件,使同一台计算机上运行的多个进程能够相互之间共享数据。Wi n d o w s确实提供了其他一些方法,以便在进程之间进行数据通信,但是这些方法都是使用内存映射文件来实现的,这使得内存映射文件成为单个计算机上的多个进程互相进行通信的最有效的方法。
1 8 堆栈
(未完)
- 读《windows核心编程》笔记3
- Windows核心编程笔记
- windows核心编程笔记
- Windows核心编程笔记
- windows核心编程笔记
- 读《windows核心编程》笔记1
- 读《windows核心编程》笔记2
- WINDOWS核心编程笔记(3-5)
- windows 核心编程学习笔记3
- windows核心编程第3章笔记
- Windows核心编程笔记(3)----作业
- 读Windows核心编程 - 3
- Windows核心编程笔记(1)
- Windows核心编程笔记(二)
- windows核心编程阅读笔记
- windows核心编程--内存笔记
- windows核心编程学习笔记
- windows核心编程笔记[7]
- ora-01033:oracle initialization or shutdown in progress 解决方法
- ZOJ2059
- libmad
- volatile和restrict
- Oracle Sequence 同步更新
- 读《windows核心编程》笔记3
- zoj2963
- hdu3308
- POJ3225
- 函数指针
- POJ2528
- ZOJ1031
- nginx+php5-fpm在ubuntu10.04中的安装配置方法
- ZOJ2581