
内核模式 *** 作的一种高特权模式,其中的程序代码能直接访问所有内存(包括所有的用户模式进程和应用程序的地址空间)和硬件。也称为“管理员模式”、“保护模式”或“Ring 0”。 如果再细致地对此进行分类:它又可以被分为单内核模式和微内核模式两种。单内核模式代码结构紧凑、执行速度快,但是缺乏层次;微内核正好相反。单内核模式的代表如Linux;微内核模式的代表如Windows用户模式与内核模式是如何交互的呢 当用户模式程序需要读取设备数据时,它就调用Win32 API函数,如ReadFile。Win32子系统模块(如KERNEL32DLL)通过调用平台相关的系统服务接口实现该API,而平台相关的系统服务将调用内核模式支持例程。在ReadFile调用中,调用首先到达系统DLL(NTDLLDLL)中的一个入口点,NtReadFile函数。然后这个用户模式的NtReadFile函数接着调用系统服务接口,最后由系统服务接口调用内核模式中的服务例程,该例程同样名为NtReadFile。系统中还有许多与NtReadFile相似的服务例程,它们同样运行在内核模式中,为应用程序请求提供服务,并以某种方式与设备交互。它们首先检查传递给它们的参数以保护系统安全或防止用户模式程序非法存取数据,然后创建一个称为“I/O请求包(IRP)”的数据结构,并把这个数据结构送到某个驱动程序的入口点。在刚才的ReadFile调用中,NtReadFile将创建一个主功能代码为IRP_MJ_READ(DDK头文件中的一个常量)的IRP。实际的处理细节可能会有不同,但对于NtReadFile例程,可能的结果是,用户模式调用者得到一个返回值,表明该IRP代表的 *** 作还没有完成。用户模式程序也许会继续其它工作然后等待 *** 作完成,或者立即进入等待状态。不论哪种方式,设备驱动程序对该IRP的处理都与应用程序无关。驱动程序完成一个I/O *** 作后,通过调用一个特殊的内核模式服务例程来完成该IRP。完成 *** 作是处理IRP的最后动作,它使等待的应用程序恢复运行。
需要让linux的一段程序代码进入内核态运行产生的方式有二:被动式主动式 所谓被动式就是产生中断或者代码产出异常,代码不得不从用户态进入内核态进行中断 *** 作或者是异常处理; 而主动式则是系统响应了程序对系统的一次调用过程,并且系统允许该运行级别的提升;
对于Windows *** 作系统的编程一般来说已经涉及到了较深的领域,针对该问题提出几家之言,均为转载:
一、
为了防止用户程序访问并篡改 *** 作系统的关键部分,Windows使用了2种处理器存取模式(事实上Windows运行的处理器可以支持4种模式):用户模式和内核模式。用户程序运行在用户模式而 *** 作系统代码(如系统服务和设备驱动程序)则运行在内核模式。在内核模式下程序可以访问所有的内存和硬件,并使用所有的处理器指令。 *** 作系统程序比用户程序有更高的权限,使得系统设计者可以确保用户程序不会意外的破坏系统的稳定性。
虽然Windows进程有自己的运行空间,但是内核模式的 *** 作系统代码和设备驱动程序代码则运行在同一个虚拟地址空间。虚拟内存中的每一页都标明了他可由处理器以哪
做不到。
内核并不是一个独立的进程,只是说某个用户进程通过调用系统函数进入内核空间,执行完系统函数就要返回的。
如果要调用别的程序在用户空间就可以做,或者可以去查查进程间通信的方法。
以上就是关于windows怎么进入内核模式全部的内容,包括:windows怎么进入内核模式、如何从应用程序进入linux内核、windows内核态调用readfile等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)