经常见到说一个进程在Kernel下用了多少时间,在User中用了多少时间,到底Kernel和User有什么区别呀?

解决方案 »

  1.   

    它们都是Windows的子系统,其中:
    kernel是windows系统内核,负责io,内存管理等,它不依赖其它模块。
    user是windows用户接口服务模块,主要负责用户界面,它依赖于kernel、gdi模块及设备驱动程序等所有模块。
      

  2.   

    这个还真不好解释。
    Windows系统分为两个特权级别,有人将其称为Kernel级和User级。Kernel级运行的是系统的核心代码和驱动程序;User级运行的是应用程序和服务程序。在User级执行的代码受到CPU保护机制的限制,很多事情都不能做,必须调用Kernel级的代码来完成。
    还是举个例子来说吧,比如一个应用程序要从一个文件中读出一些数据,你可以调用C运行库中的fread函数,fread中又会调用system32.dll中的ReadFile,ReadFile还要调用NTDLL.dll中的ZwReadFile,ZwReadFile执行sysenter指令进入Kernel级,调用NtReadFile内核服务,NtReadFile构造一个(或多个,根据需要)I/O请求包,发送给文件系统驱动程序,文件系统驱动程序计算出要读取的数据在磁盘中的位置,然后构造一个(或多个,根据需要)I/O请求包,发送给磁盘驱动程序,磁盘驱动程序再执行I/O指令从硬盘中读出数据,最后再逐步返回到应用程序。执行sysenter之后、执行sysexit之前,是运行在Kernel级,其它都是运行在User级。执行各部分代码都是需要时间的,所以就有所谓的Kernel下多少时间、User下多少时间了。
    有些乱,不知道LZ能不能看的懂。了解操作系统的原理不是短时间内就能达到的。
      

  3.   

    似乎有些明白了。比如一个程序在做数值计算时是运行在User级的,而它一但要和硬件打交道,例如重新分配内存、读写文件时移动磁头等等,就切到Kernel级上。这样理解对吗?