今天我想弄清楚这两个概念。笔记可能不太正确。
什么是内核?
- 个人认为,内核说白了,就是操作系统的管理硬件的核心代码(运行中的)。所以我们常常听到说Linux内核、Windows内核
- 内核负责硬件操作,那我们回忆一下操作系统是干啥的?也是管理硬件资源,方便用户操作的。这点又可以证明了。内核说的就是操作系统与硬件操作的一系列核心代码
- 如果没有操作系统的存在,就可以说没有内核和内核态一说。
- 内核的能力
- 为应用程序提供系统调用
- 进程、线程调度
- 内存管理(硬件管理)
所以说:内核态就是CPU运行内核代码时的状态。在运行内核代码的情况下。CPU可以访问内存的任何位置
什么是用户态?
我们写的一些代码,运行后就是运行在用户态。比如我们的程序要计算某些数的累加操作。这些操作不涉及系统调用,且只能使用到内存的用户空间。一旦我们的程序需要系统调用后,就会触发内核代码的运行,这时候就是内核态。
注:我们的物理内存被操作系统分为了内核空间和用户空间。
一句话总结
CPU运行我们自己写的代码时,就是用户态
CPU运行操作系统的代码时,就是内核态