`

什么是内核态和用户态

阅读更多

 

本篇博客转载自什么是内核态和用户态

          在单内核模式系统中,操作系统提供服务的流程为(即用户应用程序调用系统内核功能):应用主程序使用指定的参数执行系统调用指令intel x80),使CPU从用户态(User Mode)切换到核心态(Kernel Mode), 然后系统根据参数值调用特定的系统调用服务程序,而这些服务程序则根据需要调用底层的支持函数以完成特定的功能。在完成了应用程序要求的服务后,操作系统 又从核心态切换回用户态,回到应用程序中继续执行后续指令。因此,单内核模式的内核也可粗略的分为三层:调用服务的主程序层、执行系统调用的服务层和支持 系统调用的底层函数。

 

问题1 什么是用户态和内核态?

    简单来讲一个进程由于执行系统调用而开始执行内核代码,我们称该进程处于内核态中. 一个进程执行应用程序自身代码则称该进程处于用户态.

     intel x86 架构的 CPU 分为好几个运行级别, 0--3 , 0 为最高级别, 3 为最低级别针对不同的级别,有很多的限制,比如说传统的 in ,out 指令,就是端口的输入输出指令, 0 级下是可以用的,但在 3 级下就不能用,你用就产生陷阱,告诉你出错了,当然限制还有很多了,不只是这一点。

    操作系统下是利用这个特点,当操作系统自己的代码运行时, CPU 就切成 0 ,当用户的程序运行是就只让它在 3 级运行,这样如果用户的程序想做什么破坏系统的事情的话,也没办法做到

当然,低级别的程序是没法把自己升到高级别的,也就是说 用户程序运行在 3 ,他想把自己变成 0 级自己是做不到的,除非是操作系统帮忙,利用这个特性,操作系统就可以控制所有的程序的运行,确保系统的安全了. 平时把操作系统运行时的级别就叫内核态(因为是操作系统内核运行时的状态),而且普通用户程序运行时的那个级别叫用户态...

    当操作系统刚引导时, CPU 处于实模式,这时就相当于是 0 ,于是操作系统就自动得到最高权限,然后切到保护模式时就是 0 ,这时操作系统就占了先机,成为了最高级别的运行者,由于你的程序都是由操作系统来加载的,所以当它把你加载上来后,就把你的运行状态设为 3 ,即最低级,然后才让你运行,所以没办法,你只能在最低级运行了,因为没办法把自己从低级上升到高级,这就是操作系统在 内核 态可以管理用户程序,杀死用户程序的原因.

运行级别是要由硬件来支持的,我记得好像是 PSW 中有两位用来保存当前运行级别

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics