一般来说, 应用程序是在User mode中执行程序,普通的数值计算或变量指派都可以在此模式完成,但是若要执行一些危及系统安全的指令(例如对磁盘写入资料),而这些指令是不准在User mode中执行的,强要执行那些特殊指令只会让系统给你一个错误信息而已,应用程序必须呼叫一些OS定义好的函数才能达成那些功能,例如printf(),这些OS事先定义好的函数我们称为system call(系统调用)。
当应用程序执行了system call,并不是傻傻地让应用程序想做什么就做什么,他们首先会严密地检查这个调用的应用程序的权限以及 *** 作的内容(是否读取不属于自己的存储器范围,是否读写没有权限读写的文件,是否想把资料往错误的装置送过去......),若是有任何错误,system call将会停止执行并回传一个错误代号,让应用程序知道自己错在何处。相反地一切检查都没问题,system call将会通知CPU进入Kernel mode,并依照应用程序送过来的参数执行特权指令。当特权指令执行完毕,system call将会通知CPU返回User mode,并回到应用程序中。
Kernel/User mode架构是非常普遍的执行模式,几乎可以在任何机器上看到这套架构,从电脑到机上盒,刷卡机等等电子商品,为了保护某些特别的指令不被搞不清楚状况的程序开发者乱玩,OS开发者通常藉由定义system call告诉开发者们,哪些行为必须经过OS的过滤才能执行。
当然Linux等Open source kernel的开发瞎州者可以自行定义并增加system call的数量, 丰富OS与应用程序的沟通介面,不过这种修改得经过非常小心的计划与测试,因为在system call里面执行的程序若是有错,很可能让整个OS崩溃(死机)!例如许多没有Open source的驱动程序(xVidia,ATx之类的显示卡),由于Kernel的开发者无从得知那些驱动程序的演算法,所以也无法保证那些驱动程序会不会让Kernel执行到一半挂掉。
事实上,所有第三方撰写的驱动程序都会有这种问题,Windows常常被人臭骂有时候真的是无辜的,一切都是因为写驱动程序的第三方公司功力太烂,写出品质低落的驱动程序让Windows坏到挂掉,微软Windows小组也是满腹苦水(在此并没有袒护微软的意思,只是陈述事实)。
UserModePowerService是一种服务,可以在用户模式下运行Windows系统服务贺带,以管理对系统电源的控制。它允许用户模式的应用程序和服务访问系统电源控制,以实现更高的系统可用性。它可以提供一种以用户模式乎闹实现的更安全的系统电源控制,让系统能够更好地响应用户 *** 作,从而提高系统性能。此外,UserModePowerService还可以提供应用程序级别的电禅顷芦源管理,可以更好地利用系统的电源资源,减少系统的功耗,从而长期保持系统的高可用性。在多任务环境中,有许多进程都不允许应用程序去做。所以CPU以两种模式运行,即用户模式和内核模式。�0�2 ①内核模式�0�2�0�2�0�2
�0�2 当CPU运行于内核模式时,一切程序都可运行。任务可以执行特权级指令,对任何I/O设备有全部的迟薯访问权,还能够访问任何虚地址和控制虚拟内存硬件。这种模式对应80×86的ring0层, *** 作系统的核心部分,包括设备驱动程序都运行在绝旦拍该模式。�0�2�0�2�0�2
�0�2 这个模式中,硬件防止特权指令的执行,并对内存和I/O空间的访问 *** 作进行检查。这就允许WindowsNT4.0限制任务对各种I/O *** 作的访问,并捕捉违反并羡系统完整性的任何行为。在用户模式中,运行的代码如果不通过 *** 作系统中的某种门机制,就不能进入内核模式。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)