谁能比较系统的解释一下Windows下的Ring,希望详细一点

解决方案 »

  1.   

    处理器有4个级的优先权:Ring0,Ring1,Ring2,Ring3. 众所周知,在Windows95/98的Win32 on Intel x86 体系中利用了处理器的三环保护模型中的零环(Ring0,最高权限级别)和三环(Ring3,最低权限级别)。一般应用程序都运行在Ring3下,受到严格的"保护",只能规矩地使用Win32API。如果我们想进行一些系统级的操作,例如在嵌入汇编中使用诸如"Mov EAX,CR0",或像在DOS下那样调用一些必不可少的系统服务(如BIOS,DPMI 服务)而用"Intxx",都会导致"非法操作"。但这种能力有时是必不可少的,一到这种时候Microsoft就"建议编写一个VxD"。VxD大家早有所闻了,在VxD里,不但可以执行CPU 的所有指令,而且可以调用VMM(虚拟机管理器)和其他VxD提供的上千个系统级服务。获得这一能力的最本质原因在于它运行在Ring0,与系统内核同一级别。但是它体系的复杂性、开发工具的不易获得、帮助文档的不完备, 使Microsoft排除了一大批程序员和竞争对手。而将在Windows2000(Windows98也开始支持)中取代VxD的WDM对Win95程序员也是个噩梦,它需要了解Windows NT核心驱动模型。大多数程序运行于Ring3这个级别。Ring3有很多限制,如: 我们不能读DR(debug-registers,调试寄存器),所有关于 DR的指令都不起作用。(如:mov eax,dr7).对我们来说当然是优先级越高越好,所以我们要使我们的 程序运行在Ring0.但是只有少数的特殊的程序有Ring0的优先权。设备驱动程序运行于Ring0,但它的代码可不简单!
      

  2.   

    "对我们来说当然是优先级越高越好,所以我们要使我们的 程序运行在Ring0.但是只有少数的特殊的程序有Ring0的优先权。"那些特殊的程序有Ring0的优先权啊?我们用API设置的进程的优先级是不是也只是在Ring3的范围之内?
      

  3.   

    但是最高的优先级不是可以达到系统的程度吗?那ring1,ring2运行的是些什么?
      

  4.   

    但是最高的优先级不是可以达到系统的程度吗?那ring1,ring2运行的是些什么?请大爷解释一下,谢谢,呵呵
      

  5.   

    我不记得 ring1 和 ring2 运行些什么
    但我记得 ring0 运行什么:系统内核 & 驱动 & CIH
      

  6.   

    为了和ALPHA等CPU兼容,WINDOWS没有使用RING1和RING2
      

  7.   

    WINDOWS系列只分系统级(RING0)和用户级(RING3),
    RING1和RING2不用的
      

  8.   

    RING0的代码段可以访问RING1 RING2 RING3 的数据内存单元
    RING3的代码段只能访问RING3的数据内存单元
    RING3的代码段可以通过调用门或中断门调用RING0 RING1 RING2的代码,反之则不行
      

  9.   

    原来X86的设想是:
    ring 0 系统内核
    ring 1 系统应用服务
    ring 2 应用内核服务
    ring 3 应用程序但为了兼容,所以Windows只采用了ring 0和ring 3先搞清楚: ring 是CPU的概念!不是操作系统概念!