熬之滴水成石:最想深入了解的内容--windows内核机制(15)
66--内存管理(4)
说说在windows中内存空间初始化的事,开始的开始通过处理器的分页机制,预先建立相应足够的页表以便页表来访问物理内存。预先建立的这个物理内存的是windows自己的加载程序,这个加载程序在业界叫作ntldr。这个东东将内核模块映射到特定的虚拟地址上,这里面关联到了一系列的方法调用。这里面有一系列的方法调用,像kisystemstartup函数,它就是用来作内核的初始化。当然它也是调用其它的方法进行这个事情,它调用的函数叫作kiinitalizekernel函数,该函数实际上又调用了另一个叫explinitializeexcutive的方法。该方法真正做了些事情:它初始化了内存管理器和其它组件的变化。可以说explinitializeexcutive的方法让内存系统初始化的开始,这个时候被划分成2个阶段,这两个阶段都调用了MmInitSystem函数,这2个阶段做的事情也不一样,第一个阶段主要也是完成数据结构的初始化以及一些全局变量的设置。在这个阶段中,psinitsystem创建了系统线程,让系统线程能够执行。第二个阶段是从phase1initialization方法开始的,该方法主要调用了Mminitsystem和Mminitmachinedependent。这个两个函数一看就是做init用的,Mminitsystem主要用初始化系统缓存的作用,设置换页内存变量,Mminitsystem会根据系统可用的页面数量对相应全局变量进行赋值,然后初始化内存管理有关的全局变量。Mminitmachinedependent这个函数功能是真正能让windows的虚拟内存运转起来,该方法是真正的建立页目录,以及建立页表来映射内存的各个区域。总而言之,Mminitsystem的作用就是为系统建立起缓存结构,设置全局变量。而Mminitmachinedependent主要是对换页内存池的初始化工作和页面管理数据库的初始化工作,它正式依据传递进来的物理内存描述符链表信息来求出物理内存页面的数量以及空闲物理内存的最低地址。它们各自的任务保证了windows在内存初始化时的工作顺利进行,一组组的全局变量划定了各个区域的范围。第一个阶段的任务完成数据结构的初始化,实际上也完成了地址空间的划分工作,根据初始化参数让各部分区域的范围相对比较合理。这个阶段为系统内存管理建立了页目录和页表结构并且也完成了非换页区域的物理页面分配。在第二个阶段则主要在内存管理的任务上,完成内存管理系列中的一个个管理任务的初始化。
(未完待续..................)
熬之滴水成石:最想深入了解的内容--windows内核机制(15)的更多相关文章
- 熬之滴水成石:最想深入了解的内容--windows内核机制(6)
58 进程和线程(3) 说完进程再说说线程,线程相比于进程其实有更多可说的内容.首先实现线程调用的数据结构是个栈,该栈记录了调用方法的信息这里面也包括了函数调用及返回的地址.线程肯定是属于某个进程,其 ...
- 熬之滴水成石:Spring--精简的J2EE(7)
49--持久性 关于持久性在最早的Delphi单元中,就曾介绍过.持久性是数据库中读取,保存,或删除数据的过程.毫无 ...
- 三十四、在SAP的屏幕选择中,将英文替换成我们想要的文本内容
一.我们在代码中定义了一个选择屏幕,但是对应的显示界面为英文 界面如下 二.我们选择[转到]-[文本元素] 三.默认的文本内容是问号和三个点 四.我们修改成我们需要的,并激活这个文本,如果不激活会丢失 ...
- python3 利用正则获取网页中的想保存下来的内容
需要获取某个网页中表格部分中某个产品的成份 分析在html中成份的元素代码 <a href="/composition/4c3060178d1184935a48c4e51be4f63f ...
- 不想停机?快使用Windows Server 2016滚动升级
[TechTarget中国原创] Windows Server环境中的关键任务工作量总是密集的.工作量会主要集中在Hyper-V部署集群.硬件故障转移集群或者外来集群的顶部.集群中常用的表格都是基于F ...
- matlab转c++代码实现(主要包含C++ std::vector,std::pair学习,包含数组与常数相乘,数组相加减,将数组拉成一维向量,图片的读入等内容)
MATLAB部分: xmap = repmat( linspace( -regionW/2, regionW/2, regionW), regionH, 1 );%linspace [x1,x2,N] ...
- mysql对查出来的值,在sql里面拼接我们想要拼接的内容
MySQL中concat函数使用方法:CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. 注意:如果所有参数均为非二进制字符串 ...
- 将py文件打包成exe文件
PyInstaller工具是跨平台的,它既可以在 Windows平台上使用,也可以在 Mac OS X 平台上运行.在不同的平台上使用 PyInstaller 工具的方法是一样的,它们支持的选项也是一 ...
- Python如何将py文件打包成exe
安装pyinstaller 打开cmd窗口,输入pip install pyinstaller,命令行输出successfully表示成功. 生成exe文件 一.单个py文件 在py文件目录下,打开c ...
随机推荐
- python获取当前路径的方法
>>> import os>>> homedir = os.getcwd()>>> print homedirD:\python\test > ...
- php调用com组件配置 以openoffice为例
什么是com组件? COM构架下,人们可以开发出各种各样的功能专一的组件,然后将它们按照需要组合起来,构成复杂的应用系统.COM与语言,平台无关的特性使所有的程序员均可充分发挥自己的才智与专长编写组件 ...
- c/c++内存分配方式(转)
原文链接:http://blog.csdn.net/jing0611/article/details/4030237 1.内存分配方式 内存分配方式有三种: [1]从静态存储区域分配.内存在 程序编译 ...
- AS3清空数组的四种方法
第一种最简单的方法是: var arr:Array = ["a", "b", "c", "d", "e&quo ...
- BZOJ 1042: [HAOI2008]硬币购物( 背包dp + 容斥原理 )
先按完全背包做一次dp, dp(x)表示x元的东西有多少种方案, 然后再容斥一下. ---------------------------------------------------------- ...
- ContentProvider中的数据库的生成时机以及ContentResolver的insert()方法总结
经过几天的总结,以及结合一些代码的实际测试,终于算是明白了ContentProvider中的数据的生成时机了. 目录结构: MainActivity.java package com.wyl.cont ...
- Python 函数基础、有序集合、文件操作(三)
一.set 特点: set是一个无序且不重复的元素集合访问速度快:天生解决元素重复问题 方法: 初始化 >>> s1 = set()>>> print(type(s ...
- springMVC中得到request对象,session对象
RequestAttributes ra = RequestContextHolder.getRequestAttributes(); HttpServletRequest request = ((S ...
- Spring+EhCache缓存实例(详细讲解+源码下载)(转)
一.ehcahe的介绍 EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernate中默认的CacheProvider.Ehcache是一种广泛使用的开源Java分布式 ...
- php前端控制器设计1
The primary role of a front controller in web-based applications is to encapsulate the typical reque ...