熬之滴水成石:最想深入了解的内容--windows内核机制(16)

原创 2013年12月03日 00:02:56

67--内存管理(5)

内存管理是离不开池这个圈子的,我们也可以理解这个池是个特殊的模块。在windowsOS中,在内核模块中或是在设备驱动程序使用过程中都有内存池的运用。这样的内存池在windows的环境中被称作换页内存池,还有一个叫非换页内存池。理解换页内存池,你可以联想到的场景:当池内的内存在物理内存不够的时候就会被换到外存中去,而非换页内存池中的内存则总是存在物理内存之间。根据windows本身的架构,分别称呼为系统内存池和执行体内存池。在执行体的内存是基于页面管理的机制,在系统层的内存是基于执行体内存管理基础之上的,主要是针对性的提供服务。

这里面又有一些针对性的函数了,像minitializenonpagepool函数,这个函数就是用来初始化管理内存池的一些变量,这些变量大多为空闲页面链表头的一些数组。在系统非换页时起到了非常关键的作用,它基本上确定了非换页内存池的开始和结束的物理页面帧,这样就可以为非换页内存池中建立页表结构了。非换页内存池中内部也分成了两部分,一部分保证了这些页面已经有对应的物理界面的,另一部分则是没有的对应的,当有这部分满足不了内存申请请求时,才会分配真正的物理页面,所以可以这么说,这一部分里都是空闲的页面链表。每个空闲链表节点都包含了1、2、3、4或者是>4的页面。当需要从这个非换页池分配页面时,则根据指定的代销换成对应额页面数,然后从数组中选择适当的空闲链表找,直到找到一个节点能满足自己需求的页面,便将该节点从这个链表中移除出来,如果该界面满足了请求页面数要求并且还有多的页面,那么后面的部分的节点数页面返回给请求,前段剩余的页面将被作为一个新的空闲链表加入的适当的空闲链表中去。还有一种情况,假设在空闲链表数组中都找不到合适的空闲节点数,那么这个时候管理内存便会试图扩展非换页内存池以满足所需求的页面数。这些使用完的页面回收也是有专门的函数来完成的,其原理都是根据起始地址找到页表,然后找到页编号,再定位PFN数据库等一系列操作找到结束页面。将其关联的空闲页面合成一个较大的空闲快。链表用法处理申请和释放已经是一种优化的算法了,因为处理这个过程的链表相当于内存池的一个单页缓存区,申请也好释放也好,只是相当于在单链表中的插入和移除动作而已。

                                                                                                                                         (未完待续.............)

深入理解Android内核设计思想——读书笔记

Android系统 Android的分层 什么是基于OS的系统 Android系统映像 Android系统反编译 操作系统基础 计算机体系结构 什么是操作系统 进程间通信的经典实现 同步机制的经典实现...
  • u012984054
  • u012984054
  • 2016年03月03日 23:36
  • 1912

我的Linux内核学习之路

现在回首看看,接触Linux已经很长时间了。 在大三的时候开始学习Java, 但是一直学Java的话, 感觉有点腻, 就尝试找点其他东西来学习。 所以当时就选择学习了Linux。 至于为什么要学习Li...
  • brave2211
  • brave2211
  • 2014年03月02日 18:34
  • 13998

Windows 内核结构 摘抄自《windows内核原理及实现》(二)

概括而言,设备驱动程序有以下三种基本类型: l 即插即用驱动程序(也称为WDM 驱动程序,见下文介绍)。这一类驱动程序通常是为了驱动硬件设备而由硬件厂商提供,它们与Windows 的I/O 管理器、...
  • KingCat666
  • KingCat666
  • 2015年03月11日 21:42
  • 1223

熬之滴水成石:最想深入了解的内容--windows内核机制(2)

54-复杂的windows系统 可以说windows是一个复杂的系统,也是许多IT人士接触最为多的一个操作系统。当然windows无论在国外还是在世界范围内都有广泛的客户群体。那么在这个操作系统中会是...
  • chilavert318
  • chilavert318
  • 2013年10月29日 13:20
  • 458

熬之滴水成石:最想深入了解的内容--windows内核机制(5)

57--windows进程和线程(2) 这一章要细细的说说一下进程,在winodws的OS系统首先会创建一个地址空间为自己创建运行的环境,而线程实际上就是在这个环境中执行的序列。每个进程至少都有一个...
  • chilavert318
  • chilavert318
  • 2013年11月13日 11:39
  • 582

熬之滴水成石:最想深入了解的内容--windows内核机制(12)

63-内存管理(1) 老实说,这块内容一直是我的硬伤。但出于自己总结自己的积累,所以写在这里也无妨!把自己的理解写出来,被小伙伴指出其实也是一件非常有收获的事情。在OS中操作系统往往会硬件会找到相关...
  • chilavert318
  • chilavert318
  • 2013年11月28日 00:10
  • 641

熬之滴水成石:最想深入了解的内容--windows内核机制(11)

62--进程和线程(8) 该说说我们在windows编程中经常遇到的一个问题了,就是同步问题。同步的概念其实是源于并发的一种现象。并非在OS中实际上就是多个线程在同时进行,其实实际上并不是真正的并行执...
  • chilavert318
  • chilavert318
  • 2013年11月27日 07:36
  • 530

熬之滴水成石:最想深入了解的内容--windows内核机制(1)

53--关于OS 本来接着是要写HTML的,但是一次偶遇让我改变了想法。近段时间,我遇到了一个技术牛人褚老大,他跟我提出一些关于OS的事情,那个时候我才发现自己的深入是那么的肤浅,关于windows...
  • chilavert318
  • chilavert318
  • 2013年10月22日 11:00
  • 521

熬之滴水成石:最想深入了解的内容--windows内核机制(10)

62--进程和线程(7) 这个章节说说线程的调度,我所理解的多线程并发在windows中现象实际上就是当线程个数远远大于处理器的数量。而在处理这些线程时,肯定是有的线程先处理,有些延后处理。这里就涉及...
  • chilavert318
  • chilavert318
  • 2013年11月26日 00:06
  • 702

熬之滴水成石:最想深入了解的内容--windows内核机制(3)

55--内存管理 在winodwsOS的内存管理中,在32位的系统中是将虚拟空间地址按照0-4GB的线性地址空间,任何一个进程都定义了它自己完整的4GB地址空间。其中2GB-4GB之间是进程共享的称为...
  • chilavert318
  • chilavert318
  • 2013年10月30日 13:34
  • 477
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:熬之滴水成石:最想深入了解的内容--windows内核机制(16)
举报原因:
原因补充:

(最多只允许输入30个字)