注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

mie

 
 
 

日志

 
 

Windows系统的用户态和内核态切换、多线程模型、ring0 dll注入的问题探讨  

2011-10-09 11:41:31|  分类: sr |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
      目前的多线程操作系统中,对于存在用户态和内核态,也就是ring3和ring0的,一般都存在用户线程和内核线程的概念。
      关于用户线程和内核线程的实现,也有多种实现方式,即:1:1,n:1,m:n,也就是,一个用户线程对应一个内核线程,多个用户线程对应一个内核线程,多个用户线程对应多个内核线程。
      而ring3切换到ring0,则就是所谓的“门”,比如,调用门,陷阱门,等等。

      那么,问题来了。
      一种说法是,一个线程一个堆栈。那么,从ring3切换到ring0,堆栈显然发生了变化的,这种变化,是意味着发生了用户线程到内核线程的切换,还是仅仅是线程的用户栈切换到内核栈(一个线程两个堆栈)?
      windows对此给出了答案。即,确实存在内核栈,也就是,一个用户态线程存在两个堆栈,分别是用户栈和内核栈。原因就是,“大内核栈”。既然有“大内核栈”的概念,也就意味着,确实存在内核栈了!
      那么,这一点,似乎和前面提到的多线程操作系统的多线程模型冲突了?其实不然,因为,很多人在讨论这个多线程的时候,忽略了一个前提,posix!
      其实,这些人都在讨论posix标准下的多线程模型,也就是posix的多线程操作系统(linux、unix等)的用户线程和内核线程的模型。而我们这里是windows系统,是不一样的!


By:章永辉

  评论这张
 
阅读(1468)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016