您好、欢迎来到现金彩票网!
当前位置:秒速飞艇开奖 > 特权指令 >

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

发布时间:2019-05-20 16:40 来源:未知 编辑:admin

  兄弟连教育成立于2006年,11年来专注IT职业教育,是国内专业的IT技术培训学校。2016年成功挂牌新三板(股票代码:839467)市值过亿。开设专注程序员培训专注php、Java、UI、云计算、Python、HTML5、在许多电脑的硬件架构中,为了不让程序任意存取任何资源(例如随机存取存储器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执行到一半挂掉。

http://mille-alliances.com/tequanzhiling/1.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有