【嵌入式】内核态和用户态
条评论用户空间和内核空间
用户空间:是用户可以操作和访问的空间,这个空间通常存放我们用户自己写的数据等;
内核空间:是系统内核来操作的一块空间,这块空间里面存放系统内核的函数、接口等。
内核空间与用户空间的通信方式
Linux 下内核空间与用户空间进行通信的方式主要有 syscall(system call) 、procfs、ioctl 和 netlink 等。
- syscall:一般情况下,用户进程是不能访问内核的,它既不能访问内核所在的内存空间,也不能调用内核中的函数。Linux 内核中设置了一组用于实现各种系统功能的子函数,用户可以通过调用他们访问 Linux 内核的数据和函数,这些系统调用接口(SCI)成为系统调用。
- procfs:是一种特殊的伪文件系统,是 Linux 内核信息的抽象文件接口,大量内核中的信息以及可调参数都被作为一个常规文件映射到一个目录树中,这样我们就可以简单直接的通过 echo 或 cat 这样的文件操作命令对系统信息进行查取。
- netlink:用户态应用使用标准的 socket API 就可以使用 netlink 提供的强大功能。
- ioctl:函数是文件结构中的一个属性分量,就是说如果你的驱动程序提供了对 ioctl 的支持,用户就可以在用户程序中使用 ioctl 函数控制设备的 I/O 通道。
Linux操作系统一般是通过软件中断从用户态切换到内核态。软件中断和中断(硬件中断)不同之处在于,它是通过软件指令触发而并非外设引发的中断,也就是说,又是编程人员开发出的一种异常(该异常为正常的异常)。