熬之滴水成石:最想深入了解的内容--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 ...
随机推荐
- 学校作业-Dp练习
题目 ★Stringsobits01 串 考虑排好序的 N(N<=31)位二进制数. 你会发现,这很有趣.因为他们是排列好的,而且包含所有可能的长度为 N 且含有 1 的个数小于等于 L(L ...
- VC++网络高级编程
内含<VC网络高级编程>电子书 及源代码. 第一章.TCP/IP协议.第二章.Winsock网络编程接口:第二章.Visual C++与网络编程:第四章.基本网络编程技术:第五章.Teln ...
- hdu 5057 Argestes and Sequence
Argestes and Sequence Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- [Swust OJ 166]--方程的解数(hash法)
题目链接:http://acm.swust.edu.cn/problem/0166/ Time limit(ms): 5000 Memory limit(kb): 65535 有如下方程组: A1 ...
- poj-3899-The Lucky Numbers 模拟+数学
题目链接: http://poj.org/problem?id=3899 题目意思: 求给定区间内,只含4.7的数的个数以及通过反转后在该区间内的个数和. 解题思路: 模拟+数学. 代码解释的很详细, ...
- c-大量经典的c算法---ShinePans
经典的100个c算法 算法 题目:古典问题:有一对兔子.从出生后第3个月起每一个月都生一对兔子.小兔 子长到第三个月后每一个月又生一对兔子,假如兔子都不死,问每一个月的兔子总数 为多少? _____ ...
- 杭电1874畅通project绪
畅通project续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- Technology_Roadmap
2016年1月23日 前端技术: - HTML CSS JavaScript JQuery 操作系统: - Linux (CentOS) 数据库: - SQLServer MySQL 开源前端框架: ...
- ACM第三次比赛 Big Chocolate
Problem G Big Chocolate Mohammad has recently visited Switzerland . As he loves his friends very muc ...
- sizeof与strlen的区别 浅谈
1.sizeof operator sizeof是C语言的一种单目操作符,如C语言的其他操作符++.- - 等,它并不是函数. Queries size of the object or type. ...