*** 作系统中Kernel Mode和User Mode的区别

 *** 作系统中Kernel Mode和User Mode的区别,第1张

在许多电脑的硬件架构中,为了不让程序任意存取任何资源(例如随机存取存储器RAM),大部分的CPU架构都支持Kernel mode与User mode两种执行模式,当然这种模式也得要OS有相关实败困际配合才有作用,像DOS就没有Kernel/User mode的分别,所有以DOS执行的程序都可对任意资源执行任何行为,所以DOS上的病毒磨枯蔽才能那么嚣张,动不动就格式化硬盘。

一般来说, 应用程序是在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 *** 作的访问,并捕捉违反并羡系统完整性的任何行为。在用户模式中,运行的代码如果不通过 *** 作系统中的某种门机制,就不能进入内核模式。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12248309.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-22
下一篇 2023-05-22

发表评论

登录后才能评论

评论列表(0条)

保存