internal sealed class SimpleWaitLock:IDisposable { //Enter()和Leave()中使用m_AutoResetEvent都将迫使调用线程做用户模式和内核模式间的转换,这点十分影响性能 //存在竞争时,输掉的线程会被内核阻止,内核阻止的特点是线程不会“自旋”,从而节省了CPU private readonly AutoResetEvent m_AutoResetEvent; public SimpleWaitLock() { //初始化可自由使…
其实,在开发过程中,无论是用户模式的同步构造还是内核模式,都应该尽量避免.因为线程同步都会造成阻塞,这就影响了我们的并发量,也影响整个应用的效率.不过有些情况,我们不得不进行线程同步. 内核模式 window提供了几个内核模式构造来同步线程.内核模式的构造比用户模式构造慢得多,一个原因是他们要求windows操作系统自身的配合,另一个原因是在内核对象上调用的每个方法都造成调用线程从托管代码转为本机用户模式代码,再转换为本机内核模式代码.然后,还要朝相反的方向一路返回.这些转换需要大量cpu时间.…
------------------------------------------------------------------------ QQ 是一款热门的即时通信(IM)类工具,在安装时刻会向系统分区的 \..\windows\system32\drivers 路径下生成两个驱动程序文件: QQProtect.sys 与 QQFrmMgr.sys ,前者是 QQProtect.exe(QQ 安全防护进程,又称 Q 盾)的内核模式组件:后者是一种过滤型驱动. 同时还会向注册表位置 HKE…
内核模式下的线程同步 内核模式下的线程同步是用户模式下的线程同步的扩展,因为用户模式下的线程同步有一定的局限性.但用户模式下线程同步的好处是速度快,不需要切换到内核模式(需要额外的 CPU 时间).通常情况下可以使用三种内核对象对线程进行同步,分别是事件内核对象.信号量内核对象和互斥量内核对象 注:不论是事件内核对象.信号量内核对象还是互斥量内核对象都遵循着触发与未触发的原则.对于进程和线程来说未触发表明线程或进程处于等待状态或者挂起状态(CPU 此时还没有进行调度),而触发表明进程或线程处于运…
万万没有想到!当初为了解决使用负载均衡时记录客户端IP地址的问题,在IIS URL Rewrite Module中增加了一条URL重写规则(详见迁入阿里云后遇到的Request.UserHostAddress记录IP地址问题): <rewrite> <allowedServerVariables> <add name="REMOTE_ADDR" /> </allowedServerVariables> <globalRules>…
什么是内核?windows操作系统为了更好的管理进程,线程,创建了很多数据结构,这些数据结构运行在windows的底层,并不开放给开发人员:所以开发人员称这些结构为内核,但是为了开发人员能够使用,windows将内核封装为句柄并开放,所以句柄就是指向内核数据结构的一个程序员可以使用的对象. 我们前面所说的用户模式下的线程同步有一个缺点,就是不能夸进程来实现同步:比如QQ进程在启动的时候需要启动一个QQ密码保护进程,这种问题就需要通过内核模式下的线程同步. 前面所说,同步问题就是A等B的问题,如何…
 1.基础 执行 Windows 的计算机中的处理器有两个不同模式:"用户模式"和"内核模式". 依据处理器上执行的代码的类型,处理器在两个模式之间切换.应用程序在用户模式下执行.核心操作系统组件在内核模式下执行.多个驱动程序在内核模式下执行,但某些驱动程序在用户模式下执行. 当启动用户模式的应用程序时.Windows 会为该应用程序创建"进程".进程为应用程序提供专用的"虚拟地址空间"和专用的"句柄表格&quo…
UNICODE_STRING结构: typedef struct  _UNICODE_STRING { USHORT Length;                                   //字节长度,不包括终止符“NULL”    USHORT MaximumLength;                  //字符串所能占的最大字节数字符串的指针    PWCH   Buffer;                                       //字符串的地址,也…
引言 本来在写一篇Windows内存管理的文章,写着写着就发现好多基础的概念都要先讲.更可怕的是,这些基础的概念我却不能完全讲清楚.只好再把这本<深入解析Windows操作系统>翻到第一章…… 很多书的第一章往往都会说:第一次读本章往往一知半解,建议学习后面的内容时隔段时间再回来看本章,会有更多的收获.这本书就是这样. 友情提示:结尾更精彩~ 进程 尽管表面上看起来程序和进程非常类似,但本质上它们却是截然不同的.程序是一个静态的指令序列,而进程则是一个容器,其中包含了当执行一个程序的特定实例时…
windbg是一个内核模式和用户模式调试器,包含在Windows调试工具中.这里我们提供了一些实践练习,可以帮助您开始使用windbg作为内核模式调试器. 设置内核模式调试 内核模式调试环境通常有两台计算机:主机和目标计算机.调试器在主机上运行,正在调试的代码在目标计算机上运行.主机和目标通过调试电缆连接.Windows调试程序支持以下类型的电缆进行调试: Ethernet USB 2.0 USB 3.0 1394 Serial (also called null modem) 如果目标计算机运…