首页 > 编程知识 正文

为什么分用户态和内核态,处理器为什么要区分内核态和用户态

时间:2023-05-04 05:59:31 阅读:278900 作者:866

之前学习并发的时候只知道挂起线程或者唤醒线程CPU要从用户态转换到内核态,那么什么是用户态?什么是内核态?这也是一个频率较高的面试题。

内核态:
1.系统中既有操作系统的程序,也有普通用户程序。为了安全性和稳定性,操作系统的程序不能随便访问,这就是内核态。即需要执行操作系统的程序就必须转换到内核态才能执行!!!
2. 内核态可以使用计算机所有的硬件资源!!!

用户态:不能直接使用系统资源,也不能改变CPU的工作状态,并且只能访问这个用户程序自己的存储空间!!!!

首先在讲用户态和核心态的时候,为了更容易理解先说下什么是操作系统的特权级。

特权级的概念:
对于任何操作系统来说,创建一个进程是核心功能。创建进程要做很多工作,会消耗很多物理资源。比如分配物理内存,父子进程拷贝信息,拷贝设置页目录页表等等,这些工作得由特定的进程去做,所以就有了特权级别的概念。最关键的工作必须交给特权级最高的进程去执行,这样可以做到集中管理,减少有限资源的访问和使用冲突。inter x86架构的cpu一共有四个级别,0-3级,0级特权级最高,3级特权级最低。

用户态和内核态的概念:
当一个进程在执行用户自己的代码时处于用户运行态(用户态),此时特权级最低,为3级,是普通的用户进程运行的特权级,大部分用户直接面对的程序都是运行在用户态。Ring3状态不能访问Ring0的地址空间,包括代码和数据;当一个进程因为系统调用陷入内核代码中执行时处于内核运行态(内核态),此时特权级最高,为0级。执行的内核代码会使用当前进程的内核栈,每个进程都有自己的内核栈。

用户运行一个程序,该程序创建的进程开始时运行自己的代码,处于用户态。如果要执行文件操作、网络数据发送等操作必须通过write、send等系统调用,这些系统调用会调用内核的代码。进程会切换到Ring0,然后进入3G-4G中的内核地址空间去执行内核代码来完成相应的操作。内核态的进程执行完后又会切换到Ring3,回到用户态。这样,用户态的程序就不能随意操作内核地址空间,具有一定的安全保护作用。这说的保护模式是指通过内存页表操作等机制,保证进程间的地址空间不会互相冲突,一个进程的操作不会修改另一个进程地址空间中的数据。

总结:
为什么非要搞出个用户态和内核态呢?

为了保证操作系统的安全性,比如创建进程或者切换进程这种操作都必须让特权级高的进程去做,而不能由用户代码直接去操作。当需要系统调用的时候,比如IO操作,也必须有操作系统内核去完成。为了保证内核态空间数据的安全性,用户代码不能直接操作内核空间。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。