文章目录
一、基础知识
(1)内核空间和用户空间
系统调用将 Linux 整个体系分为用户态和内核态(或者内核空间和用户空间)
内核态:运行操作系统的程序,控制计算机的硬件资源,例如协调CPU资源,分配内存资源,并且提供稳定的环境供应用程序运行
用户态:运行用户程序;
为了使应用程序访问到内核管理的资源例如CPU,内存,I/O;内核必须提供一组通用的访问接口,这些接口就叫系统调用
内核态和用户态最大的区别就是权限不同, 用户态的进程能够访问的资源受到了极大的控制,而运行在内核态的进程可以“为所欲为”。
一个进程可以运行在用户态也可以运行在内核态,那它们之间肯定存在用户态和内核态切换的过程。
- 系统调用,这个上面已经讲解过了,
- 异常:如果当前进程运行在用户态,如果这个时候发生了异常事件,就会触发切换。例如:缺页异常。
- 外设中断:当外设完成用户的请求时,会向CPU发送中断信号。
消耗其实主要发生在用户态和内核态之间的切换,因为切换时需要将用户态的CPU状态保