有关Linux的一些内容。

用户态和内核态

系统调用

统调用组成了用户态跟内核态交互的基本接口。

为什么要区分用户态与内核态

  1. 在 CPU 的所有指令中,有一些指令是非常危险的,如果错用将导致整个系统崩溃。
  2. CPU 将指令分为特权指令和非特权指令,对于那些危险的指令,只允许操作系统及其相关模块使用,普通的应用程序只能使用那些不会造成灾难的指令。
  3. Intel 的 CPU 将特权级别分为4个级别: RING0(特权级最高)、 RING1 、 RING2 、 RING3 。

处理器总处于以下状态中的一种

  1. 内核态,运行于进程上下文,内核代表进程运行于内核空间。
  2. 内核态,运行于中断上下文,内核代表硬件运行于内核空间。
  3. 用户态,运行于用户空间。

从用户态切换到内核态可以通过三种方式

  1. 系统调用
  2. 异常
  3. 外设中断

内存管理中的一些常见问题

  1. 未能释放已经不再使用的内存 - 内存泄漏
  2. 指向不可用的内存指针 - 野指针
  3. 指针所指向的对象已经被回收了,但是指向该对象的指针仍旧指向已经回收的内存地址 - 悬挂指针
  4. 分配或释放内存太快或者太慢
  5. 分配内存大小不合理,内存碎片问题